Chapitre 516 minIntermédiaire
Sécuriser le DNS : DNSSEC, DNS over HTTPS et DNS over TLS
Par Josselyn C., prof de BTS SIO. Mis à jour le .
À la fin de ce chapitre, tu sauras
- dire ce que protègent DNSSEC, DoT et DoH, et ce qu'ils ne protègent pas ;
- expliquer la chaîne de confiance DNSSEC, de la racine à l'enregistrement ;
- signer une zone avec BIND et valider sur un résolveur ;
- définir une politique DNS chiffré et filtrage pour une entreprise.
4 exercices corrigés1 schéma
DNSSEC ajoute des signatures numériques aux enregistrements DNS : un résolveur qui valide peut prouver qu'une réponse vient bien du propriétaire de la zone et n'a pas été modifiée. DNS over TLS (DoT) et DNS over HTTPS (DoH) chiffrent, eux, le trajet entre le poste et son résolveur, pour que personne ne lise ni ne modifie les questions en route. Les deux approches se complètent : DNSSEC protège l'authenticité des données, DoT et DoH la confidentialité du trajet. Ce chapitre explique les deux, leur mise en œuvre sur BIND, pfSense et Windows, et la politique à tenir en entreprise.
Ce que chaque technique protège
| DNS classique | DNSSEC | DoT / DoH | |
|---|---|---|---|
| Authenticité : la réponse vient-elle du vrai propriétaire de la zone ? | Non | Oui, de bout en bout | Non : tu fais confiance au résolveur |
| Intégrité : la réponse a-t-elle été modifiée ? | Non | Oui | Oui, sur le trajet poste ↔ résolveur |
| Confidentialité : quelqu'un peut-il lire tes questions ? | Non, tout est en clair | Non, rien n'est chiffré | Oui, sur le trajet poste ↔ résolveur |
| Ports | UDP/TCP 53 | UDP/TCP 53 (réponses plus grosses) | DoT : TCP 853 ; DoH : TCP 443 (et UDP 443 en HTTP/3) |
| Normes | RFC 1034, 1035 | RFC 4033 à 4035 | DoT : RFC 7858 ; DoH : RFC 8484 |
DNSSEC : les nouveaux enregistrements
DNSSEC utilise la cryptographie asymétrique : le propriétaire de la zone signe avec sa clé privée, n'importe quel résolveur vérifie avec la clé publique publiée dans la zone (signature numérique).
| Enregistrement | Contenu | Où il se trouve |
|---|---|---|
| DNSKEY | Les clés publiques de la zone | Dans la zone signée |
| RRSIG | La signature d'un ensemble d'enregistrements (tous les A d'un nom, tous les MX de la zone…) | À côté de chaque ensemble signé |
| DS (Delegation Signer) | L'empreinte de la clé de la zone enfant | Dans la zone parente : le DS de sorbier.example est dans la zone .example |
| NSEC ou NSEC3 | La preuve signée qu'un nom n'existe pas (« entre ce nom et le suivant, il n'y a rien ») | Dans la zone signée |
Les zones utilisent souvent deux rôles de clés : une KSK (Key Signing Key), qui signe seulement les DNSKEY et dont l'empreinte est publiée en DS chez le parent, et une ZSK (Zone Signing Key), qui signe le reste et peut changer souvent sans toucher au parent. Une clé unique qui tient les deux rôles s'appelle une CSK (Combined Signing Key) : c'est le choix par défaut de BIND 9.20.
La chaîne de confiance
Un résolveur ne peut pas faire confiance à une clé publiée dans la zone elle-même : un attaquant capable de falsifier la zone falsifierait aussi la clé. La confiance descend donc de la racine.
- Le résolveur connaît une seule clé à l'avance : la clé de la racine, son ancre de confiance (trust anchor), livrée avec le logiciel et mise à jour automatiquement (RFC 5011).
- Avec elle, il vérifie le DNSKEY de la racine, qui signe le DS de
.example. - Ce DS est l'empreinte de la clé de
.example: il vérifie le DNSKEY de.example, qui signe le DS desorbier.example. - Le DS de
sorbier.examplevalide son DNSKEY, qui signe (RRSIG) l'enregistrement A dewww.sorbier.example.
Si une seule signature est fausse ou expirée, la validation échoue et le résolveur répond SERVFAIL : il préfère ne rien répondre plutôt qu'une réponse douteuse. Si tout est valide, il positionne le drapeau ad (Authenticated Data) dans sa réponse.
Valider DNSSEC sur tes résolveurs
La validation se fait sur le résolveur, pas sur le poste : les postes font confiance au drapeau ad de leur résolveur. Il faut donc valider partout où tu résous.
| Résolveur | Validation DNSSEC |
|---|---|
| Unbound de pfSense (Services > DNS Resolver) | Activée par défaut (case DNSSEC) |
| BIND 9.20 en résolveur | Activée par défaut (dnssec-validation auto;), ancre de la racine intégrée |
| DNS de Windows Server 2025 | Le serveur sait valider les réponses distantes (onglet Avancé des propriétés du serveur), à condition d'avoir ajouté l'ancre de confiance de la racine (dossier Points d'approbation, Trust Points, de la console DNS, ou Add-DnsServerTrustAnchor -Root) ; chez Sorbier, la validation est faite par Quad9, le redirecteur. Les clients peuvent aussi exiger la validation par la table de stratégie de résolution de noms (NRPT) |
Quad9 (9.9.9.9) | Valide, et filtre les domaines malveillants connus |
Pour tester un résolveur, demande un domaine signé et regarde le drapeau ad :
dig @192.168.10.238 www.afnic.fr A +dnssec
# ;; flags: qr rd ra ad; ... <- ad : réponse validée
# www.afnic.fr. ... IN A ...
# www.afnic.fr. ... IN RRSIG A 13 3 ...
delv (fourni par bind9-dnsutils) fait la validation lui-même et explique pourquoi elle échoue : delv @192.168.10.238 www.afnic.fr affiche ; fully validated quand tout va bien.
Le test inverse compte autant : le domaine dnssec-failed.org, volontairement mal signé, doit renvoyer SERVFAIL sur un résolveur qui valide. S'il donne une adresse, ton résolveur ne valide pas.
Signer une zone avec BIND 9.20
Depuis BIND 9.16, la signature est automatique avec dnssec-policy : BIND crée les clés, signe la zone, renouvelle les signatures avant leur expiration et gère les changements de clés. Sur ns1, il suffit d'ajouter une ligne à la zone :
zone "sorbier.example" {
type primary;
file "/var/lib/bind/db.sorbier.example";
allow-transfer { key "transfert-sorbier"; };
dnssec-policy default;
};
La politique default utilise une CSK unique en ECDSA P-256 avec SHA-256 (algorithme 13). En BIND 9.20, une zone soumise à dnssec-policy est signée en ligne (inline signing) : ton fichier de zone reste lisible et modifiable comme avant, BIND en tient une version signée à côté (db.sorbier.example.signed), d'où la nécessité de ranger la zone dans /var/lib/bind/.
sudo named-checkconf
sudo rndc reconfig
sudo rndc dnssec -status sorbier.example # clés, états, prochaines étapes
dig @127.0.0.1 sorbier.example DNSKEY +multi +norec
dig @127.0.0.1 sorbier.example CDS +short # l'enregistrement à transmettre au parent
Reste l'étape que BIND ne peut pas faire seul : publier le DS chez le parent, par l'interface du bureau d'enregistrement du domaine. Tant que le DS n'est pas publié, la zone est signée mais pas validable (les résolveurs la traitent comme non signée) : c'est sans danger. L'inverse est dangereux.
DNS over TLS et DNS over HTTPS
Sans chiffrement, toute personne placée sur le trajet (le Wi-Fi d'un hôtel, un fournisseur d'accès) lit la liste des sites que tu consultes, et peut modifier les réponses. DoT et DoH enveloppent les requêtes DNS dans TLS.
| DNS over TLS (DoT) | DNS over HTTPS (DoH) | |
|---|---|---|
| Transport | TLS sur TCP 853, port dédié | HTTPS sur TCP 443 (HTTP/2) ou UDP 443 (HTTP/3) |
| Visible par l'administrateur réseau | Oui : le port 853 se repère et se filtre | Non : se fond dans le trafic web |
| Utilisé par | Android (« DNS privé »), résolveurs entre eux, pfSense vers ses redirecteurs | Navigateurs (Firefox, Chrome, Edge), Windows 11 |
| Point de vue de l'entreprise | Facile à autoriser vers les seuls résolveurs choisis | Peut contourner le DNS interne et le filtrage sans que tu le voies |
Une variante plus récente, DNS over QUIC (DoQ, RFC 9250, UDP 853), suit la même logique.
Le point de vue de l'entreprise : garder la maîtrise du DNS
Pour un particulier sur un Wi-Fi public, DoH est une protection. Pour une entreprise, un navigateur qui envoie ses requêtes en DoH à un résolveur extérieur pose trois problèmes : les noms internes ne se résolvent plus, le filtrage DNS de l'entreprise est contourné, et les journaux DNS (précieux en cas d'incident) ne voient plus rien. La politique de Sorbier :
- Les postes utilisent le DNS interne, et seulement lui : par DHCP, et par GPO pour les navigateurs. Les modèles d'administration de Chrome et d'Edge ont une stratégie DnsOverHttpsMode, à régler sur
off(ou sur un DoH interne). Firefox désactive de lui-même son DoH par défaut si le résolveur du réseau répond « nom inexistant » pour le domaine témoinuse-application-dns.net, et se pilote par la stratégieDNSOverHTTPS. - Le pare-feu bloque le DNS sortant qui ne vient pas des résolveurs autorisés : UDP et TCP 53, TCP 853. Pour DoH, bloquer le port 443 est impossible ; on bloque les adresses et noms des services DoH publics connus (listes tenues à jour, par exemple avec le paquet pfBlockerNG de pfSense).
- Le chiffrement se fait vers l'extérieur, sous contrôle : sur pfSense, les cases DNS Query Forwarding et Use SSL/TLS for outgoing DNS Queries to Forwarding Servers chiffrent en DoT les requêtes du pare-feu vers ses redirecteurs. Le fournisseur d'accès ne voit plus les noms demandés, et l'administrateur garde ses journaux.
Côté Windows, Windows 11 sait utiliser DoH pour ses propres requêtes (réglage par carte réseau, ou stratégie Configurer la résolution de noms DNS over HTTPS (DoH) dans Configuration ordinateur > Modèles d'administration > Réseau > Client DNS). Et Microsoft ajoute à Windows Server 2025, avec les mises à jour de 2026, la possibilité pour le serveur DNS de répondre en DoH aux postes (Set-DnsServerEncryptionProtocol) ; le lien entre le serveur et ses redirecteurs reste alors en clair. La fonction a été livrée d'abord en préversion : vérifie son état et ses prérequis (un certificat valide pour le nom du serveur) dans la documentation de Microsoft avant de la déployer.
Filtrer les domaines malveillants
Puisque presque toute connexion commence par une requête DNS, le résolveur est un excellent point de filtrage : refuser de résoudre les domaines d'hameçonnage, de logiciels malveillants ou de serveurs de commande connus coupe une grande partie des attaques avant même la première connexion.
| Outil | Fonctionnement |
|---|---|
| Résolveur filtrant en redirecteur (Quad9, résolveurs des éditeurs de sécurité) | Il répond « nom inexistant » pour les domaines de ses listes |
| pfBlockerNG (paquet pfSense) | Listes de blocage chargées dans Unbound, avec rapports |
| Zones de stratégie de réponse (RPZ) de BIND | Une zone spéciale qui réécrit les réponses pour les domaines listés |
| Stratégies DNS de Windows Server | Règles qui refusent ou ignorent certaines requêtes |
Le filtrage DNS ne remplace ni l'antivirus ni le pare-feu : un programme qui se connecte directement à une adresse IP le contourne. Mais il est simple, peu coûteux, et ses journaux révèlent souvent un poste infecté (un poste qui demande sans arrêt des domaines bloqués). L'analyse de ces journaux dans un SIEM est traitée dans le cours Wazuh.
Exercices
Exercice 1 sur 4 Quelle protection ? Réussi À revoir
Pour chaque menace, choisis la protection adaptée parmi DNSSEC, DoT/DoH, ou ni l'un ni l'autre, et justifie.
- Un attaquant injecte dans le cache d'un résolveur une fausse adresse pour le site de la banque.
- Le gérant d'un café lit les noms des sites consultés par ses clients sur son Wi-Fi.
- Un salarié tape
sorbier-logistique.exampleau lieu desorbier.exampleet tombe sur un site d'hameçonnage. - Un logiciel malveillant fait sortir des données dans des requêtes DNS vers le domaine de l'attaquant.
Voir la réponseMasquer la réponse de l'exercice 1
- DNSSEC : le résolveur qui valide rejette la fausse réponse, dont la signature ne correspond pas (à condition que le domaine de la banque soit signé).
- DoT ou DoH : le trajet entre le client et son résolveur est chiffré, le gérant ne voit plus que des connexions TLS.
- Ni l'un ni l'autre : le faux domaine est un vrai domaine, éventuellement signé, qui appartient à l'attaquant. La parade est le filtrage DNS (listes de domaines malveillants), la sensibilisation et l'authentification forte.
- Ni l'un ni l'autre : c'est un tunnel DNS. La parade est d'obliger les postes à passer par le résolveur interne, de bloquer le DNS sortant direct et d'analyser les journaux du résolveur (requêtes longues, nombreuses, vers un même domaine).
Tu avais trouvé ?
Exercice 2 sur 4 Lire une réponse validée Réussi À revoir
Deux requêtes vers le résolveur 192.168.10.238 donnent :
A) ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 3310
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
B) ;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 3311
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
- Que signifie le drapeau
adde la réponse A ? - La requête B porte sur un domaine que le résolveur public Quad9 résout sans erreur. Donne deux causes possibles.
- Comment confirmer qu'il s'agit d'un problème DNSSEC ?
Voir la réponseMasquer la réponse de l'exercice 2
- Le résolveur a validé la chaîne de signatures DNSSEC jusqu'à la racine : la réponse est authentique.
- Une signature invalide ou expirée dans la zone (un DS publié chez le parent qui ne correspond plus à la clé, une zone non resignée), ou un problème local du résolveur : horloge du pare-feu fausse (les signatures ont une date de début et de fin), ou ancre de confiance périmée. Quad9 valide aussi : s'il répond, la zone est probablement saine, et la cause est locale.
- Refaire la requête avec
dig ... +cd(checking disabled), qui demande au résolveur de ne pas valider : si elle réussit, c'est bien la validation qui échoue.delvexplique ensuite l'erreur. Vérifier l'heure du pare-feu (Status > Dashboard, oudateen console).
Tu avais trouvé ?
Exercice 3 sur 4 Signer sorbier.example Réussi À revoir
Antoine Mercier veut signer la zone publique servie par ns1.
- Quelle ligne ajoutes-tu dans la déclaration de la zone sous BIND 9.20 ?
- Pourquoi le fichier de zone doit-il être dans
/var/lib/bind/? - Quelle démarche, en dehors de BIND, est nécessaire pour que la signature soit utile ?
- Deux ans plus tard, Sorbier confie sa zone à un nouvel hébergeur qui ne signe pas. Dans quel ordre faut-il procéder ?
Voir la réponseMasquer la réponse de l'exercice 3
dnssec-policy default;- BIND crée les clés et écrit une version signée de la zone à côté du fichier : il lui faut un dossier où il peut écrire, ce que Debian autorise dans
/var/lib/bind/et pas dans/etc/bind/. - Publier le DS chez le parent, par l'interface du bureau d'enregistrement, avec les valeurs données par l'enregistrement CDS ou
rndc dnssec -status. Sans DS, aucun résolveur ne peut relier la zone à la chaîne de confiance. - D'abord retirer le DS chez le bureau d'enregistrement, attendre l'expiration de son TTL (souvent un jour) pour que les caches l'oublient, puis seulement basculer les NS vers le nouvel hébergeur. Dans l'autre ordre, les résolveurs qui valident trouvent un DS sans zone signée correspondante, et le domaine disparaît pour eux.
Tu avais trouvé ?
Exercice 4 sur 4 DoH au travail Réussi À revoir
Le service informatique constate que les postes ouvrent les sites bloqués par le filtrage DNS de l'entreprise, et que les journaux DNS ne montrent presque plus de requêtes des navigateurs.
- Quelle est la cause la plus probable ?
- Propose trois mesures.
Voir la réponseMasquer la réponse de l'exercice 4
- Les navigateurs utilisent DNS over HTTPS vers un résolveur extérieur : leurs requêtes partent en HTTPS sur le port 443, sans passer par les résolveurs internes ni par le filtrage.
- Régler la stratégie DnsOverHttpsMode sur
offpour Chrome et Edge par GPO, et la stratégie équivalente de Firefox ; répondre « nom inexistant » pouruse-application-dns.netsur les résolveurs internes ; bloquer sur le pare-feu les services DoH publics connus et le DNS sortant direct (UDP/TCP 53, TCP 853). En complément, proposer un DoH ou un DoT interne si le chiffrement est souhaité.
Tu avais trouvé ?