Tarkvara turvaauk

Arvutiteaduses nimetatakse tarkvara **turvaauku** (inglise keeles *software vulnerability*) nõrkuseks programmi ühesehituses või konfiguratsioonis, mida ründaja saab kuritarvitada pahatahtlikel eesmärkidel, näiteks arvutisüsteemile ligi saamiseks või rünnatavast süsteemist info hankimiseks.

Tarkvara ehitamise juures on oluline osa tsüklilisel turvanõrkuste haldamisel ehk nõrkuste otsingul, tuvastamisel, parandamisel, testimisel ja vähendamisel. 

Tihti liigitatakse turvariske vääralt turvaaukudeks, mis võib põhjustada segadust mõlema sõna tähenduse osas. Turvarisk on oluline mõju, mida võib võimalik turvaaugu kuritarvitamine endaga kaasa tuua. Eksisteerib nõrkusi, mis ei too endaga kaasa riski. Selle näide on olukord, kus varal, mis on ohustatud, puudub väärtus. Turvanõrkus, mille kohta on teada üks või rohkem juhtumeid, kus on edukalt ja kõikide võimaluste piires seda ära kasutatud, liigitatakse ärakasutatavateks turvaaukudeks ehk nõrkusteks, millele eksisteerib teadaolev kasutusviis.

Ründeaknaks nimetatakse perioodi alates turvaaugu tahtmatust lisamisest või tekkimisest paigaldamisel kuni programmile juurdepääsu keelamiseni, turvaparanduse loomiseni või ründaja ohutuks muutmiseni (näiteks nullpäeva ründe korral).

Turvaviga ehk programmiviga (inglise keeles *security bug*) on kitsam kontsept turvaauguga võrreldes. Kui turvaviga on olukord, kus tarkvara turvalisus ei toimi nii nagu ette nähtud, siis nõrkus on viis süsteemi ära kasutada kas mingi implementatsiooni- või disainivea tõttu. Leidub turvaauke, mis ei ole seotud tarkvara endaga, vaid sõltuvad välisteguritest, näiteks riistvara, võrgu või tarkvara kasutajatega seotud nõrkused: need ei ole tarkvara turvavead. 

Mida keerulisemalt on üles ehitatud programmeerimiskeel või mida raskem on mingeid keele funktsioone rakendada, seda lihtsam on seda kasutades vigu teha, mistõttu on keeled ise suureks nõrkuste allikaks.

## Definitsioonid

ISO 27005 defineerib turvaauku kui nõrkust varas, mida saab ära kasutada üks või rohkem ohuallikat. Antud definitsioonis tähistab vara ükskõik millist objekti, millel on väärtus mingi organisatsiooni, selle äritegevuse ja äri jätkusuutlikkuse jaoks, kaasa arvatud andmed, mis on selle organisatsiooni töös olulised.

IETF ehk Internetiehituse töörühma dokument RFC 4949 defineerib turvaauku kui viga või nõrkust süsteemi disainis, implementatsioonis või töötamises ja haldamises, mida saab ära kasutada, et rikkuda süsteemi turvapoliitikat.

CNSS ehk Ameerika Ühendriikide Riigiturvasüsteemide Komitee defineerib turvaauku nende 2010. aastal välja antud "Riikliku infoturbe sõnastikus" kui nõrkust informatsioonisüsteemis, süsteemi turbeprotseduurides, sisemises ehituses või implementatsioonis, mida on võimalik ära kasutada ohuallikal. 

Mitmed NIST-i (USA Riiklik Standardi- ja Tehnikainstituut) väljaanded defineerivad turvaauku infotehnoloogia kontekstis kõige üldisemalt kui viga või nõrkust süsteemi turvaprotseduurides, disainis, implementatsioonis või sisemises ehituses, mida saab rakendada (kas kogemata või tahtlikult) ning mille tulemusena tekib murre (inglise keeles *security breach*) süsteemi.

