Table of Contents
Il firmware BIOS di ingegneria inversa è una capacità critica per i professionisti della sicurezza incaricati di controllare gli strati più bassi della fiducia di un sistema. Il firmware che inizializza l'hardware e carica il sistema operativo rappresenta uno degli ambienti di esecuzione più privilegiati in un computer. Una singola vulnerabilità in questo strato può compromettere l'intera piattaforma, rendendo essenziale l'analisi di sicurezza accurata.
Comprensione del BIOS e dello Firmware UEFI
Il termine "BIOS" si riferisce storicamente al Basic Input/Output System, uno standard firmware legacy che inizializza l'hardware e fornisce servizi di runtime per MS-DOS e sistemi operativi Windows anticipati. I sistemi moderni hanno in gran parte transizione verso UEFI (Unified Extensible Firmware Interface), una specifica più sofisticata che supporta le dimensioni del disco più grandi, i tempi di avvio più rapidi e un'architettura modulare con il supporto driver e l'applicazione.
Da una prospettiva di sicurezza, il firmware possiede il livello più alto di privilegi (ring -2 o Modalità di gestione di sistema). Può accedere a tutti i dispositivi di memoria, hardware e registri della CPU senza essere rilevati dal kernel del sistema. Questo rende il firmware un obiettivo attraente per gli attaccanti che cercano persistenza, stealth, o backdoor di livello hardware.
Perché il firmware dell'ingegnere inverso per le verifiche di sicurezza?
I risultati comuni includono le credenziali di codice rigido, i meccanismi di aggiornamento insicuri, i overflow del buffer nei manutentori SMI, e le errate configurazioni nelle funzioni di sicurezza come Secure Boot o Measured Boot.
Strumenti essenziali per l'analisi firmware
Un flusso di lavoro di reverse engineering di successo si basa su un insieme robusto di strumenti specializzati. Di seguito è una lista classificata con descrizioni dei loro ruoli nel processo di audit.
Estrazione e dumping del firmware
- Flashrom[[ – Strumento open-source per la lettura, la scrittura e l'eliminazione di chip di memoria flash. Supporta una vasta gamma di chipset e può scaricare l'intera immagine del firmware dalla scheda madre tramite la CPU host o un programmatore hardware.
- UEFITool[[] – Un'utilità grafica per la parsing delle immagini del firmware UEFI. Può estrarre, inserire e sostituire volumi del firmware, file e sezioni, rendendolo indispensabile per l'analisi strutturale.
- SpI programmatore hardware[[] – Hardware dedicato (ad esempio, Dediprog, Bus Pirate) per leggere direttamente il chip flash SPI sulla scheda madre, bypassando eventuali restrizioni di livello firmware.
Editori di esagonali e analisi binaria
- 010 Editor[] – Editor di esagonali avanzato con modelli binari che possono analizzare le strutture del firmware (ad esempio, Tabella di partizione GUID, volumi del firmware).
- HxD[] – Lightweight ma capace esecutore per ispezioni rapide e ricerche di pattern.
- binwalk[] – Strumento di riga di comando per l'analisi, l'estrazione e l'identificazione di file incorporati nelle immagini del firmware (di solito utilizzato per il firmware basato su Linux, ma anche applicabile ad alcuni moduli BIOS).
Disassemblatori e Decompilatori
- Ghidra[[] – Quadro di reverse engineering open-source sviluppato dalla NSA. Supporta molte architetture (x86, x64, ARM, ecc.) e include un potente decompiler.
- IDA Pro[] – Disassemblatore commerciale standard per l'industria con un ampio supporto plugin.
- Binary Ninja[] – Disassemblatore commerciale alternativo con un'interfaccia moderna e una forte capacità di analisi.
Debug e interfacce hardware
- JTAG[] – Un'interfaccia di debug hardware (IEEE 1149.1) utilizzata per arrestare la CPU, esaminare la memoria e passare attraverso l'esecuzione del firmware al livello più basso.
- Console seriali[[] – Molte schede madri espongono una porta seriale durante lo boot che può fornire l'output di debug o anche una shell interattiva.
- Emulatori software[[] – Gli emulatori come QEMU (con supporto firmware UEFI) possono essere utilizzati per eseguire moduli firmware in un ambiente controllato senza hardware fisico.
Ogni strumento ha i suoi punti di forza. Un flusso di lavoro tipico utilizza Flashrom o un programmatore hardware per ottenere l'immagine, UEFITool per analizzare la sua struttura, Ghidra o IDA Pro per lo smontaggio del codice, e talvolta un debugger per l'analisi dinamica. Per quelli nuovi a Ghidra, il sito ufficiale Ghidra project] fornisce download e documentazione.
Processo passo per passo per reverse engineering BIOS Firmware
I seguenti passaggi formano una metodologia strutturata. Adapt l'ordine basato sulle specifiche immagini del firmware e obiettivi di audit.
1. Acquisire l'immagine firmware
Il primo passo è ottenere una copia legittima del firmware. Esistono due metodi principali:
- Dal fornitore[ – Scaricare un pacchetto di aggiornamento BIOS/UEFI dal sito web della scheda madre o del fornitore di sistema. Questi sono tipicamente forniti come capsule (.cap, .bin, .rom) o come aggiornamento eseguibile.
- Da hardware fisico[] – Utilizzare Flashrom (con moduli del kernel appropriati) o un programmatore SPI esterno per scaricare la memoria flash direttamente dalla scheda madre. Questo metodo cattura la versione firmware attuale in esecuzione sul dispositivo, comprese eventuali modifiche runtime.
Verificare sempre l'integrità dell'immagine acquisita utilizzando i checksum previsti o le hashes fornite dal fornitore. Lavorare in un ambiente di laboratorio pulito per evitare la contaminazione incrociata.
2. Esaminare la struttura del firmware
La maggior parte del firmware moderno segue la specifica UEFI, costituita da un sistema di file firmware (FFS) che contiene più volumi firmware (FVs). Ogni volume è diviso in file identificati da GUID. Elementi strutturali chiave per identificare:
- SEC (Fase di sicurezza)[ – La radice della fiducia, responsabile della configurazione iniziale.
- PEI (Pre-EFI Initialization)[] – Maneggia la configurazione della CPU/memoria iniziale.
- DXE (Driver Execution Environment)[] – Contiene la maggior parte dei driver della piattaforma e il codice SMM (Modalità di gestione del sistema).
- VVersioni di NVRAM[[] – Conservazione permanente per la configurazione UEFI (ad esempio, chiavi di avvio Secure).
- driver e applicazioni UEFI[[] – file .efi che possono essere estratti e smontati.
Prestare particolare attenzione a qualsiasi file con GUID sospetti o con nome sbagliato, in quanto questi possono indicare backdoor o codice di prova. UEFITool può estrarre singoli moduli, che possono poi essere analizzati in modo indipendente. Una guida dettagliata sull'utilizzo di UEFITool è disponibile al
3. Disassemblare i moduli chiave
Estrarre i moduli PEI e DXE dal firmware e caricarli in Ghidra o IDA Pro. Concentrati su moduli che gestiscono funzioni di sicurezza-critical:
- Moduli di verifica Boot Secure[[] – Cercare codice che convalida le firme sui bootloaders.
- Utilità di aggiornamento di file[[] – Analizzare l'attività che scrive il nuovo firmware in flash.
- Moduli SMM[[] – Il codice Modalità Gestione del sistema viene eseguito in uno spazio di indirizzo separato.
- Codice di inizializzazione di Hardware[[[[]] – Convalida che i controller di memoria e i ponti PCIe configurano correttamente le funzionalità di sicurezza (ad esempio, IOMMU, rimapping della memoria).
Quando si smonta, identificare il punto di entrata e seguire il flusso di controllo. Utilizzare decompilazione per semplificare l'analisi di algoritmi complessi. Cercare schemi deboli comuni come il mancato controllo delle lunghezze del buffer, l'uso di invece di , o l'assenza di convalida della firma crittografica.
4. Cercare Segreti e backdoors
Le immagini firmware contengono spesso credenziali in codice duro, chiavi crittografiche o backdoor di sviluppo che sono state accidentalmente lasciate abilitate.
- password di default (ad esempio, "admin", "password", default del fornitore).
- Comandi di prova hardware o interfacce di debug (ad esempio, prompt dei menu UART).
- Tasti privati (chiavi privati RSA, chiavi di crittografia simmetrica).
- Stringhe magiche specifiche del venditore che innescano un comportamento speciale.
Alcune immagini del firmware includono le build debug che espongono l'accesso completo della memoria attraverso interfacce seriali o di rete. Se trovato, documentare l'impatto e il report al fornitore.
5. Analizzare i meccanismi di aggiornamento firmware
Il processo di aggiornamento è un vettore di attacco comune. Invertire il modulo di aggiornamento per verificare le seguenti proprietà di sicurezza:
- L'aggiornamento è firmato crittograficamente, e la verifica della firma viene eseguita correttamente (ad esempio, verificare i guasti che cadono attraverso un percorso "successo").
- Il carico di pagamento dell'aggiornamento viene controllato per l'integrità prima di essere scritto per flash.
- La protezione Rollback viene applicata: le vecchie versioni con vulnerabilità note non possono essere riaccendete.
- Il processo di aggiornamento viene eseguito in un contesto sicuro (ad esempio, all'interno di SMM) e non può essere interrotto dal sistema operativo.
Identificare il percorso di codice che convalida l'intestazione dell'immagine del firmware e la firma. Cercare overflow del buffer nella parsing di intestazioni di capsule che potrebbero consentire l'esecuzione arbitraria del codice durante un aggiornamento.
6. Investigare il boot sicuro e la conformità di avvio misura
Per il firmware UEFI, verificare che Secure Boot sia correttamente applicato. Estrarre e enumerate le firme incorporate nel firmware: KEK autorizzato (Key Exchange Key), db (allowed signatures), e dbx (forbidden firms). Analizzare come questi database sono caricati e verificati. Verificare anche se il firmware implementa correttamente il Modulo di avvio misura (TPM) fase PCR si estende).
Vulnerabilità comuni scoperte durante le verifiche
Sulla base di database di ricerca e divulgazione pubblica, le seguenti vulnerabilità sono spesso trovate nel firmware:
| Vulnerability Type | Example Impact | Common Location |
|---|---|---|
| Buffer overflow in SMI handler | Arbitrary code execution in SMM (ring -2) | DXE SMM drivers |
| Insecure firmware update (no signature check) | Attacker can install a backdoored firmware | Update capsule parsing |
| Hardcoded cryptographic keys | Decrypting or signing traffic/firmware | PEIM or DXE modules |
| Debug interfaces left enabled | Full memory read/write via JTAG/UART | Hardware init phase |
| Incorrect Secure Boot policy | Allows unsigned bootloaders to execute | Secure Boot driver |
Ogni ricerca deve essere classificata per gravità e riproducibilità. La metodologia OWASP Firmware Security Testing fornisce un eccellente quadro per la classificazione e la segnalazione di tali vulnerabilità (vedere OWASP Firmware Security Testing Methodology]).
Considerazioni giuridiche ed etiche
Il firmware di ingegneria inversa può essere soggetto a leggi di proprietà intellettuale, accordi di licenza per l'utente finale (EULAs), controlli all'esportazione. Ottenere sempre un esplicito permesso dal fornitore di hardware prima di condurre audit di sicurezza, soprattutto se i risultati possono essere divulgati pubblicamente.
Inoltre, l'estrazione fisica del firmware può annullare le garanzie o danneggiare l'hardware se non eseguita correttamente. Utilizzare le precauzioni di scarica elettrostatica corrette e verificare l'orientamento del chip prima di applicare l'alimentazione. Se non si è sicuri con l'indebitamento dell'hardware, si affidano ai metodi di estrazione del software (aggiornamento del firmware).
Migliori Pratiche per un Audit di Firmware Successivo
Per massimizzare l'efficacia del tuo sforzo di reverse engineering, adottare le seguenti pratiche:
- Esaminare un ambiente sabbiato[[[]] – Utilizzare una macchina per analisi dedicata o con attacco aereo.
- Mantenere una catena di custodia[[] – Documentare ogni passo: come il firmware è stato acquisito, il suo checksum, strumenti di analisi utilizzati e risultati.
- Inizia con i buoni modelli noti[[[] – Confronta il firmware di destinazione contro un'immagine di riferimento (ad esempio, una versione pulita dal fornitore).
- Utilizzare diversi disassemblatori[[[] – risultati di riferimento tra Ghidra e IDA Pro per evitare l'interpretazione sbagliata delle strutture di codice.
- Collaborare con il venditore[[] – Molti fornitori hanno programmi di bounty bug e canali di divulgazione responsabili.
Per coloro che costruiscono un laboratorio di analisi del firmware, si consideri investire in un programmatore SPI dedicato e una scheda madre del letto di prova che può essere tranquillamente in mattoni e recuperato. Il [ Sito ufficiale Flashrom[[]] elenca hardware supportato e fornisce documentazione dettagliata.
Conclusioni
Il firmware BIOS per gli audit di sicurezza è una disciplina impegnativa ma gratificante, che scopre le vulnerabilità nello strato più profondo della piattaforma, dove anche il sistema operativo non può rilevare attività dannose. Seguendo una metodologia strutturata, estraendo l'immagine, analizzando la sua struttura, smontando i moduli chiave, e cercando punti deboli comuni, i professionisti della sicurezza possono identificare e aiutare a correggere i difetti che altrimenti sarebbero rimasti nascosti.