Sécurité du DNS – Activer DNSSEC sur une zone DNS Active Directory

I. Présentation

Dans ce tutoriel sous Windows Server 2022, nous allons apprendre à configurer DNSSEC de manière à signer les enregistrements de la zone DNS de l'Active Directory.

Pour suivre ce tutoriel, vous avez besoin d'un contrôleur de domaine Active Directory ainsi que d'une machine intégrée au domaine (serveur ou poste de travail) pour effectuer des tests de bon fonctionnement.

II. Qu'est-ce que DNSSEC ?

A. Définition et principes

Directement lié au protocole DNS et aux serveurs DNS, DNSSEC est une extension du DNS orientée sécurité dont l'objectif est de signer les enregistrements DNS d'une zone. De ce fait, cela peut s'appliquer à la zone DNS correspondante au domaine Active Directory.

Grâce à cette couche de sécurité supplémentaire, on peut lutter contre les attaques de type DNS Spoofing (appelée également Cache Poisoning) et Man-in-the-middle. En effet, un attaquant ne pourra pas usurper l'identité de notre serveur DNS car il ne sera pas en mesure de présenter des enregistrements signés. Et s'il le fait, le client DNS comprendra que la réponse n'est pas valide. Sans DNSSEC, il y a toujours un risque que la réponse soit falsifiée (cache DNS avec de mauvaises informations) et que l'on soit redirigé, sans s'en rendre compte, vers un serveur malveillant.

Le serveur DNS de Windows Server supporte DNSSEC et l'implémentation respecte les différentes RFC à ce sujet : RFC 4033, RFC 4034 et RFC 4035.

La signature DNSSEC doit être appliquée sur une zone par un serveur DNS faisant autorité pour le domaine, ce qui est le cas de la zone DNS Active Directory. Ainsi, tous les enregistrements DNS seront signés. Même s'il y a la présence de DNSSEC, le principe du DNS reste le même, à savoir répondre à des requêtes pour de la résolution de noms, mais on ajoute une signature numérique sur les réponses DNS.

B. Terminologie

