Transcription
Toto zariadenie robí lov chýb príliš jednoduchým a stojí len asi 10 dolárov. Toto je CH341A. Je to čítačka SPI Flash a toto zariadenie môžete použiť na získanie firmvéru z takmer akéhokoľvek elektronického zariadenia, ktoré používa NOR Flash.
V tomto videu si prejdeme, čo to všetko znamená, ako táto vec funguje, porozprávame sa o etike sťahovania firmvéru zo zariadení a ukážem vám ručne, ako stiahnuť firmvér z malého domáceho smerovača. Tu mám Linus E5400, čo je Wi-Fi smerovač, ktorý by ste používali vo svojom dome.
Ak ste tu noví, ahoj, moje meno je Ed. Toto je LEL Learning, kanál, kde hovorím o bezpečnosti softvéru, kybernetickej bezpečnosti a o mnohých ďalších bláznivých veciach. Ak sa vám to páči alebo sa len chcete zabaviť, kliknite na tlačidlo odberu. Veľmi si to cením.
Než začneme, možno vás zaujíma, prečo to vôbec robíme. Prečo ľudia vôbec lovia chyby? Osobne verím, že je právom každej osoby, ktorá vlastní elektronické zariadenie, vedieť všeobecne, aká je kvalita kódu v tomto elektronickom zariadení, ale tiež, čo sa deje v tomto softvéri.
Dnes sa zameriavame na tento smerovač tu, Linus E5400, čo je veľmi bežné a tiež veľmi lacné Wi-Fi zariadenie, ktoré ľudia môžu používať na šírenie Wi-Fi po svojom dome. Zapojíte to do kábla, ktorý vychádza z vášho ISP, vášho poskytovateľa internetových služieb, a bude vysielať Wi-Fi po vašom dome, aby ľudia mohli používať internet bezdrôtovo.
Problém s týmito zariadeniami je, že smerujú všetku prevádzku cez internet do vášho domu. V dôsledku toho, ak sú v tomto zariadení zraniteľnosti, hacker, ktorý má kontrolu nad časťou prevádzky, ktorá prechádza vaším domom, by mohol využiť zraniteľnosť na zneužitie smerovača. A v dôsledku toho získanie vykonávania kódu na zariadení vo vašom dome, ktoré vidí všetku vašu internetovú prevádzku. Tiež by sa zlomyseľný aktér mohol prehnať okolo vášho domu a ak existuje zraniteľnosť v spracovaní Wi-Fi tejto veci, potenciálne by mohol bezdrôtovo zneužiť smerovač zvonku vášho domu a získať kontrolu nad zariadením. Nie je to dobrá situácia.
Dnes použijeme toto zariadenie, CH341A, na čítanie SPI Flash alebo sériového periférneho rozhrania Flash z tohto smerovača. Odstránil som kryt smerovača a vidíme, že existujú tri hlavné komponenty, na ktorých nám záleží. Po prvé, samotný hlavný CPU. Tu na hlavnom CPU sa deje všetko spracovanie. Všetok kód, ktorý beží na smerovači, ktorý posiela prevádzku z internetu do vášho domu, sa deje v tomto čipe.
Zatiaľ čo dáta sú spracované vo vnútri CPU, skutočný kód, ktorý beží na CPU, pochádza z kusu SPI Flash. Čip SPI Flash je to, čo obsahuje kód, ktorý beží na CPU. Teraz, čo chceme urobiť, je extrahovať firmvér z čipu SPI Flash a byť schopní vziať kód von, aby sme presne videli, čo zariadenie robí.
Existujú dva spôsoby, ako by sme to mohli urobiť. Po prvé, mohli by sme odpájkovať čip SPI Flash. Doslova by sme mohli použiť spájkovačku a odobrať Flash čip z dosky. Problém s tým je, že riskujeme potenciálne poškodenie zariadenia. Osobne viem, že moje spájkovacie schopnosti nie sú super dobré, takže ak by som zariadenie odpájkoval a nebol by som schopný spájku vrátiť späť na zariadenie, existuje možnosť, že by som ho mohol pokaziť. A ak mám len jeden z nich alebo nechcem kupovať viac, to by mohlo spôsobiť problém.
Tu prichádza na rad CH341. CH341 nám umožňuje bez odpájkovania čipu čítať pamäť z Flash čipu. Robí to pomocou protokolu SPI, protokolu sériového periférneho rozhrania, aby poslal Flash čipu správnu sériu op kódov, aby povedal SPI Flash čipu, aby emitoval firmvér. Toto je vlastne presne to, čo CPU robí, keď sa zapne. Posiela op kódy do SPI Flash čipu a SPI Flash čip v dôsledku toho emituje firmvér. To, čo sme schopní urobiť, je pripnúť toto zariadenie na SPI Flash čip a získame firmvér.
Tiež lov chýb a veci ako IoT zariadenia a domáce smerovače sú dosť bežným miestom na nájdenie naozaj zaujímavých zraniteľností, pretože veľa výrobcov vstavaného softvéru nedrží svoj kód aktuálny. Napríklad existovala celá rada smerovačov, ktoré používali verziu OpenSSL, o ktorej sa dlho vedelo, že má zraniteľnosti, ale kým niekto nerozobral firmvér a nevidel túto starú verziu OpenSSL, nikto naozaj nevedel, že existuje problém.
CH341 nie je len na sťahovanie firmvéru zo zariadení. Ak SPI Flash čip, na ktorý sa pozeráte na svojom zariadení, umožňuje zápis, čo väčšina z nich robí, môžete toto zariadenie použiť na nahratie nového firmvéru na tento SPI Flash čip. Či to bude fungovať alebo nie, bude závisieť od toho, ako funguje bootloader a či existuje interný Flash na čipe, ktorý číta SPI Flash čip a očakáva určitý formát. Ale veľa zariadení, vrátane tohto Linus smerovača, na ktorom pracujeme, nám umožňuje nahrať nový firmvér na zariadenie.
Dôvod, prečo to ľudia robia, je ten, že niekedy ľudia jednoducho nedôverujú softvéru, ktorý je na týchto smerovačoch, a to je vlastne spravodlivé posúdenie, pretože softvér, ktorý títo výrobcovia produkujú, je uzavretý zdroj. Niekedy sa cíti bezpečnejšie dať na zariadenie alternatívu s otvoreným zdrojom. Môžeme použiť toto zariadenie tu na nahratie nového firmvéru na tento smerovač, ako je OpenWrt alebo DDWRT, a teraz presne vieme, čo kód na zariadení robí, za predpokladu, že sme kód prečítali. Prečítali sme kód.
Dnešné video je sponzorované mnou. Moja webová stránka, Level Academy, je naozaj skvelé miesto, kde sa môžete dozvedieť o základoch počítačov. Osobne verím, že ak neviete, ako počítače fungujú na základnej úrovni, naozaj nebudete dobrým programátorom v žiadnom inom jazyku. Takže si môžete vziať môj kurz práve teraz o programovaní v C, o sieťovom kóde v C, o vláknach v C a tiež o ARM assembly. Ak si to chcete pozrieť pred kúpou, mám teraz bezplatnú lekciu, ktorá trvá asi 12 minút, o súprave inštrukcií ARM a o tom, ako vykonávať operácie načítania. Nemôžete byť dobrým programátorom, pokiaľ neviete, ako počítače fungujú na základnej úrovni. A kde sa to naučíte? Na Level Academy.
Späť k CH341. Spôsob, akým CH341 funguje, je, že zapojíte zariadenie do klipu. S týmto klipom môžeme obaliť exponované piny na SPI Flash čipe. Umiestnením klipu na čip a jeho vložením do tohto zariadenia môžeme toto zariadenie zapojiť do nášho počítača a ovládať ho pomocou programu ako Flashrom. Flashrom inštruuje zariadenie, aby poslalo určité príkazy SPI Flash nášmu SPI Flash čipu, a z čipu vyjde firmvér.
Poznámka: Zariadenie je schopné podporovať 8-pinový SPI Flash a 16-pinový SPI Flash. Budete potrebovať rôzne klipy, ale našťastie zariadenie prichádza s oboma.
Dobre, takže teraz, keď máme náš čip pripnutý na našej doske, môžeme urobiť niečo jednoduché, ako napríklad pseudo AP install, aby sme získali program, ktorý bude skutočne komunikovať s CH341 a stiahne Flash z zariadenia. Programom dnes bude Flashrom. Môžete ho získať buď z Apt, alebo si ho môžete zostaviť zo zdroja. Verzia na Apt je pre tento prípad použitia úplne v poriadku.
Teraz spustiť Flashrom je naozaj jednoduché. Urobíme -V pre podrobný výstup, aby sme videli presne, čo robí. Povieme "read the flash out to blob.bin". Použijeme tento program tu, čo je program, ktorý sme zapojili do nášho počítača. Ak to urobíme, to, čo sa teraz stane, je, že skutočne preskúma SPI Flash čip na všetky potenciálne ID, ktoré môže mať. A po tom, čo preskúma všetky ID, ktoré SPI Flash čip môže mať, nakoniec uvidíme, že našiel čip Windbond Flash, ktorý je na zariadení, W25Q128. Tento čip má 16 megabajtov SPI Flash, ktoré sa stiahnu pri pomerne pomalej SPI B rýchlosti, takže tento proces bude trvať asi 15 minút.
Keď sa to dokončí, budeme mať tento súbor s názvom blob.bin. Ak spustíme "file" na blob.bin, uvidíme, že hovorí len, že je to dáta, čo znamená, že prvé dva bajty tohto blob nie sú rozpoznateľné ako známa hlavička súboru. A to preto, že veľa z týchto informácií je len metadáta, ktoré tam výrobca umiestnil, aby držal informácie o tom, čo je súbor.
Na základe toho sa nezdá, že by tento súbor mal veľa štruktúry. Toto by mohli byť len surové op kódy pre bootloader, napríklad, ktorý beží, keď sa doska zapne. Aby sme získali predstavu o tom, čo je tu, môžeme urobiť niečo ako "strings" na blob.bin, pumpnúť to do "less". Vidíme, že tu sú nejaké ne-ASCII tlačiteľné znaky, niektoré potenciálne op kódy, ktoré sme predtým spomenuli, ale nakoniec sa tu posunieme nadol a dostaneme sa k nejakým novým zaujímavým reťazcom. Povieme "uboot" a potom "HTTP responses". Takže už vidíme, že získavame predstavu o tom, čo je v tomto súbore. Máme U-Boot, čo je známy bootloader pre vstavané zariadenia, ktorý berie hlavný operačný systém z pamäte a umiestňuje ho do CPU. Bootloader je vždy to, čo beží ako prvé. Tiež máme nejaké webové stránky. Predpokladám, že U-Boot pravdepodobne hostí HTTP server, ktorý môžeme použiť na nahratie vlastného firmvéru. To je celkom v pohode.
CH341 nie je len na čítanie Flash. V skutočnosti môžeme aj zapisovať do Flash, za predpokladu, že Flash čip nie je chránený proti zápisu a umožňuje nám vykonávať viac cyklov zápisu do viacerých Flash sektorov. To, čo môžeme urobiť, je, že môžeme ísť do Flash a hľadať reťazec "uboot" a zmeniť ho na reťazec "uboop". A potom, ak to vezmeme a zapíšeme, môžeme použiť rovnaký príkaz a namiesto čítania Flash čipu ho zapíšeme.
Po prvé, predtým, ako to urobíte, majte prosím kópiu Flash pred tým, ako sa pokúsite prepísať Flash. Ak poškodíte súborový systém alebo spôsobíte, že Flash čip nebude v rovnakom poradí ako predtým, môžete zariadenie znefunkčniť. Nechcete to. Takže teraz môžeme zapísať náš blob.bin. Urobí to to isté, preskúma Flash čip, aby zistil, o akom Flash čipe hovoríme, a potom nakoniec, pretože som stlačil Enter, som pokazil veľkosť obrazu. Vráťme sa a rýchlo to opravme. Opäť je veľmi dôležité byť tu veľmi špecifický, keď to robíme.
Poďme upraviť náš súbor. Ak hľadám "uboob", zmením to na "yubo", pretože zjavne je nahnevaný, že som urobil súbor príliš veľký. V poriadku, to isté. Takže to, čo sa tu skutočne stane, je to, čo sa nazýva diferenciálne čítanie. Prečíta všetok Flash a potom zistí, čo by tam malo byť, a potom zapíše iba časti, ktoré sú odlišné.
Mohli by sme manuálne prejsť a rozobrať blob.bin a nájsť všetky zaujímavé súbory sami, ale existuje program, ktorý to urobí za nás. Volá sa Binwalk. Teraz použijeme Binwalk v režime -M, čo je luxusné ruské slovo, ktoré znamená rekurzívne. Otvorí všetky súbory, kým ich nebude môcť otvoriť. A príznak -E bude znamenať extrahovať. Spustíme to na blob.bin. To, čo sa tu stane, je, že nájde niekoľko zaujímavých vecí. Po prvé, ten reťazec U-Boot, na ktorý sme predtým poukázali, nejaké HTML dokumenty, ktoré sme tiež videli predtým, ale najdôležitejšia časť tu je hlavička U-Image.
Hlavička U-Image je to, čo bude obsahovať operačný systém Linux a tiež nám povie, aká je architektúra CPU. Bude to CPU myips. Ak sa ponoríme hlboko do súborov, ktoré Binwalk pre nás extrahuje, po tejto ceste tu dostaneme súborový systém root. Toto je vlastne kód, ktorý beží na smerovači, ktorý sme si kúpili, a teraz máme prístup ku všetkému kódu. Môžeme ísť do týchto binárnych súborov jeden po druhom a začať náš proces lovu chýb. A ak nájdeme chybu v týchto binárnych súboroch, sú to tie, ktoré sú na smerovačoch. Je to aj na tom smerovači.
Teraz si porozprávajme o etike. Je neetické alebo nezákonné robiť to, čo robíme? Myslím si, že odpoveď je nie, ale nie som právnik. Odpoveď je vlastne pravdepodobne závisí od toho, v akej krajine ste. V USA nie je nezákonné robiť toto, kde extrahujeme firmvér zariadenia. Ak by sme sa snažili odhaliť obchodné tajomstvo, aby sme ho z firemného hľadiska zneužili a použili toto obchodné tajomstvo na zarábanie peňazí, potom sa to stáva trochu komplikované. Ale v skutočnosti nedávny súdny prípad proti bezpečnostnému výskumníkovi v Apple rozhodol, že ak vykonávame reverzné inžinierstvo na účely bezpečnostného výskumu, kde sa snažíme byť bezpečnejší alebo nájsť chyby v softvéri, je to vlastne úplne legálne.
To znamená, že z etického hľadiska, ak nájdete chybu v softvérovom produkte, možno ju nebudete šíriť divoko. Možno ju nahláste predajcovi a ak majú program odmien za chyby, možno si zarobíte nejaké rýchle peniaze.
To znamená, že ak ste v tomto svete noví, dôrazne odporúčam, aby ste si našli už existujúce CVE, možno pretečenie vyrovnávacej pamäte v IP kamere. Kúpte si tú IP kameru a pozrite sa, či môžete pomocou tohto zariadenia extrahovať firmvér a sami zneužiť chybu. Toto je zábavný spôsob, ako zistiť, ako sa dostať k lovu chýb tým, že hľadáte chyby, ktoré už existujú. Odstraňuje to dohady o tom, či v niečom chyba je alebo nie je.
CH341A, skvelý nástroj, ktorý robí lov chýb takmer príliš jednoduchým. Pre ďalšie video si pozrite toto. Hovorím o niečom, čo je ešte coolnejšie ako toto.