» »

All your firmware are belong to us

Intervju z neodvisnim svetovalcev za varnost in omrežja Arrigom Triulziem.

Arrigo Triulzi je neodvisni svetovalec za varnost in omrežja, ki deluje v Ženevi v Švici. Po poklicu je matematik, a se že 20 let se ukvarja s svetovanjem. Njegov hobi je raziskovanje strojne programske opreme (ang firmware). Novembra 2008 je predstavil projekt Maux - raziskavo strojnih korenskih kompletov (ang. firmware rootkit).

Ker gre za zanimivo področje raziskovanja, smo se odločili temo v kratkem intervjuju predstaviti tudi bralcem Slo-Techa.


Matej Kovačič: Ali lahko za začetek našim bralcem na kratko poveste kaj so to korenski kompleti (ang. rootkit)?

NIC SSH v akciji


Arrigo Triulzi: Korenski komplet ponavadi opredeljujemo kot skupino orodij, ki omogoča upravljanje sistema na daljavo. Običajno jih sestavlja najmanj orodje za analizo omrežnega prometa (ang. sniffer), orodje za razbijanje gesel in orodje, ki na sistemu odpre tako imenovana stranska vrata (ang. backdoor).


Matej Kovačič: Kakšna je razlika med programskimi in strojnimi korenskimi kompleti?

Arrigo Triulzi: Programski korenski kompleti so prirejeni za nameščanje v operacijske sisteme, pogosto za konkretno različico operacijskega sistema, strojne korenske komplete pa je mogoče nameščati neposredno v strojno opremo nekega sistema, zato je njihovo delovanje neodvisno od operacijskega sistema. Ponovna namestitev programske opreme na sistem, ki je okužen s strojnim korenskim kompletom, ne vpliva na delovanje tega korenskega kompleta.


Matej Kovačič: Lansko leto ste imeli predstavitev zlonamerne kode, nameščene na mrežnih karticah. Lahko poveste za kaj gre in kaj natanko ste napravili?

Arrigo Triulzi: Bistvo strojnih korenskih kompletov (več o tem v delih Johna Heasmana, ki se je ukvarjal z ACPI korenskimi kompleti, Jasona Larsona, ki se je ukvarjal s pomnilniškimi korenskimi kompleti, predhodnimi raziskavami avstrijske skupine TESO in nedavnimi raziskavami Rutkowske o AMT korenskih kompletih) je preprosto izdelava korenskega kompleta, ki je neodvisen od operacijskega sistema, ali v nekaterih primerih celo od vrste strojne opreme.

Slednje pomeni, da korenski komplet na mrežni kartici deluje neodvisno od tega kje je ta kartica uporabljena: lahko je to IBM-ova delovna postaja, Dellov PC, visoko zmogljivo omrežno stikalo (ang. switch) ali SOHO usmerjevalnik zgrajen na MIPS arhitekturi. Dokler je mrežna kartica enaka, bo korenski komplet deloval.

Kar sem storil jaz je bilo to, da sem strojno programsko opremo mrežne kartice spremenil na način, da se odzove na zunanje ukaze in v povezavi z drugo strojno opremo na osnovni plošči (zlasti grafično kartico) omogoča vstop v posebno ukazno lupino, ki omogoča oddaljeni nadzor računalnika.

Preko te ukazne lupine je potem mogoče dostopati do sistemskega pomnilnika RAM in od tam prebrati karkoli nas že zanima (gesla, medpomnilnik tipkovnice, grafične kartice, itd.).

Nadaljevanje tega pa je vzpostavitev neposredne komunikacije med dvema mrežnima karticama, s čimer je mogoče zaobiti zaščito na požarnem zidu, saj je taka komunikacija za požarni zid v operacijskem sistemu popolnoma nevidna.


Matej Kovačič: Kako vam je uspelo namestiti svojo strojno programsko opremo na kartico? Je za kaj takega potrebna posebna oprema ali je to moč napraviti z računalnikom? Je potrebno zaobiti kakšno zaščito, npr. digitalni podpis strojne programske opreme?

