Sécuriser votre DNS en environnement Active Directory

Diagnostics du serveur

Pour voir la configuration du serveur, il suffit de saisir :

Get-DnsServerDiagnostics

Etat de l’art = toutes les valeurs à True.

Correction rapide :

Set-DnsServerDiagnostics -All $true

Contrôle de la correction :

Etat de l’art.
Présence du fichier de log

Tout avoir à « True » est certes bien, mais comprendre chacune des options c’est mieux. Pour ça, je vous invite à lire la page dédié de Microsoft.

Présentation du DNSSEC

Pour commencer, rappelons que le DNS sert à résoudre des noms en adresses IP.
Quand nous recherchons www.google.fr le DNS nous transmet l’adresse IP.

Le fonctionnement est le même en interne dans votre entreprise quand vous souhaitez vous connecter au serveur d’impression, à votre application métier en web, etc.

C’est pourquoi sécuriser vos enregistrements DNS est important pour éviter qu’un attaquant redirige les requêtes vers un point corrompu.

DNSSEC permet de s’assurer l’IP renvoyée est légitime.

Mise en place du lab

Dans l’environnement de laboratoire, mon AD a aussi le rôle de DNS.

Il fait donc autorité dans la zone geekmunity.lab (prérequis pour la mise en place de DNSSEC) et il synchronisera les signatures avec les autres DC automatiquement.

Si vous avez des DNS seuls, il faudra synchroniser les clefs manuellement.
Sur un Windows, les points/ancres de confiance sont situés dans : C:\Windows\System32\DNS

Mise en place du DNSSEC

Sélectionner votre zone de recherche puis, via le clic droit, DNSSEC > Signer la zone.

Vous pouvez-maintenant choisir d’utiliser soit les paramètres par défaut de Windows, soit ceux de votre choix.

Afin de comprendre ce qu’est le DNSSEC on va choisir l’option personnalisée.

On sélectionne le serveur qui sera le gestionnaire des clefs. Dans mon cas je n’ai qu’un AD.

On va maintenant configuré la clef qui servira a signé la clef privée qui servira a signé la zone :

Il est possible de choisir :
– l’algorithme de chiffrement,
– la longueur de la clef a utilisé,
– le fournisseur de clef,
– la période de validité de la signature,
– si on souhaite répliquer la clef privée vers les autres DNS faisant autorité sur cette zone (uniquement si vous êtes sur un serveur AD)

Attention, si vous mettez l’algorythme de chiffrement et la longueur de la clef au maximum, l’échange sera plus sécurisé mais cette sécurité se fera au prix des performance du serveur.
Dans certains cas, un échange trop long peut même avoir des impacts sur votre productions, méfiance donc.

On va maintenant configurer la clef qui servira a signé la zone :

On a peu ou prou les mêmes possibilités de réglages :

La prochaine page permet de choisir le protocole pour la preuve de non existence.

Source: ensimag.fr


Il est recommandé d’utiliser NSEC3 sauf cas exceptionnel !

Dans la partie suivante, mon serveur DNS etant aussi un contrôleur de domaine j’ajoute la réplication automatique des points de confiance :

La dernière fenetre permet de configurer la signature et l’interrogation via DNSSEC.

Enfin, si tout s’est bien passé vous devriez avoir cette fenêtre :

Controle

Dans la console DNS directement :

La présence du cadenas et de l’information DNSEC permet de s’assurer que l’opération est finie avec succès.

Toutes les informations saisies précédemment sont visibles via la fenetre proriété de DNSSEC :

Gérer la sécurité des mises à jours
On retrouve ici les informations saisies plus tôt
On retrouve ici les informations saisies plus tôt
Permet de contrôler si la distribution est bien activée

Dans l’explorateur de fichiers vous verrez aussi maintenant l’existance de deux nouveaux fichiers :

A ajouter à votre sauvegarde !

Interrogation DNS en Powershell

Sous Windows depuis plusieurs années le nslookup est déprécié.
A la place, privilégié Resolve-DnsName avec l’option dnssecok pour forcé le DNSSEC, comme ceci :

Resolve-DnsName PosteCible -Server ServerDNS -dnssecok

Rendre le DNSSEC obligatoire pour les résolutions DNS

Il faut maintenant rendre le DNSSEC obligatoire sur les stations, sinon l’intêret est moindre.
Pour ce faire, direction les GPO :

Policies > Windows Settings > Name Resolution Policy

Penser à cliquer sur « Create » !

Dans mon cas, je ne force pas la communication entre le serveur et le client via IPSec mais vous pouvez le faire pour un gain de sécurité.

une fois la règle créée vous devriez voir ceci :

Controle de la GPO

Requête avant la GPO :

Requete après la GPO :

Sources

Starship Troopers : voulez-vous en savoir plus ?

DNS Diagnostic : https://docs.microsoft.com/en-us/powershell/module/dnsserver/set-dnsserverdiagnostics?view=win10-ps

DNSSEC : https://www.icann.org/resources/pages/dnssec-what-is-it-why-important-2019-03-20-fr

Déroulement d’un attaque sans DNSSEC : https://www.ovhcloud.com/fr/domains/dnssec/

Configuration par défaut DNSSEC : https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/dn593642(v=ws.11)#cryptographic-algorithms

Document de l’AFNIC sur DNSSEC : https://www.bortzmeyer.org/files/jres2009-dnssec-article.pdf

Key Signing Key : https://csrc.nist.gov/glossary/term/key_signing_key