TTKK / Tietoliikenne / J.Koskinen : Tietoturvallisuuden perusteet

7. viikko, ma 11.10.1999

Erityiskysymys: Piilokanavat

Piilokanavalla (covert channel) tarkoitetaan jotain sellaista keinoa, jonka kautta luottamuksellista tietoa voi päätyä asiattomille tyypillisesti sellaisen toimijan lähettämänä, jolla on kyllä oikeus tietoon mutta ei oikeutta sen lähettämiseen mitään normaalia kanavaa pitkin (ks. lyhyt esittely). Tällainen toimija voi olla suoraan ihminenkin mutta tietotekninen piilokanava ei ole useinkaan ole kätevin tapa "vuotaa" luottamuksellista tietoa - paitsi ehkä vakoilutilanteissa, jolloin ei ehkä ole turvallista esim. kuljettaa levykettä tai paperinippua. Todennäköisempi piilokanavan tarvitsija on Troijan hevonen, joka toimii tietoon tarvittavien oikeuksien tasolla, mutta ei pysty lähettämään niitä.

Piilokanavat jaotellaan ajastus- ja tallennekanaviin. Ajastuskanava (covert timing channel) toteutuu siten, että lähettäjä muuntelee (moduloi) jotain systeemin parametria sinänsä luvallisesti, mutta samalla koodaa luvattoman viestin näihin muutoksiin. Parametri voi olla vaikkapa CPU-kuorma. Vähimmillään vastaanottajan riittää pystyä havaitsemaan, onko prosessori ruuhkainen vai ei.

Tallennekanava (covert storage channel) voi perustua vaikkapa tiedostojen nimiin tai sallitussa kommunikaatiokanavassa kulkevien datapakettien pituuksiin.

Harjoitus: Keksi muita ajastus- ja tallennekanavia. Mitä voisi tehdä matkaviestimellä? (Ehdotuksia: tietoliikennemäärät, virheelliset/oikeat tarkistussummat, IP-otsikon "time-to-live"-kenttä.)

Viruksiakin on ehdotettu valjastettaviksi kuljettamaan piilokanavan viestejä. Erikoistapauksena piilokanavasta voi pitää ns. alitajuntakanavaa (subliminal channel), jossa kaksi osapuolta kommunikoivat eikä kolmas saa selville, mitä he viestivät, vaikka hän pystyy lukemaan kaiken. Viesti kätketään allekirjoitukseen ja perustana on se, että molemmat osapuolet tuntevat allekirjoitusavaimen (joka yleensä on vain allekirjoittajan tiedossa).

Yleisesti piilokanavien löytäminen ja sulkeminen on erittäin vaikea tehtävä ja yleensä tyydytään siihen, että systeemistä pystytään eliminoimaan kovin laajakaistaiset piilokanavat. Aiemmin mainitun oranssin kirjan luokan B2 (keskimmäinen 7:stä) yhtenä kriteerinä on piilokanavien analyysi.

Kiinnostuneille, lyhyt artikkeli piilokanavien väärinkäytöstä: Yvo Desmedt: Establishing Big Brother using covert channels and other covert techniques. Toinen artikkeli, jossa piilokanavista haluttaisiin päästä kokonaan eroon: Norman E. Proctor, Peter G. Neumann: Architectural Implications of Covert Channels(1992)

GSM

Verrattuna aiempiin matkapuhelintekniikoihin GSM on tietoturvallinen jo monien teknisten ominaisuuksiensa takia. Tällaisia ovat digitaalisuus, puheenkoodaus, taajuushyppely, digitaalinen modulaatio ja TDMA-kanava-allokointi. Katsotaan seuraavaksi, mitä varsinaisia tietoturvamekanismeja GSM käyttää. Haasteita on monenlaisia alkaen siitä, että mobiili laite voi paitsi sijaita missä tahansa myös olla kenen tahansa hallussa. Radiotie on avoinna kenen tahansa kuunnella, mutta kukaan asiaton ei saisi edes saada selville, kuka soittaa ja kenelle, ja vielä vähemmän puhelun sisältöä.

