I file di sistema attraverso l'analisi dell'immagine del firmware
La capacità di estrarre dati da un’immagine del firmware è estremamente utile e molto laborioso. L’idea è estrarre i file di sistema del kernel e il suo firmware, esaminando il file di aggiornamento firmware per il Linksys WAG120N. L'immagine del firmware utilizzato è per la versione hardware WAG120N 1.0, la versione del firmware 1.00.16 (ETSI), pubblicato il 16/08/2010 ed è attualmente disponibile per il download dal sito Web di Linksys. La prima cosa da fare con una immagine del firmware è quello di eseguire l'utilità di file di Linux nei suoi confronti per essere sicuri che non è un archivio standard o file compresso. Successivamente si procederà con l’analisi attraverso Binwalk.
Cerchiamo di capire che cosa si intende di firmware in questo caso e poi ci dedichiamo al Binwalk. In alcuni apparati che realizzano le reti di calcolatori, come router e molti switch di fascia media e alta, la parola firmware ha un significato più ampio: indica il vero e proprio sistema operativo dell'apparato, che ne gestisce tutte le funzioni, possiede un'interfaccia utente spesso non banale (accessibile via porta seriale, o via rete con i protocolli SNMP, telnet, SSH, HTTP, TFTP o anche FTP per il trasferimento di file di configurazione o nuove versioni del fimware), permette di monitorare ed intervenire sul funzionamento dell'apparato e di modificarne la configurazione.
Data la complessità delle funzioni realizzate dal firmware in questi casi, gli aggiornamenti per aggiungere funzionalità o per correggere bug possono essere frequenti. Anche in questi casi, il firmware è memorizzato su una memoria non volatile ROM o EEPROM. Spesso esiste un altro componente software più semplice e di livello più basso, che si occupa delle funzioni minimali necessarie a gestire la memoria non volatile e a caricare il firmware, denominato bootloader. A proposito di estrarre dati all’interno di immagini del firmware, binwalk è uno strumento per la ricerca di una determinata immagine binaria per i file incorporati. In particolare, è progettato per identificare i file incorporati all'interno di immagini del firmware.
Binwalk utilizza la libreria libmagic ed include anche un file di firma magica che contiene le firme migliorate per i file che si trovano comunemente in immagini del firmware come file archiviati, le intestazioni del firmware, kernel Linux, bootloader, filesystem, ecc L'unica opzione necessaria per Binwalk è il file che si desidera cercare:
$. / Binwalk firmware.bin Con binwalk di default userà le firme di magic.fx, ma è possibile specificare qualsiasi altra firma del file libmagic compatibile con l'opzione-m:
$. / Binwalk-m / usr / share / misc / magic firmware.bin.
Con binwalk di default si verifica per le firme di file valide in qualsiasi punto del file di destinazione. Ciò significa che la scansione di un file di 4MB è l'equivalente di esecuzione dell'utilità file Unix 4 milioni di volte. Per diminuire il tempo di scansione, è possibile specificare l'allineamento di byte da utilizzare tramite l'opzione-b.
Per la compressione di sola lettura del file system, SquashFS rappresenta una buona soluzione. SquashFS (software open source, licenza GPL) comprime i file , gli inode e le directory , e supporta blocco di dimensioni fino a 1 MB per una maggiore compressione. SquashFS è destinato esclusivamente per file system da utilizzare in lettura in cui è necessario un basso overhead. SquashFS versione 4 è incluso nel Linux Kernel 2.6.29 e supporta XZ (LZMA2) compressione dal 2.6.38.
Perché Squashfs LZMA? LZMA è uno dei migliori algoritmi di compressione e Squashfs è uno dei filesystem più compressi oggi disponibili. LZMA è in grado di comprimere molto meglio di gzip, che è stata per anni l'unica opzione in squashfs.
LeggenLeggendo questo articolo mi ritorna alla memoria tutta la serie di forum e di blog di hacking in cui portavano avanti il tema di come trovare le password per router alice e fastweb a partire dal reverse engeneering del firmware della rom contenuta nei router stesssi…ovviamente, se fate una ricerca in rete, alcuni risultati concreti sono stati raggiunti, e infatti consiglio a tutti coloro che sono muniti di router fastweb e alice di cambiare la password, se possibile, perché seppure quella che viene data in dotazione è una WPA2 (praticamente inviolabile, ma ci stanno lavorando su), questa la determinano con un algoritmo a partire dalla parte numerica del nome della vostra rete (FASTWEB-1-….., Alice-….). Il successo di questa tecnica è dovuta al fatto che sia Fastweb che Alice, inizialmente, davano in comodato d’uso modem / router non riconfigurabili, soprattutto nella password di accesso alla rete. Mi sono documentato sull’argomento da quando mi sono accorto che io stesso ero divenuto vittima (per mano di alcuni studenti) dell’accesso non autorizzato alla mia rete e il mio router Alice, appunto, non supportava il cambio della password…morale, senza attendere la riconfigurazione via remoto che il gruppo telecom fa dalla centrale, ho acquistato ad una trentina d’euro un router Belking che va da dio e soprattutto è configurabilissimo, anche ovviamente nella password. Proprio un po’ di tempo fa si è tirato in ballo l’argomento della protezione dei dati personali nelle reti di accesso ad internet, e non poter disporre di una password personalizzata va contro, secondo me, la libertà di decidere sulla propria privacy.
L’articolo in questione lo vedo più come una guida / tutorial per chi decide di smanettare con questi apparecchi, conscio del fatto che se qualcosa dovesse andare storto, mettere le mani sul firmware contenuto nella ROM, credo significhi buttare via tutto l’apparato (non sono un esperto in queste cose, pensate che a volte titubo anche nel fare gli aggiornamenti del firmware del cellulare, perché temo sempre di compromettere il tutto…tutto questo perché magari non mi metto nell’immaginario di chi lo fa, o più semplicemente sono un codardo e se una cosa la vedo funzionare, preferisco tenermela così…: D ).
L’articolo è davvero interessante e ben scritto, certamente da tenere in considerazione se un giorno ci volessimo cimentare con questo tipo di operazioni (sembrerà strano, ma le procedure di aggiornamento della ROM, seppure collaudate e potenzialmente compatibili al punto da promuoverne la fattibilità delle stesse, le vedo come delle imprese da non provare a casa (don’t try it at home…! :)) Ammetto che sono davvero un codardo, faccio prima a far fare agli altri!! 😉
Non sono sicuro di aver ben capito l’argomento dell’articolo ma se ho bene inteso ciò che ho letto dovrebbe parlare del ” reverse engineering ” del software o in questo caso del firmware (spero di averci azzeccato).
Estrarre dati da un immagine del firmware: procedura interessante quanto difficile. E’ da diverso tempo a questa parte che si parla di ” reverse engineering ” del software, argomento che ha preso fortemente piede quando, nel mondo del software, si sono inseriti in maniera massiccia tutti quei linguaggi di programmazione che fanno parte della programmazione object – oriented. A cascata chiaramente il tutto si è ripercosso anche sul firmware dei dispositivi che non sono programmati con linguaggi di programmazione object-oriented ma che sono programmati con linguaggi di basso livello come il C o addirittura direttamente in linguaggio macchina.
Il problema dell’estrazione di codice da immagini del firmware sta nell’intestazione e nei commenti del codice, fattori che caratterizzano fortemente la capacità di comprendere il codice scritto. Quello che solitamente viene prodotto con questi software è un listato con scritte tutte di fila le istruzioni (in linguaggio macchina nel caso del firmware e in funzioni nel caso della programmazione object oriented) senza intestazione, commenti, spazi di separazione e senza dividerlo magari in più file, tutte accortezza che rendono il codice più chiaro e leggibile.
Non so se vi è capitato mai di scrivere un software con svariate righe di codice, quello che solitamente si fa è, prima di tutto inserire i commenti, poi quello di dividere il codice in più file e mentre viene scritto il codice viene eseguita l’intestazione dei rami (per esempio con i cicli “for”, “while” o per i rami condizionale come “if”, “else if” o “switch”); tutte queste accortezze rendono il codice più leggibile e senza delle quali diventa difficile comprendere l codice anche per chi l’ha scritto.
Già questo procedimento è, secondo me, più produttivo per i codici scritti con linguaggi ad alto livello che usano una metodologia di programmazione “ object oriented”, infatti in questo caso, anche se mancano commenti, intestazioni (alcuni software di ” reverse engineering ” intestano automaticamente il software) e separazioni del codice con spazi, rimane comunque la struttura divisa in file e la suddivisione del codice in funzioni con i nomi creati dal programmatore; rispetto ad un ” reverse engineering ” fatto su codice macchina è sicuramente più leggibile e quindi usabile.
Spesso però questo procedimento però viene eseguito, più che per copiare o recuperare codice, per eseguire il cracking di qualche software, operazione che solitamente viene eseguita attraverso la modifica del software a basso livello ossia vengono eseguite modifiche al linguaggio macchina del software.
So che esistono in commerci software per “ oscurare il codice “ ma di preciso non so come funzionino e non ho mai avuto modo di usarli.
Spero di aver azzeccato l’argomento di questo articolo e in ogni caso l’argomento del ” reverse engineering ” a mio parere è un argomento molto interessante, sia per rendere sicuro il software scritto sia per puro scopo didattico e potrebbe essere uno spunto per la creazione di un nuovo articolo o di una nuova discussione!
c’è sempre l’operazione di EJTAG nei casi più disparati di corruzione del firmware, che per esperti in elettronica non dovrebbe essere un grosso problema. Infatti è un interfaccia con pochi componenti che permette di ripristinare un modem o altri dispositivi “briccati”. Invece, questo programma lo vedo più come un programma di supporto per chi vuol modificare o analizzare il firmware di un dispositivo come l’autore dell’articolo sembra abbia fatto con il Linksys WAG120N.
Diciamo che conoscere bene il reverse engineering è impossibile! È il processo di analisi di un sistema software esistente per creare una sua rappresentazione ad alto livello di astrazione. In particolare, per affrontare seriamente il reversing nell’ambito dei software sono essenziali conoscenze di assembly, programmazione e logica.