Arrigo Triulzi: Kot pri vseh podobnih raziskovalnih projektih sem za začetek uporabil kar program, ki je bil priložen za nadgradnjo (t.i. flashanje) strojne programske opreme mrežne kartice, mogoče pa je tudi uporabiti bolj sofisticirane tehnike, kot je na primer nadgradnja strojne programske opreme na daljavo. Trenutna različica mojega programa preprosto pošilja podatkovne paketke ranljivim karticam in nadgradi strojno programsko opremo na njih.

Različni proizvajalci uporabljajo različne nivoje zaščite, v grobem pa lahko rečemo, da cenejša kot je mrežna kartica, slabša je zaščita. Kartice višjih razredov pogosto uporabljajo digitalni podpis s katerim preverjajo, ali je nova strojna programska oprema dejansko prišla od proizvajalca.


Matej Kovačič: Kako težko je bilo razviti takšno kodo, kakšno znanje in kakšna orodja so potrebna?

Arrigo Triulzi: Začel sem iz čiste radovednosti, s tem sem se ukvarjal kakšni dve leti, pretežno v prostem času. Pri tem sem si pomagal z znanjem mojega očeta, ki je včasih sestavljal računalnike.


Matej Kovačič: Približno, koliko delovnih ur je bilo potrebno? Oziroma koliko bi za kaj takega potrebovala kaka finančno dobro podprta kriminalna organizacija?

Arrigo Triulzi: Rekel bi, da mi je vzelo kakšnih 500 človek-ur, da sem prišel do delujoče ukazne lupine (pravzaprav je niti ne moremo tako poimenovati, saj je nabor ukazov zelo omejen). Dvomim, da bi dobro financirana kriminalna združba potrebovala kaj več časa od mene, toda treba je pripomniti, da donosnost naložbe tega truda ne opravičuje: dokler dosedanji mehanizmi (ribarjenje, virusi ipd.) delujejo, ni nobene potrebe po zapravljanju časa in denarja da bi isti učinek dosegli po strojni poti.


Matej Kovačič: Na svetu je več proizvajalcev mrežnih kartic. Koliko različnih naborov čipov je sploh v uporabi? Korenski kompleti za vsako posamično vrsto se verjetno razlikujejo. Koliko? Bi bilo mogoče razviti generičen korenski komplet za vse mrežne kartice?

Arrigo Triulzi: Kot sem povedal v svoji predstavitvi, so največji sovražnik raziskovalcev oddelki za marketing: različnih vrst čipov je na tisoče, od katerih so nekateri komajda kdaj omenjeni v OEM dokumentih zato pogosto že majhne razlike v proizvodnji mrežnih kartic povzročijo, da moja modificirana strojna programska oprema ne deluje.

Dober primer: kupil sem dva paketa s po desetimi domnevno enakimi mrežnimi karticami (z enakimi številkami modela), a z dovolj različnimi datumi proizvodnje, da sem moral razviti dve različici strojne programske opreme zanje. Spremembe so bile majhne, šele ko sem pozorneje pogledal na glavni čip na mrežni kartici sem spoznal, da gre za različne revizije istega čipa.

Bi torej lahko razvili generičen korenski komplet za vse mrežne kartice? Ne vem, lahko da bi se dalo napisati takega, ki bi delal v posamični družini čipov, podobno, kot jedro operacijskega sistema deluje (čeprav včasih ne povsem optimalno) na procesorjih od Pentiumov, do Core i7. Toda s tem se doslej še nisem ukvarjal.


Matej Kovačič: Če je mogoče na mrežni kartici poganjati lastno kodo, je mogoč neposreden dostop do sistemskega pomnilnika ...

Arrigo Triulzi: Drži, ta dostop poteka preko DMA.


Matej Kovačič: Kar pomeni, da je mogoče brati in naslavljati pomnilnik, ne da bi CPU za to sploh vedel. Kakšne so varnostne posledice tega in sploh posledice vaše raziskave?

Arrigo Triulzi: Torej, prvi varnostni problem je, da je zadeva nevidna, razen s pomočjo spremljanja prometa v omrežju. Če želiš dostopati do podatkov jih je pač treba prenesti preko omrežja, to pa je mogoče zaznati. Na drugi strani pa operacijski sistem nima nobene možnosti detekcije, razen če bi imel integriran kakšen način primerjanja trenutne strojne programske opreme z originalno.