Lorsque l'on parle de DNSSEC, il y a un ensemble de termes à connaître afin de bien comprendre la configuration qui va suivre et être capable de l'interpréter. Voici les éléments clés.

  • RRSIG - Resource Record Signature
    • Enregistrement signé et associé à un enregistrement d'origine (ce que l'on verra dans la console DNS à la fin de la configuration)
  • NSEC3 - Next Secure 3
    • Mécanisme pour prouver qu'un enregistrement n'existe pas (on ne retourne pas rien, mais on retourne une réponse négative signée)
  • DNSKEY - DNS Key
    • Stocker la clé publique (SHA256) pour permettre la vérification de la signature
  • DS - Delegation Signer
    • Créer une délégation sécurisée (chaîne d'authentification sur les zones enfants)

Par ailleurs, il ne faut pas négliger le principe des clés KSK et ZSK :

  • Clé KSK - Key Signing Key
    • Clé privée qui sert à signer les clés privées ZSK
  • Clé ZSK - Zone Signing Key
    • Clé privée pour signer les données d'une zone

Enfin, point important de la configuration en environnement Active Directory : les points d'approbations (Trust anchors).

  • Un point d'approbation sert à stocker les enregistrements DNSKEY et DS
  • Ces informations sont stockées dans l'annuaire Active Directory

À partir de PowerShell, on peut lister cette commande pour lister les serveurs approuvés pour une zone spécifique :

Get-DnsServerTrustAnchor -Name it-connect.local

En complément, vous pouvez lire la documentation Microsoft :

III. Configurer DNSSEC sur une zone DNS

Actuellement, sans la signature DNSSEC, ma zone de recherche directe DNS ressemble à ceci :

Active Directory - Zone DNS sans DNSSEC

Je souhaite vous montrer la zone avant la mise en place de DNSSEC car vous verrez, qu'après avoir effectué la configuration, la zone se présentera différemment.

Désormais, passons à la configuration de DNSSEC sur la zone Active Directory "it-connect.local". Cette configuration s'effectue à partir de la console DNS.

Depuis Windows Server 2016, DNSSEC est activé par défaut, mais les zones ne sont pas signées : une action à réaliser manuellement. Si l'on regarde les propriétés du serveur DNS, dans l'onglet "Avancé", il n'y a pas d'options DNSSEC dans les "Options de serveur". Auparavant il y avait une option ici. Si l'on regarde avec PowerShell, on peut voir que DNSSEC est bien actif.

(Get-DnsServerSetting).EnableDnsSec

AD DNSSEC est-il activé

Pour configurer DNSSEC sur la zone "it-connect.local", on effectue un clic droit sur la zone puis sous "DNSSEC", on clique sur "Signer la zone".

Windows Server 2022 - AD DNSSEC - Signer une zone - Etape 1

Un assistant s'exécute. On passe la première étape.

Windows Server 2022 - AD DNSSEC - Signer une zone - Etape 2

Afin de pouvoir créer les points d'approbations en même temps que la configuration, on choisit l'option "Personnalisez les paramètres de signature de zone".

Windows Server 2022 - AD DNSSEC - Signer une zone - Etape 3

Il faut commencer par déterminer un serveur qui est maître des clés, un peu sur le même principe qu'il y a un maître pour les rôles FSMO de l'Active Directory. Par défaut, c'est le serveur actuel qui est proposé, mais il est possible de changer.

Windows Server 2022 - AD DNSSEC - Signer une zone - Etape 4

Ensuite, lisez l'explication au sujet de la clé KSK et poursuivez.

Windows Server 2022 - AD DNSSEC - Signer une zone - Etape 5

Cliquez sur le bouton "Ajouter" pour créer une nouvelle clé KSK. Nous allons générer une nouvelle clé SHA-256 de longueur 2048 bits (configuration par défaut). Cliquez sur "OK".

Windows Server 2022 - AD DNSSEC - Clé KSK

La clé est créée, poursuivez.

DNSSEC - Clé KSK

Désormais, c'est la clé ZSK qui doit être créée. Lisez l'explication et continuez.

Windows Server 2022 - AD DNSSEC - Signer une zone - Etape 8

Cliquez sur "Ajouter" pour créer une clé puis sur le bouton "OK".

Windows Server 2022 - AD DNSSEC - Clé ZSK

En ce qui concerne les réponses négatives signées, nous allons utiliser NSEC3 qui est plus sécurisé que NSEC. Choisissez bien cette version.

DNSSEC - NSEC3

Cochez les deux options, notamment celle nommée "Activer la distribution des ancres d'approbation pour cette zone" puisque nous sommes sur un environnement Active Directory. Sinon, il faudra le faire manuellement par la suite. Poursuivez.

Windows Server 2022 - AD DNSSEC - Signer une zone - Etape 11

Terminons par les paramètres de signature que l'on peut laisser par défaut également.

Windows Server 2022 - AD DNSSEC - Signer une zone - Etape 12

C'est presque terminé, il ne reste plus qu'à cliquer sur "Suivant" !

Windows Server 2022 - AD DNSSEC - Signer une zone - Etape 13

Voilà, la zone a été correctement signée par DNSSEC !

Windows Server 2022 - AD DNSSEC - Signer une zone - Etape 14

Pour voir le résultat, il faut rafraîchir la console DNS et là on voit que les enregistrements sont désormais de type "RRSIG" car ils sont signés !

Aperçu d'une zone DNS AD DNSSEC

À partir de maintenant, on peut tester que la signature fonctionne en utilisant PowerShell pour interroger le serveur DNS. La commande Resolve-DnsName intègre un paramètre nommé "-DnsSecOk" qui permet d'exiger une réponse signée. Voici un exemple pour résoudre le nom "srv-apps.it-connect.local" via DNSSEC :

Resolve-DnsName -Name srv-apps.it-connect.local -DnssecOk

Ce qui retourne un résultat comme celui-ci :

DNSSEC - Resolve-DnsName DnsSecOk

Bien que la réponse du DNS soit signée par DNSSEC, on parvient à lire la réponse retournée.

Remarque : si vous disposez de plusieurs contrôleurs de domaine avec le rôle de serveurs DNS, les enregistrements signés seront répliqués avec les autres serveurs. La zone apparaitra signée une fois que la réplication sera effectuée, ce qui signifie qu'il ne faut pas signer la zone sur chaque DNS !

IV. GPO DNSSEC pour les machines

Par défaut, Windows accepte les réponses DNS non signées pour l'ensemble des domaines. C'est logique, mais ce n'est pas réellement une bonne nouvelle par rapport à la configuration que l'on vient d'effectuer. Cela signifie que les machines sont en mesure d'accepter une réponse non signée... Pour changer ce comportement et forcer DNSSEC pour le domaine "it-connect.local", une GPO doit être déployée.

On va commencer par ouvrir la console de gestion des stratégies de groupe. Au sein de celle-ci, on va créer une nouvelle GPO. Dans cet exemple, elle se nomme "Sécurité - DNSSEC".

Il faut éditer cette GPO et parcourir les paramètres comme ceci :

Configuration ordinateur > Stratégies > Paramètres Windows > Stratégie de résolution de noms

Vous arrivez sur l'interface suivante :

GPO DNSSEC

Au sein de celle-ci, il va falloir créer une nouvelle règle. Sous "À quelle partie de l'espace de noms s'applique cette règle ?", il faut choisir "Suffixe" (1) et indiquer "it-connect.local" qui correspond au domaine Active Directory. Puis, l'option "Activer DNSSEC dans cette règle" doit être cochée ainsi que "Demander aux clients DNS de vérifier que les données de nom et d'adresse ont été validées par le serveur DNS" (2). Cliquez sur le bouton "Créer" (3).

GPO DNSSEC sur domaine AD

La règle apparaît dans la "Table de stratégie de résolution de noms". Cliquez sur "Appliquer".

GPO - Appliquer stratégie DNS

La GPO est prête, il ne reste plus qu'à créer une liaison pour l'appliquer aux machines du domaine Active Directory. Ainsi, toutes les machines du domaine chercheront à résoudre les hôtes de la zone "it-connect.local" uniquement via DNSSEC.

Pour tester, il faut exécuter la même commande que l'on a vu précédemment, mais sans le paramètre "-DnsSecOk" puisque Windows doit comprendre (grâce à la GPO, une fois appliquée) qu'il doit obtenir des réponses signées pour cette zone.

Resolve-DnsName -Name srv-apps.it-connect.local

DNSSEC sur un poste Windows 11

Cela se confirme par le fait que la stratégie est bien appliquée. La commande ci-dessous permet de s'en assurer.

Get-DnsClientNrptPolicy -Effective

Windows 11 - Get-DnsClientNrptPolicy

V. Conclusion

Nous venons de voir comment activer DNSSEC sur une zone DNS gérée par un serveur Windows ! Toutefois, le DNSSEC est un mécanisme que l'on peut activer sur d'autres types d'environnement, notamment sur les noms de domaine utilisés pour le Web.

Je termine cet article en vous orientant vers un article très détaillé, disponible sur le site Microsoft, pour la mise en œuvre d'un Lab DNSSEC.

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Florian BURNEL

Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.

Nombre de posts de cet auteur : 5573.Voir tous les posts

3 thoughts on “Sécurité du DNS – Activer DNSSEC sur une zone DNS Active Directory

  • Devons nous le faire aussi pour la zone inverse

    Répondre
  • La commande nslookup, permet-elle également de faire une résolution de nom avec vérification d’une réponse signée ou non ? Merci d’avance pour votre retour.

    Répondre
  • Bonjour Florian,

    Merci (une fois de plus) pour votre tuto.
    J’aurais voulu mettre en place DNSSEC sur mon DC (Windows Server 2016), malheureusement dès le début, la commande « (Get-DnsServerSetting).EnableDnsSec » me retourne False alors que vous précisez que le service est activé par défaut sur 2016.
    J’ai regardé sur le net pour un passage à True mais ne voulant pas faire d’erreurs, je sollicite votre éclairage.
    J’ai trouvé ceci :
    « run this command  » DnsCmd.exe /Config /enablednssec 1

    and this – dnscmd.exe /RetrieveRootTrustAnchors

    again. »

    Merci d’avance.

    Frank.

    Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.