Firmware Analysis
Last updated
Last updated
Leer & oefen AWS Hack:HackTricks Opleiding AWS Red Team Expert (ARTE) Leer & oefen GCP Hack: HackTricks Opleiding GCP Red Team Expert (GRTE)
Firmware is noodsaaklike sagteware wat toestelle in staat stel om korrek te werk deur die bestuur en fasilitering van kommunikasie tussen die hardewarekomponente en die sagteware wat gebruikers mee interaksie het. Dit word gestoor in permanente geheue, wat verseker dat die toestel vanaf die oomblik dat dit aangeskakel word, toegang tot noodsaaklike instruksies kan verkry, wat lei tot die aanvang van die bedryfstelsel. Die ondersoek en moontlike wysiging van firmware is 'n kritieke stap om sekuriteitskwessies te identifiseer.
Inligting Versameling is 'n kritieke aanvanklike stap om 'n toestel se samestelling en die tegnologieë wat dit gebruik, te verstaan. Hierdie proses behels die insameling van data oor:
Die CPU-argitektuur en bedryfstelsel waarop dit loop
Bootloader spesifieke inligting
Hardeware uitleg en databladsye
Kodebasis metriek en bronlokasies
Eksterne biblioteke en lisensietipes
Opdateringsgeskiedenisse en reguleringsertifisering
Argitektoniese en vloeidiagramme
Sekuriteitsassesserings en geïdentifiseerde kwessies
Vir hierdie doel is open-source intelligensie (OSINT)-hulpmiddels van onschatbare waarde, asook die analise van enige beskikbare oopbron-sagtewarekomponente deur middel van handmatige en geoutomatiseerde hersieningsprosesse. Hulpmiddels soos Coverity Scan en Semmle’s LGTM bied gratis statiese analise wat benut kan word om potensiële kwessies te vind.
Die verkryging van firmware kan op verskeie maniere benader word, elk met sy eie vlak van kompleksiteit:
Direk van die bron (ontwikkelaars, vervaardigers)
Dit bou deur die voorsiene instruksies
Aflaai van amptelike ondersteuningswebwerwe
Gebruik Google dork-navrae om gehuisvese firmware-lêers te vind
Direkte toegang tot wolkmagazyn met hulpmiddels soos S3Scanner
Onderskepping van opdaterings deur man-in-die-middel tegnieke
Uitpakking van die toestel deur koppelings soos UART, JTAG, of PICit
Sniffing vir opdateringsversoeke binne toestelkommunikasie
Identifisering en gebruik van hardgekoppelde opdaterings-eindpunte
Dumping vanaf die bootloader of netwerk
Verwydering en lees van die stoorchip, wanneer alles anders faal, deur die gebruik van toepaslike hardewarehulpmiddels
Nou dat jy die firmware het, moet jy inligting daaroor onttrek om te weet hoe om dit te hanteer. Verskillende hulpmiddels wat jy vir dit kan gebruik:
Indien jy nie veel vind met daardie gereedskap nie, kontroleer die entropie van die beeld met binwalk -E <bin>
, as die entropie laag is, is dit nie waarskynlik versleutel nie. As die entropie hoog is, is dit waarskynlik versleutel (of op een of ander manier saamgedruk).
Verder kan jy hierdie gereedskap gebruik om lêers wat binne die firmware ingebed is, te onttrek:
File/Data Carving & Recovery ToolsOf binvis.io (code) om die lêer te inspekteer.
Met die vorige genoemde gereedskap soos binwalk -ev <bin>
behoort jy in staat te wees om die lêersisteem te onttrek.
Binwalk onttrek dit gewoonlik binne 'n vouer wat genoem word na die lêersisteem tipe, wat gewoonlik een van die volgende is: squashfs, ubifs, romfs, rootfs, jffs2, yaffs2, cramfs, initramfs.
Soms sal binwalk nie die sielkundige byte van die lêersisteem in sy handtekeninge hê nie. In hierdie gevalle, gebruik binwalk om die offset van die lêersisteem te vind en die saamgedrukte lêersisteem te kerf uit die binêre en handmatig die lêersisteem te onttrek volgens sy tipe deur die stappe hieronder te volg.
Voer die volgende dd-opdrag uit om die Squashfs-lêersisteem uit te snys.
Alternatiewelik kan die volgende bevel ook uitgevoer word.
$ dd if=DIR850L_REVB.bin bs=1 skip=$((0x1A0094)) of=dir.squashfs
Vir squashfs (soos in die voorbeeld hierbo)
$ unsquashfs dir.squashfs
Lêers sal daarna in die "squashfs-root
" gids wees.
CPIO-argief lêers
$ cpio -ivd --no-absolute-filenames -F <bin>
Vir jffs2-lêersisteme
$ jefferson rootfsfile.jffs2
Vir ubifs-lêersisteme met NAND-flits
$ ubireader_extract_images -u UBI -s <start_offset> <bin>
$ ubidump.py <bin>
Sodra die firmware verkry is, is dit noodsaaklik om dit te ontleed om die struktuur en potensiële kwesbaarhede daarvan te verstaan. Hierdie proses behels die gebruik van verskeie gereedskap om waardevolle data uit die firmwarebeeld te ontleed en te onttrek.
'n Stel bevele word voorsien vir die aanvanklike inspeksie van die binêre lêer (verwys as <bin>
). Hierdie bevele help om lêertipes te identifiseer, strings te onttrek, binêre data te ontleed, en die partisie- en lêersisteembesonderhede te verstaan:
Om die versleutelingstatus van die beeld te assesseer, word die entropie nagegaan met binwalk -E <bin>
. Lae entropie dui op 'n gebrek aan versleuteling, terwyl hoë entropie moontlike versleuteling of kompressie aandui.
Vir die onttrekking van ingeslote lêers, word gereedskap en bronne soos die file-data-carving-recovery-tools dokumentasie en binvis.io vir lêerinspeksie aanbeveel.
Deur binwalk -ev <bin>
te gebruik, kan die lêersisteem gewoonlik onttrek word, dikwels na 'n gids wat genoem is na die lêersisteemtipe (bv., squashfs, ubifs). Wanneer binwalk egter nie die lêersisteemtipe herken as gevolg van ontbrekende sielkundige bytjies nie, is handmatige onttrekking nodig. Dit behels die gebruik van binwalk
om die lêersisteem se afskuif te vind, gevolg deur die dd
-bevel om die lêersisteem uit te kerf:
Na afloop, afhangende van die lêersisteemtipe (bv. squashfs, cpio, jffs2, ubifs), word verskillende bevele gebruik om die inhoud handmatig te onttrek.
Met die lêersisteem onttrek, begin die soektog na sekuriteitsgebreke. Aandag word geskenk aan onveilige netwerkdemonne, hardgekoppelde geloofsbriewe, API-eindpunte, opdateringbedienerfunksionaliteite, ongekompileerde kodes, aanvangskripte, en gekompileerde binêre lêers vir aflynontleding.
Sleutellokasies en items om te ondersoek sluit in:
etc/shadow en etc/passwd vir gebruikersgelde
SSL-sertifikate en sleutels in etc/ssl
Opset- en skriptlêers vir potensiële kwesbaarhede
Ingeslote binêre lêers vir verdere ontleding
Gewone IoT-toestel-webbediener en binêre lêers
Verskeie gereedskap help om sensitiewe inligting en kwesbaarhede binne die lêersisteem bloot te lê:
LinPEAS en Firmwalker vir soektog na sensitiewe inligting
Die Firmwareontledings- en Vergelykingstool (FACT) vir omvattende firmware-ontleding
FwAnalyzer, ByteSweep, ByteSweep-go, en EMBA vir statiese en dinamiese ontleding
Bronkode en gekompileerde binêre lêers wat in die lêersisteem gevind word, moet ondersoek word vir kwesbaarhede. Gereedskap soos checksec.sh vir Unix-binêre lêers en PESecurity vir Windows-binêre lêers help om onbeskermde binêre lêers te identifiseer wat uitgebuit kan word.
Die proses van die nabootsing van firmware maak dinamiese ontleding van óf 'n toestel se werking óf 'n individuele program moontlik. Hierdie benadering kan uitdagings in die vorm van hardeware- of argitektuurafhanklikhede inhou, maar die oordrag van die hooflêersisteem of spesifieke binêre lêers na 'n toestel met 'n ooreenstemmende argitektuur en endianness, soos 'n Raspberry Pi, of na 'n voorafgeboude virtuele masjien, kan verdere toetsing fasiliteer.
Vir die ondersoek van enkelprogramme is dit noodsaaklik om die endianness en CPU-argitektuur van die program te identifiseer.
Om 'n MIPS-argitektuur binêre lêer na te boots, kan die volgende bevel gebruik word:
En om die nodige emulasiehulpmiddels te installeer:
Vir ARM-binêre lêers is die proses soortgelyk, met die qemu-arm
emulator wat gebruik word vir emulasie.
Hulpmiddels soos Firmadyne, Firmware Analise Toolkit, en ander, fasiliteer volledige firmware emulasie, outomatiseer die proses en help met dinamiese analise.
Op hierdie stadium word óf 'n werklike óf 'n geëmuleerde toestelomgewing vir analise gebruik. Dit is noodsaaklik om skaal toegang tot die OS en lêersisteem te behou. Emulasie mag nie hardeware-interaksies perfek naboots nie, wat af en toe emulasie herstarts noodsaaklik maak. Analise behoort die lêersisteem te hersien, blootgestelde webbladsye en netwerkdienste te benut, en opstartlaaier kwesbaarhede te ondersoek. Firmware-integriteitstoetse is krities om potensiële agterdeur kwesbaarhede te identifiseer.
Runtime-analise behels interaksie met 'n proses of binêre lêer in sy bedryfsomgewing, deur gebruik te maak van hulpmiddels soos gdb-multiarch, Frida, en Ghidra om breekpunte in te stel en kwesbaarhede deur fuzzing en ander tegnieke te identifiseer.
Die ontwikkeling van 'n PoC vir geïdentifiseerde kwesbaarhede vereis 'n diepgaande begrip van die teikenargitektuur en programmering in laervlak tale. Binêre runtime-beskerming in ingebedde stelsels is skaars, maar wanneer teenwoordig, mag tegnieke soos Return Oriented Programming (ROP) nodig wees.
Bedryfstelsels soos AttifyOS en EmbedOS bied vooraf gekonfigureerde omgewings vir firmware-sekuriteitstoetsing, toegerus met nodige hulpmiddels.
AttifyOS: AttifyOS is 'n distro bedoel om jou te help met die uitvoering van sekerheidsevaluering en indringingstoetsing van Internet of Things (IoT) toestelle. Dit bespaar baie tyd deur 'n vooraf gekonfigureerde omgewing met al die nodige hulpmiddels gelaai te voorsien.
EmbedOS: Ingeslote sekerheidstoetsbedryfstelsel gebaseer op Ubuntu 18.04 voorgelaai met firmware-sekuriteitstoetsingshulpmiddels.
Om kwesbaarhede in firmware te ontdek, gebruik die volgende kwesbare firmwareprojekte as 'n beginpunt.
OWASP IoTGoat
Die Damn Vulnerable Router Firmware Project
Damn Vulnerable ARM Router (DVAR)
ARM-X
Azeria Labs VM 2.0
Damn Vulnerable IoT Device (DVID)