Luku 4 Datan turvallisuus 4.1 Yleistä tietojen luokittelusta Organisaation tiedot on aiheellista luokitella. Olkoon OY yhtiö, joka valmistaa elektronisia tuotteita ja harjoittaa tuotekehitystä. OY:n tiedot voitaisiin jakaa luokkiin seuraavsti: Julkinen tieto on avoinna kaikille. Tämä luokka sisältää tuotteiden määrittelyt, hintatiedot, markkinointilehtisiä yms. mikä edesauttaa OY:tä myynnissä ilman, että tuotesalaisuuksia paljastetaan. Olemassaolevien tuotteiden kehityksessä tarvittava tieto on sisäistä tietoa. Se on avoinna sekä yhtiön lakimiehille ja virkailijoille että kehittäjille. Muilta se pidetään salassa. Uusien tuotteiden kehitystyössä tarvittava tieto on vain kehittäjien saatavissa. Yhtiötieto sisältää sopimustietoja ja tietoa yhtiön toiminnoista (kuten toimista, jotka vaikuttavat pörssiosakkeisiin). Vain virkailijat ja lakimiehet pääsevät käsiksi tähän tietoon. Asiakastieto on asiakkaisiin liittyvää tietoa. Muun muassa luottokorttitiedot kuuluvat tähän luokkaan. Yhtiö suojelee tätä tietoa yhtä vahvasti kuin omaa tietoaan. Datan luokittelu liittyy yleensä kiinteästi henkilökunnan luokitteluun. On siis määriteltävä henkilöryhmät ja sen jälkeen säännöt, mikä ryhmä pääsee lukemaan tai muuttamaan mitäkin tietoja. On myös mahdollista asettaa lisäehtoja erityisen tärkeille tai sensitiivisille muutoksille. Esimerkiksi voidaan vaatia, että tietyn muutoksen voi tehdä vain kahden henkilön ryhmä niin, että kummankin osasuoritus vaaditaan, ennenkuin muutos astuu voimaan. Luottamuksellinen tieto täytyy usein salata. Salauksen lisäksi täytyy valvoa, ettei tietoa muuteta vahingossa tai laittomasti. Tarvitaan siis eheystarkistuksia. 57
58 LUKU 4. DATAN TURVALLISUUS Suomen valtionhallinnossa asiakirjat jaetaan julkisiin ja salassa pidettäviin asiakirjoihin. Jälkimmäiset jaetaan vielä turvaluokiteltaviin ja muihin tietoihin tai asiakirjoihin. Muut tiedot ovat esimerkiksi henkilötietoja tai liikesalaisuuksia, joita ei voida kätevästi luokitella. Turvaluokiteltavat tiedot ovat joko luottamuksellisia, salaisia tai erittäin salaisia. Näitä luokkia luonnehditaan seuraavasti ([Val]): I turvaluokan asiakirja sisältää äärimmäisen arkaluonteista, salassa pidettävää tietoa. Tällainen asiakirja tulostetaan paperille, jonka poikki kulkee punainen vinoviiva ja sen jokaisen sivun ylälaitaan sijoitetaan leima tai merkintä Erittäin salainen. Leiman väri on punainen. Tällaisen asiakirjan vastaanottajana on aina henkilö/henkilöt, eivätkä sitä saa ilman aineiston omistajan lupaa käsitellä muut kuin vastaanottajiksi merkityt sekä tällaisen asiakirjan tekniseen (vastaanotto, arkistointi yms.) käsittelyyn vastaanottavassa virastossa tai laitoksessa oikeutetut henkilöt. I turvaluokan asiakirjaa ei toistaiseksi saa lähettää sähköisissä tietojärjestelmissä. Manuaalilähetyksessä lähettäjän on aina varmistettava, että lähetys on saapunut vastaanottajaksi merkitylle henkilölle II turvaluokan asiakirja sisältää erittäin arkaluonteista, salassa pidettävää tietoa. Tällainen asiakirja tulostetaan paperille, jonka poikki kulkee punainen vinoviiva ja sen ensimmäisen sivun ylälaitaan sijoitetaan leima tai merkintä Salainen. Leiman väri on punainen. Tällainen asiakirja voidaan osoittaa henkilölle tai organisaatiolle ja sitä saavat käsitellä vain ne henkilöt, jotka on virastossa oikeutettu käsittelemään salassa pidettäviä asioita. II turvaluokan asiakirjan saa lähettää vastaanottajalle sähköisissä tietojärjestelmissä ainoastaan riittävän vahvasti salattuna. III turvaluokan asiakirja sisältää salassa pidettävää tietoa. III turvaluokan asiakirja tulostetaan normaalille paperille ja sen ensimmäisen sivun ylälaitaan sijoitetaan leima tai merkintä Luottamuksellinen. Leiman väri on punainen. Tällainen asiakirja voidaan osoittaa henkilölle tai organisaatiolle ja sitä saavat käsitellä vain ne henkilöt, jotka tehtävässään tarvitsevat kyseisen asiakirjan sisältämiä tietoja. III turvaluokan asiakirjan saa lähettää vastaanottajalle sähköisissä tietojärjestelmissä riittävän vahvasti salattuna 4.2 Muutamista tiedosto-operaatioista Tietoa säilytetään tiedostoissa ja tiedostoja poistetaan, kopioidaan ja siirretäään. Koska joissakin tiedostoissa on luottamuksellista tietoa, on tärkeää, että kaikki näihin operaatioihin liittyvät piirteet tunnetaan. 4.2.1 Tiedostojen poisto Kun tiedosto poistetaan, joko tiedoston tieto tai tiedoston nimi poistetaan. Näillä kahdella on oleellinen ero.
4.2. MUUTAMISTA TIEDOSTO-OPERAATIOISTA 59 Määritelmä 4.2.1 Suora alias (direct alias, Unixissa kova linkki) on hakemistoalkio, joka osoittaa tiedostoon. Epäsuora alias (symbolinen linkki) on hakemistoalkio, joka osoittaa erityiseen tiedostoon, joka puolestaan sisältää kohdetiedoston nimen. Käyttöjärjestelmä tulkitsee epäsuoran aliaksen sijoittamalla erytyistiedostossa olevan nimen epäsuoran aliaksen hakemistoalkioon. Kaikki suorat, saman tiedoston nimeävät aliakset ovat samanarvoisia. Jokainen suora alias on saman tiedoston vaihtoehtoinen nimi. Tiedostojen sijainti hakemistossa vaikuttaa turvallisuuteen. Jos jokaisella suoralla aliaksella on eri oikeudet, tiedoston omistajan täytyy muuttaa jokaisen aliaksen pääsyoikeudet. Välttääkseen tämän useimmat systeemit liittävät tiedostoattribuuttien sisältämän tiedon varsinaiseen dataan, jolloin hakemistoalkiot sisältävät osoittimen tiedostoattribuuttitauluun. Kun käyttäjä poistaa tiedoston, hakemistoalkio poistetaan. Systeemi ylläpitää tietoa tiedostoon liittyvistä tiedostoattribuuteista ja kun näiden lukumäärä tulee nollaksi, tiedoston varaama tila vapautetaan. Toisin sanoen tiedoston tuhoaminen ei takaa, etteikö tiedostoon voisi vielä päästä käsiksi. Esimerkki. A käyttää Unix-pohjaista systeemiä. Hänellä on ohjelma runasa, jonka setuid kuuluu A:lle. A haluaa tuhota tiedoston niin, ettei kukaan voi enää lukea sitä. Jos hän nkäyttää komentoa rm runasa, tiedostoon liittyvä hakemistoalkio tuhotaan. Jos kenelläkään ei ole suoraa aliasta (kovaa linkkiä) tiedostoon, tiedosto poistetaan systeemistä. B on kuitenkin tehnyt suoran aliaksen tiedostoon. A on poistanut tiedoston, mutta yksi tiedostoon liittyvä hakemistoalkio on edelleen olemassa, joten tiedostoa ei poisteta. B voi edelleen ajaa ohjelmaa runasa. Koska ohjelman setuid on A, ohjelma käyttää A:n, ei B:n oikeuksia. Unixissa A voi tuhota B:n tiedostoja vain, jos B on antanut A:lle kirjoitusoikeudet hakemistoon. Jos A haluaa, ettei kukaan toinen voi ajaa hänen ohjelmaansa, hänen täytyy ensin muuttaa oikeuksia ja vasta sitten poistaa tiedosto eli chmod 000 runasa rm runasa Ensimmäinen komento poistaa kaikki oikeudet tiedostoon, mukaan lukien setuidoikeuden. Toisen komennon jälkeen B säilyttää kylläkin hakemistoalkionsa, tiedosto on edelleen olemassa, mutta kukaan ei voi sitä käyttää. Kun tiedosto poistetaan, sen varaama tila palautetaan käyttämättömien lohkojen joukkoon. Kuitenkin tieto jää lohkoihin ja jos hyökkääjä kykenee lukemaan noita lohkoja, hän pääsee käsiksi luottamuksellisiin tietoihin. Sen tähden arkaluonteiset tiedot on ensin pyyhittävä pois ennen tiedoston poistamista. Esimerkki. Monissa Windowsin ja Macintoshin systeemiohjelmissa on mekanismi, joka pyyhkii tiedoston ennen sen poistamista. Nämä mekanismit kirjoittavat
60 LUKU 4. DATAN TURVALLISUUS tiedostoon vanhan tiedon päälle tietyn bittijonon. On mahdollista määrätä, mitä bittijonoja käytetään ja kuinka monta kertaa päälle kirjoitetaan. Joissakin Unixin rm-versioissa on sama ominaisuus. Kolmas seikka, joka täytyy ottaa huomioon tiedostojen poistamisessa, on epärien aliasten olemassaolo. Kun tiedostoon liittyvä komento suoritetaan, vaikutus voi riippua siitä, onko komennon kohteena suora vai epäsuora alias. Pahimmassa tapauksessa käyttäjä uskoo, että tietty tieto on suojattu tai poistettu, vaikka suojaus tai poisto kohdistuukin epäsuoraan aliakseen eikä tietoon itseensä. Esimerkki. Oletetaan, että A lisää tiedoston lukuoikeuden L:lle. Jos hakemistoalkio on suora alias, L voi lukea tiedoston. Mutta entä jos hakemistoalkio on epäsuora alias? Vastaus riipuu systeemistä. Red Hat Linux 7.1:ssä chmod komento muutti epäsuoran aliaksen osoittaman tiedoston oikeuksia, kun taas rm poistaa epäsuoran aliaksen. 4.2.2 Tiedostojen kopiointi ja siirto Tarkastellaan kahta esimerkkiä Esimerkki. Unixin komento cp xyzzy plugh kopioi ensimmäisen tiedoston toiseen. Jos plugh ei ole olemassa, komento luo sen ja asettaa uuden tiedoston oikeudet samaksi kuin xyzzy:n. Kuitenkin setuid- ja setgidattribuutteja ei oteta huomioon. Jos plugh on jo olemassa, komento kopioi xyzzy:n myös siihen. Tämä voi olla turvallisuusongelma, jos xyzzy ei ole kaikkien luettavissa, mutta plugh on. Samanlaisia ongelmia voi syntyä mv-komennosta. Esimerkki. Tarkastellaan komentoa mv plugh /usr/ab/advent Jos hakemistoalkio sijaitsee samassa tiedostosysteemissä, suora alias poistetaan nykyisestä hakemistostaan ja viedään hakemistoon usr/ab/advent Muussa tapauksessa mv tekee operaatiot cp plugh /usr/ab/advent/plugh rm plugh Ensimmäisessä tapauksessa plugh-tiedoston oikeudet säilyvät. Toisessa tapauksessa ne voivat muuttua, kuten edellisessä esimerkissä nähtiin.
4.3. TIEDON EHEYDEN KÄSITE JA EHEYSTEKNIIKOITA 61 4.3 Tiedon eheyden käsite ja eheystekniikoita On tärkeää, että tieto ei muutu tai että tietoa ei muuteta, jos sen on tarkoitus pysyä vakiona. Tiedon eheyteen joudutaan kiinnittämään huomiota erityisesti tietoliikenteessä, mutta myös muistissa olevan tiedon varmistaminen tulee joskus kysymykseen. Tavalliset tarkistussummat eivät riitä tietoturvatarkasteluissa, koska ne eivät suojaa tiedon tahalliselta muuttamiselta (hyökkääjä voi muuttaa myös tarkistussummaa). Tarvitaan menetelmä, joka paljastaa tahattomat ja tahallaan tehdyt muutokset. Usein eheyteen liitetään vielä todennus: tiedon vastaanottaja pystyy varmasti näkemään, kuka tiedon on lähettänyt. Hyvä todennus toteuttaa lisäksi ehdon, ettei vastaanottaja voi itse väärentää sanomaa ja väittää, että se on tullut toiselta osapuolelta. Tarkastellaan seuraavia menetelmiä, joilla toteutetaan eheys ja todennus: salaus, tiivistefunktiot ja digitaalinen allekirjoitus, MAC-funktiot. 4.3.1 Tiedon salaus eheystekniikkana Jos selvätekstiä sisältävä tieto salataan ja salattua tietoa muutetaan, salauksen purku tuottaa mielivaltaisen bittijonon, joka ei ole selvätekstin esitystä. Näin salauksen purku paljastaa muutoksen ja salaus toimii eheyden takaajana. Lisäksi salaus todentaa lähettäjän, jos salausavain on yhteisesti sovittu, eikä se ole vuotanut ulkopuolisille. Voi olla kuitenkin vaikeaa automaattisesti päätellä, onko salauksen purun lopputulos oikeanlaatuista, jos alkuperäinen tieto on esimerkiksi binäärikoodia, röntgenkuvia tms. Tällaisissa tilanteissa tietoon voidaan liittää tarkistussumma (esimerkiksi CRC) ja vasta sitten salata. Toinen mahdollisuus on strukturoida tieto siten, että struktuuri on helppo havaita automaattisesti. Salaus ei kuitenkaan estä vastaanottajaa väärentämästä sanomaa, salaamasta sitä ja väittämästä, että se on tullut toiselta. Usein tietokoneverkkosovelluksissa osapuolilla ei ole valmiina yhteisiä salaisia avaimia, vaan niistä pitää sopia aluksi. Tämä hankaloittaa salauksen käyttöä eheyden takaajana. Myöskään aina ei tarvita luottamuksellisuutta, vaan tieto voitaisiin lähettää selväkielisenä perille, jos vain se menisi vastaanottajalle ehyenä. Sen tähden on hyvä erottaa luottamuksellisuus ja eheys/todennus toisistaan ja käsitellä niitä eri proseduureilla.
62 LUKU 4. DATAN TURVALLISUUS 4.3.2 Tiivistefunktiot Tiivistefunktio (engl. hash function) on kuvaus h, joka laskee sanomasta M tarkistuskentän h(m). M voi yleensä olla vaihtuvamittainen, sen sijaan h(m) on kiinteämittainen. Normaalisti h(m):n pituus on paljon lyhyempi kuin M:n. Tiivistefunktion h arvon laskemisessa ei tarvita salaisia avaimia. Funktio on kuitenkin yksisuuntainen eli h 1 (X) on vaikea laskea, vaikka h ja X tunnetaan. Tiivistefunktioita voidaan käyttää eheyden ja todennuksen yhteydessä. Tyypillisesti sanomasta lasketaan ensin tiivistefunktiolla tiiviste. Sen jälkeen tiiviste allekirjoitetaan digitaalisesti. Lähtevä sanoma koostuu selväkielisestä sanomasta plus allekirjoituksesta. Vastaanottaja laskee sanomasta myös tiivisteen ja sen jälkeen verifioi allekirjoituksen. Verifiointi tarkoittaa yleensä sitä, että allekirjoituksesta lasketaan alkuperäinen tiiviste. Nyt voidaan verrata itse laskettua tiivistettä ja allekirjoituksesta saatua tiivistettä. Jos nämä ovat samoja, tieto on tullut eheänä perille ja allekirjoitus vielä vahvistaa lähettäjän. Myöskään vastaanottaja ei voi väärentää allekirjoitusta, joten lähettäjän ei tarvitse pelätä väärennöksiä. Mikäli luottamuksellisuutta ei tarvita, salausta yritetään välttää useista syistä: Salausohjelmat ovat hitaita. Piiritason AES- yms. toteutukset ovat melko tehokkaita, mutta näidenkin kustannukset tuntuvat, jos salausta tarvitaan kaikissa verkon solmuissa. Salauslaitteisto on optimoitu suurten datamäärien salaukseen. Jos salattavana on pieni lohko, suurin osa ajasta menee alustukseen. Salausalgoritmi voi olla patentoitu kuten oli RSA:n tapauksessa. Tämä lisää kustannuksia. Salausalgoritmen vientiä säädellään (nykyään paljon vähemmän kuin esim. 1980-luvulla). Seuraava luettelo listaa tiivistefunktioilta vaadittavat ominaisuudet: 1. h(m) voidaan laskea minkä pituiselle M tahansa. 2. h(m) on kiinteän pituinen. 3. h(m) on helppo laskea. 4. Jos annetaan y, ei ole helppoa löytää sellaista M:ää, että h(m) = y. Eli h on alkukuvaresistentti (h has preimage resistance). 5. Jos on annettu y ja M 1, ei ole helppoa löytää sellaista M 2 M 1, että h(m 1 ) = h(m 2 ). Eli h on injektiotyyppinen (h has second preimage resistance). 6. On vaikeaa löytää mitään paria (M, M ), jolle h(m) = h(m ). Eli h on törmäysresistentti (collision resistance).
4.3. TIEDON EHEYDEN KÄSITE JA EHEYSTEKNIIKOITA 63 Käytännön tiivistefunktio toteutetaan samaan tapaan kuin symmetrinen salaus. Erona on, että lopputulosta ei tarvitse enää purkaa niinkuin salauksessa. Siten teksti jaetaan lohkoihin, lohkoja yhdistellään binäärioperaatioilla, välillä suoritetaan rekisterien sivuttaissiirtoja jne. MD5 MD5-tiivistealgoritmin on suunnitellut Ron Rivest MIT:ssä 1991. Se on muunnos MD4:stä, joka ilmestyi vuotta aikaisemmin. MD5 on Internetin RFC 1321 -standardi ja se on ollut eniten käytetty tiivistemenetelmä. Sitä on pidetty hieman liian lyhyenä, sillä tiivisteen pituus on 128 bittiä. Nämä aavistelut osoittautuvat todeksi, sillä 17.8.2004 Xiaoyun Wang, Dengguo Feng, Xuejia Lai ja Hongbo Yu julkistivat onnistuneen yrityksensä, jossa saatiin aikaan yhteentörmäys käytettäessä täyttä MD5:ta (http://eprint.iacr.org/2004/199). Seuraavaksi Arjen Lenstra, Xiaoyun Wang ja Benne de Weger konstruoivat 1.3.2005 kaksi X.509 varmennetta, joissa oli eri julkiset avaimet, mutta sama MD5-tiiviste. Tämä oli hyvin konkreettinen osoitus, ettei MD5 ole törmäysvapaa. Muutamia päiviä myöhemmin Vlastimil Klima paransi algoritmia ja osoitti, että MD5-törmäyksiä voitiin generoida muutamassa tunnissa kämmenmikrolla (http://eprint.iacr.org/2005/075). Nämä hyökkäykset vaativat, että molemmat viestit konstruoidaan yhdessä törmäyksen aikaansaamiseksi. Menetelmät eivät sovellu siihen, että ensin on annettu yksi viesti ja sille yritetään etsiä pari, jonka aiheuttaa yhteentörmäyksen. Siten edelliset tulokset eivät suoraan romuta menetelmiä, joissa käytetään MD5:ta, mutta jatkossa MD5:tä tuskin tullaan enää käyttämään uusissa tuotteissa. SHA SHA (Secure Hash Algorithm) on toinen yleinen tiivistealgoritmi. Sen on kehittänyt NIST (National Institute of Standards and Technology) USA:ssa. Tiivisteen pituus 160 bittiä, joten se on MD5:tä turvallisempi. Rakenteeltaan sekä MD5 että SHA ovat läheistä sukua. SHA:sta on useita versioita. Alkuperäistä, vuonna 1993 esiteltyä tiivistefunktiota kutsutaan joko SHA:ksi tai SHA-0:ksi. Vuonna 1995 esiteltiin SHA-1 ja sen jälkeen SHA-224, SHA-256, SHA-384 ja SHA-512. Näitä jälkimmäisiä kutsutaan joskus kollektiivisella nimellä SHA-2. Vuonna 1998 ranskalaiset Chabaud ja Joux esittelivät hyökkäyksen, jossa löydettiin SHA-0:ssa törmäävä pari vaativuudella 2 61. Tämä oli oleellisesti vähemmän kuin odotusarvo 2 80. Vuosina 2004 ja 2005 tulosta on parannettu huomattavasti. Paras tulos tähän asti on Xiaoyun Wangin, Yiqun, Lisa Yinin ja Hongbo Yun tulos helmikuulta 2005, jossa löydettiin SHA-0:ssa törmäävä pari käyttämällä 2 39 operaatiota. Viimeksi mainittu kolmikko löysi myös törmäävän parin SHA-1:ssä helmikuussa 2005 käyttämällä 2 69 operaatiota odotusarvon 2 80 sijasta. Tätä on vielä voitu tehostaa. Xiaoyun Wang, Andrew Yao ja Frances Yao esittelivät 17.8.2005 hyökkäyksen,
64 LUKU 4. DATAN TURVALLISUUS jossa tuotettiin törmäävä pari 2 63 operaatiolla. Nämäkään hyökkäykset eivät vielä täysin romuta SHA-1:tä. Hyökkäykset ovat kuitenkin osoitus, että uusia tiivistefunktioita tarvitaan ja että tiivistefunktioiden konstruointi ei ole yksinkertaista. NIST on myös antanut suosituksen, ettei näitä murrettuja tiivistemenetelmiä käytetä digitaalisen allekirjoituksen yhteydessä. Ripemd RIPEMD-160 on Euroopan unionin RIPE-projektissa 1996 kehitetty tiivistealgoritmi. Se on parannus alkuperäiseen RIPEMD-funktioon, joka tuotti 128 bitin tiivisteitä ja joka on todettu haavoittuvaksi. Uudella versiolla saadaan joko 128 bitin tai 160 bitin tiivisteitä. Menetelmää ei ole patentoitu. Se ei kuitenkaan ole ollut niin suosittu kuin SHA ja MD5. Sille on myös löydetty törmäävä pari (Xiaoyun Wang, Dengguo Feng, Xuejia Lai, Hongbo Yu, elokuu 2004). 4.3.3 MAC-funktiot MAC-koodi (Message Authentication Code) on tiiviste, joka liitetään sanomaan, jotta vastaanottaja voisi varmistaa alkuperäisen lähettäjän. Tiivisteen laskemisessa käytetään salaista parametria. Ensimmäiset MAC-koodit generoitiin salauksen avulla CBC- tai CFC-moodia käyttäen. Tällöin vastaanottajalla ja lähettäjällä täytyi olla sama salainen avain. Salalohkot laskettiin vielä yhteen, joten lopputulos oli salalohkojen summa. Toinen tapa muodostaa MAC on käyttää hajautusta salaisen avaimen kanssa. Toisin sanoen sanomasta lasketaan tiiviste, mutta laskennassa käytetään myös salaista avainta pelkän sanoman lisäksi. Esimerkiksi MD5:ta ja SHA:ta on käytetty tällä tavoin MAC:in muodostamiseen. Sitten on vielä esimerkiksi MAA-algoritmi, joka on ISO-standardi 8731-2. Sen laskenta muistuttaa tiivisteen laskemista salaisen avaimen kera. MAC-menetelmän avulla tiedon eheys voidaan varmistaa, sillä kukaan kuin salaisen avaimen omistajat eivät pysty laskemaan tiivistettä. Toisaalta MAC ei estä vastaanottajaa väärentämästä sanomaa ja MAC arvoa. Näyttääkin siltä, että digitaalinen allekirjoitus on suosituin menetelmä, joka samalla takaa eheyden, varmistaa lähettäjän ja estää myös vastaanottajan väärennökset. 4.4 Tiedon salaus Tiedon luottamuksellisuus taataan usein salauksella. Tiedonvälityksessä julkisessa tietokoneverkossa se on ainoa mahdollisuus. Seuraavassa katsomme muutamia perusasioita salauksesta.
4.4. TIEDON SALAUS 65 4.4.1 One time pad One time pad tai Vernamin salaus on siitä harvinainen salausmenetelmä, että se on 100% varma murtamista vastaan. Siksi se on ollut käytössä mm. kuumalla linjalla Moskova-Washington 1980-luvun loppupuolelle asti. Menetelmällä on kuitenkin haittapuolia, josta syystä sitä ei enää käytetä sellaisenaan. Se on syytä kuitenkin pohjana monille nykyaikaisille salausmenetelmille. Olkoon selväteksti P koodattu bittijonoksi b 1 b 2 b n. Olkoon avain k saman pituinen satunnainen bittijono k 1 k 2 k n. Salateksti C = c 1 c 2 c n saadaan nyt salaamalla biteittäin c i = b i + k i, i = 1,, n, missä yhteenlasku tarkoittaa yhteenlaskua modulo 2 eli 0 + 0 = 0, 1 + 0 = 1 ja 1+1 = 0. Menetelmä on täysin varma, sillä jos k on tuntematon, jokainen selväteksti on yhtä todennäköinen. Menetelmällä on kuitenkin haittansa, sillä avaimen tulee olla yhtä pitkä kuin selväteksti ja avainta voi käyttää vain kerran. Avain on siis jaettava etukäteen ja aikoinaan käytettiinkin useita paperinauhoja avainten säilömiseen. Toisen maailmansodan aikana vakoilutuomioon riittikin se, että hallusta löytyi satunnaisia merkkijonoja sisältävää materiaalia. Vernamin salausta käytettiin yhteen aikaan venäläisten diplomaattien välisessä kommunikoinnissa. Yhdysvaltalaiset käynnistivät murtoprojektin tätä salausta vastaan 1943, mikä saattaa vaikuttaa omituiselta, koska menetelmä on periaatteessa murtamaton. Osoittautui kuitenkin, että venäläiset käyttivät samaa avainta kahteen kertaan. Tämä johtui aikapulasta, sillä useiden nauhojen valmistaminen oli tuohon aikaan hidasta. Jos c ja c ovat selvätekstien p ja p salauksia samalla avaimella k, niin c c = (p k) (p k) = (p p ) (k k) = p p. Salateksteistä saadaan siis selvätekstien summa selville. Jos selvätekstit on kirjoitettu luonnollisella kielellä, tämä summa ei ole tasaisesti jakautunut, joten voidaan päätellä, että salatekstit on kirjoitettu samalla avaimella. Jos voidaan arvata tai ennustaa osia selväteksteistä, tekstien summasta saadaan selville suurin osa selväteksteistä. Käytännössä tilanne oli hankalampi, sillä selvätekstit käsiteltiin ensin salaisella menetelmällä ja henkilöistä käytettiin koodinimiä. Vuosien 1943 ja 1980 välillä 3000 sanomaa murrettiin kaikkiaan 25 000 sanomasta. Jotkut näistä sanomista sisälsivät arkaluonteista tietoa vakoojista. Tämä projekti tehtiin julkiseksi vasta vuonna 1995. Tietokonesalaukselle täytyykin asettaa lisäehtoja: Avain on kohtuullisen kokoinen (< 250 bittiä kaupallisissa sovelluksissa, sotilaallisissa voi olla suurempikin). Avainta on voitava käyttää useaan kertaan.
66 LUKU 4. DATAN TURVALLISUUS Salaus on nopeaa ja salauspiirit halpoja. Salauksella tulee olla hyvät diffuusio-ominaisuudet eli yksi selvätekstin bitti vaikuttaa moneen salatekstin bittiin niin, että selvätekstin tilastollinen rakenne häviää. Lisäksi salauksella tulee olla hyvät sekoitusominaisuudet eli on vaikeaa päätellä, miten salatekstin tilastollinen rakenne riippuu selvätekstin tilastollisesta rakenteesta. 4.4.2 Jonosalaajat Additiiviset jonosalaajat ovat salausmenetelmiä, joissa salaus koostuu avaimen ja selvätekstin bittien yhteenlaskusta. Eli periaate on sama kuin Vernamin salauksessa, mutta satunnainen avain korvataan pseudosatunnaisella avaimella, joka on generoitu lyhyestä avaimesta. Jonosalaajat ovat olleet suosittuja 20. vuosisadalla. Niiden etuna on nopeus, sillä ne operoivat merkki merkiltä. Vuosina 1960-1990 LFSR-pohjaiset (Linear Feedback Shift Registers) jonosalaajat olivat suuressa suosiossa. Näitä salaajia voidaan soveltaa tilanteissa, joissa nopeus on tärkeämpää kuin salauksen luotettavuus. Esimerkiksi jonosalaajat A5/1 ja A5/2 ovat käytössä GSM-puheluissa. Näitä algoritmeja yritettiin pitää salassa, mutta ne paljastuivat tietenkin melko nopeasti ja osoittautuivat aika heikoiksi. Esimerkkinä LFSR-pohjaisesta salausavaimen generoinnista esitetään seuraava yksinkertainen tapaus. Eräs mielivaltaisen tuntuinen bittijono saadaan ottamalla käyttöön viisi muuttujaa ja antamalla niille alkuarvot Soveltamalla lineaarista rekursioyhtälöä x 1 = 0, x 2 = 1, x 3 = 0, x 4 = 0, x 5 = 0. x n+5 = x n + x n+2 ( mod 2) saadaan generoitua uusia bittejä, jotka alkavat toistua 31. kierroksen jälkeen. Rekursioyhtälö x n+31 = x n + x n+3 puolestaan generoi bittijonon, jonka jakso on 2 31 1. Siten 62 bitin avaimesta saadaan generoitua yli kahden miljardin bitin pituinen avain, jota voidaan käyttää Vernamin salauksessa. Rekursioyhtälön mukaiset bittiarvot voidaan tehokkaasti laskea konekielitasolla käyttäen rekisterien sivuttaissiirtoja ja XOR-yhteenlaskua. Yllä olevia periaatteita noudattavat salausmenetelmät näyttävät olevan helpompia murtaa kuin myöhemmin esitettävät ns. lohkosalaajat. Ottamalla käyttöön epälineaarisia rekursioyhtälöitä, esimerkiksi x n+3 = x n+2 x n + x n+1,
4.4. TIEDON SALAUS 67 murtaminen tulee hankalammaksi. Ron Rivest kehitti 1987 jonosalaajan RC4, joka perustuu täysin toisille periaatteille. RC4 suunniteltiin 8 bitin mikroprosessoreille ja se pidettiin aluksi salaisena. Menetelmä paljastui 1994 ja nykyään sitä käytetään paljon selaimissa (TLSprotokolla). Menetelmästä on löydetty useita tilastollisia heikkouksia, mutta varsinaista avainta hyökkäyksillä ei ole pystytty paljastamaan. Viime vuosina on esitelty lukuisia jonosalaajia, jotka on suunniteltu ohjelmointipohjaisiin sovelluksiin 32-bittisille prosessoreille ja joiden pitäisi olla melko turvallisia. Mikään ehdotus ei ole kuitenkaan edennyt stardardiksi tai de facto standardiksi. Silti nämä menetelmät ovat tärkeitä, kun prosessorissa on harvoja piirejä tai kun halutaan erittäin suurta nopeutta. Siitä syystä jonosalaajien kehittäminen on tärkeä tutkimusalue lhitulevaisuudessakin. 4.4.3 Lohkosalaajat Lohkosalaajat eroavat jonosalaajista siinä, että selväteksti jaetaan lohkoihin, joiden pituus on tyypillisesti 64 tai 128 bittiä. Jokainen lohko salataan samalla tavalla. Lohkot lähetetään sitten vastaaottajalle, yleensä jollain tavalla ketjutettuna, jottei vastustaja pääse muuttamaan lohkojen järjestystä eikä kahdentamaan lohkoja. Nykyisin laajimman käytön on saanut AES eli Rijndael. Se oli yllätysvoittaja Yhdysvaltojen järjestämässä kilpailussa uudeksi salausstandardiksi. NIST:in järjestämä kilpailu alkoi tammikuussa 1997 ja Rijndael julistettiin voittajaksi huhtikuussa 2000. Voittajamenetelmän olivat suunnitelleet belgialaiset Joan Daemen ja Vincent Rijmen. Ensimmäiselle kierrokselle hyväksyttiin 15 ehdotusta, joissa oli mukana 11 eri maata. Vuonna 1999 valittiin viisi finalistia, joita olivat Rijndael (BE), Serpent (UK-IL-DK), Twofish (USA), RC6 (USA), Mars (USA). Finalistien arvostelussa huomiota kiinnitettiin erityisesti software- ja hardware-tason implementointiin. Lopulta voittajaksi selviytyi Rijndael. Rijndael käyttää lohkosalausta. Tämä tarkoittaa, että selväteksti jaetaan tietyn pituisiin lohkoihin, jotka sitten salataan järjestyksessä. Lohkon koko voi vaihdella samoin kuin avaimen pituuskin. Lohkon ja avaimen pituus voi olla mikä tahansa 32:n monikerta, minimin ollessa 128 bittiä ja maksimin 256 bittiä. Menetelmä on kuvattu tarkasti lähteissä [Sta03] ja [DaR02]. AES:ää on pidetty turvallisena. Kilpailu oli avoin ja ehdokkaat altistettiin kansainväliselle vapaalle arvostelulle. Koska mitään selvää heikkoutta ei ole havaittu ja useita vuosia on jo kulunut, on todennäköistä, ettei menetelmä sisällä selviä heikkouksia. On kuitenkin yksi menetelmä, jossa on tultu vaarallisen lähelle murtamista. Algebrallinen lähestymistapa on tekniikka, jossa muodostetaan yhtälöryhmä sen mukaan, miten salausmenetelmä toimii. Myös 128 bittisestä Rijndaelista on tehty algebrallinen analyysi ja tulokseksi on saatu yhtälöryhmä, jossa on 16 000 tunte-
68 LUKU 4. DATAN TURVALLISUUS matonta ja 8000 toisen asteen yhtälöä ([CoP]). Kysymyksessä on siis Diofantoksen yhtälö(ryhmä). Tällaisille yhtälöryhmille ei ole yleistä ratkaisumenetelmää kuten Ju. V. Matijasevits osoitti jo 1970 (ratkaistessaan tämän ns. Hilbertin 10. probleeman). Ei sen sijaan ole varmaa, etteikö jotain erikoistapausta voisi ratkaista. Itse asiassa hieman tekniikkoja muutellen saadaan erilaisia yhtälöryhmiä, jotka kaikki on johdettu AES:sta. Uuden salausstandardin AES:in turvallisuus siis riippuu näistä yhtälöryhmistä, jotka voidaan kenties ratkaista jonain päivänä. AES:ssä on kuitenkin yksi heikkous, joka olisi pitänyt huomata jo arvosteluvaiheessa. Nimittäin Daniel Bernstein löysi sivukanavahyökkäyksen. Seuraamalla tunnetun selvätekstin salaamiseen tietokoneelta kuluvaa aikaa yksityiskohtaisesti (välimuistin käyttöä laskennan aikana) voidaan avain paljastaa täydellisesti. Tämä hyökkäysmahdollisuus johtuu ennenkaikkea AES:n rakenteesta, eikä erityisestä ohjelmakirjastosta, jota käytetään. On erittäin hankalaa kirjoittaa yleiselle tietokoneelle ohjelmistoa, joka kuluttaisi vakioajan eri operaatioihin. 4.4.4 Symmetrinen salaus käytännössä ECB Yksinkertaisimillaan salausta käytetään siten, että selväteksti jaetaan esim. 128:n (AES) bitin lohkoihin, jokainen lohko salataan erikseen ja lohkot lähetetään vastaanottajalle. Kysymyksessä on ns. elektroninen koodikirja, ECB. Tällä menetelmällä on kuitenkin huonoja puolia: Säännöllisyydet saattavat näkyä salatekstissä. Esimerkiksi rahansiirrossa summa saattaa olla aina samalla paikalla. Suurista summista voi olla tietoa jne. Jotta esitetyiltä ongelmilta vältyttäisiin, pyritään salalohkot ketjuttamaan niin, että yksi salalohko vaikuttaa kaikkien muiden seuraavaksi tulevien koodaukseen. Näin sekoitusominaisuudet paranevat, eikä vakio-osia ole enää mahdollista paikantaa. Näitä ns. ketjutustekniikoita voidaan käyttää minkä tahansa symmetrisen lohkosalausmenetelmän kanssa. Salalohkojen ketjutus Salalohkojen ketjutuksessa (engl. cipher block chaining, CBC) selväteksti jaetaan lohkoiksi, joita ruvetaan salaamaan järjestyksessä. Nyt kuitenkin käytetään apuna yhteenlaskua modulo 2. Aina kun lohko on salattu, salattu lohko lasketaan yhteen modulo 2 seuraavan selvätekstilohkon kanssa, joka salataan vasta tämän jälkeen. Kaaviona salaus- ja purkuprosessi ovat seuraavan kuvan mukaisia (lohkon pituus kuvioissa 64, todellisuudessa esim. 128). Vastaavasti kaavoina:
4.4. TIEDON SALAUS 69 64 b varasto 64 bitin varasto C n 1 k k C n 1 P n E C n D Q n Kuva 4.1: CBC C n = E K (P n C n 1 ), Q n = D K (C n ) C n 1, D K (C n ) = P n C n 1, Q n = P n C n 1 C n 1 = P n. Ensimmäisen ja viimeisen lohkon käsittely vaatii erikoiskäsittelyä. Otetaan käyttöön 64 bitin alustusmuuttuja I, jota käytetään ensimmäisen selvälohkon salauksessa: C 1 = E K (P 1 I), Q 1 = D K (C 1 ) I. Yleensä alustusmuuttuja I on salainen. Viimeinen selvälohko on täydennettävä 64- bittiseksi. Tämä voidaan tehdä lisäämällä nollia tai satunnainen bittijono. Ketjutuksessa tiedonsiirtovirheet leviävät laajemmalle kuin elektronisen koodikirjan tapauksessa. Oletetaan, että n. salalohkossa tapahtuu yhden bitin tiedonsiirtovirhe. Merkitään C n virheetön salalohko, C n yhden bitin virheen sisältävä salalohko, Q n selvälohko purkamisen jälkeen, Q n täysin virheellinen lohko purkamisen jälkeen, Q n yhden bitin virheen sisältävä selvälohko. Nyt tiedonsiirtovirheen vaikutus selviä seuraavista kaavoista: D K (C n) C n 1 = Q n, D K (C n+1 ) C n = Q n+1, D K (C n+2 ) C n+1 = Q n+2.
70 LUKU 4. DATAN TURVALLISUUS Siirtorekisteri Siirtorekisteri k 64 64 E E 8 8 64 64 k Valitse vasen oktetti Valitse vasen oktetti 8 8 8 8 8 8 Selvä Sala Selvä Kuva 4.2: CFC Eli yksi selvälohko tuhoutuu täysin ja yhdessä on yhden bitin virhe. Muut lohkot selviävät vaurioitta. Salauksen takaisinkytkentä Salauksen takaisinkytkentää (engl. cipher feedback chaining, CFC) käytetään, kun salaus tapahtuu merkki merkiltä tai bitti bitiltä. Oletetaan, että merkin pituus on m bittiä. Yleensä m = 8. Menetelmän idea käy selville seuraavasta kaaviosta. Ensimmäisen oktetin kohdalla käytetään alustusmuuttujaa I, jonka pituus on sama kuin salausjärjestelmän lohkon pituus. Alustusmuuttuja sijoitetaan valmiiksi siirtorekisteriin. Se on luonnollisesti vaihdettava tarpeeksi usein. Edellisten merkintöjen lisäksi merkitään: S n siirtorekisterin sisältö n. kierroksella, L n on E K (S n ):n m vasenta bittiä. Analysoidaan taas tiedonsiirtovirheen vaikutusta. Oletetaan, että n. kierroksella tapahtuu yhden bitin virhe salalohkossa. Tällöin kun M = 8: S n ja L n kunnossa, mutta C n L n = Q n eli selvälohkoon tulee n. kierroksella yhden bitin virhe; kierroksilla n + 1,, n + 8 tilanne on S i ja L i, i = n + 1,, n + 8; Siten i = n + 1,, n + 8; kierroksella n + 9 kaikki on kunnossa. Siis virhe vaikuttaa 9 oktettiin. C i L i = Q i,
4.4. TIEDON SALAUS 71 Laskurimoodi Laskurimoodi eli CTR on saavuttanut suosiota viime aikoina, joskin se on vanha ehdotus. Salaus tapahtuu nyt muodossa missä P i on i.s selvälohko, L i on laskurin arvo i. kierroksella, C i = P i E(K, L i ), K on salainen, symmetrinen avain ja on XOR-operaatio. Tyypillisesti laskurilla on jokin sovittu alkuarvo, joka kasvatetaan joka kierroksella yhdellä. Mitään ketjutusta ei ole käytössä. Menetelmällä on etuja: Laitteistotason tehokkuus. Ohjelmallinen tehokkuus. Esiprosessointi mahdollista (salaus). Lohkot voidaan prosessoida satunnaisessa järjestyksessä. CTR:n voidaan näyttää olevan ainakin yhtä vahva kuin muut ketjutusmenetelmät, jotka ovat olleet esillä. Tarvitaan vain salauksen toteutus, ei purun toteutusta.
72 LUKU 4. DATAN TURVALLISUUS
Luku 5 Verkkojen tietoturva 5.1 Tyypillisen hyökkäyksen eteneminen verkossa Tässä luvussa katsotaan, miten heikkouksia ja hyökkäyskohteita voidaan etsiä verkosta. Nykyään suuri osa hyökkäysten valmistelusta ja suorituksesta on automatisoitu. Toisaalta viime vuosina harmia aiheuttaneet botnet-verkot leviävät eri tavalla, mutta tässä ei tarkastella niitä. 5.1.1 Verkon rakenteen selvittäminen Eräs hyökkääjän ensimmäisistä tavoitteista on saada tietoa verkon isäntäkoneista. Tämä tieto sisältää mm. ne IP-osoitteet, jotka ovat käytössä, koneiden käyttöjärjestelmät ja tarjotut palvelut. Verkon kartoitus tarkoittaa toimintaa, jolla saadaan selville verkon isäntäkoneet, kun taas tunnustelu (probing) tarkoittaa toimintaa, jolla pyritään saamaan tietoa yksittäisestä koneesta. Tyypillinen hyökkäys etenee siten, että ensin kartoitetaan verkkoa aktiivisten koneiden selville saamiseksi. Sen jälkeen koneita tunnustellaan. Tavoitteena on saada selville palvelu, jolla on tunnettuja heikkouksia turvallisuudessa. Lopuksi tehdään varsinainen hyökkäys valittua konetta ja palvelua vastaan. 5.1.2 Verkon kartoitus Yksinkertaisin kartoitusmenetelmä on yleislähettää ping-sanoma ja katsoa, kuka vastaa. Jos kohdeverkko on luokan B verkko 10.10.x.x, hyökkääjä lähettää esimerkiksi paketin 11:42:16.33 attacker.com > 10.10.255.255 ICMP: Echo Request Useita paketteja lähetetään, jolla varmistetaan, että mahdollisimman moni saa paketin. Lähdeosoitetta ei voi väärentää, sillä vastaussanomien täytyy saapua hyökkääjälle. Hyökkääjä voi kuitenkin lähettää samalla paketteja, joissa on väärennetty lähdeosoite. 73
74 LUKU 5. VERKKOJEN TIETOTURVA Tämä vaikeuttaa todellisen hyökkääjän selville saamista. Tällainen hyökkäys on helppo havaita ja palomuuri voidaan virittää siten, ettei se päästä läpi yleislähetyksiä. Toinen tapa hyökätä on lähettää paketti jokaiselle mahdolliselle koneelle verkossa. Hyökkääjä valitsee TCP:tä käyttävän portin, josta pääsee palomuurin läpi kohdekoneille. Sen jälkeen hän alkaa lähettää paketteja jokaiseen mahdolliseen IPosoitteeseen. Oletetaan, että palomuuri sallii telnet-yhteyden (portti 23) jokaisesta ulkopuolisesta IP-osoitteesta. Tällöin ensimmäiset paketit voisivat näyttää seuraavilta: 11:47:34.09 attacker.com.2213 > 10.10.1.1.23 S 11:47:34.19 attacker.com.2213 > 10.10.1.2.23 S 11:47:34.27 attacker.com.2213 > 10.10.1.3.23 S jne Tämäkin on helppo havaita, jos hyökkääjä on noin yksinkertainen. Jos kohdekoneet valitaankin satunnaisesti ja paketit lähetetään epäsäännöllisin välein, hyökkäys voi olla vaikea havaita. Oveluudella on kuitenkin rajansa. Jos verkossa on 65 000 mahdollista konetta ja lähetetään yksi paketti minuutissa, kestää puolitoista kuukautta käydä kaikki läpi. Jos hyökkäjä on näin kärsivällinen, menetelmä saattaa toimia. Ei kuitenkaan tarvita kuin yksi valpas ylläpitäjä, joka näkee yhteyspyynnöt ja tulee uteliaaksi. Siten minuutin väli ole aina riittävä. On mahdollista hyökätä vielä älykkäämmin. Hyökkääjän kannalta on riittävää löytää pieni määrä koneita, jolloin hidas ja satunnaistettu kartoitus onnistuu paremmin. Etsintä lopetetaan, kun riittävä määrä koneita on löytynyt. On muitakin tapoja tehdä kartoitus vaikeasti havaittavaksi. Edellä kuvatuissa lähetyksissä käytettiin SYN-paketteja, joista pidetään kirjaa monissa koneissa. Samoin monet tunkeutumisen estojärjestelmät seuraavat näitä paketteja. Vaihtamalla lippua tehdään havaitseminen vaikeammaksi: 10:47:34.33 attacker.com.2213 > 10.10.17.121.23 S ack 11:13:21.24 attacker.com.2213 > 10.10.3.207.23 S ack 12:11:11.53 attacker.com.2213 > 10.10.51.14.23 S ack Tässä tapauksessa näyttää siltä, että hyökkäjä vain vastaa yhteyspyyntöihin verkon sisältä. edelleen voidaan lisätä älykkyyttä muokkaamalla paketteja niin, että ne näyttävät tulevan Web-palvelimelta surfailun tuloksena (portti 80): 10:47:34.33 attacker.com.80 > 10.10.17.121.23 S ack 11:13:21.24 attacker.com.80 > 10.10.3.207.23 S ack 12:11:11.53 attacker.com.80 > 10.10.51.14.23 S ack Jotta tällainen hyökkäys havaittaisiin, tunkeutumisen estojärjestelmän tulee olla joko tilat muistava (muistaa, ettei ollut SYN-paketteja, joihin odotetaan vastauksia) tai pitää kirjaa kaikista aktiivisista verkon koneista. Toinen vaihtoehto on lähettää reset-paketteja:
5.1. TYYPILLISEN HYÖKKÄYKSEN ETENEMINEN VERKOSSA 75 11:47:34.09 attacker.com.2213 > 10.10.17.121.23 R 11:53:43.12 attacker.com.2213 > 10.10.3.207.23 R 12:31:24.01 attacker.com.2213 > 10.10.51.14.23 R Reset-paketit ilmaisevat, että jotain on mennyt vikaan yhteyden solmimisessa. Nämä paketit läpäisevät useimmat palomuurit, joskin tilat muistava palomuuri pystyy päättelemään, ettei ollut mitään yhteysyrityksiä, joten reset-paketit voidaan hylätä. Näitä paketteja ei myöskään kirjata ylös niin usein kuin esim. SYN-paketteja. Ne ovat myös tarpeeksi yleisiä niin, etteivät tunkeutumisen estojärjestelmät kiinnitä niihin huomiota. Ellei systeemi ole tilansa muistava, on hyvät mahdollisuudet, että tällainen hyökkäys menee läpi. Reset-hyökkäyksistä on itse asiassa monia versioita. Näitä on käsitelty artikkelissa [Gre99]. 5.1.3 Sormenjäljet Sormenjäljet tarkoittaa yksityiskohtia, joita käyttöjärjestelmät jättävät paketteihin. Ohjelmien avulla voidaan seurata näitä paketteja ja päätellä käyttöjärjestelmä. Sormenjälkien selvittely voidaan tehdä hyvin deterministisesti. Eri käyttöjärjestelmät reagoivat eri tavalla eri ärsykkeisiin, ja tätä voidaan käyttää hyväksi käyttöjärjestelmää ja sen versiota määriteltäessä. On kuitenkin tilanteita, joissa myös tilastollisilla menetelmillä on merkitystä. Hyvä yleislähde somenjälkiin on [Tro03]. Perustekniikkka on lähettää paketti, jossa on outo lippukombinaatio. Eri KJ:t vastaavat outoihin kombinaatioihin eri tavalla. Esimerkiksi odottamaton FIN-paketti saa aikaan joissakin systeemeissä vastauksen, vaikkakin oikeaoppinen tapa olisi hylätä paketti. Vanhat Linux-versiot toistivat oudot lippukombinaatiot vastauspaketeissaan. Toinen tapa erotella käyttöjärjestelmiä on tutkia pakettien järjestysnumerointia. Numerointi voi olla satunnaista tai determinististä. Keräämällä tilastoa koneen lähettämistä paketeista voidaan koneita jakaa erilaisiin luokkiin. Tämä tapa on passiivista sormenjälkien tunnistamista, koska siinä ei lähetetä omia paketteja. Samoin se vaatii suuren määrän paketteja, ennenkuin johtopäätökisä voidaan tehdä. Monet KJ:t asettavat oletusarvoisesti don t fragment -bitin. Toiset taas asettavat ne vain tietyissä tilanteissa. Uudet KJ:t asettavat bitin useammin kuin vanhat. Käyttöjärjestelmillä on eri vaihtoehtoja virhetilanteista raportointiin ICMP:n avulla. Jos esimerkiksi kone saa suuren määrän paketteja suljettuun pporttiin, sen ei tarvitse generoida sanomaa ICMP destination unreachable jokaiselle. Eri KJ:t tekevät erilaisia valintoja näissä tilanteissa. Valinnainen kenttä (options field) on hyvä lähde sormenjäljille. Koska kenttä on valinnainen, sen toteutus on vapaata. Siten kentän piirteet antavat paljon tietoa KJ:tä määriteltäessä. Muita yksityiskohtia, joita voidaan käyttää sormenjälkien tunnistamisessa, ovat TTL-kenttä (time to live), ikkunan koko, palvelun tyyppi ja urgent-osoitin. Nämä
76 LUKU 5. VERKKOJEN TIETOTURVA sopivat erityisesti passiiviseen lähetymistapaan. 5.1.4 Tunnustelu Useilla palveluilla on tunnetut heikkoutensa, joita hyökkääjä voi käyttää hyväkseen. Eri versioilla on eri heikkoudet, joten ei riitä, että löydetään tietty palvelu tietyssä koneessa, vaan on lisäksi selvitettävä palvelun versio. Aluksi hyökkääjä selvittää palvelut porttiskannauksen avulla. Yksinkertaismillaan voidaan tutkia kaikki portit, mutta tämä on helppo havaita. Parempi menetelmä on tutkia vain ne portit, joita voidaan käyttää hyväksi: 13:12:22:33 attacker.com.2113 > 10.10.17.121.telnet S 13:12:22:54 attacker.com.2114 > 10.10.17.121.smtp S 13:12:22:73 attacker.com.2115 > 10.10.17.121.finger S 13:12:22:97 attacker.com.2116 > 10.10.17.121.http S 13:12:23:13 attacker.com.2117 > 10.10.17.121.imap S 13:12:23:27 attacker.com.2118 > 10.10.17.121.rlogin S 13:12:23:41 attacker.com.2119 > 10.10.17.121.printer S Kun palvelu on löytynyt, helpoin tapa selvittää sen versio on katsoa sen lähettämää vastausta. Jos esimerkiksi kirjoitetaan komento telnet mycomputer.com 25, saadaan seuraavan kaltainen vastaus 220 mycomputer.com ESMTP Sendmail 8.9.3/8.9.3; Sat, 8 Dec 2002 17:31:05-0500 Komentamalla help tämän viestin kohdalla tuottaa selityksen 214-This is Sendmail version 8.9.3 214-Topics: 214-HELO EHLO MAIL RCPT DATA 214-RSET NOOP QUIT HELP VRFY 214-EXPN VERB ETRN DSN 214-For more info use HELP <topic>. 214-To report bugs in the implementation send email to 214-sendmail-bugs@sendmail.org. 214-For local information send email to postmaster at 214- your site 214 End of HELP info
5.2. PALVELUNESTOHYÖKKÄYKSET 77 5.1.5 Skannerit Skannerilla tarkoitetaan tässä ohjelmaa, joka analysoi verkon yli toisia verkkoja ja niiden palvelimia ja palomuureja haavoittuvuuksien löytämiseksi. Skannerit ovat tehokas tapa löytää tietoturva-aukkoja ja niitä käytetäänkin paljon omia verkkoja analysoitaessa. Toisten verkkojen tutkiminen skannereilla on kiellettyä, mutta hyökkäyksissä sitä kuitenkin tehdään. Ensimmäinen skanneri oli Chris Klausin ISS (Internet Security Scanner) vuodelta 1992. Suurta huomiota herätti SATAN (Security Administrator Tool for Analyzing Networks, Dan Farmer ja Wietse Venema 1995). Nykyään skannerit ovat yhä kehittyneempiä. Uusimpia ovat mm. Nessus, SARA, Nikto, eeye ja Microsoft Baseline Security Analyser. Skannereiden periaatteiden kuvaus jätetään harjoitusten varaan. 5.2 Palvelunestohyökkäykset 5.2.1 Esimerkkejä erilaisista palvelunestohyökkäyksistä Nämä hyökkäykset pyrkivät joko ajamaan alas verkon, tietokoneen tai prosessin tai muuten vaikeuttamaan palvelun tarjontaa. Seuraava lista ei ole täydellinen, sillä uusia palvelunestohyökkäyksiä keksitään lähes päivittäin. Tässä listassa on lähinnä sellaisia palvelunestohyökkäyksiä, jotka ovat esiintyneet aikaisemmin, jopa kauan sitten, ovat hyvin tunnettuja ja perustuvat TCP/IP-pinon heikkouksiin. Maahyökkäys Maahyökkäyksessä (Land Attack) konstruoidaan TCP SYN -paketti, jossa kohde- ja lähdeosoite ovat samoja. Joissakin vanhoissa järjestelmissä tällainen paketti aiheutti vastaanottajan puolella lukkiuman, jonka johdosta kone täytyi käynnistää uudelleen. Hyökkäykseen tarvitaan siis vain yksi ainoa paketti. Hyökkäys ei liene kovin relevantti nykyisissä ympäristöissä, mutta ohjelmistojen uusiokäytön ja mahdollisten koodausvirheiden vuoksi se saattaa taas tulevaisuudessa putkahtaa esiin. Menetelmä on tyypillinen palvelunestohyökkäyksissä. Outo tai mahdoton paketti konstruoidaan ja lähetetään. Vastaanottopäässä tällainen paketti aiheuttaa hämmennystä, joka johtuu joko toteutusvirheestä tai protokollan epätäydellisyydestä. Neptunus Neptunus tai SYN-tulva käyttää hyväkseen sitä tietoa, että jokaista puoliksi avoinna olevaa TCP-yhteyttä kohti tcpd (tcp-demoni) luo tietueen, jossa pidetään yhteystietoja. Jos yhteyttä ei luoda loppuun asti tietyn ajan kuluessa, yhteys katkaistaan
78 LUKU 5. VERKKOJEN TIETOTURVA ja tietueen varaama tila vapautetaan. Jos kuitenkin riittävä määrä yhteyksiä alustetaan ennen kuin ajastin laukeaa, tietorakenne vuotaa yli. Se aiheuttaa taulukon ylivuodon (segmentation fault) ja tietokoneen lukkiintumisen. Tässä hyökkäyksessä konstruoidaan paketti, jonka IP-lähdeosoite on saavuttamaton. Toisin sanoen mikään kone ei vastaa SYN/ACK-sanomaan, jonka kohdekone lähettää paketin saatuaan. Siten yhteys jää auki. Ping O Death Tämä hyökkäys koostuu ICMP echo-pyynnöstä (ping), jossa on liian pitkä (yli 64 KB) hyötykuorma. Vanhemmat käyttöjärjestelmät lukkiintuvat tai käynnistyvät uudelleen, kun puskuri, johon paketti varastoidaan, vuotaa yli. Ensimmäiset Windows 95 -versiot sisälsivät ping-ohjelman, joka salli käyttäjän määritellä paketin koon, vaikka se olisikin ollut liian pitkä. Tämä teki järjestelmän suosituksi hyökkäyskohteeksi. Samoin kuin maahyökkäyksessä tämäkin hyökkäys vaatii vain yhden paketin. Nykyiset käyttöjärjestelmät eivät ole enää haavoittuvia tälle hyökkäykselle. Prosessitaulu Prosessitauluhyökkäys kehitettiin MIT:n Lincoln DARPA-laboratorioissa testaamaan tunkeutumisen estojärjestelmiä. Tavoitteena oli kehittää uusia hyökkäyksiä, jotta nähtäisiin, voitaisiinko ne paljastaa. Hyökkäyksen idea perustuu siihen, että joka kerran kun TCP-yhteyspyyntö saapuu, prosessi haarautuu (fork). Jos pyyntöjä saapuu hyvin paljon, prosessitaulu täyttyy. Kun taulu on täynnä, uusia prosesseja ei voida luoda. Seurauksena on tilanne, jossa tietokone ei voi tehdä mitään. Tämä hyökkäys täytyy kohdistaa prosesseille, jotka sallivat monia yhteyksiä yhtäaikaa. Esimerkiksi sendmail ei hyväksi uusia yhteyksiä, jos niitä on jo ennestään paljon. Sen sijaan finger sallii aina uusia yhteyksiä. Jotkut aikaisemmat fingerin versiot eivät käyttäneet ajastinta yhteyksien sulkemiseen, vaan ne jäivät auki niin pitkäksi aikaa, kunnes toinen sulki ne. Jokainen yhteys sai oman tunnuksensa ja jos riittävästi yhteyksiä avattiin, prosessitaulu täyttyi. Targa3 Targa3-hyökkäyksessä lähetetään laittomia paketteja kohteelle. Nämä virheelliset paketit saavat jotkut systeemit kaatumaan. Vaikka systeemi ei kaatuisikaan, virheelliset paketit kuluttavat tavallista enemmän resursseja. Tyypillisesti paketeissa on vialla jotain seuraavista: Virheellinen paloittelu, protokolla, koko tai IP-otsakkeen arvo. Virheelliset optiot.
5.2. PALVELUNESTOHYÖKKÄYKSET 79 Virheelliset TCP-segmentit. Virheelliset reititysliput. Smurf-hyökkäys Smurf-hyökkäyksessä on kolme osapuolta: hyökkääjä, kohde ja välittäjä, joka höynäytetään tekemään varsinainen hyökkäys. Hyökkääjä konstruoi echo request -paketteja, joissa on lähteenä aiottu kohde ja kohteena välittäjä. Nämä paketit yleislähetetään, jotta maksimoidaan vastausten lukumäärä. Kaikki koneet välittäjän verkossa vastaavat kohteelle, joka ei voi käsitellä niin suurta määrää paketteja. Kohde kaatuu tai ainakin hidastuu siinä määrin, ettei kykene toimimaan normaalisti. Hyökkääjä ei näy kohteen lokitiedostoissa. Hyökkääjä paljastuu vain välittäjän verkon lokeista. Syslogd-hyökkäys Syslogd-hyökkäys tappaa syslogd-demonin Solariksen palvelimilla. Demonin vanhemmat versiot kaatuvat, jos niille annetaan lähdeosoite, jolla ei ole DNS-tietuetta. Siten hyökkäys koostuu syslog-porttiin lähetetyistä paketeista, joiden IP-osoitetta on väärennetty niin, ettei niillä ole DNS-tietuetta. DNS-tietueen puuttumista ei voida varmentaa muuten, kuin tekemällä itse DNShaku. Tämä on tarpeetonta, sillä vain omien koneiden pitäisi olla yhteydessä syslogtiedostoomme. Näin ollen koneet pitäisi pitää palomuurin sisällä, jolloin hyökkäys epäonnistuu, mikäli palomuuri on vähänkään tehokas. Palomuurin sisällä olevat vanhat, päivittämättömät Solaris-koneet eivät tälöin muodosta oleellista riskiä. Teardrop-hyökkäys Teardrop perustuu siihen, että jotkut vanhat TCP/IP-toteutukset eivät käsittele asianmukaisesti tilannetta, jossa paketti on pilkottu, mutta palaset eivät ole erillisiä. Jos koneessa on tämän vian sisältävä TCP/IP-toteutus ja hyökkääjä lähettää paketin, joka näyttää oikealta, mutta jonka palaset eivät ole erillisiä, kone kaatuu. UDP-tulva UDP-tulva saa aikaan, että kaksi konetta hyökkäävät toisiaan vastaan. On tietty määrä portteja, jotka vastaavat paketilla saatuaan paketin. Echo (portti 7) ja chargen (portti 19) ovat tällaisia. Echo kaiuttaa paketin takaisin, kun taas chargen generoi merkkivirran. Tarkastellaan UDP-pakettia, jolla on lähdeporttina 7 ja kohdeporttina 19. Paketti generoi joitakin merkkejä kohdekoneesta, jotka merkit lähetetään lähdekoneen echo-porttiin. Lähde kaiuttaa nämä paketit takaisin, mikä puolestaan aiheuttaa lisää
80 LUKU 5. VERKKOJEN TIETOTURVA paketteliikennetta koneiden välille jne. Jossain vaiheessa molemmat koneet kuluttavat kaiken aikansa lähettämällä paketteja edestakaisin kunnes toinen tai molemmat kaatuvat. Jos ulkopuolelta tulee paketteja, joiden lähdeosoite on sisäpuolella, palomuurin pitäisi pysäyttää nämä paketit. Tällaiset paketit ovat melkein varmasti väärennettyjä. Jos kysymyksessä ei olisikaan hyökkäys, tällaiset paketit ovat merkki siitä, että jotain on mennyt vikaan. Apache2-hyökkäys Vanhat Apache Web-palvelimet saatiin kaatumaan, jos lähetettiin suuri määrä HTTPpyyntöjä, joissa oli paljon otsakkeita. Tyypilliset HTTP-pyynöt sisältävät vähemmän kuin 20 otsaketta, kun taas hyökkäyksessä otsakkeita on tuhansia. Tämä aiheuttaa koneen keskikuormituksen dramaattisen nousun samoin kuin muistin käytön kasvun, ja tavallisesti kone kaatuu. Tällaisen hyökkäyksen paljastaminen edellyttää, että tutkitaan web-palvelimelle tulevat pyynnöt. Jos pyyntöjen normaali jakautuminen on tiedossa, poikkeavuudet on mahdollista havaita. Hyökkäyksestä kerrotaan enemmän www-sivulla http://www.geek-girl.com/bugtraq/1998_3/0442.html. Back-hyökkäys Tämäkin on hyökkäys vanhoja Apache Web-palvelimia vastaan. Hyökkäyksessä lähetetään pyyntöjä, joissa on suuri määrä / -merkkejä, kuusi tai seitsemän tuhatta. Tämä aiheuttaa koneen tilapäisen hidastumisen. Kone toipuu, kun hyökkäys lakkaa. Hyökkäys on esimerkki menetelmästä, jota voidaan kutsua tyhmän käyttäjän hyökkäykseksi. Jos sovellusta ei ole suunniteltu käsittelemään outoja, mutta laillisia syötteitä, se voi joutua alttiiksi hyökkäyksille, joissa esimerkiksi käyttäjä pitää yhtä näppäintä alhaalla tai koskettaa otsallaan näppäimistöä. Käyttöliittymän yhteydessä pitäisi varautua tyhmiin käyttäjiin. Postipommi Postipommi on hyökkäys käyttäjää vastaan, mutta se voi kaataa myös koneen. Hyökkäyksessä lähetetään monia viestejä jollekin käyttäjälle sähköpostiosoitteeseen. Jos viestien määrä on satoja, käyttäjä kärsii suuresti. Jos määrä on tuhansia ja viestit ovat pitkiä, postijono täyttyy ja kone voi kaatua. Myös levy voi täyttyä, mikä aiheuttaa myös muiden käyttäjien viestien tuhoutumisen tai ainakin välittämisen hidastamisen. Postipommi on helppo toteuttaa ja varsin suosittu. Vaikka postiosoite voidaan väärentää, IP-osoite pysyy aitona. Siten uhrin on mahdollista ottaa yhteys lähettävän koneen ylläpitoon ja pyytää keskeyttämään hyökkäys.