ENISA ehk Euroopa Liidu Võrgu- ja Infoturbeamet defineerib turvaauku kui nõrkuse, disaini- või implementatsioonivea olemasolu, mis võib viia ootamatu ja soovimatu sündmuseni, mille tulemusena on ohustatud võrk, programm, protokoll või arvutisüsteemi turvalisus, milles turvaauk leidub.

Open Group defineerib turvaauku kui tõenäosust, et oht ületab süsteemi suutlikkust sellele vastu võidelda.

Infosüsteemide Auditeerimise ja Juhtimise Assotsiatsioon (ISACA) defineerib turvaauku Risk IT raamistikus kui nõrkust disainis, implementatsioonis, operatsioonis või sisekontrollides.

## Turvaaugud ja riskitegurite mudelid

Ressurss (füüsiline või loogiline) võib omada ühte või rohkemat turvaauku, mida saab ära kasutada ründeks ohuallikas. Ründe tulemusena võib potentsiaalselt olla rikutud antud ressursi või temaga seotud ressursi konfidentsiaalsus, terviklikkus või käideldavus, mis on andmeturbe kolm alusomadust (CIA kolmik, inglise k. *CIA triad*). Ressurss võib kuuluda nii organisatsioonile kui ka/või teistele osapooltele nagu klient või varustaja.

Rünnak võib olla aktiivne, kui ta üritab muuta süsteemi ressursse või mõjutada nende töid, rikkudes terviklikkust või käideldavust. Passiivne rünnak üritab õppida või ära kasutada informatsiooni, mis on süsteemist pärit, kuid ei mõjuta ise süsteemi toimimist ega tema ressursse, rikkudes nii konfidentsiaalsust.

Mittetulunduslik rahvusvaheline organisatsioon OWASP (*Open Web Application Security Project*) kujutab rünnakut teiste terminitega: ohuallikas, kasutades mingisugust ründevektorit (e-kirja, viirust, hüpikakent vms), kasutab ära nõrkust (turvaauku) süsteemis ning temaga seotud turvameetmed, põhjustades tehnilist mõju infotehnoloogilisele ressursile (väärtusele), mis on seotud äriga.  

## Infoturbe halduse süsteem

Enamikul asutustest on olemas mingid informatsiooni turvameetmed, kuid kui ei rakendata infoturbe halduse süsteemi (ISMS-i), on need meetmed tihtipeale korrapäratud ja seosetud, sest nad on implementeeritud ainult spetsiifiliste olukordade jaoks või tava tõttu. Tüüpiliselt on turvameetmed eraldi IT või andmeturve jaoks, jättes kaitseta või vähema kaitsega mitteinfotehnoloogilise vara (näiteks paberikujul dokumendid ja firmasisene info). Veelgi enam, füüsiline turvalisus hoitakse tihti eraldi informatsiooni tehnoloogiaga seotud turvalisusest, seda eriti tööjõu osas, kellele jäetakse defineerimata ja määramata informatsiooni turvalisuse rollid ja kohustused organisatsioonis. 

Infoturbe haldamise süsteem ehk ISMS on informatsiooni turbepoliitikate kogum, mille eesmärk on hallata vastumeetmeid ja turbestrateegiaid organisatsiooni informatsiooni kaitseks ja kindlustada nende vastavus riiklikele reeglitele ja regulatsioonidele. Neid vastumeetmeid nimetatakse ka turvameetmeteks, kuid kui on tegemist andmeedastusega, nimetatakse neid turvateenusteks. 

ISO/IEC digitaaljuurdluse 27001 standard nõuab, et haldamissüsteem:

* süstemaatiliselt uurib organisatsiooni informatsiooni turvariske, arvestades ohuallikaid, nõrkusi ja mõjusid;
* loob ja implementeerib sidusa ja kõikehõlmava komplekti informatsiooni turvameetmeid ja/või teisi riskihaldamisvorme (vältimine, ülekandmine), et adresseerida neid riske, mis on lubamatud;
* võtab kasutusele üldise haldamisprotsessi kindlustamaks informatsiooni turvameetmete jätkusuutlikust kaitsta organisatsiooni turvavajadusi ja andmeid.

