Pseudo-juhuslikke ideid riistvaraliste tagauste teemal, episood 1

Julian Assange’i tsitaat: “At any point, where You could guess, are they doing this or are they not doing it, they are doing it.”

random

random generaator

Andrew “bunny” Huang’i tsitaat: “A few years ago, if someone presented You a scenario, where perhaps You’re worried about Your hardware being modified as it is being shipped to You, they’d say You’re crazy, You should have a tin-foil hat, turns out, that, a, You’re not that crazy. There’s actually evidence lately, a, that it does happen. …. If You can’t hack it, You don’t own it. ”

Sellisel taustal saab oletada, et ükskõik kui vandenõuteoreetiliselt see ka ei kõla, tagauksed, mis on teoreetiliselt võimalikud, minusuguse turva-diletandi pooltki ettekujuteldavad, on tõenäoliselt praktikas kasutuses. Järgnevalt kirjeldan võimalikke riistvara-tagaukse-realisatsioone ning ühte mõtet, mida nende “vastu”, täpsemalt öeldes, leevenduseks, ette võtta.

Tagauks osutub üpris kasutuks, kui selle “legitiimne” kasutaja sellest midaig läbi ei saa liigutada. “Õnneks” on võimalik morse-koodis, peenemalt öeldes, aeg-multipleksimisega, steganograafiliselt läbi pääseda väga paljudest tõketest, sealhulgas ruuteritest. Piltlikult selgitades, kui inimene_A hoiab käes lõngakera (avalikult veebiserverilt serveeritavat kodulehekülgede ja JPEG-failide kogumikku) ning inimene_B ei saa muud teha kui vaid inimese_A käes olevat lõngakera lahti kerida, tõmmates lõnga “nöörina” enda poole, siis inimeste A ja B vahel eksisteerib kahesuunaline infokanal, sest inimene_A saab enda käest lahti rulluva, inimese B poole liikuva, lõnga külge mõne marker-vildikaga jooni tõmmata, mis koos lõngaga jõuavad inimese B-ni, ning inimene B saab lõnga inimese A käest enda poole tõmmata morsekoodis, aeg-multipleksimisega. Korporatiiv-võrgu terminites: nagu LAN’ist (inimene_B) saab läbi ruuteri esitada WAN’i (inimene_A) päringuid, kasvõi ainult korporatiivselt heaks kiidetud ja pahalaste kontrolli alt väljas olevatele URL’idele, nii on võimalik kahesuunaline liiklus LAN’i ja WAN’i vahel. Praktikas on elu kohati märksa lihtsam. Näiteks, kui satute kuidagi kokku puutuma laus-idiootse olukorraga, kus Te ei saa firma-poliitikast johtuvalt kodunt või komandeeringus olles oma kontori-arvutisse otse SSH-ühendust luua, siis piisab, kui Te panete oma kontori-arvutisse tööle cron‘i, mis õmbab tööle bash-skripti, mis tõmbab wget’iga mõnelt Teie valduses olevalt kodulehelt alla GNU Pricacy Guard’iga signeeritud teksti, kus on kirjas IP-aadress ja port, kuhu Teie kontori-arvuti LAN’i poole pealt väljuva ssh-toru peab tekitama. Ja oletegi terminaliga oma kontori-arvutis, sõltumata korporatiiv-poliitikast. Oluline on vaid, et Teie SSH-ühenduse liiklus ei toimuks ajal, mil see korporatiiv-võrgust väljuva liikluse vähesusega, näiteks öösiti, statistikas silma jääb või kuidagi muud moodi võrguadministraatori silmis tähelepanuväärseks osutub. Võibolla õnnestub cron’iga maskeerimiseks kasutada regulaarselt mingit SSH-põhiseid turvauuenduste alla-laadimist, et võrguadministraatorit nende ühendustega harjutada, uinutada. (Antud cron’ipõhine taga-ukse skeem ei ole minu välja mõeldud vaid ma õppisin seda ühelt oma kunagiselt kolleegilt, kes komandeeringutes olles täiesti oma legitiimse töö tegemiseks sarnast skeemi idiootlikest korporatiiv-poliitikatest mööda põiklemiseks kasutas.)

