DNSSEC client check op website

Laatst kregen we de vraag hoe het ‘DNSSEC (IN)SECURE’ predicaat op de SIDN Labs website werkt. Als je de site bezoekt, zie je bovenaan twee icoontjes staan, die aangeven of de bezoeker IPv6 dan wel DNSSEC (validatie) ondersteunt. Het eerste is relatief makkelijk, maar het tweede is wat lastiger, omdat DNSSEC-validatie waarschijnlijk niet op de gebruikersmachine zelf plaatsvindt. De vraag was dan ook hoe het werkt en of anderen het ook op hun sites kunnen zetten. Dat kan zeker; onderaan dit artikel vind je een link naar de code. Maar eerst wat uitleg over hoe de test te werk gaat.


Zoals gezegd vindt DNSSEC-validatie waarschijnlijk niet op de machine zelf plaats. Daarbij komt dat er op applicatieniveau geen verschil is tussen ‘bestaat niet’ en ‘bestaat maar de digitale handtekening klopt niet’. Vooralsnog weet de applicatie immers niets van DNSSEC, of het nou door de resolver ondersteund wordt of niet.

De ‘truc’ is dat we daar ook gebruik van kunnen maken.

Stel je zet ergens op een bepaalde domeinnaam een afbeelding neer, maakt een pagina die onder andere deze afbeelding bevat. De browser zal de afbeelding downloaden en laten zien en intern zal de browser een signaal zenden wanneer de afbeelding geladen is. Maar als die domeinnaam (of de afbeelding zelf) niet gevonden kan worden zal er een ‘niet-gevonden’-icoontje te zien zijn in plaats van de afbeelding zelf, en ook het interne signaal zal uitblijven.

En daar vinden we het merkbare verschil tussen een resolver die DNSSEC valideert en een die dat niet doet: als de domeinnaam waar het plaatje staat een foutieve DNSSEC-handtekening heeft, zal een validerende resolver geen antwoord geven. Een resolver die niet valideert merkt de fout niet op en geeft wel antwoord.

De test maakt daarom gebruik van een opzettelijk foute opstelling: we hebben een element dat op een niet-validerende domeinnaam wordt gehost (servfail.sidnlabs.nl); de site zelf probeert een kleine afbeelding daarvan te downloaden (1×1.png), en luistert naar het signaal of dat gelukt is. Als dat signaal uitblijft concludeert de test dat de resolver aan validatie doet. Komt het signaal wel binnen dan is er duidelijk geen validatie.

Deze aanpak heeft wel wat problemen: als er een andere fout optreedt waardoor het plaatje niet geladen wordt, zal het script onterecht concluderen dat er validatie plaatsvindt terwijl dat niet zo is. Ook is het uitblijven van een gebeurtenis waarvan je niet weet hoe lang het kan duren lastig te meten; in theorie kun je nooit zeggen of de gebeurtenis niet alsnog in de toekomst plaats zal vinden. Daarom wordt er gebruik gemaakt van een time-out die false positives minimaliseert terwijl de gebruiker niet te lang hoeft te wachten op resultaat. Het helpt als de niet-validerende domeinnaam in hetzelfde domein valt als de site.

We hebben het gebruikte script wat algemener gemaakt; de plaatjes, teksten, domeinnamen, en time-out zijn allemaal te configureren:

<script type="text/javascript">
 sidn_dnssec_set_timeout(2000);
 sidn_dnssec_set_test_image('//servfail.sidnlabs.nl/1x1.png');
 sidn_dnssec_set_checking_image('dnssec_checking.png');
 sidn_dnssec_set_checking_text('Checking DNSSEC Validation');
 sidn_dnssec_set_success_image('dnssec_secure.png');
 sidn_dnssec_set_success_text('DNSSEC Validation is enabled');
 sidn_dnssec_set_failure_image('dnssec_insecure.png');
 sidn_dnssec_set_failure_text('DNSSEC Validation is not enabled');
</script>

De belangrijkste waarde die hier gezet wordt is sidn_dnssec_set_test_image(); dit is de kern van de check; het plaatje dat moet bestaan, op een domeinnaam die wel DNSSEC-signed is, maar niet valideert. Je kunt natuurlijk de default (servfail.sidnlabs.nl) gebruiken; die gebruiken wij zelf ook en werkt. We bieden geen garantie dat deze domeinnaam altijd hetzelfde zal blijven.

De code is te vinden op github: https://github.com/SIDN/client_dnssec_check


Dit artikel verscheen 9 juli 2014 op de blog van SIDN Labs en is met toestemming van de auteur op ISP Today gepubliceerd.

Over Jelte Jansen

Jelte Jansen is research engineer bij SIDN. Hij houdt zich voornamelijk bezig met het onderzoeken van en bijdragen aan nieuwe technologieën. Hij ontwikkelt prototypes, maar heeft ook een (technische)
adviserende rol naar de rest van de organisatie en de Nederlandse en internationale internetgemeenschap.

Laatste artikelen