Tuleb tähele panna, et ISO/IEC 27001 standardipere defineeritud ISMS on mõeldud katmaks rohkemat kui lihtsalt infotehnoloogilisi vajadusi.

## Liigitamine
Turvaauke liigitatakse vastavalt varale, millega nad seotud on:
*riistvara
** tundlikkus niiskusele
** tundlikkus tolmule
** tundlikkus määrdumisele
** tundlikkus kaitsmata transpordile või varustamisele
*tarkvara
** vähene testimine
**kontrolljälje (inglise keeles *audit trail*) puudumine
** disainiviga
*võrk
** kaitsmata sideliinid
** kaitsmata võrguarhitektuur
* personal
** puudulik värbamisprotsess
** puudulik teadlikkus turvalisuse osas
* füüsiline asukoht
** üleujutuste oht
** ebausaldusväärne energiaallikas
* organisatoorne
** regulaarsete turvarevisjonide puudumine
** jätkuvusplaani puudumine
** turvalisuse puudumine

## Põhjused

*Keerukus – mahukad ja komplekssed süsteemid suurendavad vigade ning tahtmatute pääsupunktide tekkimise tõenäosust.
*Familiaarsus – levinud, hästi tuntud programmeerimiskoodi, tarkvara, operatsioonisüsteemi ja/või riistvara kasutamine suurendab tõenäosust, et ründajal on olemas või saab hankida teadmised ja tööriistad turvaaugu ärakasutamiseks.
*Seotus – mida rohkem on füüsilisi ühendusi, privileege, porte, protokolle ja teenuseid, seda suurem on turvaaugu leidumise tõenäosus.
*Paroolide haldamise vead – arvutile, milles on kasutusel nõrgad paroolid, on võimalik ligi saada jõuründe ehk *brute force* rünnaku abil. Arvutikasutaja võib hoida parooli samas arvutis, millele saab programm ligi. Kasutajad võivad taaskasutada paroole mitme programmi ja lehekülje peale.

*Fundamentaalsed operatsioonisüsteemi disainivead – operatsioonisüsteemi disainer otsustab kasutada ebaoptimaalseid turvameetmeid kasutaja või programmide haldamisel. Näiteks operatsioonisüsteemid, millel on vaikimisi omadus lubada igal programmil ja igal kasutajal täisõigusi arvutile ligipääsemiseks, on vigased ja lubavad viirustel ning pahavaral täita käske administraatorina.
*Veebilehtede lehitsemine – veebilehed võivad sisaldada kahjulikku nuhkvara või reklaamvara, mis installuvad automaatselt arvutisüsteemi. Peale selliste lehtede külastust nakatuvad arvutisüsteemid ning seal olev personaalne info kogutakse ja saadetakse süsteemist edasi kolmandatele isikutele.
*Tarkvara puugid ehk vead – programmeerija jätab vea programmi. Selline viga annab võimaluse ründajale rakendust pahatahtlikult kasutada.
*Kontrollimata sisend kasutajalt – programm eeldab, et kogu kasutajasisend on turvaline. Programmid, mis ei kontrolli kasutaja sisestatut, võivad lubada soovimatut käskude täitmist või SQL-lausete kutseid (ehk puhvri ületäitumist, SQL-süst jms).
*Vigadest mitteõppimine – enamik turvaauke, mis on leitud iPv4 protokolli tarkvarast, leiti ka uuematest iPv6 implementatsioonidest.

Uuringud on näidanud, et enamiku informatsioonisüsteemide nõrgim lüli on inimkasutaja, operaator, disainer või keegi teine inimene.

