Kunagi aastate eest tabas mind üllatusena, et meie väga levinud sakilised uksevõtmed ei ole turvalised: tuleb toorikule käiata kõige sügavama lõikega sakid ja sellega muugid lendu koputada. Arvutimaailm üllatab selliste momentidega pidevalt.

Käesolev arvutiturva-aasta algas ühe õhinas võrgukasutaja täheldusega, et Windows ja Linux on viimase poolaastaga praktiliselt identsed täiendused saanud, sealjuures puudub sel avalik põhjus.

Turvarahvale vaieldamatult põnev müsteerium lõppes eile, mil tõmmati saladuseloor kahelt embargostatud haavatavuselt, sest spekulatsioonitorm hakkas käest minema.

Meltdown

Esimene neist nimetati ähvardava sõnaga Meltdown. Viimast vast viitena reaktorituuma sulamisele. Lühidalt: viimase 20 aasta jooksul toodetud Inteli protsessoritele on võimalik sööta opsüsteemile reserveeritud käske ning need täidetakse kiiruse huvides ennetavalt isegi siis, kui programm selleks piisavalt tähtis pole. Ühtlasi on fantoomkäskude tulemused võimalik enne turvatõkke käivitumist protsessorist pihta panna. Inimkeeli tähendab see, et segadusse aetud arvuti laseb kõikidel programmidel lugeda kogu infot, mis arvuti mällu on talletatud.

Las too esimene jätkab Inteli aktsiahindade kõigutamist, sest esitasin endale väljakutse selgitada arusaadavalt, milles see teine haavatavus seisneb.

Spectre

Spectre ehk tont on tõend sellest, kuivõrd veidratesse teadmistesse peab mõnikord arvutite turvamiseks süüvima.

Üks suurtest väikestest valedest, mida ülikoolis tudengitele õpetame, on see, et arvuti protsessor täidab käske järjest. Tegelikkuses on aga nii, et protsessor kõigest püüab tudengitele vastavat muljet jätta: kiiruse huvides täidetakse käske läbisegi, arvestades käskude omavahelisi sõltuvused ning tõstetakse pärast see segapuder tulemuseks kokku.

Protsessor kaardilugemiseks ei peatu

Sealjuures ei raiska protsessor aega ka neis kohtades, kus tuleb otsustada, kas joosta piltlikult paremale või vasakule ja samaaegselt käib kõrvalkabinetis alles arvutamine, et kumb suund siis täna võtta tuleks. Neis hargnemispunktides vaadatakse kiiresti tabelist, kas sama programmijupikest on hiljuti täidetud ja tehakse sama hüpe, mis varem samas kohas tehti. Mulle sama, mis eelminegi kord!

Kui otsus õigesti langes, on spekuleeritud tulemused kohe kasutatavad; kui selgub, et arvutati tühja, pannakse kogu konveier korraks seisma ja võetakse mälu järgi sealt hargnemiskohast uuesti. Ilma tolle mainitud tabelita pidanuks protsessor selle aja lihtsalt maha ootama.

Ründaja tagab ebatõenäolised sündmused

Tuleb välja, et sellist spekulatiivset käivitamist saab tõsiselt kiusata. Kõigepealt püüab ründaja protsessorile sööta piisavalt andmeid, et protsessor peab programmi andmetele "kaugele" ehk operatiivmällu järgi minema. See võtab piisavalt aega ja protsessor teeb teelahkmel valiku, vaadates eelmainitud spekulatsioonitabelisse.

Hiljem, kui need seisakut põhjustavad andmed lõpuks protsessorisse kohale jõuavad, selgub, et spekulatsioon ebaõnnestus ja alustatakse kära tõstmata uuesti.

Paraku suutis ründaja just luua olukorra, kus pahatahtlikult valitud andmed käivitati ennetavalt täiesti vales harus. See on protsessorile muidugi tavaline asi: taastatakse valikueelne seis ja jätkatakse tööd, nagu midagi poleks juhtunud.

Midagi siiski juhtus.

Täpse stopperiga (mis on arvutis täiesti olemas) saab mõõta tolle hävitamisele kuuluva fantoomharu mõju protsessori vahemälule. Kui tont käis külas, on salaandmed riiulist hetkega leitavad. Kui tont külas ei käinud, kulub nende otsimisele rohkem aega. Selle erisusega lekitatud info saab järjekindel ründaja hiljem ühtseks pildiks kokku laduda.

Säärast tüüpi rünnak on katseliselt läbi viidud ka brauseris: laboritingimuste väliselt rünnakuks komplekteerituna tähendaks see olukorda, kus loete rahulikult uudiseid, ja keegi näitab seal kõrval reklaami, mis ühtlasi püüab brauserist teie Gmaili sisselogimiseks tarvilikku infot ära näpata.

Spekuleerimistabelit vaadatakse vilksamisi

Spectre'i teine kole tõdemus on see, et spekuleerimistabel on tehtud vilksamisi vaatamiseks. Sisuliselt eristab protsessor hüppeid vaid programmikäskude "isikukoodide" lõppude abil. See omakorda tähendab, et programmikäskudel on "teisikud": ründajal on võimalus hüppetabel oma programmi abil ära mürgitada.

Sealjuures täidab protsessor tolle mürgitatud tabeli hüpped ignoreerides kasutajaõiguseid, programmide õiguseid ja ka virtualiseerimist. See viga teeb ründaja elu üsna luksuslikuks, sest ei pea otsima sihtprogrammi vigu, vaid võib oma vead ise kaasa anda.

Totter lugu on siinkohal see, et programmeerijatel on kõigi nende programmide täitmist kiirendavate funktsionaalsuste üle väga kaudne kontroll.

Elu läheb edasi

Jätaks protsessori siseelu. Lihtkasutajal pole otseselt midagi uut vaja karta: ründed kuidagi üle võrgu päris ise ei tule. Brauserid (Chrome ja Firefox) muutsid ennetavalt oma stopperid veidi ebatäpsemaks, et aja mõõtmisel saadud lisainfo kasutuks muuta.

Algul mainitud Windowsi ja Linuxi turvapaigad peaks saabuma lähipäevil. Nad muudavad aktiveerimisel arvuti aeglasemaks ja kaitsevad riskide eest, mille realiseerumise tõenäosus ei ole kuigi suur. Ometi on neid tarvis keskkondadele, kus riskide realiseerumine on tänu ründajate olemasolule täiesti kindel.

Amazon ja Google peavad täiendama oma serveriparke: tõenäoliselt teevad sama ka meie kohalikud teenusepakkujad.

Mainisin algul neid sakiliste võtmetega lukusüdamikke: miskipärast on nad ikka üldlevinud ja harjumuspärased. Miskipärast läheb elu ikka edasi, nagu ühiskond oleks otsustanud võtta mingi kollektiivse riski.

Tont meie arvutites on natuke sarnane: ilmselt võetakse see kollektiivne risk ja kunagi tulevad paremad protsessorid uute põnevate riugastega.