Turvakest

Turvakest (inglise keeles Secure Shell, lühendatult SSH) on krüptograafiline võrguprotokoll turvaliseks võrguteenuste opereerimiseks turvamata võrgu kaudu. Põhiliselt kasutavad seda arvutikasutajad arvutisüsteemidesse kaugsisselogimiseks.
SSH võimaldab klient-server arhitektuuri puhul luua turvamata võrgus turvalise andmeedastuskanali, ühendades SSH klientrakenduse SSH-serveriga. Üldrakendused sisaldavad käsureale kaugsisselogimist ja käskude kaugkäivitamist, samuti on võimalik SSH abil turvata paljusid võrguteenuseid. Protokolli kirjeldus eristab kahte peamist versiooni, mis on tuntud kui SSH-1 ja SSH-2.
Protokolli kasutatakse kõige rohkem UNIXi-laadsetes süsteemides kestakontodesse sisselogimiseks, samuti leiab see piiratud kasutust Windowsi süsteemides. Aastal 2015 teatas Microsoft võimalikust sisseehitatud SSH toest Windowsi tulevastes versioonides.
SSH disainiti asendama Telneti ja teisi turvamata kaugkesta protokolle, nagu Berkeley rlogin, rsh ja rexec. Loetletud protokollid edastavad andmeid, sealhulgas paroole, avatekstina, mis teeb need paketianalüüsi kasutamisel haavatavaks vahelthaaramise ja andmete lekkimise suhtes. SSH kasutatav krüpteerimine püüab tagada turvamata võrgus (nagu seda on Internet) edastatavate andmete konfidentsiaalsuse ja tervikluse, kuigi Edward Snowdeni lekitatud failid osutavad, et NSA on suuteline mõnikord SSH-d dekrüpteerima, mis võimaldab neil SSH seansside sisu lugeda.
6. juulil 2017 kinnitas valitsuste läbipaistvuse nimel tegutsev organisatsioon WikiLeaks, et Luure Keskagentuur on loonud tööriistad, mida on võimalik paigaldada Microsoft Windowsi või GNU/Linuxi operatsioonisüsteemiga arvutitesse ja mis on mõeldud rikutud süsteemis käivitatud SSH-klientprogrammide algatatud SSH-ühenduste vahelthaaramiseks.

Definitsioon

SSH kasutab avaliku võtme krüptograafiat, et autentida võrguarvuti ja võimaldada sellel vajadusel kasutajat autentida. SSH kasutamiseks on mitu võimalikku lähenemisviisi, üks on automaatselt genereeritud avaliku-salajase võtmepaari abil krüpteerida võrguühendus ja seejärel kasutada parooliga autentimist sisselogimiseks.
Teine võimalus on autentida manuaalselt genereeritud avaliku-salajase võtmepaari abil ja lubada kasutajal või programmil ilma parooli sisestamata sisse logida. Selle stsenaariumi jaoks võib igaüks luua erinevatest võtmetest (avalikust ja salajasest) sobiva võtmepaari. Avalik võti pannakse kõikidesse arvutitesse, mis peavad salajase võtme omanikule ligipääsu võimaldama.
Kui autentimine põhineb salajasel võtmel, siis autentimise käigus ei edastata seda võtit kunagi üle võrgu. SSH ainult verifitseerib, kas sama isiku avalik võti vastab salajasele võtmele. Kõigis SSH versioonides on olulisel kohal tundmatute avalike võtmete verifitseerimine, see tähendab avaliku võtme ja identiteeti seose tuvastamist enne võtme valiidseks tunnistamist, kuna ründaja avaliku võtme aktsepteerimine ilma seda valideerimata annab volitamata kasutajale ligipääsu volitatud kasutaja õigustele.

Võtmehaldus