Varnostne posledice so preprosta ekstrapolacija vsega naštetega: skratka, da je moč brati (in zapisovati) podatke v kakršnemkoli sistemu in to na način, ki je za zdaj praktično popolnoma nezaznaven.

Matej Kovačič: Kako zaznati tak napad? Zdi se, da programske tehnike zagotavljanja varnosti že dolgo ne zadostujejo več za zagotavljanje le-te ...

Arrigo Triulzi: Edini način bi bil t. i. trusted computing, če bi bil izveden pravilno in brez DRM-ja, ki ga običajno spremlja: to pomeni, da je strojna programska oprema na mrežni kartici preverjena s strani sistema in bi zato le-ta zaznal in preprečil vsako nepooblaščeno spremembo.

Najverjetneje pa ni preprostega načina detekcije po programski poti – tako primerjavo strojne programske opreme bi bilo moč prelisičiti na način, da ohranimo kopijo starih delov le-te, in ki bi jih po potrebi prikazali, če bi kdo strojno programsko opremo skušal prenesti k sebi za preverjanje.


Matej Kovačič: Kako bi bilo torej sploh mogoče preverjati ali je strojna programska oprema prava? TPM čip na vsako napravo?

Arrigo Triulzi: Načeloma tako, da bi vključili TPM na tak način, da bi bila vsaka komponenta v sistemu preverjena, tako glede varnosti kot tudi njena integriteta (poleg varnostnega pregleda bi bilo lepo vedeti, da bo nek čip kmalu odpovedal). To pa bi zelo zapletlo zagon sistema, sploh ker hitro pridemo do problema s kuro in jajcem: kateri del strojne opreme naj se zažene in v kakšnem vrstnem redu? Kako bi pravilno in še pomembneje, kako bi varno izvršili omrežni zagon računalnika (tim. Wake-on-Lan; WOL)?

Ko začneš razmišljati o tem se zaveš, da sploh ne gre za trivialno zadevo: če želimo pognati WOL paket, potem je potrebno najprej zagnati mrežno kartico, toda kako bo potem TPM preveril, da WOL paket ni spremenil mrežne kartice? Se da to preverjanje morda izvesti kasneje? Kako pa potem vedeti, da mrežna kartica ni spremenila drugih komponent sistema ali še slabše, se pri poizvedovanju TPM predstavljala za druge naprave na PCI vodilu? Paranoja tu povsem lahko seže do neba.


Matej Kovačič: Kaj pa če bi kdo že v tovarni namestil zlonamerno kodo?

Arrigo Triulzi: To je očitna nočna mora – skupaj z novim računalnikom, dobiš za Božič še prednameščeno prikrito omrežje. To je eden od primerov, ki jih vedno predstavim: nekdo pri Dellu na mrežne kartice namesti spremenjeno strojno programsko opremo tik pred božično nakupovalno mrzlico. Dell razpošlje cele kontingente PC-jev in sredi januarja imamo orjaško prikrito omrežje, ki ga po planetu distribuira DHL. Ni načina, da bi ugotovili izvor in širjenje okužbe, ker sistem sploh ne pride v stik z internetom, dokler se prikrito omrežje že ne sproži. Na to je treba gledati kot na tim. out-of-band mehanizem okužbe (gre za mehanizem okužbe, ki se zgodi izven pred tem vzpostavljenega komunikacijskega kanala, op. a.).


Matej Kovačič: Koliko pomnilnika ima mrežna kartica? Kako velika je lahko zlonamerna strojna programska oprema?

Arrigo Triulzi: Zelo, zelo malo. Zato sem moral poseči še po GPU (grafični kartici), da bi imel dovolj pomnilnika za svojo ukazno lupino. V resnici za strojno programsko opremo na mrežni kartici uporabljam najmanjšo možno količino pomnilnika, čim več podatkov oz. ukazov se prenaša preko DMA do grafične kartice. V moji prvi predstavitvi modifikacije strojne programske opreme (predstavitev je bila zaprtega tipa) sem podal oceno, da bi bilo mogoče hraniti za približno 5 sekund prestreženih podatkov, preden se pomnilnik zapolni.


