DNS biztonsági kérdések

Pásztor Miklós
MTA Sztaki/Aszi
pasztor@sztaki.hu

A Networkshop konferencián 2000-ben, Gödöllőn elhangzott előadás

Bevezetés

A DNS az internet egyik pillére: akár egy web lapot töltünk le, akár elektronikus levelet küldünk, a DNS ott működik a háttérben. A DNS szellemes és egyszerű elven, osztott adatbázisként működik. A rendszer hibatűrő: az egyes rekordokat több szerver is szolgáltatja. Az interneten jelenleg ezt az adatbázist szerverek százezrei nyújtják nevek millióiról. Az interneten történő visszaélések a DNS-t sem kerülték ki. Ebben az előadásban arról lesz szó, hogy milyen veszélyek fenyegetnek, mit tehetünk a jelenleg rendelkezésre álló eszközökkel, és hogy milyen szabványosítási törekvések bontakoznak ki a DNS biztonság növelésének érdekében.

Az interneten használt név szerver programok túlnyomó többsége a Bind (Berkely Internet Name Domain) szoftver valamilyen változata. Ezért amikor name szerver programról lesz szó, erre fogunk gondolni.

A DNS és a nyilvános kulcsú titkosítás fogalmairól összefoglaló található például ezeken a web lapokon:
http://www.iif.hu/~pasztor/dnslap.html illetve
http://www.iif.hu/projektek/titk/alairbev.html

Hogyan működik a DNS ?

A nevek definiálása, mutatása

Az interneten használt nevek hierarchia szerint épülnek fel. A hierarchia minden pontján több név szerver szolgáltatja az adatokat egy-egy un. zónáról. Egy-egy zóna név szerverei közül mindig egy az elsődleges, a többi ennek adatait tükrözi. Minden zónában lehetőség van a hierarchia alacsonyabb szintjeinek autoritását, a definiálás jogát más név szervereknek tovább delegálni.

A nevek feloldása, látása

Minden internetbe kapcsolt kliens gép TCP/IP konfigurációjának fontos része annak (azoknak) a név szervernek (szervereknek) az IP címe, amely(ek) számára a neveket feloldják. A kliens név szervere célszerűen olyan gép, ami hálózati értelemben közel van, rendszerint egy lokális hálózaton a klienssel. A neveket feloldó 'látó' név szerver nem szükségképpen autoritás valamely zónára. A neveket a többi 'mutató' név szerverrel való kommunikáció útján oldja fel. Ha megtudott egy nevet, akkor azt egy bizonyos ideig nem felejti el, cache-eli, és így ha valamely klienstől újabb kérést kap erre a névre vonatkozóan, azt azonnal meg tudja válaszolni. Azt az időt, ameddig a cache-ben lesz egy adat, az adat gazdája, a mutató név szerver dönti el. A látó, neveket feloldó szerver konfigurálásának fontos eleme a DNS hierarchia csúcsán álló un. root name szerverek IP címe: innen kezdve oldja fel a neveket, és innen tanulja meg fokozatosan, hogy a hierarchia mely részéért mely név szerverek felelősek.

A DNS üzenetek formátuma

A DNS szerverek az RFC1035 szabványban meghatározott formában kommunikálnak egymással. Az üzenetek formátuma:


    +-----------------------------------+
    |            Fejrész                |
    +-----------------------------------+
    |            Kérdés                 | 
    +-----------------------------------+
    |     Válasz  rekordok  szekciója   | 
    +-----------------------------------+
    |     Autoritás rekordok szekciója  | 
    +-----------------------------------+
    |Más (additional) rekordok szekciója| 
    +-----------------------------------+


A kérdések és válaszok egyaránt ilyen formában épülnek fel. A kérdéseknél a válasz természetesen üres, a válasz rekordok megismétlik a kérdést. Az autoritás rekordokban rendszerint az illető domain névhez tartozó SOA és NS rekordok vannak a válaszban. Az 'additional' szekcióban lehetnek például az NS rekordok A rekordjai.

Miben áll a veszély ?

Hamis a szerverre vonatkozó adat