Yksinkertaistettuna tietoturva toteutuu seuraavasti: Käyttäjä autentikoi itsensä PIN-koodilla puhelimelle (oikeastaan sen SIM-kortille) ja puhelin autentikoituu sen jälkeen haaste-vasteperiaatteella tukiasemalle (oikeastaan verkolle) - ts. lähettämättä itse autentikointitietoa. Samalla se sopii salausavaimesta, jolla puhelun data jatkossa salataan - joskin vain GSM-laitteen ja tukiaseman välillä.

SIM-kortti on mobiililaitteeseen kytkettävä PIN-koodilla suojattu toimikortti (Subscriber Identity Module), joka edustaa samaa käyttäjää (GSM-palvelun tilaajaa), vaikka laite vaihtuisikin. Tätä varten kortti sisältää käyttäjän yksikäsitteisen tunnisteen IMSI (International Mobile Subscriber Identity) ja autentikointiavaimen Ki. Useimmiten IMSIn sijasta käytössä on TMSI (Temporary MSI), jota vaihdetaan ajoittain. Tämä estää ulkopuolisia yhdistämästä eri tapahtumia samaan käyttäjään (IMSI:kään ei ole sama kuin puhelinnumero).

SIM-kortin ROM-muistissa on kaksi hash-tyyppistä algoritmia, A3 ja A8. Näistä A3 on autentikointiin käytettävä MAC-funktio eli yksisuuntainen avaimellinen tiivistefunktio, avaimena Ki. Algoritmin yksityiskohdat ja avaimen Ki pituus ovat operaattorikohtaisia eikä A3:a ole julkistettu.

Autentikointi tapahtuu siten, että puhelin vastaanottaa haasteena (128-bittisen) satunnaisluvun, josta SIM-kortti laskee A3-funktion (32-bittisen) arvon avaimella Ki ja lähettää sen takaisin. Avain Ki on myös verkon tietokannoissa, joten verkko voi suorittaa saman laskun ja tarkistaa oliko vaste oikein.

Tämän jälkeen SIM ja verkko laskevat omilla tahoillaan algoritmia A8 käyttäen 64-bittisen avaimen Kc. Syötteenä on tässäkin avain Ki ja autentikoinnin yhteydessä välitetty satunnaislukuhaaste.

Tämän jälkeen kaikki laitteen ja verkon väliset viestit, siis myös signalointitiedot, salataan A5-algoritmilla käyttäen istuntoavainta Kc. Tätä avainta voidaan myös vaihtaa säännöllisin väliajoin puhelun aikana. Salauksen suorittaa puhelin eikä SIM. Puhelinhan joka tapauksessa kuulee, mitä puhutaan, mutta autentikointiavainta Ki se ei saa tietää.

Salausalgoritmi A5 on vuotyyppinen. Se on standardoitu mutta sitä ei ole julkistettu. Siitä on kuitenkin paljastunut tietoa, ks. keskustelusivua tai Eurocrypt'97-konferenssin artikkelia, jossa väitetty A5 murretaan. Seuraavassa käsitellään vuokryptausta hieman tarkemmin.

Kun edellä sanottiin verkon tekevän jotain, tarkoitettiin tietysti joitakin sen komponentteja, joissa on käyttäjistä tietoja (erityisesti IMSI, TMSI ja Ki). Tällaisia komponentteja ovat kotirekisteri HLR (Home Location Register), vierasrekisteri VLR (Visitor LR) ja autentikointikeskus AuC.

Mainittakoon vielä, että GSM-laitteidenkin turvallisuudesta varkauksia vastaan on huolehdittu ylläpitämällä pääterekisteriä, jossa on varastettujen ja myös tyyppihyväksymättömien laitteiden tunnisteet (ns. IMEI-koodi, International Mobile Equipment Identity).

Hieman tarkempaa tietoa GSM-turvasta saa D. Margraven artikkelista GSM Security and Encryption.

Intermezzo: Vuokryptaus

Vuokryptauksen (stream cipher) idea on yksinkertainen: kryptoteksti saadaan laskemalla XOR-summa selvätekstistä ja samanmittaisesta näennäissatunnaisjonosta, jota sanotaan myös avainvirraksi. Se on muodostettu symmetrisen avaimen perusteella kryptograafisesti vahvalla generaattorilla, joka siis on erityisesti ennustamaton.

