Dans les recherches DNS qui font correspondre les noms de domaine aux adresses IP lisibles par machine, le parcours dans l'arborescence DNS peut être effectué par un serveur DNS ou un client.
Cet article s'articule autour des points suivants :
Contenu associé
Abonnez-vous à theNET, le récapitulatif mensuel de Cloudflare des idées les plus populaires concernant Internet !
Copier le lien de l'article
Une recherche DNS récursive est l'endroit où un serveur DNS communique avec plusieurs autres serveurs DNS pour rechercher une adresse IP et la renvoyer au client. Cette recherche est différente d'une requête DNS itérative, où le client communique directement avec chaque serveur DNS impliqué dans la recherche. Bien qu'il s'agisse d'une définition très technique, un examen plus approfondi du système DNS et de la différence entre la récursivité et l'itération devrait nous aider à y voir plus clair.
Chaque fois qu'un utilisateur tape un nom de domaine (tel que « cloudflare.com ») dans sa fenêtre de navigateur, cela déclenche une recherche DNS. Une série d'ordinateurs distants appelés serveurs DNS trouvent ensuite l'adresse IP de ce domaine et la renvoient à l'ordinateur de l'utilisateur afin qu'il puisse accéder au site Web correct.
Plusieurs types de serveurs DNS différents doivent fonctionner conjointement pour effectuer une recherche DNS. Un résolveur DNS, un serveur racine DNS, un serveur TLD DNS et un serveur de noms faisant autorité DNS doivent tous fournir des informations pour effectuer la recherche. Dans le cas de la mise en cache, l'un de ces serveurs peut avoir enregistré la réponse à une requête lors d'une recherche précédente, puis peut la fournir à partir de la mémoire.
Pour en savoir plus sur le fonctionnement d'une recherche DNS, voir Qu'est-ce qu'un serveur DNS ?
La récursivité et l'itération sont des termes informatiques qui décrivent deux méthodes différentes pour résoudre un problème. En récursivité, un programme se met en œuvre à plusieurs reprises jusqu'à ce qu'une condition soit remplie, tandis qu'en itération, un ensemble d'instructions est répété jusqu'à ce qu'une condition soit remplie. Cette différence subtile est difficile à illustrer sans entrer dans le code, mais la principale leçon à retenir est que la récursivité est une solution qui se met en œuvre à plusieurs reprises.
Par exemple, imaginez que Jim ait perdu ses clés dans sa maison et cherche une méthode systématique pour les retrouver. Une solution récursive serait que Jim continue de chercher ses clés jusqu'à ce qu'il les trouve. Jim va commencer à chercher, mais s’il ne trouve pas ses clés, il reviendra à son instruction initiale de continuer à les chercher jusqu’à ce qu’il les trouve. Une solution itérative serait que Jim fouille une pièce pendant cinq minutes, puis revienne à ses instructions et fouille la pièce suivante pendant cinq minutes, et continue ce cycle jusqu'à ce qu'il trouve ses clés ou qu'il ait parcouru toute la liste des pièces à fouiller
Une compréhension approfondie de la récursivité et de l'itération n'est pas nécessaire pour comprendre la différence entre les recherches DNS récursives et itératives : dans une recherche récursive, un serveur DNS procède par récursivité et continue d'interroger d'autres serveurs DNS jusqu'à ce qu'il ait une adresse IP à renvoyer au client (souvent le système d'exploitation d'un utilisateur). Dans une requête DNS itérative, chaque requête DNS répond directement au client avec une adresse d'un autre serveur DNS à interroger, et le client continue d'interroger les serveurs DNS jusqu'à ce que l'un d'eux réponde avec l'adresse IP correcte pour le domaine concerné.
Autrement dit, le client donne en quelque sorte une délégation dans une requête DNS récursive. Il indique au résolveur DNS : « Dites, j'ai besoin de l'adresse IP de ce domaine, veuillez la rechercher et ne me répondez pas tant que vous ne l'avez pas trouvé. » Par contre, dans une requête itérative, le client dit au résolveur DNS : « Dites, j'ai besoin de l'adresse IP de ce domaine. Veuillez me faire connaître l'adresse du prochain serveur DNS dans le processus de recherche afin que je puisse la rechercher moi-même ».
Les requêtes DNS récursives ont généralement tendance à se résoudre plus rapidement que les requêtes itératives. Cela est dû à la mise en cache. Un serveur DNS récursif met en cache la réponse finale à chaque requête qu'il exécute et enregistre cette réponse finale pendant un certain temps (appelé TTL, Time-To-Live).
Lorsqu'un résolveur récursif reçoit une requête pour une adresse IP qu'il a déjà dans son cache, il peut rapidement fournir la réponse en cache au client sans communiquer avec d'autre serveurs DNS. La diffusion des réponses à partir du cache est très probable si a) le serveur DNS sert beaucoup de clients et/ou b) le site web demandé est très populaire.
Malheureusement, autoriser les requêtes DNS récursives sur des serveurs DNS ouverts crée une faille (ou vulnérabilité) de sécurité, car cette configuration peut permettre aux pirates de lancer des attaques par amplification DNS et d'empoisonnement du cache DNS.
Dans une attaque par amplification DNS, un pirate utilise généralement un groupe de machines (appelé botnet) pour envoyer un volume élevé de requêtes DNS à l'aide d'une adresse IP usurpée. Une adresse IP usurpée est comme une adresse de retour falsifiée : le pirate envoie des requêtes à partir de sa propre adresse IP, mais demande que les réponses soient transmises à la victime. Afin d'aggraver l'attaque, le pirate utilise également une technique appelée amplification, dans laquelle la demande usurpée demande une réponse très longue. Le service attaqué recevra un flot de réponses DNS longues et indésirables qui peuvent perturber ou même mettre leurs serveurs hors service. Il s'agit d'un type d'attaque DDoS.
C'est un peu comme un groupe d'adolescents farceurs qui appellent une pizzeria et qui commandent chacun une dizaine de pizzas. Au lieu de donner leur propre adresse de livraison, ils donnent l'adresse d'un voisin qui n'a rien demandé. La victime, qui reçoit ensuite pizza sur pizza alors qu'il n'a rien commandé aura probablement une partie de sa journée gâchée.
Un serveur DNS qui accepte les requêtes récursives est nécessaire pour effectuer ce type d'attaque, car les paquets DNS amplifiés sont des réponses aux requêtes DNS récursives.
Dans une attaque par empoisonnement du cache DNS, lorsqu'un serveur DNS récursif demande une adresse IP à un autre serveur DNS, un pirate intercepte la demande et donne une fausse réponse, qui est souvent l'adresse IP d'un site web malveillant. Non seulement le serveur DNS récursif envoie cette adresse IP au client initial, mais le serveur enregistre également la réponse dans son cache. Tout utilisateur qui demande une adresse IP pour le même nom de domaine sera envoyé vers le site web malveillant. S'il s'agit d'un nom de domaine populaire et d'un résolveur DNS populaire, cette attaque pourrait affecter des milliers d'utilisateurs.
Dans une requête DNS itérative, le client demande directement à chaque serveur DNS la réponse. Même si un pirate est capable d'envoyer une réponse falsifiée à la requête, et le jeu n'en vaut généralement pas la chandelle pour le pirate.
Le service DNS géré de Cloudflare traite généralement les requêtes DNS plus rapidement que le DNS des concurrents ou le DNS public. De plus, le DNS de Cloudflare prend en charge DNSSEC, un protocole de sécurité rigoureux conçu pour assurer la sécurité des serveurs DNS et des requêtes.