Ha 'pc.kliens.vala.hol' gépnél ülő felhasználó a 'szerver.vala.hol' név feloldásakor valójában a 'gonosz.vala.hol' web szerveréhez, vagy levelező szerveréhez jut, akkor kár érheti a 'pc.kliens.vala.hol' felhasználóját és a 'szerver.vala.hol' gazdáit is. Mindez történhet úgy is, hogy se a kliens, se a szerver nem is vesz észre semmit: ha levélről van szó, a küldött levelet - archiválás, vagy akár módosítás után - gonosz.vala.hol gazdái továbbíthatják szerver.vala.hol-ra, ha pl. web lapok nézegetéséről van szó, a gonosz.vala.hol-on levő adatok lehetnek (többé-kevésbé módosított) másai a szerver.vala.hol-on láthatóknak. Károkat okozhat az is, ha a szerver.vala.hol-t nem személyesítik meg, csak elhitetik, hogy ilyen név nincs is, vagy valami egészen más helyre, a kamu.vala.hol-ra mutat, amihez a támadónak éppen úgy nincs köze, mint a szerver.vala.hol-hoz. Ilyenkor három áldozat is van: a 'kliens' a 'szerver' és a 'kamu' domain gazdái.

Hamis a kliensre vonatkozó adat

A szerver szolgáltatásokat végző gép is kliens a DNS szempontjából: a hozzá közel álló, nála bekonfigurált DNS szerver(ek) által oldja fel a neveket. Gyakori, hogy a szerver más és más elbánásban részesít klienseket attól függően, hogy mi a domain nevük (pl. a népszerű tcp_wrappers nevű biztonságot növelő eszköz konfigurálása útján). Ilyenkor veszélyt jelent az is, ha a 'kliens.vala.hol' név szerverét hamisítják, hiszen a 'szerver.vala.hol' elhiheti, hogy 'pc.kliens.vala.hol' az, akivel kommunikál, holott 'pc.gonosz.vala.hol' áll vele kapcsolatban.

A hamis DNS adatok becsempészésére több hely is kínálkozik:

A sikeres DNS támadás utat nyithat újabb visszaéléseknek. Például ha a pc.kliens.vala.hol gépről jelszóval akarták elérni szerver.vala.hol-t, akkor a DNS hamisítás utján gonosz.vala.hol gazdái be tudnak jutni a szerver.vala.hol gépre.

Támadási technikák

DNS cache mérgezés

Amikor egy név szerver egy kérést megválaszol, nem csak a kérdezett nevet adja vissza: a válaszban van un. 'additional' és 'authority' szekció, ahol más, az eredeti kérdéshez kapcsolódó nevek feloldását küldi. Ha kliens.vala.hol név szerverétől olyan kérés érkezik, amihez gonosz.vala.hol név szerverét kell megkérdeznie a válaszért, akkor ebben a válaszban lehet ragadvány adatként a 'szerver.vala.hol'-ra vonatkozó hamis adat. Ezt azután a név szerver cache-eli, és így a következő kérésnél hamis adatot ad a pc.kliens.vala.hol-nak. Erre a támadásra a 4.9.6 változat óta érzéketlen a Bind program.

DNS válasz ID jóslás

Minden egyes DNS kéréshez egy 16 bites ID mező tartozik. Ha az ID megjósolható, akkor egy támadó egyszerűen hamis válasz csomagokat küldhet a kérdező szervernek, amit az elfogad, és cache-el. Erre a támadásra is érzéketlenek a legújabb Bind változatok: véletlenszerűen generálják az ID-t. Így is mód lehet arra, hogy egy kliens ugyanarra a kérdésre vonatkozó válasz csomagokkal árassza el a szervert úgy, hogy azokban csak az ID mező különbözik. Ez ellen úgy védekeznek az újabb Bind változatok, hogy ha egy kérdésre sok választ kapnak, akkor egyiket sem veszik figyelembe.

Mit tehetünk ?

Használjuk a legfrissebb Bind változatot. Újabb és újabb hibákra, hiányosságokra derül fény, ezért ajánlatos mindig upgrade-elni.

A konfigurációban vezessünk be korlátozásokat

A 8-as változatú Bind programokban definiálhatunk ACL-eket (Access Control List). Finoman szabályozhatjuk, hogy milyen IP címek legyenek egy-egy ilyen listában: megadhatunk IP címeket, vagy hálózatokat cím/maszk (CIDR) szintaxissal. Példa:

 acl csakti  {
 193.225.12.54;
 192.1.2.0/24;
 };