Matej Kovačič: Ste že slišali za Phenoelitovo raziskavo o varnosti Ciscotovega operacijskega sistema IOS? Lansko leto so prikazali zanimiv napad na Ciscove usmerjevalnike – skozi usmerjevalnik so poslali poseben paketek, s pomočjo katerega je npr. mogoče spreminjati nastavitve požarnega zidu na usmerjevalniku.
Zdi se, da bi bilo mogoče pretentati omrežne filtre na način, da bi v podjetje pretihotapili mrežno kartico, prek nje odznotraj vdrli na usmerjevalnike in omogočili neoviran internetni dostop do pretihotapljene kartice. In potem ... meja ni več?


Arrigo Triulzi: Točno. Poznam raziskavo Phenoelitea, toda boljši trik kot tihotapiti mrežno kartico v podjetje, je prevzeti požarni zid neposredno. Če ima požarni zid ranljive mrežne kartice, lahko uporabimo nekaj, kar sam imenujem »Jedi Packet Trick«. Najprej napadalec prevzame zunanje omrežne vmesnike, nato pa preko PCI vodila še notranje in potem pošilja omrežne paketke neposredno med dvema mrežnima karticama. Ime seveda temelji na Jedijevskem Mind Tricku, ki so ga uporabljali za prelisičenje Imperialnih Stormtrooperjev (gre za izraze iz znanega filma Zvezdne steze, op. a.).


Matej Kovačič: Prejšnji mesec smo videli, da je moč zlonamerno kodo mogoče pognati tudi na Macovi tipkovnici. Joanna Rutkovska in njena skupina so pokazali, kako ranljivi so strojni hipervizorji. Katere dele strojne opreme je še mogoče zlorabiti v take namene?

Arrigo Triulzi: Torej, vse kar ima CPU: od storitvenih procesorjev (ang. service processor) (IPMI, AMT, HP iLO) do SATA diskov, SCSI vmesnikov, grafičnih kartic (na teh sem tudi sam že opravil nekaj preizkusov), mrežnih kartic in drugega.


Matej Kovačič: Da, v predstavitvi, ki jo omenjate, ste uspeli povezati grafično in mrežno kartico (preko PCI-to-PCI prenosa) in tam pognati zlonamerno kodo. To precej poveča učinkovitost napada, saj imajo grafične kartice veliko več pomnilnika, grafični procesor (GPU) pa veliko več računske moči ... Lahko to malce podrobneje razložite?

Arrigo Triulzi: Preprosto povedano, mrežna kartica ni dovolj zmogljiva, da bi služila za kaj drugega, kot za prestrezanje paketkov in njihovo preusmerjanje na drugo lokacijo preko PCI vodila. Zato je kompleksno kodo potrebno pognati nekje drugje in očitno rešitev te dileme (če izvzamemo klasično programsko opremo) predstavlja grafični procesor (GPU). Zadnje kartice tako nVidiine kot ATI-jeve so izjemno zmogljive, nVidia pa svojim prilaga še odrtokodna razvojna orodja (gre za tim. CUDA, op. a.).

Paketki torej pridejo do mrežne kartice, kjer jih moja modificirana strojna programska koda preveri in ugotovi ali gre za legitimne omrežne pakete, ki jih pošlje računalniku ali pa pa gre za zlonamerne ukaze, ki se pošljejo grafični kartici. Le-ta ukaze sprocesira in odgovor po isti poti pošlje nazaj.


Matej Kovačič: V primerjavi z raziskovanjem programskih napadov na informacijske sisteme doslej še nismo bili priča poglobljenemu raziskovanju napadov na strojno opremo. Sploh obstaja varnostno preizkušanje nove strojne opreme?

Arrigo Triulzi: V resnici ne. V tem trenutku je ta problem na plečih proizvajalcev. Domnevam pa, da vlade posameznih držav skrbijo za preizkušanje strojne opreme, na kateri tečejo kakšne bolj občutljive aplikacije.


Matej Kovačič: Morda kakšen nasvet za vse, ki so res paranoični glede varnosti?

