Update NSEC3-parameters voorkomt problemen met validerende resolvers

Bijna helft ondertekende .nl-domeinen gebruikt nog oude instellingen

Verbroken onveilige keten

Volgens RFC 9276 is de aanbeveling nu om bepaalde mogelijkheden van NSEC3 niet meer te gebruiken. NSEC3 is onderdeel van de DNSSEC-beveiliging. Het zorgt voor digitale handtekeningen bij DNS-antwoorden voor niet-bestaande records, zodat cryptografisch kan worden bewezen dat ze echt niet bestaan.

Hoewel RFC 9276 inmiddels 2 jaar geleden is gepubliceerd en een groot deel van de domeinen de aanbevelingen inmiddels opvolgt, zien we dat bijna de helft van de ondertekende .nl-domeinnamen die NSEC3 gebruiken dat nog niet heeft gedaan. We raden registrars en operators van autoritatieve name-servers aan om de NSEC3-instellingen voor hun domeinnamen te controleren, en waar nodig de parameters voor de iteraties en de salt op respectievelijk '0' en '-' in te stellen. Komend jaar kijken we of we het incentive-programma voor DNSSEC hierop willen aanpassen.

NSEC en NSEC3

NSEC is een noodzakelijk onderdeel van de DNSSEC-beveiliging. Het zorgt ervoor dat cryptografisch bewezen kan worden dat een bepaald DNS-record echt niet bestaat: de zogenaamde 'authenticated denial of existence'. Kort gezegd werkt dit als volgt: de zonefile wordt gesorteerd en er worden digitaal ondertekende NSEC-records toegevoegd, bijvoorbeeld voor a.example.nl en c.example.nl. Door die NSEC-records op een slimme manier terug te geven in een DNS-antwoord, kan een validerende resolver daaruit afleiden dat bijvoorbeeld b.example.nl niet bestaat. Om dat te bereiken, heeft de nameserver echter wel prijs moeten geven dat a.example.nl en c.example.nl bestaan.

Het nadeel van deze aanpak is dat kwaadwillenden en nieuwsgierigen die informatie makkelijk kunnen misbruiken om heel eenvoudig alle (bestaande) namen in een zone te achterhalen, een truc die 'zone-walking' wordt genoemd.

NSEC3 lost dit probleem (in principe) op door niet de bestaande namen zelf op te nemen in de NSEC-records, maar deze eerst te hashen (i.e. digitaal te verhaspelen). Daarbij biedt NSEC3 ook de mogelijkheid om een salt aan elke domeinnaam toe te voegen en een aantal extra slagen (iteraties) aan het uitvoeren van de hash-functie. Een simpele zone-walking wordt daarmee voorkomen.

Wel complexer, niet veiliger

Voortschrijdend inzicht leidde echter tot de conclusie dat de toepassing van salt en extra iteraties NSEC3 wel complexer maakt maar geen extra veiligheid oplevert. En dat terwijl de extra iteraties van de hashfunctie wel steeds extra cryptografische rekenkracht kosten.

Vandaar dat RFC 9276 aanraadt om zowel de extra iteraties als de salt niet meer te gebruiken. Voor domeinnaamhouders en operators van autoritatieve nameservers betekent dit dat zij de parameters voor de iteraties en de salt op respectievelijk '0' en '-' moeten instellen (deze worden opgeslagen in het NSEC3PARAM-record). Zelf hebben we deze wijziging voor de .nl-zone (samen met een paar andere verbeteringen) eind 2022 doorgevoerd.

Extra iteraties

Hoewel RFC 9276 inmiddels 2 jaar geleden is gepubliceerd, heeft bijna de helft van de ondertekende .nl-domeinnamen die NSEC3 gebruiken deze aanbeveling nog niet opgevolgd. Uit de statistieken van SIDN Labs blijkt dat 46 procent 1 of meer extra iteraties ingesteld heeft staan. In 3 promille van de gevallen staat dit aantal zelfs ingesteld op meer dan 100 iteraties, wat kan leiden tot problemen met validerende resolvers.

Aantal NSEC3-iteraties in de .nl-zone
https://images.ctfassets.net/yj8364fopk6s/6U9IlXSvLJAxwaMRH98v4p/e6de52ae85c6c615c676b37750718ccf/stats.sidnlabs.nl-NSEC3iteraties-20241212.png

Figuur 1: 46 procent van de ondertekende .nl-domeinnamen die NSEC3 gebruiken heeft 1 of meer extra iteraties ingesteld staan. [bron: SIDN Labs]

Controleer je NSEC3-instellingen

We raden domeinnaamhouders en operators van autoritatieve nameservers aan om de NSEC3-instellingen voor hun domeinnamen te controleren, en waar nodig de parameters voor de iteraties en de salt op korte termijn op respectievelijk '0' en '-' in te stellen.

De NSEC3-instellingen worden opgeslagen in het NSEC3PARAM-record. Dat record wordt (alleen) door de autoritatieve nameserver gebruikt bij de ondertekening van de zone. In de aanbevolen configuratie ziet het NSEC3PARAM-record er als volgt uit:

example.nl IN NSEC3PARAM 1 0 0 -

met daarin achtereenvolgens deze parameters:

  • hashalgoritme: altijd waarde 1 (SHA-1)

  • vlaggen: waarde 0, tenzij je de 'Opt-Out'-vlag voor niet-ondertekende delegaties aan hebt staan (waarde 1)

  • extra iteraties: nu dus altijd waarde 0

  • salt: nu dus niet meer gebruiken (waarde '-')

Voor de details verwijzen we naar RFC 5155 (waarin NSEC3 is gedefinieerd), en voor de specifieke manier om deze parameters in te stellen en te wijzigen naar de documentatie van je server-software [e.g. BIND named, PowerDNS Authoritative Server]. Let daarbij op dat de nieuwe instellingen pas na herondertekening van je zone toegepast worden. Voor een snelle check van de huidige instellingen kun je bijvoorbeeld op deze webpagina terecht:

https://mxtoolbox.com/nsec3param.aspx

"Komend jaar kijken we in samenwerking met SIDN Labs en belanghebbenden of we het incentiveprogramma voor DNSSEC hierop willen aanpassen," vertelt product owner Chris Faber. "Het zou kunnen dat we deze instellingen in de toekomst opnemen in de voorwaarden." "Uiteraard bespreken we dat eerst met interne en externe stakeholders," aldus relatiemanager Jeroen Wolsink.