Pasi Orpana

Nimipalvelu ja DNSSEC

Johdanto

Domain Name System (DNS) eli Internetin nimipalvelu on kriittinen osa Internetin toimintaa. Sen avulla selvitetään selkokieliset verkkotunnukset IP-osoitteiksi; se on siis käytännössä Internetin puhelinluettelo. Ihmiset eivät muista suoria numeerisia IP-osoitteita, joten heidän on luotettava DNS:n antamiin osoitteisiin. Jos DNS:n eheyteen ei enää voitaisi luottaa siinä olevan haavoittuvuuden takia, häirioityisi koko Internetin toiminta. Koska DNS:n turvallisuudesta on löydetty tiettyjä puutteita, kehitettiin Domain Name System Security Extensions, DNSSEC, turvaamaan nimipalvelimen palauttaman vastauksen aitous ja eheys. Tässä tekstissä käsitellään DNS:n ja DNSSEC:n toimintaa, DNS:n haavoittuvuuksia ja DNSSEC:iä ratkaisuna niihin.

Domain Name System, DNS

Internetissä toisen laitteen löytämiseen tarvitaan kohdelaitteen numeerinen IP-osoite. Ihmiselle numeeristen osoitteiden muistaminen ei ole käytännöllistä, joten tarvitaan mahdollisuus yhdistää IP-osoite helposti muistettavaan verkkotunnukseen. DNS eli Domain Name System on Internetin nykyinen nimipalvelujärjestelmä. Sen ensimmäinen implementaatio kehitettiin vuonna 1983. Sitä on kehitetty ajan saatossa mutta sen rakenne on pysynyt samana. DNS on hajautettu tietojärjestelmä, jossa resurssien kuormitus hajautetaan mahdollisimman laajalle. Tietojärjestelmä on puumainen rakenne, jonka solmut ovat nimipalvelimia.

DNS-hierarkiassa ylimmän tason nimipalvelimia kutsutaan juuripalvelimiksi (root name server). Niitä on yhteensä 13 kappaletta maailmanlaajuisesti. Näiden alapuolella on Top-level domain (TLD) -serverit, jotka ovat vastuussa muun muassa com-, org-, net-, edu- ja etc-päätteistä sekä valtioiden omista päätteistä. TLD-nimipalvelimien alapuolella ovat Authorative domain serverit, jotka ovat ovat organisaatiotason nimipalvelimia. [6] Jokaisessa nimikyselyn lähettämiseen kykenevässä laitteessa on ohjelma, jota kutsutaan resolveriksi. Resolveri tietää niiden lokaalien nimipalvelimien IP-osoitteet, jotka ottavat vastaan siltä nimikyselyitä. Mikä tahansa nimipalvelin voisi vastata kyselyihin, mutta yleensä nimipalvelimet on asetettu vastaamaan vain rajatulle joukolle käyttäjiä, jotta palvelimen kuormitus pysyisi hallinnassa. Yleensä Internet-palveluntarjoaja ilmoittaa paikallisten nimipalvelimien osoitteet, jotka vastaavat käyttäjän kyselyihin. Nimipalvelimet myös tallentavat välimuistiinsa saamiaan vastauksia tietyksi ajaksi, jotta niiden ei tarvitse tehdä samaa kyselyä uudestaan sinä aikana. Tämä vähentää turhaa resurssien käyttöä, mutta luo samalla mahdollisen tietoturvaongelman, joista kerrotaan tarkemmin seuraavassa luvussa.

Tietokoneen resolveri lähettää ensin nimikyselyn lokaalille nimipalvelimelle, joka toimii enemmänkin kuin proxy eikä kuulu varsinaisesti nimipalvelinhierarkiaan, sillä se ei ole vastuussa mistään joukosta nimiä. Jos kysytty nimi ei löydy lokaalin nimipalvelimen välimuistista, kysely välitetään eteenpäin hierarkiaan juuripalvelimelle. Juuripalvelin ei tee rekursiivista kyselyä vaan iteratiivisen, mikä tarkoittaa sitä, että se kertoo lokaalille nimipalvelimelle, mille nimipalvelimelle kysely kannattaa välittää. Näin suurin kuormitus saadaan kohdistumaan lokaalille nimipalvelimelle. Uusien kyselyjen kautta siirrytään hierarkiassa alemmas, kunnes osoite on selvitetty. Lokaali nimipalvelin palauttaa sen sitten resolverille ja laite saa kysytyn IP-osoitteen tietoonsa. [6, 7]