Ühesõnaga, isegi ideaalselt töötavad ja ruuteri omaniku kontrolli all olevad, kräkkimata, ruuterid, tõenäoliselt ei suuda takistada LAN’is sees oleva pahavara kommunikatsiooni üheski suunas. Tõenäoliselt saab sarnast skeemi kasutada ka olukorras, kus ruuteri asemel on operatsioonisüsteem ning pahavaraks on mingi kombinatsioon riistvaras riistvaralises või sardvaralises vormis olevast pahavarast ja kasutajaruumis jooksvast pahavarast, mis siis omavahel kuidagi moodi kommunikeerida üritavad. Edasine arutelu on teemal, mida on pahavaral kommunikatsioonikanalitega peale hakata.

Kuna avalikus dokumentatsioonis puudu olevad CPU-käsud jäävad binaarides olles viirusetõrjele tõenäoliselt kiiresti vahele, siis avalikult mitte-dokumenteeritud CPU-käskude, operatsioonikoodide, asemel on otstarbekas kasutada “koputuspõhist” lahendust. Koputuspõhine lahendus baseerub spioonifilmidestki tuntud ideel, et uks avatakse vaid siis, kui uksele on koputatud teatud rütm. CPU korral võiks rütmiks olla mõni süütu, paarituhandeline, optimeerituse poolest natukene absurd ja seetõttu pahavaravabas tarkvaras vähemtõenäoline, CPU-käskude jada, stiilis: NOP-ADD-NOP-NOP-ADD ja piruetiks täisarvu ületäitumine. Mõnikord kasutatakse isegi masinat kaitsva turvameetmena TCP-IP-portide avamist koputuse peale: pordid on suletud kuni hetkeni, mil nende peale on “parooliks” vastav rütm koputatud, pakette saadetud. Seega, testidega on tagaukse koputuspõhise API tuvastamine niivõrd ebatõenäoline, et selleks pole praktiliselt mingeid šansse. Muude, digitaal-liidesega mikroskeemide korral (USB-kontrollerid, võrgukontrollerid, jne.) pole isegi nii keerukat lahendust vaja, piisab spetsiaalsest operatsioonikoodist. Majanduslikult täiesti realistlik lahendus on ka mõnda kriitilisse mikroskeemi (CPU, põhjasild, RAM, jne.) NFC-tehnoloogial baseeruva API-ga tagaukse lisamine. Paljudes masinates on tänapäeval WiFi ja BlueTooth’i kiibid olemas, millega peaks olema võimalik kasutajaruumis tegutseva programmi abil koputustööd teha küll. Kasvõi JavaScript’ist, üle AJAX’i, pakette välja saates. Kui võrguühenduseks on WiFi ning JavaScript’is saab AJAX’i päringuid natukene, teatud piires, siiski ajastada, sealhulgas saadetavaid andmeid ise valida, siis peaks ju kõik vajalik olemas olema, rääkimata siis raadiosaatjatega varustatud droonidest.

Mis puutub API funktsionaalsusse, siis lisaks mikroskeemi läbikõrvetamisele on võimalik panna mikroskeem magamisrežiimi viisil, et magamisrežiimist väljutakse alles pärast N’i voolupõhist resetti. Kavalam variant on mälupiirkondade kaitse maha-võtmine, et kasutajaruumist pääseks kerneliruumi mälupiirkonda lugema-kirjutama. Miks mitte ka virtualiseerimispiirkondade vahelisi “seinu augustada”. Fakt on, et elegantseimad viirused soovivad märkamatuks jääda kasvõi põhjusel, et masina kokku-varisemisel ei õnnestu masinast andmeid lugeda ja “koju” saata.

