Start Beveiliging

Domain Name System Security Extensions

DNSSEC (Domain Name System Security Extensions) is een beveiligingstechniek welke hoofdzakelijk wordt ingezet op DNS servers. Het kan ook ingezet worden op client toestellen zoals servers en werkstations, maar dit is niet gebruikelijk. Het is een techniek welke DNS resource records valideert. Het valideert resource records door het toevoegen van een digitale handtekening. Door het toevoegen van een digitale handtekening kan een DNS server aantonen dat de informatie afkomstig is van de correcte bron, en dat deze niet is gewijzigd. In dit artikel beschrijf hoe DNSSEC werkt, niet hoe u uw DNS server configureert. Dit laatste beschrijf ik niet omdat dit - afhankelijk van uw hosting partner - verschillend kan zijn. Hoe DNSSEC werkt is complex, maar laat dit u niet afschrikken. Veel hosting partners maken het u namelijk gemakkelijk.

Hoe werkt DNSSEC?

Van zodra DNSSEC op mijn DNS servers wordt geactiveerd zullen mijn servers twee sleutelparen aanmaken. Het ene paar doet dienst als Key Signing Key (KSK), het andere als Zone Signing Key (ZSK). De KSK voegt - zoals we later in dit document zullen zien - een digitale handtekening aan sleutels toe. De ZSK voegt een digitale handtekening aan DNS resource records toe. DNSSEC werkt met twee sleutelparen om beheerders de mogelijkheid te bieden hun ZSK eenvoudig en zonder onderbreking te hernieuwen.
De publieke sleutel van elk paar wordt door mijn DNS servers als DNSKEY record in mijn zone gepubliceerd. Het Linux commando host -t DNSKEY mijnlabo.be geeft mijn publieke (DNSSEC) sleutels weer, maar ook met mxtoolbox kan ik mijn publieke (DNSSEC) sleutels weergeven.

Nadat mijn sleutels zijn aangemaakt zullen mijn DNS servers al mijn records in mijn zone verzamelen op basis van record type (AAAA, A, MX, TXT, CAA,...) en label (mijnlabo.be, mail.mijnlabo.be, www.mijnlabo.be,...). De verzamelingen die mijn DNS servers hebben samengesteld worden ook Resource Record Set (RRSet) genoemd.

Vervolgens gaan mijn servers iedere RRSet digitaal ondertekenen met mijn private ZSK. Iedere digitaal ondertekende RRSet worden door mijn DNS servers als RRSIG records (Resource Record Signature) in mijn zone gepubliceerd. Het Linux commando host -t RRSIG www.mijnlabo.be geeft al mijn RRSIG records voor www.mijnlabo.be weer, maar ook met mxtoolbox kan ik mijn RRSIG records voor www.mijnlabo.be weergeven.Onderstaande figuur geeft het hierboven beschreven proces weer.

Hoe komt een Resource Record Signature tot stand?

Er is één record type welke niet door mijn private ZSK wordt ondertekend, namelijk mijn DNSKEY record. Dit record wordt door mijn private KSK ondertekend. Het Linux commando host -t RRSIG mijnlabo.be geeft al mijn RRSIG records voor mijnlabo.be weer, waaronder mijn DNSKEY records. Maar ook met mxtoolbox geef ik hetzelfde weer. Onderstaande figuur geeft het proces voor DNSKEY records weer.

Hoe komt een DNSKEY Resource Record Signature tot stand?

Het verzamelen van mijn records op basis van record type en label heeft als gevolg dat een resolver alle records moet opvragen. Het moet alle records opvragen om de gevraagde record te kunnen valideren.

Vervolgens maak ik als zone operator van mijn domein (i.e.: mijnlabo.be) een hash van mijn KSK DNSKEY record. Daarna bezorg ik deze hash aan mijn parent zone (i.e: .be). Mijn parent zone (i.e.: .be) publiceert mijn hash als DS record (Delegation Signer). Omdat ook .be DNSSEC ondersteunt, zal mijn DS record in mijn parent zone ondertekend worden door de private ZSK van .be. Doordat ik mijn hash heb geupload is een vertrouwensketting (aka chain of trust) gerealiseerd. Het Linux commando host -t DS mijnlabo.be geeft mijn DS records weer, maar ook met mxtoolbox kan ik mijn DS records weergeven.

Merk in mxtoolbox op dat het antwoord voor mijn DS records niet afkomstig is van mijn naamservers, maar wel van .be naamservers.

In onderstaande figuur geeft het hierboven beschreven proces weer.

Hoe komt een DS record tot stand?

Telkens een resolver door mijn parent zone .be wordt doorverwezen naar mijn naamservers, dan zal de .be naamserver ook mijn DS-records meegeven.

Als ik mijn KSK wissel dan moet ik opnieuw mijn hash aan mijn parent zone bezorgen. Dit is een proces wat - t.g.v. TTL waaraan DNS records zijn onderworpen - niet onopgemerkt voorbij gaat, met tijdelijke onderbreking tot gevolg. Dit is dan ook het antwoord waarom DNSSEC met twee sleutelparen werkt. Het is veel eenvoudiger en sneller om mijn ZSK te wisselen.

Wat is Explicit Denial of Existence, en hoe werkt het?

Wanneer ik een DNS bevraging naar een onbestaand record uitvoer, zal ik bij gebruik van klassieke DNS een leeg antwoord terug krijgen. Echter, een leeg antwoord kan niet digitaal ondertekend worden. Als oplossing hiervoor heeft DNSSEC NSEC en NSEC3 (aka authenticated denial of existence). Met NSEC krijg ik op de vraag naar een onbestaand record als antwoord een digitaal ondertekende verwijzing naar het eerstevolgend verwant record in de database.

Het NSEC-record voor mail.mijnlabo.be is pop.mijnlabo.be (zie ook mxtoolbox).

Voor omgevingen waar DNS database geheimhouding belangrijk is vormt NSEC een risico. Het vormt een risico omdat het "recognition" toelaat. NSEC3 hashed het antwoord waardoor "recognition" moeilijker maar niet onmogelijk is.

Hoe test ik mijn DNSSEC implementatie?

Om mijn DNSSEC implementatie te testen gebruik ik Verisignlabs DNSSEC analyzer. In het Domain Name veld type ik mijnlabo.be, en druk ik vervolgens op enter.