Ha autoritatív szerverek vagyunk valamire, akkor korlátozzuk a zóna transzfert: csak azoknak a gépeknek engedjük meg, hogy egy-egy zónát egészében letöltsenek, amelyeknek valóban szükséges:



 allow-transfer {
 csakti;
 };

Korlátozzuk azt is, hogy ki használhatja szerverünket 'látás'-ra: mely gépek számára végzünk rekurzív feloldást.


 allow-query {
 csaknektek;
 };	

Figyeljük a saját naplófájljainkat, mások tapasztalatát: a biztonsági fórumokat

Semmilyen biztonsági intézkedés, szoftver, vagy hardver eszköz nem pótolja az odafigyelést. Ezért gondoskodjunk róla, hogy rendezett naplófájlok készüljenek, nézzünk utána a rendellenességeknek. Figyeljük a biztonsági fórumokat, levelezési listákat és web helyeket. Ha szükséges, vezessünk be változtatásokat, patch-eket stb.

Újabb biztonsági elemek a DNS-ben

Titkosítás és digitális aláírás segíthet abban, hogy hamis adatokkal ne lehessen becsapni a rezolvereket. Több éve folyik a munka ebben az irányban. Javaslatok, és kísérleti üzemben levő implementációk készültek. Felhasználják a klasszikus, szimmetrikus kulcsú titkosítást is és nyilvános kulcsú titkosítást is. Jellemzően a meglevő DNS kibővítésével oldják meg a feladatot, így az átmenet a biztonságos DNS üzembe zökkenőmentes: a régi módon konfigurált szerverek együtt tudnak működni az újabb technológiával működő szerverekkel.

Domain Name System Security Extensions - DNSSEC

A DNSSEC javaslat már két RFC-ben is megjelent, a második, módosított változat az 1999 márciusából származó RFC2535. Nyilvános kulcsú titkosításon alapuló kiterjesztéseket tartalmaz, újabb DNS rekordokat vezet be:

A KEY rekord

Ezzel a rekorddal tárolhatunk nyilvános kulcsokat a DNS-ben. A DNS rekordok digitális aláírását zónákhoz tartozó kulcsokkal végzik, de a KEY rekord alkalmas felhasználók, számítógépek, vagy más entitások kulcsainak tárolására is. A KEY rekord struktúrája:



                        1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |             flagek            |    protokoll  |   algoritmus  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               /
   /                          publikus kulcs                       /
   /                                                               /
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-|

Flag-ek mező egyes bitjei megmondják, hogy:

A protokoll mező határozza meg, hogy milyen protokollal használatos a kulcs. A lehetséges értékek többsége még definiálatlan. Lefoglalt érték - a DNSSEC használaton kívül - a TLS (Transport Layer Security, RFC2246), az elektronikus levelezés és az IPSEC (IP csomagok digitális aláírása, RFC2401).

Az algoritmus mező eddig lefoglalt értékei tartalmazzák a következőket: RSA/MD5, Diffie-Hellman, DSA. Azt, hogy az ilyen kulcsokat hogyan kell tárolni a DNS rekordokban, külön dokumentumok definiálják: RFC2537, RFC2539, RFC2536. Mód van olyan kulcsok tárolására is, ahol kulcs forma definiálását is indirekt módon, a KEY rekordban tárolt domain név alapján lehet megtudni.

Kulcsok kezelése

Nem nyilvánvaló, hogyan is kell a kulcs rekordokkal bánni. Nem lehet kulcs rekordokat a zóna adminisztrátornak olyan könnyen, és szabadon definiálni, mint pl. A, vagy CNAME rekordokat: itt programra van szükség, méghozzá biztonsági szempontból kényes programra. A Bind újabb változatainak disztribúciója tartalmaz ilyen segédprogramot, a dnskeygen-t. Ez egy publikus/titkos kulcspárt generál, ami alkalmas DNS rekordok aláírására. Ajánlatos olyan gépen futtatni, ami nincs hálózatba kötve. Ezen a gépen lehet azután az egyes DNS rekordokat aláírni, vagyis a SIG rekordokat generálni. A KEY és SIG rekordokat azután a nyilvános hálózatból elérhető szerverre vihetjük pl. egy floppyn.

