Zanimiv napad na kontroler trdega diska
poweroff
11. avg 2013 ob 17:21:28
Jeroen Domburg, znan tudi kot Sprite, je na svoji spletni strani objavil zanimiv članek v katerem opisuje razvoj zlonamerne programske opreme za kontroler trdega diska. Kot je namreč znano, je kontroler trdega diska vmesnik med računalnikom in trdim diskom, oziroma del trdega diska, ki skrbi za fizično branje in zapisovanje podatkov iz oziroma na trdi disk.
Domburg se je podviga lotil z 88i9146 kontolerjem Western Digital 3.5" 2TB trdega diska. Priključil ga je na JTAG vmesnik ter ugotovil, da vsebuje tri ARM procesorje. Dva sta tipa ARM9, eden pa Cortex-M3. Nekaj raziskovanja je tudi pokazalo, da je Cortex-M3 mogoče izključiti, pa trdi disk kljub temu ohrani polno funkcionalnost. Kar pomeni, da ta ARM procesor ne počne nič (ali pa morda kaj prav posebno neopaznega).
Domburg je nato v nadaljevanju na kontroler preko JTAG vmesnika naložil svojo strojno programsko kodo (ang. firmware), ki je spreminjala podatke pri branju iz trdega diska. Da pa bi spremembe ostale trajne, je bilo to programsko kodo potrebno naložiti na tim. bliskovni bralni pomnilnik (ang. flash ROM). Domburg si je pri tem najprej pomagal s programatorjem, vendar ta postopek zahteva, da bliskovni bralni pomnilniški čip najprej odlotamo iz kontrolerja, ga priklopimo na programator, nanj naložimo svojo programsko kodo in ga potem prilotamo nazaj na kontroler.
V naslednjem koraku je nato skušal ugotoviti, ali bi bilo na bliskovni bralni pomnilnik mogoče podatke zapisati kar s pomočjo namenske aplikacije, preko računalnika. Malce raziskovanja je pokazalo, da Western Digital dejansko omogoča tim. flashanje svojih trdih diskov. Našel je tudi članek Ariela Berkmana o skrivanju podatkov na tim. rezervirane sektorje trdega diska ter posebno Linux orodje za nastavljanje obnašanja trdega diska v času mirovanja (gre za idle3-tools). To mu je na koncu omogočilo zapis svoje lastne programske kode na kontroler trdega diska kar s pomočjo posebne aplikacije, ki jo je pognal na računalniku.
V nadaljevanju je nato svojo strojno programsko kodo modificiral tako, da je spreminjala podatke, ki jih je računalnik prebral iz trdega diska. Konkretno, je njegova strojna programska koda spreminjala vsebino prebrane /etc/shadow datoteke. V tej datoteki se namreč nahajajo tim. zgoščene vrednosti (ang. hash) gesel uporabnikov Linux sistema. Namesto prave vsebine datoteke je modificirana strojna programska koda računalniku pošiljala vnaprej pripravljeno vsebino, vendar pa se je ta mehanizem aktiviral šele po tem, ko je kontroler trdega diska prejel tim. magični niz podatkov (s strani napadalca vnaprej pripravljeno zaporedje znakov), ki je zlonamerno programsko kodo aktiviral.
V praksi je torej napad mogoče izvesti na sledeč način. Napadalec pridobi neavtoriziran oddaljeni ali fizični dostop do ciljnega sistema ter na kontroler njegovega trdega diska naloži zlonamerno strojno programsko opremo. Če napadalca kasneje odkrijejo in na računalnik namestijo povsem svež operacijski sistem, lahko napadalec preko te zlonamerne strojne programske opreme ponovno pridobi dostop do sistema. Na sistemu z magičnim nizom podatkov najprej aktivira svojo programsko kodo (npr. na cilji sistem pošlje spletni zahtevek (zapiše se na disk v dnevniško datoteko spletnega strežnika!) ali e-pošto (zapiše se na disk v uporabnikov poštni predal!)), nato pa se v sistem prijavi kot administrator (oz. root) svojim (vnaprej pripravljenim) geslom. Računalnik bo vpisano geslo preveril tako, da bo iz njega izračunal zgoščeno vrednost ter le to primerjal s tisto, ki jo ima shranjeno na disku. In ko bo disk to zgoščeno vrednost prebral, jo bo zlonamerna strojna programska koda lepo potihem zamenjala s svojo (lažno) ter jo posredovala računalniku. Prijava v sistem bo seveda uspešna. In to ne glede na vse antiviruse, SELinux, AppArmor, IDS sisteme in druge programske igračke.
Strojna programska koda na kontrolerju trdega diska pa lahko zazna tudi forenzično kopiranje diska (sekvenčno branje podatkov!) ter v tem primeru prične pošiljati lažne (npr. naključne) podatke. Na tam način si je mogoče pripraviti disk, ki ga ni mogoče forenzično kopirati oz. kloniranti, ob običajni rabi pa deluje povsem normalno. Nekaj podobnega je sicer na 29C3 konferenci decembra 2012 pokazal že Travis Goodspeed, ki je razvil USB ključek z imenom Facedancer. USB ključek zna zaznati tako forenzično kopiranje, kot tudi v katerem operacijskem sistemu ključek uporabljamo (npr. v okolju windows bo ključek prikazal drugačne podatke kot v okolju Linux).
In čisto za konec. Kontroler trdega diska je v resnici čisto pravi računalnik v malem. Nanj je torej mogoče naložiti tudi lasten operacijski sistem. Domburg je tako za dokaz, da je to mogoče, na svoj trdi disk - dobesedno - naložil Linux. Reč se sicer ne zažene do konca, a vseeno dovolj, da si lahko predstavljamo kako zmogljiv kos strojne opreme je pravzaprav kontroler trdega diska.
Članek je vsekakor nadvse zanimiv iz tehničnega stališča, a v dobi po Snowdenovih odkritjih tudi informacijsko manj podkovanega bralca ne bo pustil hladnega. Vprašanje namreč ni samo ali zaupate svojemu ponudniku elektronske pošte. Vprašanje je tudi ali zaupate svojemu trdemu disku ali USB ključku. Da o mrežnih karticah niti ne govorimo.