14. nädal // "Keep IT Simple, Stupid"


IT süsteemi suurim turvarisk on selle keerukus ning inimese piiratus IT süsteemi ja selle keerukuse tajumisel. Keerukusrisk avaldub esmalt inimese kirjutatud koodi puudustes ja defektides, mis juba vähegi suurema meeskonnatöö puhul toob kaasa selle, et isegi tarkvara loojad ei mõista kõiki programmi toimimise eripärasid. Kuid isegi kõige töökindlam tarkvara töötab alati koos teiste komponentidega. Armutu tõenäosusteooria toob koostalitavate komponentide puhul kaasa riskide korrutamise ning multikomponentse süsteemi kahaneva töökindluse ja turvalisuse.

Ka jumalad eksivad

2018. aastal mõistis USA grand jury Vene Föderatsiooni Relvajõudude Kindralstaabi Sõjaväeluure (GRU) 8 ohvitseri tagaselja süüdi küberrünnakutes USA erinevate valitsusasutuste vastu. Erinevad GRUga seotud löögiüksused – Cozy Bear ja Fancy Bear – olid edukalt sisse murdnud mitmetesse USA valituse või parteidega seonduvatesse IT-süsteemidesse, varastanud sealt miljoneid kriitilise tähtsusega dokumente ning nendega varustatult paisanud USA poliitika kaosesse, mis päädis Donalt Trumpi valimisega presidendiks.

Mõistagi tekkis küsimus, kuidas võis USA tõsikindlalt väita, et just need GRU ohvitserid olid rünnakute taga? Cozy & Fancy Bear ei olnud ju kamp amatööre – tegemist oli maailma tipptasemel kübersõdalastega, kelle töömetoodikas oli kesksel kohal parimad võimalikud tehnikad oma päritolu ja tegutsemismeetodite varjamiseks. Tegemist oli ja on kübermaailma isandate, mustade röövparunitega, kes liikusid mängleva kergusega ühest võõrast süsteemist teise, kelle ees ei olnud kaitstud ükski kübersaladus ning kes tundsid keeruliste süsteemide toimimise peensusi paremini kui keskmine inimene oma viit sõrme.

Hollandlased olid maailma parimad kübersõdalased ära häkkinud. USA teadis ründajate isikuid ja nende töömeetodeid, kuna Hollandi pisike luureteenistus AIVD andis CIA-le infot Cozy Bear tegevuse kohta. Esialgu ei teadnud ka AIVD, et nad on poolkogemata sisse murdnud kardetud GRU enda salajasse varakambrisse – Moskvas Punase väljaku servase asunud teadusasutusse, mis oli GRU küberründeüksuse varjatud fassaad. AIVD suureks üllatuseks – ja GRU suureks piinlikuseks – ei pääsenud hollandlased ligi mitte üksnes Cozy Beari IT-süsteemidele, vaid ka turvakaameratele ning nägid reaalajas kõiki hoonesse sisenevaid ja sealt väljuvaid inimesi. Kriitilistel hetkedel juhendasid hollandlased CIA-d reaalajas GRU teostatavates ründeoperatsioonidest ning aitasid seeläbi nurjata keerukad ründeoperatsioonid USA Välisministeeriumi vastu.

Kõik lõppes niisama ootamatult kui see algas. Avalikel andmetel jälgisid hollandlased GRU tegevus 1-2,5 aastat. Ühel päeval kõik lõppes. Ligipääs oli lõppenud. Hollandalased ei saanudki teada, mis juhtus. Kas nad avastati? Kas vahetati tulemüüri? Toimus tulemüüri püsivara uuendus? Ei tea. Samamoodi jääb müsteeriumiks, kuidas lasid maailma ühed tugevamad küberründajad teise riigi luureteenistustel peaaegu sisse komistada oma salajastesse süsteemidesse? Kuidas oli võimalik, et IT rünne võimaldas ligipääsu turvakaameratele? Kas keegi GRUs üldse mõistis, mis nende süsteemides toimus?

6. mail 2010.a. tabas USA aktsiabörse 36 minutit väldanud krahh. „Flash Crash“ pühkis mõne minutiga Dow Jonesi väärtusest 9 % ja koos teiste suuremate indeksitega kaotati trillion dollarit, et need mõnekümne minuti pärast tagasi teenida. Mis juhtus? Algus oli klassikaline – keskmisest nutikam kaupleja tegi mõningaid manipulatiivsed tegevused, mis 2015.a. talle ka väärtpaberipettuses süüdistuse tõi. Kuid järgnenu oli kõigile üllatuseks – finantsvõlurite poolt välja mõeldud ja kõrgeimalt tasustatud IT-spetsialistide poolt loodud kauplemisalgoritmid hakkasid toimima isetahtsi, kontrollimatult ja viisil, mida nende loojad ei osanud ette näha. Ostmine ja müük toimus inimmõistusele arusaamatu kiirusega, inimmõistusele arusaamatu loogikaga, kindlasti teisiti, kui süsteemi loojad seda silmas pidasid. Jällegi, mis toimus? Mängus olid miljardid ja trillionid. Kas need inimesed tõesti aru ei saanud, kuidas nende loodud algoritmid toimivad?