## Turvaaugu tagajärjed
Turvarikkumise mõjud võivad olla väga suured. Kui infotehnoloogia haldajad või ülemkorraldus teavad, et informatsioonisüsteemid ja rakendused omavad nõrkusi ja ei võta midagi selle riski osas ette, peetakse seda enamikus õigusaktides väärteoks. Isikuandmete kaitse seadused sunnivad haldajaid vähendama turvariski mõju või tõenäosust. Infotehnoloogia turvarevisjon on hea viis lasta teistel iseseisvatel osapooltel tõendada, et konkreetset IT keskkonda hallatakse korralikult. Läbistustestid on viis kinnitamaks nõrkusi ja vastumeetmeid, mida organisatsioon kasutab: valge mütsi häkker ehk eetiline häkker või arvutiturvalisuse ekspert üritab organisatsiooni infotehnoloogia vara rünnata, et leida, kui kerge või keeruline on süsteemi kaitset murda. Parim viis professionaalselt hallata infotehnoloogilisi riske on kasutusele võtta ISMS ehk infoturbe halduse süsteem (näiteks ISO/IEC 27002 või Risk IT) ja järgida selle reegleid.

Üks võtmekontsepte informatsiooniturvalisuses on süvakaitse (inglise keeles *defence in depth*) ehk mitme üksteist täiendava või osaliselt kattuva turvameetme rakendamine organisatsiooni eri kihtides või dimensioonides, mille abil saab ennetada nõrkuse ärakasutust, ära tunda rünnakuid ja vajadusel sekkuda ning leida üles ohuallikad ja neid vastutusele võtta.

Sissetungituvastuse süsteem (IDS) on näide automatiseeritud süsteemideklassist, mida kasutatakse rünnakute tuvastamiseks. IDS on seade või tarkvara, mis jälgib võrku või süsteeme, et leida pahatahtlikku tegevust või turvareeglite rikkumisi ja et neist alarmeerida. 

Füüsiline turvalisus on komplekt meetmeid vara kaitseks füüsiliste ohtude (kahjutule, plahvatuse, loodusõnnetuse, sissemurdmise, varguse, vandalismi, terrorismi) eest: kui on võimalik füüsiliselt varale juurde pääseda, on väga kerge muuta ressurss kättesaamatuks tema tegelikele kasutajatele.

## Turvaaukude avaldamine

Privaatpaljastuse ehk vastutustundliku paljastamise puhul esmalt hoiatatakse vara müüjaid konfidentsiaalselt turvaaugust ning siis CERT-i (*Computer Emergency Response Team)* kaks nädalat hiljem, mis annab müüjatele 45-päevase armuaja enne turvahoiatuse avaldamist. 

Täielik turvaaukude avalikuks tegemine tähendab turvaaugu kõigi detailide kohest avaldamist, võib-olla soovist sundida tarkvara või protseduuride loojaid kiiresti viga parandama.

