Inleiding: dnssec en de SIDN
De Stichting Internet Domeinregistratie Nederland, die het topleveldomein .nl beheert, zal dit voorjaar het dnssec-protocol voor de .nl-zone invoeren. Dat zou de veiligheid van het dns-systeem flink moeten vergroten. Hoewel de veiligheid van dns niet direct in gevaar is geweest, zagen we de afgelopen jaren wel al diverse scheurtjes in het bouwwerk. Experts roepen al langer om een snelle invoering van dnssec.
Dnssec is ontwikkeld als aanvulling op het dns-protocol en moet de kwetsbaarheden in dat protocol verhelpen. Zo moeten cache poisoning en man in the middle-aanvallen worden voorkomen. Daartoe koppelt dnssec het antwoord op een dns-query aan een digitale handtekening, waardoor makkelijker kan worden gecontroleerd of de records die een dns-server teruggeeft, wel valide zijn. Dns-servers worden hiertoe voorzien van een public key cryptography-systeem: dns-informatie over een domein wordt gesigned met een private key, zodat gebruikers met een publieke sleutel kunnen verifiëren dat er niet met de informatie gerommeld is.
De werking van dns
Dns zorgt voor de vertaling van domeinnamen, zoals tweakers.net, naar ip-adressen. Elk keer als we de naam van een website intoetsen, moet eerst het internetadres van de bijbehorende server worden opgezocht. Het onderdeel van de netwerkstack dat hiervoor verantwoordelijk is, heet (stub) resolver en is onderdeel van het besturingssysteem.
Dns wordt niet alleen voor websites gebruikt, maar voor alle internetprotocollen die met domeinnamen werken. Naast voor de hand liggende protocollen als http en ftp wordt dns ook gebruikt voor DomainKeys Identified Mail en het Sender Policy Framework, twee e-mailsystemen die dns-verificatie gebruiken om spam tegen te gaan. Daarnaast wordt dns gebruikt om cryptografische sleutels en certificaten beschikbaar te maken.
Boom
Omwille van beheer, veiligheid, betrouwbaarheid en schaalbaarheid is dns opgezet in de vorm van een gedecentraliseerde boomstructuur van servers. Aan de wortel daarvan staan de rootservers, dertien systemen die voor elk topleveldomein - zoals .com of .nl - naar andere dns-servers verwijzen. Op dit moment gaat het nog om enkele honderden tld's, maar dat worden er straks veel meer.
De .nl-domeinen worden zoals gezegd beheerd door de SIDN. Deze organisatie onderhoudt daarvoor een infrastructuur van enkele tientallen servers, verspreid over drie locaties in en om Arnhem.
/i/1332955823.png?f=imagenormal)
Eind 2006 waren er 13 root servers verspreid over 123 nodes. Inmiddels is het aantal nodes meer dan verdubbeld
Als een computer een domeinnaam in een ip-adres wil omzetten, moet die in theorie beginnen bij de rootservers. Die verwijzen naar de nameservers die aanvragen voor subdomeinen van het betreffende tld afhandelen; een verzoek om het ip-adres van tweakers.nl komt zo bij de SIDN terecht. Deze organisatie verwijst vervolgens weer naar de dns-server van het desbetreffende domein, meestal een van een commerciële provider.
Die laatste dns-servers kunnen een ip-adres voor bijvoorbeeld tweakers.nl geven, maar zijn ook verantwoordelijk voor het derde niveau - bijvoorbeeld www.tweakers.nl of tweakblogs.tweakers.nl. Het is ook mogelijk om dns-servers voor vier of meer niveaus te gebruiken. Dat gebeurt bijvoorbeeld in het Verenigd Koninkrijk, waar maar een paar second level domains als .co.uk en .org.uk gebruikt worden.
/i/1332956029.png?f=imagenormal)
De systemen voor de root servers zijn over de hele wereld verspreid
In de praktijk wordt lang niet elke aanvraag via de rootservers afgehandeld. Internet service providers gebruiken, om het dns-verkeer binnen de perken te houden en om de tijd voor een request zo kort mogelijk te houden, namelijk ook zelf dns-servers. Die kunnen automatisch - via dhcp - of handmatig aan de aangesloten pc's worden toegewezen en verzorgen adresaanvragen voor de gebruikers. Elk adres dat ze opvragen, wordt vervolgens in een cache opgeslagen. Desondanks krijgt de SIDN overigens nog steeds twintig- tot veertigduizend query's per seconde te verwerken.
/i/1332956316.jpeg?f=imagenormal)
Een node van het K-rootservercluster draait bij de AMS-IX
Foto: Bas van Schaik
Beren op de weg
De twee zwakke plekken van het dns-systeem zijn de keten van query's en het gebruik van non-authoritative cache-servers. De dertien root servers - grotendeels geïmplementeerd als anycast-clusters - zijn natuurlijk een aantrekkelijk doelwit voor krakers die het internet willen platgooien. Er is echter nog nooit een succesvolle aanval uitgevoerd, hoewel er wel een paar pogingen zijn gedaan.
Wat wel is gelukt, is om computers verkeerde ip-adressen te laten gebruiken via een techniek die cache poisoning wordt genoemd. Daarbij wordt een vals adres in de lokale cache geïnjecteerd. Dat kan op een besmette machine gemakkelijk direct, bijvoorbeeld door de hosts-file aan te passen. Het is ook mogelijk om een query naar een valse dns-server te sturen - bijvoorbeeld met address spoofing - of door een vals antwoord terug te geven. Hoe dichter een valse dns-server bij de wortel van de dns-boom zit, hoe groter de reikwijdte van de hack natuurlijk is.
Het vervelende is dat een eindgebruiker hier helemaal niets van hoeft te merken. Oplettende surfers kijken bijvoorbeeld eerst of een link en de onderliggende url in een mail-bericht wel overeen komen, voordat ze erop klikken. Hetzelfde geldt voor https: iedereen weet inmiddels wel dat het slotje in de browser aangeeft of een verbinding wel of niet is versleuteld. Aan een vals ip-adres waarop een goed nagemaakte website draait, kan een gebruiker echter vrijwel niets zien.
Cache injection
Tot een paar jaar terug waren dns-inbraken vooral theoretisch, maar in 2008 vond Dan Kaminsky een lek waarmee kwaadwillenden daadwerkelijk valse informatie in de caches van de meestgebruikte dns-servers konden injecteren. Daarmee werd dnssec, dat toen al meer dan tien jaar bestond, ineens heel actueel. De afgelopen jaren zijn de beheerders van de dns-infrastructuur dan ook druk bezig geweest met het uitontwikkelen en implementeren van deze beveiliging.
Met dnssec worden enkele velden aan de bestaande domeininformatie op dns-servers toegevoegd. De cryptografische ondertekening van een domeinnaam wordt aangeboden in het zogeheten RRSIG-record, en de bijbehorende publieke sleutel is opvraagbaar als het DNSKEY-veld. Hiermee kan een resolver direct controleren of de informatie die hij binnenkrijgt inderdaad van de echte dns-server afkomstig is. Bestaat een domein niet, dan levert de query een Authenticated Denial of Existence op.
De invoering bij de SIDN
Digitaal ondertekenen
"Bij de implementatie van dnssec moet je bij het begin beginnen: de root servers", aldus Marco Davids, technisch specialist van de SIDN. "Twee jaar geleden werd begonnen met de ondertekening van de berichten van de root servers. Een maand later hebben wij dat ook ingevoerd voor het .nl-domein."
Die stap was de tweede schakel in de chain of trust. De publieke sleutel waarmee SIDN zijn dns-records ondertekent, is opvraagbaar via de root servers, die de sleutel in een zogeheten ds-record aanbieden. De derde schakel is dat de publieke sleutels van individuele .nl-domeinen via de name-servers van de SIDN gecontroleerd kunnen worden. Zo wordt voorkomen dat een man-in-the-middle een gewoon dns-antwoord terugstuurt terwijl de echte nameserver wel degelijk dnssec ondersteunt.
Voor het ondertekenen van de records heeft SIDN twee Hardened Linux-systemen die van een hardware security module zijn voorzien. Deze cryptoprocessors zijn Luna SA 4-modules van Safenet. Tot nu toe werd zulke apparatuur vooral door banken gebruikt, maar te zijner tijd zullen wellicht ook hosting providers deze modules aanschaffen. Zij doen immers meestal het dns-beheer voor hun klanten. Er zijn voor hen trouwens ook goedkopere oplossingen, zoals SoftHSM.
Versleuteling zone files
De zone files waarin alle informatie voor de .nl-domeinen staat, worden elke twee uur opnieuw gegenereerd uit de gegevens van het Domeinregistratiesysteem, het administratieve systeem van de SIDN. Daarvoor wordt onder andere het opensourcepakket OpenDNSSEC gebruikt. De ondertekening van de records voor alle ruim vijf miljoen domeinen kost ongeveer een half uur. "Dat geeft ons voldoende ruimte om die batch een paar keer te herstarten als dat nodig mocht zijn", aldus Davids.
De records kunnen ook on-the-fly door de nameserver worden ondertekend. Dat wordt bijvoorbeeld ondersteund door het Nederlandse PowerDNS. "Dan moet je je geheime sleutelmateriaal naar elke slave server vervoeren, en om veiligheidsredenen doen wij dat niet."
"Failure is not an option"
"Belangrijker dan de techniek zijn de policy's en practices rond dnssec. Zo moeten er bij het genereren van nieuwe sleutels twee beheerders voor de HSM-systemen en een security officer aanwezig zijn. Die moeten elk een token presenteren en alles wordt op film vastgelegd. Het gaat ook om het gevoel dat je overbrengt: vertrouwen is ook een beetje show." Dat laatste geldt al helemaal voor de key signing ceremony van de root servers.
Daarnaast heeft men bij SIDN moeten nadenken over de problemen die kunnen opduiken. "Welke risico's zitten er aan het dnssec-proces vast? Wat gebeurt er als maar de helft van de records wordt ondertekend? Wat als er een HSM stuk gaat?" Davids' collega Miek Gieben benadrukt: "Failure is not an option. We moeten altijd in de lucht zijn." Het is in het verleden weliswaar een paar keer voorgekomen dat de registratiesystemen of de dns-servers problemen hadden, maar zou het hele .nl-domein eruit liggen, dan loopt de schade in de miljarden.
Vertraging
De invoering van dnssec heeft dan ook diverse malen vertraging opgelopen. "Wij zijn hier paranoïde," zegt Gieben. "We willen niets veranderen zolang we niet zeker weten dat het ook werkt." Een van de vroege problemen van het nieuwe protocol was dat dns-antwoorden onderweg soms werden weggegooid. "De doorgifte van dnssec kan op elke tussenliggende firewall en resolver misgaan."
Hoewel dnssec is ontworpen als transparante aanvulling op het traditionele dns-systeem, zijn er wel degelijk verschillen. Zo konden de udp-pakketjes voor traditionele dns-berichten nooit meer dan 512 tekens bevatten. Dat is bijvoorbeeld ook de reden dat er precies dertien root servers zijn. Als de grotere dnssec-pakketten onderweg ergens geblokkeerd worden, valt het hele systeem echter in duigen.
Vandaar dat SIDN samen met het Ministerie van Economische Zaken, NLnet Labs, PowerDNS en SURFnet het platform DNSSEC.nl heeft opgericht. "Daar praten we over de implementatie-aspecten van dnssec. Gebruiken we NSEC of NSEC3? Hoeveel bits moet een sleutel bevatten? En hoelang zijn die sleutels geldig?"
Ingebruikname
De eerstvolgende stap is de uitrol van dnssec bij de registrars. Om te beginnen zorgt de SIDN dat registrars de publieke sleutels voor hun domeinen automatisch via de EPP-webservice kunnen aanleveren. Deze dienst wordt dit voorjaar in gebruik genomen.
Hosting providers, die veelal ook het dns-beheer voor hun klanten verzorgen, kunnen de implementatie van dnssec dan meteen in gang zetten. Registrars die hun klanten via een webinterface zelf de dns-instellingen laten beheren, zullen extra velden voor de publieke sleutels aan hun dashboards moeten toevoegen. Als de publieke sleutels bij de registrar bekend zijn, kan die ze weer automatisch naar de SIDN doorzetten.
"We werken op dit moment samen met de registrars en isp's aan de verdere implementatie van dnssec", aldus Davids. "Sommige providers, zoals T-Mobile en Xs4all, ondersteunen dnssec al gedeeltelijk. Daarnaast hopen we bij de introductie drie of vier registrars launching partners te hebben die dnssec direct aan hun klanten aanbieden. De software is klaar; we zitten nu in de testfase."
Friends & Fans
Wie zijn eigen domein en dns beheert en niet kan wachten tot zijn registrar dnssec aanbiedt, kan zijn publieke sleutel tot de officiële introductie zelf bij de SIDN indienen. Daarvoor is het Friends & Fans-programma opgezet. Wie mee wil doen, moet een mailtje naar de stichting sturen, die de publieke sleutel dan handmatig van de betreffende nameserver haalt en deze buiten de registrar om aan het SIDN-systeem toevoegt. Als dnssec straks officieel wordt ondersteund, zullen de sleutels bij registrars die de dienst nog niet ondersteunen, toch weer worden verwijderd. Meedoen kan dan alleen nog via de registrars.
Wil je ten slotte weten of de resolver op je eigen computer wel of geen dnssec ondersteunt, dan kun je daarvoor naar de test-pagina gaan. Volgens de statistieken van RIPE vroeg meer dan vijftig procent van alle dns-query's een half jaar geleden al om de dnssec-gegevens. Dat wil natuurlijk niet zeggen dat alle records ook daadwerkelijk gevalideerd worden, maar de penetratie van het systeem is duidelijk al vergevorderd.
/i/1332956435.png?f=imagenormal)
Redenen te over
Hoewel we dns wel het laatste onbeveiligde protocol kunnen noemen, is er lange tijd getwijfeld aan het nut van dnssec. Het is immers nog altijd veel eenvoudiger om mensen op duidelijk onbetrouwbare links in spammailtjes te laten klikken, dan om ergens een vals dns-record te injecteren. Hoewel dnssec al veel langer bestond, kreeg het dan ook weinig aandacht.
Pas toen Kaminsky in 2008 over een bruikbare kwetsbaarheid publiceerde, kwam de beveiliging van dns in een stroomversnelling. Het DigiNotar-debacle, dat aantoonde dat voorheen onvoorstelbare veiligheidsproblemen toch echt kunnen optreden, deed daar nog een schepje bovenop - sommigen spraken zelfs van het failliet van het certificaten-systeem.
De nieuwe dnssec-infrastructuur zorgt echter niet alleen voor beveiliging van het dns-systeem - het kan ook voor nieuwe toepassingen worden gebruikt. De eerste toepassing lijkt 'DANE' te worden: DNS-based Authentication of Named Entities. Hiermee kunnen servercertificaten aan de hand van dnssec-records worden gevalideerd. Voor het opzetten van een versleutelde verbinding naar een webserver ben je dan niet langer afhankelijk van een certificaat dat door diezelfde server wordt aangeleverd, en dat alleen nog aan de hand van certificaten in je browser gevalideerd kan worden. Met DANE hadden de problemen van DigiNotar misschien kunnen worden voorkomen. Davids weet dat wel zeker: "Na DigiNotar hadden wij onze business case voor DNSSEC rond."