Firmware Analysis
Last updated
Last updated
Naučite i vežbajte hakovanje AWS-a:HackTricks Training AWS Red Team Expert (ARTE) Naučite i vežbajte hakovanje GCP-a: HackTricks Training GCP Red Team Expert (GRTE)
Firmware je osnovni softver koji omogućava uređajima pravilno funkcionisanje upravljajući i olakšavajući komunikaciju između hardverskih komponenti i softvera sa kojim korisnici interaguju. Čuva se u trajnoj memoriji, obezbeđujući uređaju pristup vitalnim instrukcijama od trenutka kada se uključi, što dovodi do pokretanja operativnog sistema. Ispitivanje i potencijalno modifikovanje firmware-a ključan je korak u identifikaciji bezbednosnih ranjivosti.
Prikupljanje informacija je ključni 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 pokreće
Specifičnostima bootloader-a
Rasporedu hardvera i tehničkim listovima
Metrikama koda i lokacijama izvornog koda
Spoljnim bibliotekama i tipovima licenci
Istorijatu ažuriranja i regulatornim sertifikatima
Arhitektonskim i dijagramima toka
Bezbednosnim procenama i identifikovanim ranjivostima
Za ovu svrhu, alati za otvorenu obaveštajnu službu (OSINT) su neprocenjivi, kao i analiza dostupnih komponenti otvorenog koda putem ručnih i automatskih 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 firmware-a može se pristupiti na različite načine, svaki sa svojim nivoom složenosti:
Direktno od izvora (programeri, proizvođači)
Izgradnja prema pruženim instrukcijama
Preuzimanje sa zvaničnih sajtova podrške
Korišćenje Google dork upita za pronalaženje hostovanih firmware fajlova
Direktno pristupanje cloud skladištu, sa alatima poput S3Scanner
Presretanje ažuriranja putem tehnika čovek-u-sredini
Izdvajanje sa uređaja putem veza poput UART, JTAG, ili PICit
Špijuniranje za zahtevima za ažuriranje unutar komunikacije uređaja
Identifikovanje i korišćenje hardkodiranih tačaka za ažuriranje
Izdvajanje iz bootloader-a ili mreže
Uklanjanje i čitanje čipa za skladištenje, kada sve drugo zakaže, korišćenjem odgovarajućih hardverskih alata
Sada kada imate firmware, treba 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 pomoću binwalk -E <bin>
, ako je entropija niska, tada verovatno nije šifrovana. Ako je entropija visoka, verovatno je šifrovana (ili kompresovana na neki način).
Osim toga, možete koristiti ove alate za izdvajanje datoteka ugrađenih u firmware:
File/Data Carving & Recovery ToolsIli binvis.io (kod) za inspekciju datoteke.
Pomoću prethodno komentarisanih alata poput binwalk -ev <bin>
trebalo bi da ste mogli da izvučete fajl sistem.
Binwalk obično izvlači unutar foldera nazvanog po tipu fajl 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 fajl sistema u svojim potpisima. U tim slučajevima, koristite binwalk da pronađete offset fajl sistema i izdvojite kompresovani fajl sistem iz binarnog fajla i ručno izdvojite fajl sistem prema njegovom tipu koristeći korake ispod.
Izvršite sledeću dd komandu za izdvajanje Squashfs fajl sistema.
Alternativno, mogla bi se pokrenuti i sledeća komanda.
$ dd if=DIR850L_REVB.bin bs=1 skip=$((0x1A0094)) of=dir.squashfs
Za squashfs (korišćeno u primeru iznad)
$ unsquashfs dir.squashfs
Datoteke će biti u direktorijumu "squashfs-root
" nakon toga.
CPIO arhivske datoteke
$ 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 firmware dobije, bitno je razložiti ga radi razumevanja njegove strukture i potencijalnih ranjivosti. Ovaj proces uključuje korišćenje različitih alata za analizu i izvlačenje vrednih podataka iz firmware slike.
Skup komandi je obezbeđen za početnu inspekciju binarnog fajla (nazvanog <bin>
). Ove komande pomažu u identifikovanju tipova fajlova, izvlačenju stringova, analizi binarnih podataka i razumevanju detalja particija i fajl sistema:
Za procenu statusa šifrovanja slike, entropija se proverava pomoću binwalk -E <bin>
. Niska entropija ukazuje na nedostatak šifrovanja, dok visoka entropija ukazuje na moguće šifrovanje ili kompresiju.
Za izdvajanje ugrađenih datoteka, preporučuju se alati i resursi poput dokumentacije file-data-carving-recovery-tools i binvis.io za inspekciju datoteka.
Korišćenjem binwalk -ev <bin>
, obično se može izdvojiti fajl sistem, često u direktorijumu nazvanom po tipu fajl sistema (npr. squashfs, ubifs). Međutim, kada binwalk ne uspe da prepozna tip fajl sistema zbog nedostajućih magičnih bajtova, potrebno je ručno izdvajanje. To uključuje korišćenje binwalk
za lociranje ofseta fajl sistema, a zatim korišćenje dd
komande za izdvajanje fajl sistema:
Sa izvučenim fajl sistemom, počinje potraga za bezbednosnim propustima. Pažnja se posvećuje nesigurnim mrežnim demonima, hardkodiranim pristupnim podacima, API endpointima, funkcionalnostima ažuriranja servera, nekompajliranom kodu, startap skriptama i kompajliranim binarnim fajlovima za offline analizu.
Ključne lokacije i stavke koje treba pregledati uključuju:
etc/shadow i etc/passwd za korisničke podatke
SSL sertifikate i ključeve u etc/ssl
Konfiguracione i skript fajlove za potencijalne ranjivosti
Ugrađene binarne fajlove za dalju analizu
Uobičajene IoT veb servere i binarne fajlove
Nekoliko alata pomaže u otkrivanju osetljivih informacija i ranjivosti unutar fajl sistema:
LinPEAS i Firmwalker za pretragu osetljivih informacija
Alat za analizu i poređenje firmware-a (FACT) za sveobuhvatnu analizu firmware-a
FwAnalyzer, ByteSweep, ByteSweep-go i EMBA za statičku i dinamičku analizu
Izvorni kod i kompajlirani binarni fajlovi pronađeni u fajl sistemu moraju biti pažljivo pregledani zbog ranjivosti. Alati poput checksec.sh za Unix binarne fajlove i PESecurity za Windows binarne fajlove pomažu u identifikaciji nezaštićenih binarnih fajlova koji bi mogli biti iskorišćeni.
Proces emulacije firmware-a omogućava dinamičku analizu ili rada uređaja ili pojedinačnog programa. Ovaj pristup može naići na izazove sa hardverom ili zavisnostima arhitekture, ali prenos fajl sistema korena ili određenih binarnih fajlova na uređaj sa odgovarajućom arhitekturom i endianstvom, poput Raspberry Pi-ja, ili na prethodno izgrađenu virtuelnu mašinu, može olakšati dalje testiranje.
Za ispitivanje pojedinačnih programa, ključno je identifikovati endianstvo programa i arhitekturu CPU-a.
Za emulaciju binarnog fajla sa MIPS arhitekturom, može se koristiti komanda:
I za instaliranje potrebnih alata za emulaciju:
Za ARM binarne datoteke, proces je sličan, pri čemu se koristi emulator qemu-arm
za emulaciju.
Alati poput Firmadyne, Firmware Analysis Toolkit i drugi olakšavaju potpunu emulaciju firmware-a, automatizujući proces i pomažući u dinamičkoj analizi.
U ovoj fazi se koristi stvarno ili emulisano okruženje uređaja za analizu. Bitno je održavati pristup ljuske operativnom sistemu i fajl sistemu. Emulacija možda neće savršeno oponašati hardverske interakcije, što može zahtevati povremena ponovna pokretanja emulacije. Analiza treba da ponovo pregleda fajl sistem, iskoristi izložene web stranice i mrežne servise, istraži ranjivosti bootloader-a. Testiranje integriteta firmware-a je ključno za identifikaciju potencijalnih ranjivosti vrata.
Analiza u toku izvršavanja podrazumeva interakciju sa procesom ili binarnom datotekom u svom radnom okruženju, koristeći alate poput gdb-multiarch, Frida i Ghidra za postavljanje prekidača i identifikaciju ranjivosti kroz ispitivanje i druge tehnike.
Razvoj PoC-a za identifikovane ranjivosti zahteva duboko razumevanje ciljne arhitekture i programiranje u jezicima nižeg nivoa. Zaštite binarnog izvršavanja u ugrađenim sistemima su retke, ali kada su prisutne, tehnike poput Return Oriented Programming (ROP) mogu biti neophodne.
Operativni sistemi poput AttifyOS i EmbedOS pružaju prekonfigurisana okruženja za testiranje sigurnosti firmware-a, opremljena neophodnim alatima.
AttifyOS: AttifyOS je distribucija namenjena pomoći pri sprovođenju procene sigurnosti i testiranju prodiranja uređaja Internet stvari (IoT). Štedi vreme pružajući prekonfigurisano okruženje sa svim neophodnim alatima.
EmbedOS: Ugrađeni operativni sistem za testiranje sigurnosti zasnovan na Ubuntu 18.04 sa unapred učitanim alatima za testiranje sigurnosti firmware-a.
Za vežbanje otkrivanja ranjivosti u firmware-u, koristite sledeće projekte ranjivog firmware-a kao polaznu tačku.
OWASP IoTGoat
The Damn Vulnerable Router Firmware Project
Damn Vulnerable ARM Router (DVAR)
ARM-X
Azeria Labs VM 2.0
Damn Vulnerable IoT Device (DVID)