
Strumento di analisi e confronto del firmware
L'analisi del firmware può essere utilizzata per raggiungere diversi obiettivi interessanti. Tra questi, i principali sono l'identificazione di funzionalità, componenti e potenziali vulnerabilità di sicurezza in firmware di tipo "black box".
Il Firmware Analysis and Comparison Tool (FACT) è progettato per automatizzare quanto più possibile il lavoro di analisi manuale del firmware. FACT combina un insieme crescente di potenti analisi per creare un'interfaccia unificata che porta l'utente da un campione di firmware arbitrario a un'analisi completa. Alcune delle caratteristiche chiave dell'analisi FACT sono che i risultati sono
Inoltre, FACT offre molteplici modalità di navigazione e visualizzazione dei risultati delle analisi e dei contenuti del firmware per una facile accessibilità. L'interfaccia principale di FACT è un'interfaccia web basata su HTML/JS/CSS che può essere ospitata localmente o condivisa in rete. In aggiunta, FACT offre un'API HTTP simile a REST che può essere esplorata con un'interfaccia SwaggerUI integrata. Alcune caratteristiche chiave dell'interfaccia web sono:
Sebbene FACT sia mantenuto come prototipo di ricerca, il progetto è ben testato, include una base di documentazione e offre una moltitudine di funzionalità di livello produttivo. Siamo sempre alla ricerca di feedback e richieste di funzionalità.
Maggiori dettagli e alcuni screenshot sono disponibili sulla nostra pagina del progetto.
FACT è progettato come un'applicazione multiprocesso; più core e RAM ci sono, meglio è.
| Minimo | Consigliato |
|---|---|
| 4 core | 16 core |
| 8 GB di RAM | 64 GB di RAM |
| 10 GB di spazio disco | 10* GB di spazio disco |
[!NOTE] Circa 10 GB necessari per impostare il codice FACT, il container e i binari. Spazio aggiuntivo è necessario per l'archiviazione dei file decompressi e dei risultati delle analisi. Questo può trovarsi su una partizione o unità separata.
È sostanzialmente possibile installare FACT su qualsiasi distribuzione Linux, ma l'installer è limitato a
L'installazione su distribuzioni più vecchie (ad es. Debian 11 "Bullseye" o Ubuntu 20.04 "Focal") potrebbe ancora funzionare, ma non è considerata stabile, poiché queste distribuzioni hanno raggiunto la fine del loro ciclo di vita.
FACT richiede Python 3.10–3.14 (dovrebbe essere predefinito in tutte le distribuzioni supportate)
Il processo di installazione è in gran parte automatizzato e racchiuso in un unico script. Alcune funzionalità possono comunque essere selezionate specificamente. Per una guida dettagliata su come installare FACT, vedere INSTALL.md.
[!IMPORTANT] Si noti che, sebbene faccia ampio uso di container, FACT contiene ancora molte dipendenze (e non è fornita alcuna disinstallazione). Se si desidera mantenere pulito il sistema, si può provare una delle opzioni di installazione fornite di seguito.
Forniamo box Vagrant mensili e pronti all'uso del nostro ramo master. Vagrant è un modo semplice e comodo per iniziare con FACT senza doverlo installare sulla propria macchina. Basta configurare Vagrant e importare il nostro box fornito in VirtualBox. I nostri box sono disponibili sul sito vagrantup!
Scopri come iniziare con FACT e vagrant nel nostro tutorial.
Esiste anche una versione dockerizzata, ma attualmente non è mantenuta. (vedi il repository FACT_docker per maggiori informazioni).
È possibile avviare FACT eseguendo lo script start_fact.py.
Lo script rileva automaticamente tutti i componenti installati.
src/start_fact.py
Successivamente, FACT è accessibile all'indirizzo http://localhost:5000 (predefinito) o https://localhost (se FACT è installato con nginx).
È possibile arrestare il sistema premendo Ctrl + C o inviando un SIGTERM allo script start_fact.py.
[!CAUTION] FACT non è progettato per essere utilizzato come servizio Internet pubblico. L'interfaccia web non è un'applicazione robusta. Cerchiamo di limitare i problemi di sicurezza applicando SecDevOps, ma FACT potrebbe comunque presentare vulnerabilità. Assicurati di reimpostare tutte le password nella configurazione di FACT se prevedi di ospitarlo su reti non completamente fidate.
[!TIP] Ulteriore documentazione su come utilizzare FACT è disponibile nelle nostre pagine wiki.
Puoi anche dare un'occhiata alla nostra documentazione Sphinx.
Informazioni su cos'è FACT e come funziona sono disponibili anche nelle slide nella cartella docs.
FACT fornisce un'API REST. Maggiori informazioni sono disponibili nella pagina wiki.
FACT fornisce un'autenticazione di base opzionale, gestione dei ruoli e degli utenti. Maggiori informazioni sono disponibili nella pagina wiki.
Il modo più semplice per contribuire è scrivere il proprio plugin. Il nostro Manuale per Sviluppatori è disponibile nel wiki su GitHub.
Plugin aggiuntivi attualmente disponibili:
Lo script src/firmware_import_export.py può essere utilizzato per esportare file decompressi e risultati di analisi e importarli in un'altra istanza FACT.
I dati vengono archiviati come archivio ZIP, e questo è anche il formato che lo script si aspetta durante l'importazione.
Per esportare file e dati di analisi delle immagini firmware analizzate, esegui
python3 firmware_import_export.py export FW_UID [FW_UID_2 ...] [-o OUTPUT_DIR]
[!NOTE] Gli archivi esportati possono occupare molto spazio su disco. Non esiste una relazione fissa, ma può superare la dimensione del firmware originale di un fattore 2 - 10.
Successivamente, puoi importare i file esportati con
python3 firmware_import_export.py import FW.zip [FW_2.zip ...]
Siamo stati lieti di mostrare FACT in diverse sessioni di BlackHat Arsenal.
Grazie a @botlabsDev, che inizialmente ha fornito un Vagrantfile che ora, tuttavia, è obsoleto.
Questo progetto è parzialmente finanziato dall'Ufficio Federale Tedesco per la Sicurezza delle Informazioni (BSI) e altri.
Firmware Analysis and Comparison Tool (FACT)
Copyright (C) 2015-2026 Fraunhofer FKIE
Questo programma è software libero: puoi ridistribuirlo e/o modificarlo secondo i termini della GNU General Public License come pubblicata dalla Free Software Foundation, versione 3 della Licenza, oppure (a tua scelta) qualsiasi versione successiva. Questo programma è distribuito nella speranza che possa essere utile, ma SENZA ALCUNA GARANZIA; senza neppure la garanzia implicita di COMMERCIABILITÀ o IDONEITÀ PER UN PARTICOLARE SCOPO. Vedere la GNU General Public License per maggiori dettagli. Dovresti aver ricevuto una copia della GNU General Public License insieme a questo programma. In caso contrario, visita http://www.gnu.org/licenses/.
Alcuni plugin possono avere licenze diverse. In tal caso, un file di licenza è fornito nella cartella del plugin.