Ennen nimipalveluja kaikki verkon käyttäjät pitivät itse kirjaa muiden verkon laitteiden IP- ja verkko-osoitteista. Verkon kasvaessa laitteiden määrä verkossa alkoi olla niin suuri, että tietojen pitäminen ajan tasalla alkoi käydä hankalaksi verkon käyttäjälle. Syntyi tarve keskittää nimitiedot yhteen paikkaan [1]. Ensimmäinen nimipalvelu perustettiin 70-luvun alussa SRI:hin (Standford Research Institute), jonka palvelimelta kaikki verkon käyttäjät hakivat tiedoston, joka sisälsi koko verkon nimitiedot. Verkkoon liittyi yhä enemmän käyttäjiä, eivätkä yhden palvelimen resurssit riittäneet vastaamaan kasvavaan määrään nimikyselyitä. Tarvittiin enemmän palvelimia ja tietokannan koon vuoksi tietokanta piti hajauttaa palvelimien kesken.

DNS:n haavoittuvuudet

DNS:n suunnitteluvaiheessa tietoturva ei ollut avainkysymys, koska käytetty ympäristö oli suljettu ja käyttäjät luotettuja. Internetin laajennuttua laajaan julkiseen käyttöön, alkoi DNS:stä löytyä ongelmia. Vasta kuitenkin vuonna 2008 DNS:n tähän mennessä vakavin haavoittuvuus, välimuistin myrkyttäminen (DNS cache poisoning) paljastui julkisesti [8]. Välimuistin myrkyttäminen käyttää hyväkseen DNS:n luottavaa ominaisuutta, jossa saatujen vastausten oikeellisuutta ei tarkisteta [2]. Tietyillä keinoilla hyökkääjän on mahdollista myrkyttää tietyn toimialueen nimipalvelimen välimuisti syöttämällä sinne virheellistä tietoa, jonka ansioista käyttäjät ohjautuvat hyökkääjän sivustolle oikean sivuston sijasta. Jos jonkun yrityksen nimipalvelin joutuu tällaisen hyökkäyksen kohteeksi, voi se olla yrityksen toiminalle ja maineelle erittäin turmiollista, sillä hyökkäyksen kautta voidaan vaikuttaa muun muassa nimipalvelimen vaikutusalueella olevien sähköpostin välityspalvelinten postinreititykseen sekä Internet-pohjaisten puhelinjärjestelmien signalointiliikenteeseen. Näin ollen hyökkääjä voi myös lähettää sähköpostia yrityksen osoitteesta ja sähköpostit ja puhelut voivat kulkeutua teoriassa mihin tahansa. [9, 10]

Kun välimuistin myrkyttämishaavoittuvuus tuli julki, Suomessa CERT-FI julkaisi asiasta turvavaroituksen, jossa se kehotti muun muassa päivittämään nimipalveluohjelmistot ensitilassa versioon, jossa DNS-kyselyiden lähdeportit on satunnaistettu. Koska monet välimuistin myrkytyshyökkäykset hyödyntävät rekursiivisia kyselyitä myrkytykseen, voidaan niitä suurelta osin ennaltaehkäistä myös rajoittamalla rekursiiviset kyselyt vain sisäisiin järjestelmiin. Tällöin hyökkäys on mahdollista vain omassa hallinnassa olevasta verkosta. [8, 10]

Palvelunestohyökkäykset ( DDOS ) kohdistetaan myös hyvin useasti suoraan DNS-palvelinta kohti. Kun hyökkääjä haluaa estää pääsyn tietylle sivustolle, tämä onnistuu kaatamalla sivustosta vastaava nimipalvelin, jolloin käyttäjät eivät saa kyseisen sivun osoitetta.