Tuleb välja, et ei GRU ega Wall Streeti finantsvõlurid ei mõistnud, kuidas nende süsteemid toimivad ja kuidas nende oma süsteeme ja loodud tarkvara ootamatuse või välise ründaja vastu kaitsta. IT maailm on muutunud liiga keeruliseks, eksimine on muutunud vältimatuks ka maailma kõige tugevamate eriteenistuste ja rahakamate ettevõtete jaoks. Miks? Kuidas nii?

Eksimine on inimlik

IT süsteemi ehituskivi on programmi koodirida. Erinevatel aegadel on erinevad teadlased uurinud koodi kvaliteeti. Enamasti on leitud, et 1000 koodirea (LOC) kohta esineb 15-50 viga. Microsoft on hinnanud, et kirjutatud koodis on 10-20 defekti 1000 LOCi kohta ja põhjalike testimistega on klientideni jõudvas koodis vigade arv suudetud viia 0,5 defektini 1000 LOC kohta. Parimate tehnoloogiate kasutamisega on teadlased suutnud vigade arvu vähendada 0,1 defektini 1000 LOC kohta, kusjuures vaid ülimalt kriitilistes projektides – nt USA kosmosesüstiku programm – on suudetud vead sisuliselt elimineerida: väidetavalt on erinevate vaevanõudvate meetoditega viidud vigade arv 500 000 LOC puhul 0-ni.

Tundub suurepärane tulemus? Kuid moodsad tarkvarad on kasvanud ülimahukateks teosteks – Windows XP 40 miljonit koodirida (LOC) on Windows 10 puhul kasvanud 50-65 miljoni LOC-ini. Ka Linux ei ole märkimisväärselt õhem – hinnanguliselt on Linuxi kerneli maht 15 miljonit LOC-i, kuid Windows 10-ga võrreldava funktsionaalsusega Ubuntu mahuks hinnatakse üle 50 miljoni LOC-i. Linuxi puhul tuleb arvestada veel jooksva arengu ja pideva kasvuga – ainuüksi 2017.a aasta jooksul lisati Linuxi kernelile 3,9 miljonit LOCi ja eemaldati 1,4 miljonit LOCi ja kokku kasvas kernel 2,5 miljoni LOC võrra.

Seega kui aluseks võtta ka kõige optimistlikum stsenaarium, et meie kõigi arvutites jooksev tarkvara on kõrgekvaliteediline – 0,1-0,5 defekti 1000 LOC – kohta, siis on juba ainuüksi Windows 10 mahuga tarkvaras 5000-25 000 viga, mis mõjutavad meie arvuti toimimist, selle ettenähtavust ning seega ka turvalisust. Kui uskuda, et Linux on oluliselt parema koodikvaliteediga, siis isegi 10-korda parema kvaliteedi puhul on ka Ubuntus 500-2 500 väiksemat või suuremat defekti. Sest kõik programmid on kirjutanud inimene ja inimene eksib.

IT süsteem kui pimedate rajatud Paabeli torn

Kunagi esitasid inimesed Jumalale väljakutse ja soovisid ehitada torni, mis ulatuks taevaste valdadeni, otse jumalariiki. Jumalale selline jultumus ei meeldinud ning plaanide nurjamiseks andis ta inimestele erinevad keeled – keelte erinevuste tõttu ei mõistnud Paabeli torni ehitanud inimesed enam üksteist ning torni rajamine jäi soiku. Keskmine IT-süsteem ja eriti moodne internetipõhine omavahel koostoimiv IT süsteem on omapärane Paabeli torn: jumal on pannud selle loojatele suhu erinevad keeled ja pähe erinevad mõtted, kuid erinevalt originaalsest Paabeli torni ehitajatest ei ole IT-inimesed lasknud ennast segada ning nii see torn vonkleb ja tõuseb võbeledes taeva poole, tuul aukudest ja avadest sisse ulgumas.

IT süsteemi fundamentaalne ehituskivi on küll koodirida, kuid ühe suurema süsteemi loomisel tuleb mitmete erinevate spetsialistide koostöös disainida, rakendada ja käigus hoida ääretult kompleksseid ja inimmeeltele vahetult mittetajutavaid IT-süsteeme. Ühe inimese poolt loodud süsteemi puhul võiks teoreetiliselt loota, et üks inimene teab süsteemi toimimise eripärasid algusest lõpuni ning suudab tagada, et erinevad tarkvara osad toimivad koos vastavalt kavandatule. Tänapäeval on vähe (kui üldse) olulisi tarkvarasid, mille on algusest lõpuni disaininud, loonud ja käiku lasknud üks inimene. Enamasti luuakse tarkvara aga meeskonnatööna. Näiteks Windows 7 loomisel oli ametis 1 000 inimest. 1000 inimese juhtimine ja veatu koostoimimise tagamine oleks suur ime, mistõttu võib pidada tõenäoliseks, et vaevalt, et enamus sellest tuhatkonnast lõpuni terviktoote funktsionaalsust teadis ja tundis ning küll pillati projektis osalenud 23 töögrupi omavahelises suhtluse maha mitmeid palle, mis lisasid juba paratamatutele LOC-ide defektidele uusi ja ootamatuid komponentide koostalituse häireid ja anomaaliaid. Seetõttu võib eeldada, et ühes keskmises tarkvaras on lisaks defektse koodi vigadele veel kümneid kui mitte sadu komponentide omavahelise koostoimimise eripäradest tekkinud anomaaliaid ja spetsifitseerimata käitumisviise.