Jacob Appelbaum käis välja idee, et jube tore oleks, kui kogu arvuti sardvara, võibolla ka riistvara, kohta saaks arvutada mõne kontrollsumma, räsi, kontrollimaks, et kas postipakiga kohale saabunud arvuti on ikka see, mida tootja tarnis ning ega pahavara selle erinevate seadmete sardvara (“firmware”) arvuti kasutuses oleku jooksul muutnud ole. Hetkel (2014_07_20) ma ei suuda seda ette kujutada, kuidas sellist asja realiseerida üldse saaks, sest isegi FPGA-põhistel arvutitel on puudus, et FPGA-sse laetava bitijada kood võib sarnaselt tarkvara-arendajate koodile autorile endale märkamatult kompromiteeritud saada. Jacob Appelbaum kirjeldas lahendust, kus Debian’i binaaride publitseerimisel erinevad serverid laevad koodi alla, uurivad, ideaaljuhul verifitseerivad, koodi ning korrektseks tunnistamise korral signeerivad oma leiud, realiseerides keemialaborite korral kasutuses oleva mudeli, kus sama proov saadetakse erinevaisse keemia-laboreisse ning siis hiljem võrreldakse erinevate keemia-laborite analüüsi-tulemusi. Paraku näib vrifitseerimistehnoloogias hetkel 2014_07_20 avatud tarkvarast arenenuim lahendus olevat K-framework ning muud analüüsivahendid vajavad tõenäoliselt mahukat kohaldamist (ma ei tea, ma pole seda veel proovinud), kuid väidetavalt olevat arenduses Gitian -nimeline projekt, mis pidavat sarnases suunas liikuma. Teisisõnu öeldes, isegi kui kasutada on 100% avatud riistvara, RAM’ist kõvaketta krüptimise võtme lugeise ründe vastumeetmena on mälukontrolleriks FPGA, mis masina buutides genereerib ajutise võtme ja kogu RAM’i sisu reaal-ajas krüptib, on ikkagi vaja automatiseeritud auditeerimis-töövahendeid, mille seis, sarnaselt FPGA-seadistus-bitijadade kompilaatoritele tasapisi paraneb.

Strateegiana pakun välja idee, et inimesed, kes ise riistvara-arendusega ei tegele, võiks proovida koostada omale maitse-ainete-riiuli sarnase kollektsiooni erinevaist arvutitest ning nende arvutite jaoks vaja minevaist operatsioonisüsteemi distributsiooni-koopiatest (CD, DVD, USB-pulgad, mälukaardid, jne.). Tont seda teab. Võibolla üheks, võibolla varjatud, põhjuseks, miks Tartu Ülikooli üks prominentsemaid turva-gurusid, Meelis Roos, arvutimuuseumiga tegeleb, ongi midagi sarnast ja mina olen jälle see loll, kellel järjekordselt pikad juhtmed on. Pigem hilja kui mitte kunagi. :-D

3 arvamust “Pseudo-juhuslikke ideid riistvaraliste tagauste teemal, episood 1” kohta

  1. Toimetajale minu kompliment koomiksi eest. Nii suletud kui avatud riistvara korral näib hetkel (2014_07_20) tõesti olukord olevat selline, et ainuke viis teada saada, kas on taga-uksega või mitte, on teada, kuidas asi “kokku keedeti”. :-D

    • Vabandust topeltpostituse pärast, kuid unustasin nii artiklis kui eelmises kommentaaris mainida, et võibolla üks lihtsaim viis FPGA-põhiste arvutite ehitusega eksperimenteerimiseks, näiteks FPGA koodi arendamiseks ning uurimaks, kuidas enda versiooni oleks parem teha, on osta mõni täiesti valmis FPGA-arvuti. Mõned näited (ajahetkel 2014_07_20):

      1GiB DDR2 tüüpi integreeritud RAM’iga mudel;

      64MiB SDRAM’iga mudel;

      Gigabit-võrgutoega, 256MiB DDR2 SODIMM’iga mudel;

      Ligikaudu 500MiB integreeritud DDR2 RAM’iga mudel;

      HDL-kompilaatoritena tuleb tõenäoliselt kasutada vaid tootjate poolseid, suletud, lahendusi, kuid mulle näib, et praktiliselt kõigi FPGA-tootjate, enamik USA tootjad (nii “konkurentsivõimeline” Euroopa riistvaratööstus siis ongi), kompilaatorite tasuta versioonid toetavad vaid kõige väiksemaid FPGA-sid, s.t. võimekamate FPGA-de kasutamiseks leidub enamasti vaid FPGA-tootja enda, monopoolne, kompilaator, mille litsensi eest tahetakse räiget raha. Ma ei ole uurinud, kas minu poolt antud kommentaaris mainitud FPGA-arvutid on üldse tasuta litsensiga HDL-kompilaatoritega arendatavad.

      Tänan lugemast. :-)

  2. Kuna ma siin artiklis kirjeldan plaani, kuidas kogu tollesse riistvara teemasse suhtuda ning mida sel teemal ette võtta, siis ehk sobib siia ka viide mu blogipostitusele pealkirjaga An idea About Group Relationships, Episode 0, kus ma kirjeldan ühte mõttekäiku, mis on ehk täienduseks minut.ee all varem välja käidud ideele, et rahu tagab vaid võimude tasakaal ehk “kui tahad rahu, valmistu sõjaks”. Iroonilisel kombel on USA põhiseadusega seonduv fraas siin “checks and balances“.

Kommenteerimine on suletud