Firmware Analysis
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Firmware je osnovni softver koji omogućava uređajima da ispravno funkcionišu upravljajući i olakšavajući komunikaciju između hardverskih komponenti i softvera s kojim korisnici interaguju. Skladišti se u trajnoj memoriji, osiguravajući da uređaj može pristupiti vitalnim uputstvima od trenutka kada se uključi, što dovodi do pokretanja operativnog sistema. Istraživanje i potencijalno modifikovanje firmvera je kritičan korak u identifikaciji sigurnosnih ranjivosti.
Prikupljanje informacija je kritičan početni korak u razumevanju sastava uređaja i tehnologija koje koristi. Ovaj proces uključuje prikupljanje podataka o:
Arhitekturi CPU-a i operativnom sistemu koji koristi
Specifikacijama bootloader-a
Rasporedu hardvera i tehničkim listovima
Metrikama koda i lokacijama izvora
Spoljim bibliotekama i tipovima licenci
Istorijama ažuriranja i regulatornim sertifikatima
Arhitektonskim i tokovnim dijagramima
Procjenama sigurnosti i identifikovanim ranjivostima
U tu svrhu, alatke za otvorene izvore (OSINT) su neprocenjive, kao i analiza bilo kojih dostupnih komponenti otvorenog koda kroz manuelne i automatske procese pregleda. Alati poput Coverity Scan i Semmle’s LGTM nude besplatnu statičku analizu koja se može iskoristiti za pronalaženje potencijalnih problema.
Dobijanje firmvera može se pristupiti na različite načine, svaki sa svojim nivoom složenosti:
Direktno od izvora (razvijača, proizvođača)
Kreiranje na osnovu datih uputstava
Preuzimanje sa zvaničnih sajtova podrške
Korišćenje Google dork upita za pronalaženje hostovanih firmver fajlova
Pristupanje cloud storage direktno, uz alate poput S3Scanner
Presretanje ažuriranja putem man-in-the-middle tehnika
Ekstrakcija sa uređaja putem konekcija kao što su UART, JTAG, ili PICit
Sniffing za zahteve za ažuriranje unutar komunikacije uređaja
Identifikovanje i korišćenje hardkodiranih krajnjih tačaka za ažuriranje
Dumping sa bootloader-a ili mreže
Uklanjanje i čitanje čipa za skladištenje, kada sve drugo ne uspe, koristeći odgovarajuće hardverske alate
Sada kada imate firmver, potrebno je da izvučete informacije o njemu kako biste znali kako da ga obradite. Različiti alati koje možete koristiti za to:
Ako ne pronađete mnogo sa tim alatima, proverite entropiju slike sa binwalk -E <bin>
, ako je entropija niska, verovatno nije enkriptovana. Ako je entropija visoka, verovatno je enkriptovana (ili na neki način kompresovana).
Pored toga, možete koristiti ove alate za ekstrakciju datoteka ugrađenih unutar firmvera:
File/Data Carving & Recovery ToolsIli binvis.io (code) za inspekciju datoteke.
Sa prethodno pomenutim alatima kao što je binwalk -ev <bin>
, trebali biste biti u mogućnosti da ekstrahujete datotečni sistem.
Binwalk obično ekstrakuje unutar foldera nazvanog po tipu datotečnog sistema, koji obično može biti jedan od sledećih: squashfs, ubifs, romfs, rootfs, jffs2, yaffs2, cramfs, initramfs.
Ponekad, binwalk neće imati magični bajt datotečnog sistema u svojim potpisima. U tim slučajevima, koristite binwalk da pronađete offset datotečnog sistema i izrezujete kompresovani datotečni sistem iz binarnog i ručno ekstrahujete datotečni sistem prema njegovom tipu koristeći sledeće korake.
Pokrenite sledeću dd komandu za izdvajanje Squashfs datotečnog sistema.
Alternativno, sledeća komanda se takođe može izvršiti.
$ dd if=DIR850L_REVB.bin bs=1 skip=$((0x1A0094)) of=dir.squashfs
Za squashfs (koristi se u gornjem primeru)
$ unsquashfs dir.squashfs
Fajlovi će biti u "squashfs-root
" direktorijumu nakon toga.
CPIO arhivski fajlovi
$ cpio -ivd --no-absolute-filenames -F <bin>
Za jffs2 fajl sisteme
$ jefferson rootfsfile.jffs2
Za ubifs fajl sisteme sa NAND flešom
$ ubireader_extract_images -u UBI -s <start_offset> <bin>
$ ubidump.py <bin>
Kada se firmver dobije, bitno je da se razloži kako bi se razumeo njegova struktura i potencijalne ranjivosti. Ovaj proces uključuje korišćenje raznih alata za analizu i ekstrakciju vrednih podataka iz slike firmvera.
Set komandi je obezbeđen za početnu inspekciju binarnog fajla (naziva <bin>
). Ove komande pomažu u identifikaciji tipova fajlova, ekstrakciji stringova, analizi binarnih podataka i razumevanju detalja particija i fajl sistema:
Da bi se procenio status enkripcije slike, entropija se proverava sa binwalk -E <bin>
. Niska entropija sugeriše nedostatak enkripcije, dok visoka entropija ukazuje na moguću enkripciju ili kompresiju.
Za ekstrakciju ugrađenih fajlova, preporučuju se alati i resursi kao što su dokumentacija file-data-carving-recovery-tools i binvis.io za inspekciju fajlova.
Korišćenjem binwalk -ev <bin>
, obično se može ekstraktovati fajl sistem, često u direktorijum nazvan po tipu fajl sistema (npr. squashfs, ubifs). Međutim, kada binwalk ne prepozna tip fajl sistema zbog nedostajućih magičnih bajtova, ručna ekstrakcija je neophodna. To uključuje korišćenje binwalk
za lociranje ofseta fajl sistema, a zatim dd
komandu za izdvajanje fajl sistema:
Nakon toga, u zavisnosti od tipa datotečnog sistema (npr., squashfs, cpio, jffs2, ubifs), koriste se različite komande za ručno ekstraktovanje sadržaja.
Sa ekstraktovanim datotečnim sistemom, počinje potraga za sigurnosnim propustima. Pažnja se posvećuje nesigurnim mrežnim demonima, hardkodiranim akreditivima, API krajnjim tačkama, funkcionalnostima servera za ažuriranje, nekompajliranom kodu, skriptama za pokretanje i kompajliranim binarnim datotekama za analizu van mreže.
Ključne lokacije i stavke koje treba pregledati uključuju:
etc/shadow i etc/passwd za korisničke akreditive
SSL sertifikate i ključeve u etc/ssl
Konfiguracione i skript datoteke za potencijalne ranjivosti
Ugrađene binarne datoteke za dalju analizu
Uobičajene web servere i binarne datoteke IoT uređaja
Nekoliko alata pomaže u otkrivanju osetljivih informacija i ranjivosti unutar datotečnog sistema:
LinPEAS i Firmwalker za pretragu osetljivih informacija
The Firmware Analysis and Comparison Tool (FACT) za sveobuhvatnu analizu firmvera
FwAnalyzer, ByteSweep, ByteSweep-go, i EMBA za statičku i dinamičku analizu
I izvorni kod i kompajlirane binarne datoteke pronađene u datotečnom sistemu moraju se pažljivo pregledati zbog ranjivosti. Alati poput checksec.sh za Unix binarne datoteke i PESecurity za Windows binarne datoteke pomažu u identifikaciji nezaštićenih binarnih datoteka koje bi mogle biti iskorišćene.
Proces emulacije firmvera omogućava dinamičku analizu ili rada uređaja ili pojedinačnog programa. Ovaj pristup može naići na izazove sa zavisnostima od hardvera ili arhitekture, ali prenos korenskog datotečnog sistema ili specifičnih binarnih datoteka na uređaj sa odgovarajućom arhitekturom i redosledom bajtova, kao što je Raspberry Pi, ili na unapred izgrađenu virtuelnu mašinu, može olakšati dalja testiranja.
Za ispitivanje pojedinačnih programa, identifikacija redosleda bajtova programa i CPU arhitekture je ključna.
Da bi se emulirala binarna datoteka MIPS arhitekture, može se koristiti komanda:
I da instalirate potrebne alate za emulaciju:
Za MIPS (big-endian), koristi se qemu-mips
, a za little-endian binarne datoteke, izbor bi bio qemu-mipsel
.
Za ARM binarne datoteke, proces je sličan, koristeći emulator qemu-arm
za emulaciju.
Alati kao što su Firmadyne, Firmware Analysis Toolkit i drugi, olakšavaju potpunu emulaciju firmvera, automatizujući proces i pomažući u dinamičkoj analizi.
U ovoj fazi koristi se stvarno ili emulirano okruženje uređaja za analizu. Bitno je održati pristup shell-u operativnom sistemu i datotečnom sistemu. Emulacija možda neće savršeno oponašati interakcije hardvera, što zahteva povremena ponovna pokretanja emulacije. Analiza treba da ponovo pregleda datotečni sistem, iskoristi izložene veb stranice i mrežne usluge, i istraži ranjivosti bootloader-a. Testovi integriteta firmvera su ključni za identifikaciju potencijalnih ranjivosti backdoor-a.
Analiza u vreme izvođenja uključuje interakciju sa procesom ili binarnom datotekom u njenom operativnom okruženju, koristeći alate kao što su gdb-multiarch, Frida i Ghidra za postavljanje tačaka prekida i identifikaciju ranjivosti kroz fuzzing i druge tehnike.
Razvijanje PoC-a za identifikovane ranjivosti zahteva duboko razumevanje ciljne arhitekture i programiranje na jezicima nižeg nivoa. Zaštite u vreme izvođenja u ugrađenim sistemima su retke, ali kada su prisutne, tehnike kao što su Return Oriented Programming (ROP) mogu biti neophodne.
Operativni sistemi kao što su AttifyOS i EmbedOS pružaju unapred konfigurisana okruženja za testiranje bezbednosti firmvera, opremljena potrebnim alatima.
AttifyOS: AttifyOS je distribucija namenjena pomoći u proceni bezbednosti i pentestingu uređaja Interneta stvari (IoT). Štedi vam mnogo vremena pružajući unapred konfigurisano okruženje sa svim potrebnim alatima.
EmbedOS: Operativni sistem za testiranje bezbednosti ugrađenih sistema zasnovan na Ubuntu 18.04, unapred učitan alatima za testiranje bezbednosti firmvera.
Da biste vežbali otkrivanje ranjivosti u firmveru, koristite sledeće ranjive projekte firmvera kao polaznu tačku.
OWASP IoTGoat
Projekat Damn Vulnerable Router Firmware
Damn Vulnerable ARM Router (DVAR)
ARM-X
Azeria Labs VM 2.0
Damn Vulnerable IoT Device (DVID)
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)