DNS käyttää kuljetuskerroksen protokollana UDP:tä, joka on yhteydetön protokolla, mistä juontuu osa DNS:n ongelmista. Nimipalvelin lähettää nimikyselyn ja odottaa vastausta, jolloin mikä tahansa saapuva paketti, jossa on nähtävästi oikeat tiedot, oletetaan oikeaksi vastaukseksi. Hyökkääjä seuraa, milloin nimipalvelin tekee kyselyn, ja lähettää oman tekaistun vastauksensa ennen oikean vastauksen saapumista, jolloin nimipalvelin luulee hyökkääjän lähettämää vastausta oikeaksi. Vastauksen tietoja manipuloimalla vahingontekijät pystyvät huijaamaan nimipalvelimia ja antamalla niille virheellisiä nimikyselyn tuloksia.

Domain Name System Security Extensions, DNSSEC

Domain Name System Security Extensions (DNSSEC) on joukko laajennuksia, jotka lisäävät DNS-protokollan turvallisuutta ja ovat samalla taaksepäin yhteensopivia normaalin DNS-protokollan kanssa. Yhteensopivuus on välttämätön ominaisuus, koska käyttöönotto samanaikaisesti koko maailmassa ei ole mahdollista. DNSSEC ja normaali DNS ovat käytössä rinnakkain ja näin tulee olemaan vielä pitkään.

DNSSEC kehitettiin ratkaisemaan nimikyselyjen oikeellisuuden varmistaminen, joka on yksi DNS:n haavoittuvuuksista. DNSSEC:n tarkoituksena on turvata nimipalvelun käyttäjiä väärennetyiltä viesteiltä, jotka ovat mahdollisia DNS-protokollan haavoittuvuuksien kuten välimuistin myrkytyksen takia. Haavoittuvuuksien tultua julki DNS-protokollaan tehtiin korjauksia, jotka paikkasivat vikaa, mutta eivät täysin korjanneet sitä [2].

Verkkoselaimet käyttävät esimerkiksi SSL-protokollaa ja sertifikaatteja varmistamaan, että käyttäjä on saapunut halutulle sivustolle. DNSSEC:in tarkoituksena ei ole korvata SSL-salausta vaan täydentää sitä ja estää jo ennakkoon tilanteet, jossa käyttäjä johdatettaisiin väärälle sivulle.

DNSSEC-protokolla on ollut kehityksessä yli kymmenen vuotta. Ensimmäiset testiprojektit tehtiin Hollannissa ja Ruotsissa. Ruotsi olikin ensimmäinen korkean tason toimialue (top-level domain), joka otti protokollan käyttöön omassa ".se" toimialueessaan [4]. Kaikki Ruotsin kansallisen toimialueen alla sijaitsevat toimialueet pystyivät siis ottamaan DNSSEC:in käyttöönsä halutessaan. Vuonna 2010 DNSSEC otettiin käyttöön itse juuripalvelimissa, mikä mahdollisti DNSSEC:n käytön koko DNS-hierarkian läpi.

DNSSEC:n toiminta

DNSSEC:n toiminta perustuu digitaalisten allekirjoitusten käyttöön ja niiden avulla luotuun luottamusketjuun. Protokolla ei salaa viestejä, vaan ainoastaan mahdollistaa niiden alkuperän oikeellisuuden varmistamisen. Edellytyksenä tietysti on, että DNSSEC on käytössä koko hierarkian matkalla, eli juuripalvelimesta nimestä vastuussa olevan toimialueen nimipalvelimelle asti.

Nimikyselyn prosessi toimii samalla tavalla kuin DNS:iä käytettäessäkin, mutta aina kun nimipalvelin saa vastauksen, se varmistaa sen oikeellisuuden. Nimikyselyn vastauksena saadaan resurssitietue (resource record), joka pitää sisällään muun muassa haetun IP-osoitteen tai delegaation seurauksena saadun seuraavan nimipalvelimen osoitteen. DNSSEC:ssä tuohon tietueeseen on lisätty kaksi uutta kenttää: RRSIG ja DNSKEY.