Minden DNSSEC-et beszélő rekurzív (látó) név szerver konfigurációjának fontos része, hogy mely kulcso(ka)t tekint hitelesnek indulásakor. KEY rekordok éppen úgy aláírhatók mint bármi más rekord, ezért az elfogadott kulccsal aláírt kulcsot és aztán az azzal aláírt rekordokat is hitelesnek fogadhat el a szerver. Kézenfekvő egy delegált zónához tartozó kulcsot az 'apuka' zóna kulcsával hitelesíteni.

A SIG rekord

Ez a rekord szolgál DNS adatok hitelesítésére, digitális aláírására. Az aláírt entitásra nem a DNS rekord, hanem az RRset (Vö. RFC2181) kifejezést szokták használni. Egy RRset-be több DNS rekord is tartozhat, ha ugyanolyan névvel és típussal több rekordot is definiáltunk (például A és NS rekordok esetén ez gyakori).

A SIG rekord struktúrája:



                            1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |        aláírt rekord típusa   |  algoritmus   |     címkék    |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                         eredeti TTL                           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                      aláírás lejárta                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                      aláírás kelte                            |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |            kulcs részlet      |                               |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+         aláíró                +
      |                                                               /
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-/
      /                                                               /
      /                            aláírás                            /
      /                                                               /
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


Az aláírt rekord 'típus'-a határozza meg az RRset-et, amire az aláírás vonatkozik. Az algoritmus kódja a KEY rekordnak megfelelő. A cimkék mező tartalmazza az aláírt rekord cimkéinek (a domain név ponttal elválasztott részeinek) számát. Az eredeti TTL mező az aláírt rekord TTL mezőjét tartalmazza. Erre azért van szükség, mert amikor egy név szerver az aláírt rekordot megkapja, nem biztos, hogy az eredeti TTL-t látja (például, ha egy DNS válasz ragadvány részében kapta).

Az 'aláírás kelte' és az 'aláírás lejárta' másodpercekben adják meg az időpontokat GMT szerint, az 1970 január 1-e, 0 óra 0 perctől eltelt időt számolva.

Ha egy zónában nem történik változás, csak új aláírások kerülnek bele - például azért, mert a régiek lejártak -, akkor ez magával hozza a zóna SOA rekordjában a serial number változását, és ezzel a zóna frissítését secondary-knál.

A 'kulcs részlet' arra szolgál, hogy az aláíró kulcsra vonatkozóan egy gyors ellenőrzést lehessen végezni. Ez azért célszerű, mert a digitális aláírás ellenőrzése számításigényes feladat, és jobb vele takarékoskodni.

A 'aláíró' mező a domain nevet tartalmazza, amihez az aláíró KEY rekord tartozik.

Az 'aláírás' mező képzésekor nem csak az RRset-be tartozó rekordo(ka)t kell venni, hanem magának ennek a rekordnak az aláírás nélküli részét is. Ha ez nem így lenne, akkor könnyen hamisítás áldozatává válhatnának SIG rekordok.

A SIG rekord definíciójában nem csak RRset-ek, hanem DNS válaszok (pl. zóna transzferek) és kérdések digitális aláírására is gondoltak. Ezt a 'típus' mezőben levő 0 jelzi. A SIG rekordok használatának ez a módja azonban valószínűleg nem terjed el. Erre a célra hatékonyabb a TSIG rekordok használata. Ha SIG-gel aláírt tranzakció hitelessége nem pótolja a tranzakcióban küldött egyes elemek hitelességének, a DNS rekordok aláírásainak az ellenőrzését.

A SIG rekordokat a válaszoló név szerver elsősorban a válasz 'additional' ragadvány részében küldi. Delegálási pontoknál az NS rekordok RRset-je két zónának is része. Az ilyen rekordokat csak a 'gyerek' zónában kell aláírni.

Bonyodalom a cache-sel

A SIG rekordok bevezetése problémákat vet fel cache-eléssel kapcsolatban. Meddig kell a cache-ben tartani például egy A rekordot? A rekordhoz tartozó TTL-en kívül lejárhat a hozzá tartozó aláírás érvényességi ideje, az aláírást tartalmazó SIG rekord TTL-je is. A szabály az, hogy mindent figyelembe kell venni:

Ha egy TTL még nem jár le, de lejárt az aláírás érvényessége, a rekordot el kell dobni. Ha egy aláírás érvényessége még nem jár le, de lejár a SIG rekord TTL-je, a rekordot el kell dobni.

Az RFC2535 azt ajánlja, hogy az aláírás érvényességi ideje a TTL 4-16 szorosa legyen.