Jos avainvirta on riippumaton selvätekstistä (kuten esim. lohkoalgoritmin OFB-moodissa), se voidaan vaikkapa laskea etukäteen, mutta vastaanottajan avainvirran täytyy olla samassa vaiheessa lähettäjän virran kanssa. Tällaista vuokryptausta sanotaan synkroniseksi. Voidaan myös muodostaa ns. itsesynkronoivia systeemejä, jotka toipuvat automaattisesti häiriöistä. Perusidea on se, että avainvirta riippuu vain avaimesta ja tietystä rajoitetusta määrästä aiempia kryptotekstibittejä (näin on vaikka selvätekstibiteistä kaikki aiemmat vaikuttavat kryptotekstiin). Tavallisin tällainen systeemi on lohkoalgoritmin CFB-moodi, jossa r=1 (eli kunkin lohkosalauksen tuloksesta käytetään vain yksi bitti).

Yleensä vuokryptaus toteutetaan lineearisilla takaisinkytketyillä siirtorekistereillä (linear feedback shift registers, LFSR). Sellainen koostuu n:stä yhden bitin rekisteristä R0, R1, ..., R(n-1). Kellon antaessa sykäyksen bitit siirtyvät yhtä pienempään rekisteriin siten, että R0:sta muodostuu rekisterin ulostulo. Tämä bitti syötetään samalla toiseen päähän eli rekisteriin R(n-1), kuitenkin siten, että siihen on XOR-summattu joidenkin muiden rekisterien sisältö.

Kun siirtorekisterillä on jokin alkutila, se tulostaa bittijonon, joka toteuttaa tietyn lineaarisen rekursioyhtälön ja on jaksollinen. Jakson pituus on korkeintaan 2n-1. Tämä maksimaalinen jakso saavutetaan (kaikilla ei-nollilla alkutiloilla), mikäli takaisinkytkettävät rekisterit valitaan jonkin n:ttä astetta olevan ns. primitiivisen polynomin kertoimien mukaisesti.

Esimerkiksi polynomi on 1+x+x4 on primitiivinen ja vastaava rekursioyhtälö on si = si-1 + si-4 modulo 2. Tämä tarkoittaa, että ulostulo on si, kun i=0,1,2,... . Rekisterin Ri alkutilaksi oletetaan si (i=0,1,2,3).

LFSR:n lineaarisuutta häivytetään vuokryptausalgoritmeissa kytkemällä useita sellaisia erityisin tavoin toisiinsa. Esimerkiksi A5-algoritmissa on kellon kontrolloimina kolme LFSR:ää, pituuksiltaan 19, 22 ja 23.

Vuoalgoritmit ovat kovototeutuksina tyypillisesti nopeampia kuin lohkoalgoritmit. Pienten puskureiden tai tiukkojen reaaliaikavaatimusten yhteydessä, esim. telekommunikaatiossa ne ovat usein välttämättömiä.

SSH

SSH eli Secure Shell on suomalainen ohjelmisto, joka on kehitetty korvaamaan Unixin turvattomat "remote"-ohjelmat rlogin, rsh ym. ja yhtä turvattoman Internet-sovellusohjelman Telnet. SSH on ensimmäisen version jälkeen kehittynyt monipuolisemmaksi kuin pelkkien pääteyhteyksien toteuttajaksi. Katsotaan aluksi kuitenkin, miten mikrolta otetaan SSH:lla yhteys Unix-koneeseen. TTKK:n lisenssoima Data Fellowsin F-Secure SSH löytyy paikalliselta seittisivulta.

Pääteyhteydessä turvattoman kanavan yli viestit pitää tietenkin salata. Näppäimistön käyttäjän suunnasta tämä tapahtuu merkki kerrallaan, mutta sama näppäin ei varmastikaan tuota eri kerroilla samaa salatekstiä, eli pitää käyttää ketjuttavaa salausmoodia. Tätä ennen on sovittava symmetrisestä avaimesta ja se pitää tehdä yksilöidysti puolin ja toisin, mikä edellyttää tietysti myös julkisten avainten hallintaa.

Aluksi mikron käyttäjä luo oman julkisen avaimensa generointiohjelmalla, joka kysyy

Satunnaislukugeneraattorin tarvitsema siemenluku syötetään hiiren liikuttelulla (Unixissa näppäimistöltä).

