Firmware Analysis
Uvod
Firmware je osnovni softver koji omogućava uređajima da pravilno funkcionišu upravljajući i olakšavajući komunikaciju između hardverskih komponenti i softvera sa kojim korisnici interaguju. Čuva se u trajnoj memoriji, osiguravajući da uređaj može pristupiti vitalnim instrukcijama od trenutka kada se uključi, što dovodi do pokretanja operativnog sistema. Ispitivanje i potencijalno modifikovanje firmware-a je ključan korak u identifikaciji sigurnosnih ranjivosti.
Prikupljanje informacija
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
Hardverskom rasporedu i tehničkim listovima
Metrikama koda i lokacijama izvornog koda
Spoljnim bibliotekama i tipovima licenci
Istorijama ažuriranja i regulatornim sertifikatima
Arhitektonskim i dijagramima toka
Sigurnosnim procenama i identifikovanim ranjivostima
Za ovu svrhu, alati za otvorenu obaveštajnu službu (OSINT) su neprocenjivi, kao i analiza bilo kojih dostupnih komponenti otvorenog koda putem ručnih i automatskih procesa pregleda. Alati poput Coverity Scan i Semmle’s LGTM pružaju besplatnu statičku analizu koja se može iskoristiti za pronalaženje potencijalnih problema.
Dobijanje firmware-a
Dobijanje firmware-a može se pristupiti na različite načine, svaki sa svojim nivoom složenosti:
Direktno od izvora (razvojni timovi, proizvođači)
Izgradnjom prema pruženim instrukcijama
Preuzimanjem sa zvaničnih sajtova podrške
Korišćenjem Google dork upita za pronalaženje hostovanih firmware fajlova
Direktnim pristupom cloud skladištu, sa alatima poput S3Scanner
Interceptarajući ažuriranja putem tehnika čovek-u-sredini
Ekstrahovanjem sa uređaja putem veza poput UART-a, JTAG-a, ili PICit-a
Špijuniranjem za zahtevima za ažuriranje unutar komunikacije uređaja
Identifikovanjem i korišćenjem hardkodiranih tačaka za ažuriranje
Dumpovanjem iz bootloader-a ili mreže
Uklanjanjem i čitanjem čipa za skladištenje, kada sve drugo zakaže, korišćenjem odgovarajućih hardverskih alata
Analiza firmware-a
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 niska entropija, tada verovatno nije šifrovana. Ako je visoka entropija, verovatno je šifrovana (ili kompresovana na neki način).
Osim toga, možete koristiti ove alate za izdvajanje datoteka ugrađenih u firmver:
pageFile/Data Carving & Recovery ToolsIli binvis.io (kod) za inspekciju datoteke.
Dobijanje fajl sistema
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.
Ručno izdvajanje fajl sistema
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.
Pokrenite sledeću dd komandu za izdvajanje Squashfs fajl sistema.
Alternativno, može 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>
Analiza Firmware-a
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.
Alati za Početnu Analizu
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.
Izdvajanje fajl sistema
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:
Analiza 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 servera za ažuriranje, 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 web servere i binarne fajlove
Nekoliko alata pomaže u otkrivanju osetljivih informacija i ranjivosti unutar fajl sistema:
LinPEAS i Firmwalker za pretragu osetljivih informacija
The Firmware Analysis and Comparison Tool (FACT) za sveobuhvatnu analizu firmware-a
FwAnalyzer, ByteSweep, ByteSweep-go i EMBA za statičku i dinamičku analizu
Provere bezbednosti kompajliranih binarnih fajlova
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.
Emulacija firmware-a za dinamičku analizu
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-a, ili na prethodno izgrađenu virtuelnu mašinu, može olakšati dalje testiranje.
Emulacija pojedinačnih binarnih fajlova
Za ispitivanje pojedinačnih programa, ključno je identifikovati endianstvo i arhitekturu CPU-a programa.
Primer sa MIPS arhitekturom
Za emulaciju binarnog fajla sa MIPS arhitekturom, može se koristiti komanda:
I za instaliranje potrebnih alata za emulaciju:
Emulacija arhitekture ARM
Za ARM binarne datoteke, postupak je sličan, koristi se emulator qemu-arm
za emulaciju.
Emulacija celog sistema
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.
Praktična analiza u pokretu
U ovoj fazi, koristi se stvarno ili emulirano okruženje uređaja za analizu. Bitno je održati pristup ljusci operativnog sistema 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 usluge, istraži ranjivosti bootloader-a. Testiranje integriteta firmware-a je ključno za identifikaciju potencijalnih ranjivosti vrata u pozadini.
Tehnike analize u pokretu
Analiza u pokretu 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.
Eksploatacija binarnih datoteka i dokaz koncepta
Razvoj PoC-a za identifikovane ranjivosti zahteva duboko razumevanje ciljne arhitekture i programiranje u jezicima nižeg nivoa. Zaštite binarnog vremena izvršavanja u ugrađenim sistemima su retke, ali kada su prisutne, mogu biti neophodne tehnike poput Return Oriented Programming (ROP).
Pripremljeni operativni sistemi za analizu firmware-a
Operativni sistemi poput AttifyOS i EmbedOS pružaju prekonfigurisana okruženja za testiranje sigurnosti firmware-a, opremljena neophodnim alatima.
Pripremljeni OS-ovi za analizu firmware-a
AttifyOS: AttifyOS je distribucija namenjena pomoći u sprovođenju procene sigurnosti i testiranju prodiranja uređaja Internet of Things (IoT). Štedi vam puno vremena pružajući prekonfigurisano okruženje sa svim neophodnim alatima učitanim.
EmbedOS: Ugrađeni operativni sistem za testiranje sigurnosti zasnovan na Ubuntu 18.04 sa unapred učitanim alatima za testiranje sigurnosti firmware-a.
Ranjivi firmware za vežbanje
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)
Reference
Obuka i sertifikacija
Last updated