### Turvaukude loendamine
USA mittetulundusühingu Mitre Corp. hoiab nimekirja avaldatud nõrkustest süsteemis *Common Vulnerabilities and Exposures* ehk CVE (lehel https://cve.mitre.org/), kus on nõrkused klassifitseeritud ja hinnatud kasutades CVSS skoorimissüsteemi.

OWASP kogub nimekirja potentsiaalsetest turvaaukudest eesmärgiga harida süsteemidisainereid ja programmeerijaid, seega vähendades tõenäosust, et nõrkusi kirjutatakse tahtmatult tarkvara koodi sisse. 

### Turvaaukude leidmine ja eemaldamine
Leidub mitmeid tarkvara tööriistu, mis aitavad turvaaukude leidmist (ja mõnikord eemaldamist) arvutisüsteemist. Need tööriistad annavad küll hea ülevaate süsteemis leiduvatest võimalikest nõrkustest, kuid nad ei asenda inimotsuseid. Ainult sellistele skanneritele toetudes võib leida tulemusi, mis tunduvad kui nõrkused, kuid tegelikkuses ei ole (väärpositiivsed vastused), ning piiratud ulatusega vaateid probleemidest süsteemis. 

Nõrkusi on leitud igas levinumas operatsioonisüsteemis, kaasaarvatud Windowsis, macOS-is, erinevad Unixi ja Linuxi süsteemid, OpenVMS-is jt. Ainus võimalus vähendada turvaaukude ärakasutamisvõimalust on olles pidevalt valvel. Valvelolek tähendab hoolsat süsteemihooldust (näiteks luues tootja paike ehk *patche*), heade tavade harrastamist juurutamisel ehk *deploymisel* (näiteks tulemüüri kasutamine) ja auditeerides (nii juurutamise ajal kui ka läbi terve juurutamise tsükli).

## Turvanõrkuste näiteid
Nõrkused on seotud eelmainitud liikidega:

* füüsiline keskkond süsteemi ümber
* personal
* haldamine
* administreerimine ja turvameetmed organisatsioonis
* riistvara
* tarkvara
* võrk
* kõikide eelnevate kombinatsioonid

Neli näidet turvanõrkuse ärakasutamisest:

* ründaja leiab ja kasutab ületäitumisnõrkust süsteemis, et installida sinna pahavara, mis transpordib välja tundliku infot;
* ründaja veenab kasutajat avama e-kirja, milles on sees pahavara;
* siseinfo valdaja kopeerib krüpteeritud programmi andmekandjale ning murrab selle lahti muus asukohas;
* üleujutus kahjustab arvutisüsteemi, mis on üles pandud esimesele korrusele.

### Tarkvara turvaaugud
Levinud tüübid tarkvaravigu, mis viivad nõrkuse tekkimiseni, on näiteks:

* Mälu turvalisuse rikkumised, nagu
**puhvri ületäitumised
** rippuvad viidad ehk viidad, mis ei viita sobiva tüübiga kehtiva objekti poole ning võivad põhjustada sellepärast programmi ettearvamatut talitlust
* Sisendi valideerimisvead, nagu
**koodisüst ehk salajane koodi sisestamine, mis muudab tarkvara käitumist
** XSS, pikemalt murdskriptimine (inglise keeles *cross-site scripting*) veebirakendustes
**kataloogihüpe, mis on failikataloogi läbimine sisendfaili nime karakterite (näiteks "../") abil, mis viivad volitusteta ründaja rakenduse kõrgema taseme kataloogi ja selle kaudu edasi mitteavalike kataloogide ja failideni
**meilisüst ehk e-kirja injektsioon, mis on meilimisvormi nõrkuste ärakasutamine MIME-vormingu kaudu
** sõne formaadi rünnak ehk sisendvormingurünne, mis on kitsendusteta vormingustringi nõrkusi ärakasutav rünne, kus sisendisse võib näiteks skripti anda
**HTTP-päisesüst, mille korral genereeritakse dünaamiliselt HTTP-päis kasutaja sisestatud andmete põhjal, mistõttu lubatakse HTTP-vastuse lõhestust, murdskriptimist või muid rünnakuid
**HTTP-vastuse lõhestus, mis petab serverit andma ühe HTTP-vastuse asemel mitut ja lubab näiteks skriptisüsti
**SQL-süst, mis on rünne andmebaasipõhisele rakendusele, et andmebaasile lubamatuid käske anda
*Õigusepette vead, nagu
**klõpsurööv, kus rünnatakse veebilehega, millel olevate nuppude tegelik toime ei ole vastav näilisele otstarbele ning videoklipi esitamise nupu vajutamine võib näiteks sooritada ostu veebipoest
**päringuvõltsing, mis petab laadima veebilehte, mille kaudu tehakse veebirakenduse kasutaja nimel ja õigustega mingi kahjulik toiming, näiteks ostetakse midagi
**FTP-dublee rünne, mis taotleb rünnatava kolmanda arvuti kaudu teise arvuti portide skaneerimist ja kaudset juurdepääsu teatud portidele 
*Privileegide vallutus
*Trügimine (sündmustevahelist siirdelist ajalõiku nõrkusena ärakasutav rünne), nagu
**sümbollinkrünne, kus luuakse pettesümbollingid, mis annavad juurdepääsu muidu kättesaamatuile failidele
*Kõrvalkanalründed, mis on ründed, mis põhinevad arvutisüsteemi implementeerimise infol (näiteks signaalide ajastus, voolutarve, soojusmuster jne), mitte nõrkustel algoritmides ja paroolides
*Kasutajaliidese vead

## Viited