Yhteydenotto SSH:lla tapahtuu kohdekoneessa toimivaan SSH-demoniin, joka Unix-koneessa on nimeltään sshd. Se kuuntelee TCP-porttia 22.

Oletetaan aluksi, että

  1. kohdekoneen julkinen avain on tuotu mikrolle etukäteen esim. korpulla tai se on luettu webistä ja todennettu esim. tiivisteen ja puhelimen avulla (SSH ei tosin tue tätä todentamista).
  2. mikron (käyttäjäkohtainen) julkinen avain on tallennettu käyttäjän henkilökohtaiseen hakemistoon kohdekoneella.
Yhteyden luontia varten annetaan mikrolle isäntäkoneen nimi, käyttäjätunnus sekä loitsu, jolla mikrolla olevan RSA-avaimen (salaisen osan) salaus puretaan. Tämän jälkeen SSH suorittaa istuntoavaimen vaihdon siten, että autentikointi perustuu kummankin osapuolen toisesta tietämään julkiseen avaimeen. Salasanaa ei siis käytetä. Tämän jälkeen kommunikointi on kolmois-DESin salaamaa (kolmella avaimella, CBC-moodissa; myös Blowfish ja DES ovat käytettävissä).

Jos sitten kohdekoneen julkista avainta ei olekaan mikrolla, SSH kysyy sen kohdekoneelta ja käyttäjällä ei ole oikeastaan muuta vaihtoehtoa kuin hyväksyä se ainakin siksi kerraksi.

Jos taas mikron julkista avainta ei ole kohdekoneessa (käyttäjän omalla alueella), tai sitä ei haluta käyttää, yhteyden aloittamiseksi tarvitaan käyttäjän salasana kohdekoneessa ja tietysti myös kohdekoneen julkinen avain. Tässä tapauksessa protokolla istuntoavaimen K muodostamiseksi C:n ja S:n (Client ja Server) välillä eteni (aiemmissa versioissa) likimain näin:

  1. C --> S : nc
  2. S --> C: ns, K1, K2
    C vakuuttuu RSA-avaimen K1 aitoudesta (K2 vaihtuu tunneittain)
  3. C --> S : EK2( EK1(K))
    missä K riippuu tiivistefunktion kautta ns:stä ja C:n valitsemasta satunnaisluvusta
  4. S --> C : EK("OK")
Tämän jälkeen C autentikoituu S:lle salasanansa avulla. Uudemmassa versiossa K syntyy Diffie-Hellman-avaimenvaihdolla, jonka S autentikoi allekirjoituksellaan.

Tunnelointi. Sshd sekä SSH (siis client) kykenevät tarvittaessa salaamaan minkä tahansa TCP/IP-yhteyden. Tästä käytetään usein nimitystä tunnelointi tai TCP/IP:n portin uudelleenohjaus (-forwardointi). Tällöin sshd tai SSH-asiakasohjelma asetetaan kuuntelemaan jotakin muuta(-kin) porttia kuin 22, esim. HTTP-protokollan käyttämää 80:ä. Tähän porttiin (sovellusohjelmalta) tuleva liikenne kuljetetaan sitten salatun yhteyden läpi kohdekoneen vastaavaan porttiin. Tämä merkitsee sitä, että SSH toimii proxy-palvelimena (siis samassa koneessa kuin sovellusasiakasohjelmakin, esim. selain).

Asian voi toteuttaa toisinkinpäin: SSH tunneloi Unix-koneissa käytettävän X-ikkunoinnin liikenteen automaattisesti luomalla proxy-X-palvelimen etäkoneeseen. Ikkunat näyttävä X.11-palvelinhan on käyttäjän koneessa.

Tunneloinnilla kuten SSH-pääteyhteyksillä yleensäkin saavutetaan osapuolten autentikointi ja viestinnän luottamuksellisuus, mutta on tietenkin eri asia, millaisia päätteitse käytettävät ohjelmat ovat. Erityisesti X-ikkunoinnissa on omat riskinsä, sillä etäkoneessa oleva sovellus hallitsee ikkunan kautta täysin tiettyä prosessia käyttäjän koneessa. Jos siihen on onnistuttu asentamaan Troijan hevonen, ei tunneloinnista tietenkään ole apua.