Az NXT rekord

A DNS elleni támadások egyik lehetséges módja, hogy a támadó 'ilyen nincs is' típusú üzenetet hitet el az áldozattal. Ez ellen való védekezésre szolgál az NXT rekord. Azt mondja meg, hogy egy bizonyos rekordból milyen típusok léteznek, és melyik a - kanonikus sorrendben - következő. Az NXT rekordokat SIG rekordok hitelesítik, és így bizonyossággal lehet mondani valamilyen domain névnek a hiányát. A rekord formátuma:



                        1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                  a sorrendben következő név                   /
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |            bit map az ebből a domainból létező típusokról     /
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


Az NXT rekordot típikusan a DNS válaszok 'autoritatív szekció' ragadvány részében küldik, amikor a válasz rész üres, és a hiba kód: ilyen nincs (NXDOMAIN). Megjegyzendő, hogy az RFC1035 csak SOA és NS rekordok küldését engedélyezte az 'autoritatív szekcióban'. A DNSSEC óta SIG és NXT rekordok is lehetnek itt.

Az NXT rekord bevezetésének hátrányos mellékhatása, hogy hiába tiltott egy zóna letöltése valahonnan (Bind allow-transfer opció), a zóna 'letapogatható' olyan kérdésekkel, melyekre NXT rekordok jönnek válaszul.

Új állapotok a név szerver által megtudott adatokra vonatkozóan

Egy 'látó' név szerver által megtudott adatok a TTL mellett DNSSEC szerint újabb tulajdonságokkal rendelkeznek:

A hibás adatot, a szerver eldobja. A többi állapotban levő adatot cache-eli, és megfelelő módon továbbítja a hozzá érkező kérdésekre.

Új bitek a DNS üzenetek fejrészében

A DNS üzenetek fejrészében két eddig kihasználatlan bitet lefoglal a DNSSEC specifikáció. Az új bitek neve AD = (authentic data) és CD (checking disabled).

Az AD bittel jelezheti a rezolvernek egy rekurzív szerver, hogy a válaszában küldött adatokat digitális aláírások segítségével ellenőrizte és jónak találta. A CD bittel jelezheti a rezolver, hogy ellenőrizetlen válaszokat is elfogad. Érdemes megjegyezni, hogy milyen haszna van itt az eredeti definíció azon kikötésének, hogy a használatlan bitek értékét nem tetszőlegesen, hanem 0-nak kell megadni. Ilyen módon a régi, nem DNSSEC szerint működő szerverekkel éppen zökkenőmentesen tudnak együttműködni a DNSSEC szerinti szerverek: a régi szerverek által kapott adat automatikusan jelzi, hogy nem ellenőrizték a hitelességet, a régi kliensek kérdéseikre pedig sose kaphatnak olyan választ, ami később hamisnak bizonyul, csak bizonytalan, vagy hiteles adatot.

A DNSSEC nagy lépései

A DNSSEC több ponton nagyban megváltoztatja a DNS eddigi működését a programok és a rendszeradminisztrátor szempontjából is. Többszörösére nő az egy-egy zónában levő rekordok száma a SIG és NXT rekordok miatt. A SIG rekordok lejárnak, ezért azok a zónák is változnak, amik eddig akár hónapokig vagy még tovább változatlanok voltak. A DNS szerverek számolási igénye eddig a TTL értékek csökkentéséből, és SOA rekordok sorszámának, DNS válaszidőknek az összehasonlításából állt. Most ez nagyságrendekkel nő. A rendszeradminisztrátornak nem elég néhány szövegfájlt editálni a zónák definiálásakor: a rekordok jelentős részét, a KEY, SIG és NXT rekordokat programok segítségével kell a zónába felvenni.

A TSIG javaslat