UNIXi-laadsetes süsteemides hoitakse volitatud avalike võtmete nimekirja harilikult selle kasutajakonto, millega on lubatud võrgu kaudu sisse logida, kodukataloogis failis ~/.ssh/authorized_keys. SSH tunnustab volitatud võtmete faili ainult juhul, kui see pole kirjutatav kellegi teise poolt peale faili omaniku ja juurkasutaja. Kui kaugarvutis on olemas avalik võti ja kohalikus arvutis on sellele vastav salajane võti, siis pole parooli sisestamine enam tarvilik (mõni tarkvara võib siiski korrektseks töötamiseks parooli nõuda, näiteks Message Passing Interface (MPI) virn). Siiski võib täiendava turvalisuse lisamiseks ka salajast võtit parooliga kaitsta.
Salajast võtit võidakse otsida standardsetest asukohtadest, samuti on selle täisrada võimalik määrata käsureaargumentidega (utiliidi ssh puhul võti -i). Salajasi ja avalikke võtmeid luuakse utiliidi ssh-keygen abil, need genereeritakse alati võtmepaaridena.
SSH toetab ka paroolipõhist autentimist, see protseduur on krüpteeritud automaatselt loodud võtmete abil. Parooliga autentimise kasutamisel võib ründaja imiteerida serverit, küsida kasutajalt parooli ja selle ka saada (vahendusrünne). Siiski on kirjeldatud stsenaarium on võimalik vaid juhul kui osapooled pole end varem teineteisele autentinud, kuna SSH säilitab serverite poolt varem esitatud võtmed. Enne võtme aktsepteerimist varem tundmata serverist kuvab SSH klient hoiatuse. Paroolautentimist on võimalik ka keelata.

Kasutamine

SSH-d kasutatakse enamasti kaugarvutisse sisselogimiseks ja nendes korralduste täitmiseks, samuti tunnelite loomiseks ning TCP portide ja X11 ühenduste edastuseks. Samuti on toetatud failide ülekandmine SSH failiedastuse (SFTP) võis turvalise kopeerimise (SCP) protokollidega. SSH põhineb kliendi-serveri arhitektuuril.
SSH-serveritega ühenduse loomiseks on määratud standardne TCP port 22.
SSH klientprogrammi kasutatakse harilikult ühenduse loomiseks kaugühendusi vastu võtva SSH-deemoniga. Mõlemad on reeglina kaasas enamikus uuemates operatsioonisüsteemides, näiteks Mac OS, suurem osa Linuxi distributsioone, FreeBSD, NetBSD, Solaris ja OpenVMS. Windows on üks väheseid kaasaegseid operatsioonisüsteeme, mis SSH tuge vaikimisi ei sisalda.

Versioon 1.0

1995. aastal kirjutas Helsingi Tehnikaülikooli insener Tatu Ylönen samas koolis korraldatud paroolinuhi (password-sniffing) ründe tõttu SSH esimese versiooni (SSH-1). SSH eesmärk oli asendada rlogin, Telnet ja rsh protokollid, mis ei pakkunud turvalisust ega konfidentsiaalsust. Ylönen väljastas oma programmi vabavarana 1995. aasta juulis ja see muutus kiiresti populaarseks. 1995. aasta lõpuks oli SSH kasutajate hulk kasvanud 20 000 inimeseni 50 riigis.
1995. aasta detsembris asutas Ylönen SSH müümiseks ja arendamiseks ettevõtte SSH Communications Security. Algne versioon kasutas paljusid vabavaralisi lõike, näiteks GNU libgmp, kuid hilisemad versioonid olid üha enam mõeldud äriliseks kasutamiseks.

Versioon 2.0

SSH versiooni 2.0 kirjutas Internetiehituse töörühma (IETF) üksus Secsh. 1996. aastal muudeti uuendatud versioon standardiks (SSH-2), mis polnud SSH-1-ga ühilduv. Uus versioon suurendas turvalisust (näiteks Diffie-Hellmani võtmevahetus) ja lisas funktsionaalsust (näiteks võimalus luua mitu ühendust ühe SSH tunneli kaudu).

SSH kompensatsioonirünnaku tuvasti

1998. aastal avastati SSH versioonis 1.5 turvaauk, mis lubas ründajal krüpteeritud SSH andmevoogu andmeid sisestada. Viga tulenes ebapiisava terviklikkuskontrolli CRC-32 kasutamisest. Enamikus SSH versioonides võeti kasutusele rünnakutuvasti (inglise keeles SSH Compensation Attack Detector), mis selle turvavea parandas.

Lihttekstirünnak

2008. aastal avastati SSH-2 viga, mis lubas teatud tingimustel kuni 4 baiti lihtteksti SSH andmevoost kätte saada. Seda nimetatakse lihttekstirünnakuks (Plaintext Recovery Attack). Viga on parandatud vaikekrüpteeringu režiimide muutmisega alates OpenSSH versioonist 5.2-st.