Elouan

Le DNS, de la requête à l'attaque

Comment un nom devient une adresse IP, les types d'enregistrements, et pourquoi le DNS est au cœur de beaucoup d'attaques… et de leur détection.

Elouan

Série Les fondations du réseau · article 5 sur 7
  1. Adresses IP, masques et sous-réseaux
  2. Le modèle OSI et la pile TCP/IP
  3. Ports et protocoles courants
  4. TCP et UDP
  5. Le DNS, de la requête à l'attaque
  6. ARP, DHCP, NAT et VLAN : la plomberie du réseau local
  7. HTTP, HTTPS et TLS

Presque toute action sur un réseau commence par une requête DNS : ouvrir un site, envoyer un mail, joindre un contrôleur de domaine… ou contacter le serveur de commande d’un malware. C’est pour ça que les journaux DNS sont parmi les plus utiles en sécurité.

Le rôle du DNS

Les machines se parlent avec des adresses IP, les humains retiennent des noms. Le DNS (Domain Name System) fait la traduction : www.exemple.fr devient 93.184.216.34.

C’est un annuaire hiérarchique et distribué, découpé en zones confiées à des serveurs différents.

                    .   (racine)
          ┌─────────┼──────────┐
         .fr       .com       .org      ← domaines de premier niveau (TLD)
          │
      exemple.fr                         ← domaine, géré par son serveur faisant autorité
          │
    www.exemple.fr                       ← nom d'hôte

La résolution, étape par étape

C’est la question la plus classique sur le DNS. Quand un poste veut joindre www.exemple.fr, voilà les étapes :

  1. Le cache local. Le système regarde s’il connaît déjà la réponse (ipconfig /displaydns sous Windows).
  2. Le fichier hosts. C:\Windows\System32\drivers\etc\hosts ou /etc/hosts. Un malware qui modifie ce fichier peut détourner des noms.
  3. Le résolveur récursif. Le poste envoie une requête récursive à son serveur DNS (celui de l’entreprise ou du FAI) : « donne-moi la réponse finale ».
  4. Les serveurs racine. Si le résolveur ne connaît pas la réponse, il demande à un serveur racine, qui répond : « je ne sais pas, mais voici les serveurs de .fr ».
  5. Les serveurs du TLD. Les serveurs de .fr répondent : « voici les serveurs qui font autorité pour exemple.fr ».
  6. Le serveur faisant autorité. Il donne enfin l’adresse de www.exemple.fr.
  7. Retour et cache. Le résolveur met la réponse en cache pour la durée du TTL et la renvoie au poste.

Récursif ou itératif ?

Le poste fait une requête récursive au résolveur : il veut la réponse finale. Le résolveur fait des requêtes itératives aux serveurs racine, TLD et faisant autorité : chacun lui indique qui interroger ensuite.

Les types d’enregistrements

TypeRôleExemple
ANom → adresse IPv4www.exemple.fr → 93.184.216.34
AAAANom → adresse IPv6www.exemple.fr → 2606:2800:220:1::248
CNAMEAlias vers un autre nomblog.exemple.fr → exemple.hebergeur.com
MXServeurs de messagerie, avec priorité10 mail.exemple.fr
TXTTexte libreSPF, DMARC, vérifications de domaine
NSServeurs faisant autorité pour la zonens1.exemple.fr
PTRRésolution inverse, IP → nom34.216.184.93.in-addr.arpa → www.exemple.fr
SOAInformations sur la zone (serveur principal, numéro de série)Un par zone
SRVLocaliser un service (hôte et port)_ldap._tcp.dc._msdcs.corp.local

CNAME et autres enregistrements

Un nom qui a un CNAME ne peut avoir aucun autre enregistrement. C’est pour ça qu’on ne peut pas faire pointer la racine d’un domaine (exemple.fr) vers un autre nom avec un CNAME classique.

UDP ou TCP ?

Le DNS utilise le port 53, en UDP dans la grande majorité des cas : une question, une réponse, pas besoin de connexion. Il passe en TCP :

  • quand la réponse est trop grosse (le serveur répond en UDP avec le flag « tronqué », et le client réessaie en TCP) ;
  • pour les transferts de zone (AXFR), qui copient toute une zone d’un serveur à l’autre.

Le DNS vu par un attaquant

Le DNS est presque toujours autorisé en sortie. C’est ce qui en fait un outil parfait pour les attaquants.

TechniquePrincipeCe qu’on voit
Commande et contrôle (C2)Le malware résout le nom de son serveurRequêtes vers des domaines récents ou de mauvaise réputation
DGALe malware génère des centaines de noms aléatoiresBeaucoup de réponses NXDOMAIN, noms sans sens (xkq7vz3p.com)
DNS tunnelingDes données encodées dans des sous-domainesSous-domaines longs et aléatoires, beaucoup de requêtes TXT
Fast fluxL’IP derrière un nom change en permanenceTTL très courts, réponses qui changent sans arrêt
TyposquattingUn domaine qui ressemble au vrairnicrosoft.com, paypa1.com dans les mails de phishing
Empoisonnement de cacheFaire accepter une fausse réponse à un résolveurRéponses incohérentes, résolution vers des IP inattendues
Détournement de domainePrendre le contrôle du compte chez le registrarServeurs NS ou enregistrements modifiés

À quoi ressemble du tunneling

aGVsbG8gZnJvbSB0aGUgaW5zaWRl.data.attaquant.com, puis des centaines de requêtes semblables vers le même domaine. La partie gauche est de la donnée encodée en base64 ou en hexadécimal. Des outils comme iodine ou dnscat2 fonctionnent sur ce principe.