Az RFC2535 által javasolt DNSSEC-en kívül a legjelentősebb törekvés a biztonságos név szerver működésre a TSIG (Transaction Signatures) rekord bevezetése. A kurrens definíciót az 1999 decemberéből származó draft-ietf-dnsind-tsig-13.txt (http://www.ietf.org/ietf/1id-abstracts.txt ) tartalmazza.

A TSIG arra való, hogy DNS tranzakciók hitelesítve közlekedjenek két szereplő között.

A DNSSEC-ben is van mód zóna transzferek, egy-egy kérés vagy válasz digitális aláírására. Nehézséget okoz azonban, hogy az alkalmazott technológia nyilvános kulcsú titkosítás, ami idő és erőforrásigényes. Az egyik biztosítandó pont viszont egy rezolver (pl. egy PC) és egy hozzá közel álló név szerver közti kommunikáció Ilyen esetben nem tételezhetünk fel nagy teljesítményt, viszont sok-sok tranzakciót. Ezért célszerű szimmetrikus kulcsú titkosítást bevezetni. Éppen ezt teszi a TSIG: a DNS üzenetből egy elektronikus ujjlenyomatot képez, és ezt titkosítja szimmetrikus kulcsú titkosítással.

Kulcs kezelés

Szimmetrikus kulcsú titkosításnál a legkényesebb probléma a titkos kulcs tárolása és eljuttatása a partnerekhez. Ezzel a TSIG javaslat nem foglalkozik, de a kulcsok hálózaton keresztüli biztonságos másolása megoldható pl. SSH segítségével. Az pedig, hogy a titkos kulcsok a végrendszerekben megtalálhatók, nem növeli lényegesen a kockázatot: ha ezen rendszerek kompromittálódnának, akkor más mód is van a DNS adatokkal való visszaélésre, nincs ahhoz a titkos kulcsra szükség.

A TSIG rekord

A DNS üzenet digitális aláírására igen szellemes módon magát a DNS üzenetet használja fel a javaslat. Bevezet egy új rekord típust, amit azonban soha semmilyen zónába nem kell beírni: röptében generálja a küldő oldal, a vevő pedig ellenőrzés után egyszerűen eldobja.

A rekordot mindig a DNS üzenet 'additional' ragadvány részének utolsó elemeként kell küldeni. A DNS üzenetek rendszerint UDP csomagban utaznak, aminek hossza rövidnek bizonyulhat. Ilyenkor a válaszoló szerver a DNS üzenet fejrészében egy bittel (TC, truncated) jelzi, hogy az üzenet hosszabb lenne, de nem fért a rendelkezésre álló csomagba, mire a kérdező TCP kapcsolaton megismétli a kérdést. Baj lenne, ha az éppen levágott rész a TSIG rekord lenne. Ezért ilyen esetben inkább más rekordot kell levágni az 'authority' vagy az 'additional' szekcióból, beállítani a TC bitet, és a csonkítatlan TSIG pszeudorekorddal a végén elküldeni a választ.

A rekord egyik paramétere tartalmazza a algoritmus nevét, ami az ellenőrző kód kiszámítására szolgál. Szerepel a rekordban két idő adat: az TSIG rekord aláírásának az ideje és egy idő intervallum kiszámítására szolgáló érték, aminek hatása a TTL-hez hasonló: ezen időn belül fogadja el a vevő a TSIG rekordot, illetve azt az adatot, amit az hitelesít.

A TSIG által használt ujjlenyomat kiszámításánál szerepel az egész DNS üzenet, amire vonatkozik, de nem csak ez: magából a TSIG rekordból is magának az ujjlenyomatnak és annak hosszának kivételével minden. Ilyen módon azt is magakadályozzák, hogy a TSIG-gel védett kommunikációt illetéktelenül 'visszajátsszák'.

A TSIG egyik szépsége, hogy nem csak válaszokra, hanem DNS kérdésekre is alkalmazható. Így biztosítható, hogy egy DNS szerver csak illetékesek manipulálatlan kérdéseire válaszoljon.

TCP üzenetekben gyakran sok DNS rekordot küldenek, például egy zóna transzfernél. Ilyenkor elvben minden egyes ilyen rekordhoz hozzá lehetne fűzni az 'additional' szekcióban TSIG hitelesítést. Az ajánlás szerint legalább minden századik rekordot ki kell egészíteni TSIG elemmel.

Összefoglalás

A DNS rendszer biztonságáért most is sokat tehetünk megfelelő konfigurálással, odafigyeléssel. Több ponton folyik igéretes munka a hitelesített DNS kommunikációra. Az új ajánlások implementációja most folyik, forráskódban is hozzáférhető az Internet Software Consortium ftp szerverén: ftp.isc.org. A feladat nem egyszerű, és várható, hogy több ponton egészen másképpen kell a jövőben a DNS szervereknek és DNS adminisztrátoroknak működniük.