Arrigo Triulzi: Glede na to kakšno je stanje, bi predlagal uporabo svinčnika in papirja ... No, malce bolj resno: strojni korenski kompleti so zelo seksi, vendar danes praktično nepotrebni. Zakaj bi potrebovali zapleten strojni korenski komplet, ko pa je mogoče prevzeti nadzor nad računalnikom žrtve s preprostim prikazom slike, ki vsebuje zlonamerno programsko kodo ali s pomočjo zlonamerne priponke e-pošte? Trenutno stroški razvoja strojnih korenskih kompletov niso ekonomsko upravičeni, zato se tudi ne bodo uporabljali, razen kjer so res potrebni, to pa je po mojem mnenju na področju resne industrijske špijonaže. Zato je veliko smotrneje uporabiti obstoječe zaščite in paziti da interneta ne uporabljamo brezskrbno, odjemalci elektronske pošte morajo uporabniku prikazati od tri do pet velikih rdečih obvestil, preden mu dovolijo odpreti kakršnokoli priponko, itd.


Matej Kovačič: Strinjam se. A za velika podjetja ali vladne agencije so pomembne tudi stvari o katerih sva govorila. V bistvu gre pravzaprav za vprašanje zaupanja. Na koncu dneva je pravzaprav treba nekomu zaupati – programski opremi, operacijskemu sistemu, strojni opremi. Komu zaupate vi?

Arrigo Triulzi: Kot sem že omenil, dražje kartice vsebujejo digitalno podpisano strojno programsko opremo. Če pa se nekdo odloči za nakup najcenejše kartice, obstajajo možnosti, da je eno izmed področij, kamor podjetje ni investiralo, ravno varnost. Vladne agencije navadno že imajo dostop do izvorne kode npr. operacijskega sistema Windows, za uveljavljene dobavitelje pa je zgolj rutina da večjemu kupcu dostavijo strojne specifikacije, vključno z opisom mehanizma posodobitev strojne programske opreme. Vse kar je nato potrebno storiti je, da se preprosto preveri ali strojna oprema dejansko uporablja digitalno podpisano strojno programsko opremo. Večinoma gre pa za znano zgodbo: “dobiš kar plačaš”.


Matej Kovačič: Hvala za pogovor.
Vzpostavitev v celoti šifriranega sistema

Vzpostavitev v celoti šifriranega sistema

Priporočamo, da si najprej preberete članek z naslovom: [st.povezava /clanki/07003 Šifriranje nosilcev podatkov v okolju Linux in Windows]. Opozorilo: Uporaba spodaj opisanih postopkov lahko privede do resne izgube podatkov ali do okvare sistema. V nekaterih nedemokratičnih državah je osebna uporaba ...

Preberi cel članek »

ASCII Videowall

ASCII Videowall

Gradnja takšne kuriozitete spominja na kuhanje mojstrovine. Za veščega je proces povsem enostaven, samorazviden in zabaven, za nesrečnega opazovalca pa mističen in strašljiv. Povsem po nepotrebnem, bomo rekli. Naš recept je tako sestavljen iz opisa za vešče, ki sovpada s spiskom sestavin, ...

Preberi cel članek »

Operacije s pomočjo usmerjenega ultrazvoka, vodene na podlagi magnetne resonance

Operacije s pomočjo usmerjenega ultrazvoka, vodene na podlagi magnetne resonance

Operacije s pomočjo usmerjenega ultrazvoka, vodenega s pomočjo magnetne resonance (MR-guided Focused Ultrasound Surgery - MRgFUS) so razmeroma novo področje v medicini oz. kirurgiji, ki bodo v prihodnosti morda prinesle številne prednosti v primerjavi s klasično kirurgijo. Usmerjen ultrazvok je nova ...

Preberi cel članek »

Varnost slovenskih GSM omrežij

Varnost slovenskih GSM omrežij

V članku so predstavljeni rezultati varnostne analize slovenskih GSM omrežij, ki smo jo opravili v prvi polovici leta 2012. Namen članka je opozoriti na varnostne ranljivosti v slovenskih GSM omrežjih z namenom, da se varnostne ranljivosti odpravijo, posledično pa se poveča stopnja varnosti in zasebnosti ...

Preberi cel članek »

Napadi na delovni pomnilnik

Napadi na delovni pomnilnik

Delovni pomnilnik ali RAM (Random Access Memory) je del računalnika, v katerem se začasno shranjujejo podatki. Podatki v RAM pomnilniku naj bi se po izključitvi računalnika iz napajanja izgubili, vendar bomo v nadaljevanju videli, da to ne drži povsem. Poleg tim. "običajnega" delovnega pomnilnika, ...

Preberi cel članek »