SSH on saatavana myös ilmaisohjelmana. Ohjeita saa esim. Jyväskylän yliopiston atk-keskuksen sivuilta. (Tällä sivulla mainitaan muuten ikäänkuin ohimennen, miltä koneelta olet http-pyyntösi lähettänyt). Oulun yliopiston atk-keskuksen sivuilla on seikkaperäisiä ohjeita SSH:n käytöstä ja myös yleistä tietoa sen toiminnasta.

VPN

Virtuaaliset yksityiset verkot eli VPN:t ovat suosittu tapa kytkeä saman yrityksen eri paikoissa sijaitsevia lähiverkkoja toisiinsa julkisen verkon kautta ja saada silti aikaan ikäänkuin suljettu verkko. VPN:llä voidaan korvata vuokralinjat ja siten säästää huomattavasti.

VPN:iä on kovin monenlaisia, mutta perusidea on yksinkertainen: turvattomaan verkon osaan lähetettävät viestit salataan. Avainten jakelu ei ole yleensä kovin hankalaa, ellei toimipisteitä sitten ole kovin runsaasti ja vaihtelevasti.

VPN voidaan toteuttaa palomuurin avulla. Yksinkertaisimmillaan se tapahtuu lisäämällä siihen kryptauspalvelu, mutta tämä voi olla turvallisempaa toteuttaa erillisessä koneessa.

Tunnelointi. Useimmat VPN-tuotteet tukevat tunneloinniksi kutsuttua tekniikkaa. Siinä salataan datapaketeista sekä sisältö että otsikkotiedot (eli mm. osoitteet) ja "kapseloidaan" tulos uusien otsikkotietojen väliin ennen lähettämistä. Tämä suojelee tietyssä määrin lähde- ja kohdeosoitteita liikenneanalyysilta.

VPN voidaan toteuttaa myös yksittäisten etäältä toimivien työntekijöiden yhteyksiin. Etätyöskentelyä (telecommuting) on monenlaista. Sitä voidaan kodin lisäksi tehdä yrityksen haarakonttorista käsin tai työmatkan aikana. Oleellista on ainakin ajoittainen kommunikaatioyhteys jonkinmoiseen keskuspaikkaan. VPN ei ole ainoa eikä toisaalta riittävä ratkaisu etätyön tietoturvaan. Etätyöskentelyssä otettava huomioon tietoliikenneasioiden lisäksi se, että työskentelypaikka, tyypillisimmin koti, on turvallisuuden kannalta varsin erilainen kuin tavallinen työpaikka.

Ohelmistovalmistajien sivuilta löytyy runsaasti lisätietoja, mutta akateemisempaa lisätietoa saa esim. I.Daviesin artikkelista An Introduction to Virtual Private Networks. Yksi kätevä tapa toteuttaa VPN on käyttää IP-tason salausta, jota seuraavaksi käsiteltäv IPSec-protokolla tarjoaa.

IPSec

IPSec on IETF:n (Internet Engineering Task Force) julkaisema standardiehdotus, jolla Internet-protokollan turvallisuutta lisätään. IPSec sisältyy IP:n uuteen versioon (v6) ja se voidaan ottaa huomioon jo nykyisessä versiossa (v4). Aiemmin käsitelty SSL- (tai transport layer security, TLS)-protokolla toimii yhtä tasoa ylempänä protokollapinossa, nimittäin TCP- (eli trasport control)-protokollan päällä.

Periaatteet ovat jälleen varsin yksinkertaiset. Internet-protokolla saa ylemmän tason TCP-protokollalta edelleen toimitettavakseen tietopaketin ja varustaa sen omilla IP-otsikkokentillään, erityisesti lähettäjän ja vastaanottajan IP-osoitteilla. IPSec lisää tähän vaiheeseen valinnoista riippuen joitakin omia otsikoita, joihin on mm. laskettu autenttisuutta osoittava (avaimellinen) hash-arvo, sekä mahdollisesti salaa TCP:n antaman datan. Nämä temput voidaan tehdä myös tunnelointimoodissa, jolloin koko tuloksen eteen asetetaan uusi IP-otsikko.

Valinnoista riippumatta tarvitaan avainten vaihtoa kommunikoivien koneiden välillä. Tämä toteutetaan sovellustason protokollalla IKE (Internet Key Exchange). Se on työkalu, jolla osapuolet neuvottelevat yhteydenpidon turvaehdot, tai -parametrit, joista käytetään nimeä SA eli Security Association. Nämä sisältävät tiedon kryptoalgoritmeista, kryptoperiodista, ja tietenkin avaimet.