DNSSEC:n allekirjoituksessa käytetään julkisen avaimen menetelmää. RRSIG on digitaalinen allekirjoitus, jonka lähettäjä on itse laskenut resurssitietueesta omalla yksityisellä avaimellaan. Lähettäjä myös liittää oman julkisen avaimensa mukaan viestiin laittamalla sen DNSKEY-kenttään. Vastaanottaja pystyy nyt tarkistamaan käyttämällä saatua julkista avainta ja allekirjoitusta, että viesti on peräisin julkisen avaimen omistajalta.

Saatuun julkiseen avaimeen on kuitenkin pystyttävä luottamaan. Tarvitaan siis ainakin yksi julkinen avain, joka tiedetään varmasti oikeaksi. Tätä kutsutaan luottamusankkuriksi (trust anchor). Tämän on yleensä järjestelmänhallitsija asettanut manuaalisesti nimipalvelimeen. Juuripalvelimet toimivat luottamusankkurina. Kun tiedämme varmuudella hierarkian ylimmän nimipalvelimen julkisen avaimen, voimme luottamusketjun (chain of trust) kautta varmistua jokaisesta nimikyselyn eri vaiheen oikeellisuudesta.

DNSSEC:n käyttöönotto omalle nimipalvelimelle

Mikäli DNSSEC:llä haluaa turvata omaan toimialueeseen kohdistuvat kyselyt, tarvitsee nimipalvelimen asetuksiin suorittaa muutama toimenpide. Ensiksi täytyy varmistua, että oman toimialueen ylempi toimialue tukee DNSSEC:iä. Oletetaan, että tässä tapauksessa ylempi toimialue on ".fi". Viestintävirasto on vastuussa Suomen toimialueesta ja sen verkkosivuilta voidaan varmistua, että DNSSEC on tuettuna [5].

Omasta toimialueesta täytyy luoda DS-tietue (Delegation of Signing). Tässä tietueessa on kaikki tarvittavat tiedot allekirjoitusta varten. Käytetty julkinen avain, käytetyt protokollat allekirjoituksen laskemiseen jne. Tarkat parametrit DS-tietuetta varten löytyy Viestintäviraston sivulta [5]. Oman nimipalvelimen hallinnoimaan resurssitietoon on myös lisättävät vaaditut kentät, kuten RRSIG ja DNSKEY. DS-tietue toimitetaan toimialueen palveluntarjoajalle, tässä tapauksessa viestintävirastolle, jolloin luottamusketju ulottuu juuripalvelimilta omalle nimipalvelimelle asti.

Yhteenveto

DNS on oleellinen osa Internetin runkoa ja sen oikea toiminta on välttämättömyys Internetin toimimiseksi. Sen toiminnallisuus on alusta asti pyritty varmistamaan rakenteella, joka on globaali, hierarkkinen ja hajautettu. Haavoittuvuuksia tästä järjestelmästä on kuitenkin löytynyt ja erityisesti välimuistin myrkytys on vakava uhka. Tämän hyökkäyksen mahdollisuutta voidaan pienentää tietyillä toimilla mutta erityisesti myös DNSSEC:n avulla, sillä siinä varmistetaan nimikyselyjen aitous julkisen avaimen kryptografiaan perustuvilla digitaalisilla allekirjoituksilla. DNSSEC on suositeltava tietoturvalaajennus nimipalvelujärjestelmään, sillä se paikkaa DNS:n turvallisuuspuutteita.

Lähteet

SivuTiedotLaajennettu edit

Vaativuus Jatko
Valmius Valmis
Tyyppi Ydin
Luokitus Uhkat
Mitä Luottamuksellisuus
Miltä Ihmisetön uhka
Missä Organisaatio
Kuka Titu-ammattilainen
Milloin Ennakolta
Miksi Hyvä tapa
Print version |  PDF  | History: r7 < r6 < r5 < r4 | 
Topic revision: r7 - 18 Mar 2014 - 14:15:59 - JennaLehtimaki?
 

TUTWiki

Copyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TUTWiki? Send feedback