Tarkvarakoodi kirjutamisel ning meeskonnatöö loovates tingimustes suure arenduse komplekssusest tulenevalt on võimatu luua vigadeta tarkvara. Kuid kõik vead ei ole turvaaugud ega too kaasa häireid süsteemi toimimises või on süsteemid disainitud väiksemaid vigu ületama. Seega võiksime ju olla rahul, kui erinevate tehnikate abil saavutatakse tarkvara hinnanguliseks töökindluseks nt 95 % või isegi 99 % (üldistatud „töökindlust“ kasutan ülisuure lihtsustusena, möönan). Tundub ju täitsa hea? Kahjuks mitte. Nimelt keskmises PC-s on installeeritud ja töös hinnanguliselt 72 programmi – tegelikkuses on see number veel suurem, kui juurde arvutada erinevad süsteemikomponendid, draiverid, riistvara käitlemiseks kasutatav firmware jms. Süsteemi kui terviku toimise tõenäosuse arvutamiseks tuleb kõigi komponentide töökindluse tõenäosused omavahel korrutada, et meie näites võtta 0,99 astmele 72. Kurvastusega tuleb tõdeda, et kui süsteem koosneb 72st komponendist, mille toimise tõenäosus on 99 %, siis on süsteem kui terviku vigadeta toimise tõenäosus tagasihoidlik 48 %...

IT süsteem kui 8. maailmaime

Toimiv IT süsteem on inimlikku eksimissuutlikkust ning statistikat eirav ime. Eelnev kurb statistika kinnitab veenvalt, et IT süsteemi häirete puhul ei ole mõtet emotsionaalsesse negativismi langeda. Vastupidi, iga kord kui IT enamvähem ettenähtud viisil toimib, siis tuleb olla härdalt tänulik ning tänada IT-jumalaid selle eest, et seekord inimese ja meeskonna vead kriitilisel viisil kokku ei langenud ning süsteemi toimimast ei takistanud.

Eks olen selle järelduse kirja pannud utreeringuna, kibehumoorika provokatsioonina. Kuid fakt on see, et kogu inimese loodud tarkvara sisaldab vigu. Ka ei ole inimese meeled ei mõeldud vahetult tajuma digitaalses maailmas toimivaid protsesse ning neid vahetult kontrollima – me märkame viga või anomaaliat vaid siis, kui süsteem meile sellest talitlushäire või testi läbikukkumisega märku annab. Kuid lisaks tajumise probleemile on suureks probleemiks meie suutmatus tajuda süsteemi erinevate komponentide – riistvarast kuni 100 tarkvaraliste komponentideni – omavahelist talitlust. Ja isegi kui me suudaksime tarkvarakomponentide seisundi mingis ajahetkes lõplikult selgeks teha, siis toimub mõne komponendi tarkvarauuendus või rikutakse mõni faili ning hoolega loodud ülevaade süsteemi toimimisest hävineb.

Seega kui absoluutne turvalisus nõuaks detailset arusaamist süsteemi toimimisest, et vältida süsteemi aukude ja anomaaliate ilmnemist, siis IT süsteemi puhul ei ole see võimalik tulenevalt süsteemi keerukusest ning pidevast arengust. Kuna süsteem pidevalt muutub, komponendid uuenevad ja vahetuvad, siis on hõlpsad tekkima ja sulguma avad ja lõhed komponentide vahel, mis mõnikord võivad üksikult võttes olla sedavõrd ulatuslikud või mis omavahel kombineerudes võivad ulatuda sedavõrd sügavale, et annavad ründajale võimaluse süsteemi sisse murda või muul viisil kuritarvitada.

Keerukus on kõige suurem risk. Seetõttu peitub lihtsuses ilu, töökindlus ja turvalisus. Keep it simple. Even and especially if you are smart. 

----
Selle nädala teema: Vali üks suurematest IT-turvariskidest (võib võtta tekstist, aga võib ka kirjeldada mõnda muud) ja analüüsi seda ajaveebiartiklis. Mida tuleks "Mitnicki valemi" kolme komponendi (tehnoloogia, koolitus, reeglid) selle maandamiseks ette võtta?


Kommentaarid

Populaarsed postitused sellest blogist

5. nädal // "Ühe tagumiku kaks kannikat"

8. nädal // "IT-professioon on surnud. Elagu IT-professioonid!"

3. nädal // Kellele lüüakse hingekella?