Le DNS vu par un défenseur

Quelques bonnes pratiques côté défense :

  • Centraliser les journaux DNS du résolveur interne dans le SIEM : c’est souvent le moyen le plus simple de retrouver qui a contacté un domaine malveillant.
  • Forcer l’utilisation du résolveur interne : bloquer le port 53 sortant vers Internet pour tout le monde sauf les serveurs DNS. Un poste qui interroge directement 8.8.8.8 est suspect dans beaucoup de contextes.
  • Surveiller DoH et DoT : DNS over HTTPS (443) et DNS over TLS (853) chiffrent les requêtes. C’est bien pour la vie privée, mais un navigateur ou un malware qui les utilise contourne ta journalisation.
  • Utiliser un DNS filtrant (RPZ, ou des services de filtrage) pour bloquer les domaines malveillants connus.
  • Protéger les zones : interdire les transferts de zone à n’importe qui, activer DNSSEC quand c’est possible, et protéger le compte chez le registrar avec une double authentification.

Le DNS et Active Directory

Active Directory ne fonctionne pas sans DNS. Pour trouver un contrôleur de domaine, un poste interroge des enregistrements SRV comme _ldap._tcp.dc._msdcs.corp.local ou _kerberos._tcp.corp.local. C’est pour ça que les contrôleurs de domaine sont presque toujours aussi les serveurs DNS internes, et qu’un problème DNS se traduit souvent par « je n’arrive plus à ouvrir ma session ».

Côté défense, les journaux DNS sont une mine d’or : peu volumineux, et presque chaque action malveillante y laisse une trace.

L'essentiel

  • Le DNS traduit un nom de domaine en adresse IP. Il utilise le port 53, en UDP la plupart du temps et en TCP pour les grosses réponses et les transferts de zone.
  • Résolution : cache local → fichier hosts → résolveur récursif → serveurs racine → serveurs du TLD (.fr, .com) → serveur faisant autorité.
  • Requête récursive : « donne-moi la réponse finale ». Requête itérative : « dis-moi qui interroger ensuite ».
  • Enregistrements clés : A (IPv4), AAAA (IPv6), CNAME (alias), MX (mail), TXT (texte, SPF, DMARC), NS (serveurs du domaine), PTR (inverse), SOA (autorité), SRV (services, très utilisé par AD).
  • Signaux d'attaque : domaines récents ou générés aléatoirement (DGA), sous-domaines longs et aléatoires (tunneling), forte volumétrie vers un seul domaine, réponses avec TTL très court qui changent sans arrêt (fast flux).
  • DoH (DNS over HTTPS, 443) et DoT (DNS over TLS, 853) chiffrent le DNS : bon pour la vie privée, mais ça fait perdre la visibilité aux équipes de sécurité s'ils contournent le résolveur de l'entreprise.

Idées reçues

Que se passe-t-il exactement quand tu tapes www.exemple.fr dans un navigateur, côté DNS ?

L'erreur courante. Répondre « le DNS donne l'IP » sans détailler.

En réalité. Le système regarde son cache puis le fichier hosts. Sinon, il interroge son résolveur récursif (celui de l'entreprise ou du FAI). Si le résolveur n'a pas la réponse en cache, il interroge un serveur racine, qui le renvoie vers les serveurs du .fr, qui le renvoient vers le serveur faisant autorité pour exemple.fr, qui donne l'adresse. Le résolveur met en cache selon le TTL et répond au poste.

Un CNAME peut-il coexister avec un enregistrement MX sur le même nom ?

L'erreur courante. Dire oui sans réfléchir.

En réalité. Non. Un nom qui porte un CNAME ne peut porter aucun autre enregistrement (sauf DNSSEC). C'est pour ça qu'on ne peut pas mettre de CNAME à la racine d'un domaine (exemple.fr) qui porte déjà NS, SOA et souvent MX. Les hébergeurs contournent ça avec des alias propriétaires (ALIAS, ANAME, CNAME flattening).

Comment détecter du DNS tunneling ?

L'erreur courante. Répondre « en bloquant le port 53 ».

En réalité. On ne peut pas bloquer le DNS. On cherche plutôt : des sous-domaines très longs et à forte entropie, un volume anormal de requêtes vers un même domaine, beaucoup de requêtes TXT ou NULL, des réponses inhabituellement grosses, et des postes qui interrogent des serveurs DNS externes directement au lieu du résolveur interne.

Qu'est-ce qu'une attaque par empoisonnement de cache DNS ?

L'erreur courante. La confondre avec la modification du fichier hosts.

En réalité. L'attaquant fait accepter une fausse réponse par un résolveur, qui la garde en cache et la sert à tous ses clients pendant la durée du TTL. Les parades : ports source aléatoires et identifiants de transaction aléatoires (contre l'attaque de Kaminsky), et surtout DNSSEC, qui signe les réponses.

Pourquoi un contrôleur de domaine Active Directory est-il aussi un serveur DNS ?

L'erreur courante. Dire que c'est juste pratique.

En réalité. Parce qu'Active Directory repose sur le DNS pour fonctionner : les postes trouvent les contrôleurs de domaine, Kerberos et LDAP grâce à des enregistrements SRV (par exemple `_ldap._tcp.dc._msdcs.domaine.local`). Sans DNS correct, pas d'ouverture de session au domaine.

Tester ses connaissances

Références

  • DNS and BIND (5e éd.)Cricket Liu, Paul Albitz · O'Reilly
  • The Practice of Network Security MonitoringRichard Bejtlich · No Starch Press

Textes de référence en ligne