Aiemmin IKE tunnettiin nimellä ISAKMP/Oakley, joka on IETF:n suosima avaintenhallintaprotokolla, joskin vain yksi useasta mahdollisesta. Tässä ISAKMP = Internet Security Association and Key Management Protocol, ja se tarjoaa puitteet, joissa avaintenvaihto voidaan toteuttaa erityisesti protokollalla, jolla on nimenä Oakley. Oakley puolestaan (ks. RFC 2412) on Diffie-Hellman-mekanismiin perustuva protokolla, jolla kaksi autentikoitua osapuolta voi sopia salausavaimesta. Autentikointimenettelyn standardointi on vielä kesken, mutta siihen voidaan soveltaa seuraavia menetelmiä:

Kun avaimista ja muista turvaparametreista on sovittu, syntynyt SA varustetaan turvaparametri-indeksillä SPI, joka on ensimmäisenä kenttänä kaikissa IPSecin laatimissa otsikoissa. Varsinainen toiminta, kuten alussa mainittiin, on joko salausta (+ osittaista autentikointia) tai pelkkää autentikointia (joskin koko paketin kattavaa). Usein tehdään molemmat, esim. siten että käyttäjän koneiden välillä toteutuu salaus (siis päästä-päähän) ja paikallisverkkojen välillä tämän päällä autentikointi - tai toisinpäin, tavoitteista riippuen. Muitakin yhdistelmiä voidaan toteuttaa ja erityisesti tunneloinnilla on mahdollista rakentaa erilaisia VPN:iä.

Salausprotokollan nimenä on ESP, Encapsulating Security Payload. Alunperin tämän protokollan tehtävänä oli vain IP-protokollan kuorman eli TCP-datan ja -otsikoiden salaaminen, mutta nykyversio toteuttaa samalla myös autentikointia ja sen kautta antaa takeet myös eheydestä: Kun kerran symmetrinen avain on käytettävissä salaamiseen, ei tarvitse kuin soveltaa sitä myös asiaankuuluvasta datasta laskettuun tiivisteeseen, ja niin vastaanottaja voi vakuuttua kyseisen datan eheydestä ja alkuperästä. "Asiaankuuluva" tarkoittaa tässä kaikkea muuta kuin paketin IP-otsikkoa - nimittäin uloimmaksi jäävää otsikkoa; tunneloitaessahan alkuperäinen IP-otsikko tulee jo salatuksi ja kuuluu niin muodoin myös "asiaan" eli ESP:n autentikoinnin piiriin.

Autentikointiprotokollan nimi on AH, Authentication Header. Nimi tulee yksinkertaisesti siitä, että protokolla laskee avaimellisen tiivisteen ja sijoittaa sen otsikkokenttään. Tiiviste lasketaan koko paketista siten että mahdollisen tunneloinnin tuoma uusi IP-otsikko on mukana ja samoin sellaiset kentät (esim. "time to live"), jotka muuttuvat matkalla. Muuttuvat kentät ja tuleva hash-kenttä itse asetetaan laskussa ja sen tarkistuksessa nolliksi.

Sekä AH:n että ESP:n tuottama otsikkokenttä alkaa, kuten todettu, SPI:llä eli turvaparametri-indeksillä, joka yhdessä kohdeosoitteen ja "AH vai ESP"-tiedon kanssa yksilöi SA:n ja sitä kautta algoritmit ja avaimet. Jos käytetään sekä AH:ta että ESP:tä, tarvitaan (siis) kaksi SA:ta. Lisäksi SA on erillinen kumpaankin suuntaan. Toisena kenttänä AH:n ja ESP:n otsikossa on sarjanumero, jonka avulla voidaan vakuuttua pakettien oikeasta järjestyksestä ja erityisesti estää toistohyökkäykset.

Lisätietoa IPSecistä saa tietenkin tuoreimmista standardiluonnoksista erityisesti RFC 2401:stä, mutta hieman lyhyemmin vaikkapa SSH-sivulta, jolla kuvataan myös IPSecin käyttöä yhdessä X.509-sertifikaattien kanssa VPN:n rakentamisessa.