Qu'est-ce qu'un résolveur DNS ouvert et comment puis-je protéger mon serveur contre les abus des pirates ?

Je n’ai pas les meilleures connaissances en sécurité informatique, mais hier l’un des serveurs de mon entreprise a été arrêté par notre hébergeur.

C’est un serveur avec une IP publique sur lequel j’héberge plusieurs applications de services web, dont des sites web et des API. On m’a dit que mon serveur « exécute un résolveur DNS ouvert qui est utilisé pour relayer une attaque par déni de service vers une entité externe ».

Qu’est-ce que cela signifie ? Comment cette attaque fonctionne-t-elle ? Et comment puis-je protéger mon système contre ce type d’abus ?

Dans mon cas spécifique, le serveur en question est sous Windows Server 2012, et il sert le DNS pour un domaine Active Directory.

Un « résolveur DNS ouvert » est un serveur DNS disposé à résoudre des requêtes DNS récursives pour n’importe qui sur Internet. C’est comparable à un relais SMTP ouvert, en ce sens que le simple manque d’authentification permet à des tiers malveillants de propager leurs charges utiles en utilisant votre équipement non sécurisé. Avec les relais SMTP ouverts, le problème est qu’ils transfèrent du spam. Avec les résolveurs DNS ouverts, le problème est qu’ils permettent une attaque par déni de service connue sous le nom d’attaque par amplification DNS.

Le fonctionnement de cette attaque est assez simple : parce que votre serveur résout les requêtes DNS récursives de n’importe qui, un attaquant peut lui faire participer à un DDoS en envoyant à votre serveur une requête DNS récursive qui retournera une grande quantité de données, bien plus grande que le paquet de requête DNS original. En usurpant (falsifiant) leur adresse IP, ils dirigeront ce trafic supplémentaire vers les ordinateurs de leur victime au lieu du leur, et bien sûr, ils feront autant de requêtes aussi vite que possible à votre serveur et à tout autre résolveur DNS ouvert qu’ils peuvent trouver. De cette manière, quelqu’un avec une bande passante relativement faible peut « amplifier » une attaque par déni de service en utilisant toute la bande passante de sa connexion pour diriger un volume de trafic beaucoup plus important vers ses victimes.

ArsTechnica a rédigé un bon article sur la récente attaque DDoS par amplification DNS contre Spamhaus, et mérite une lecture rapide pour comprendre les bases (et une bonne visualisation de l’amplification).

Le moyen le plus simple de protéger votre système contre ce type d’abus est de limiter les adresses pour lesquelles votre serveur effectuera des résolutions récursives à vos sous-réseaux locaux. (Les détails dépendent bien sûr du serveur DNS que vous utilisez.)

Par exemple, si j’utilisais BIND 9 et voulais simplement empêcher la récursion DNS depuis des adresses externes, j’utiliserais le code suivant dans ma configuration :

options {
    directory "/var/named/master";
    allow-recursion { 127.0.0.1; 10.0.0.0/8; 192.168.0.0/16; 172.16.0.0/12; };

Cette ligne de code indique à mon serveur BIND de ne traiter les requêtes DNS récursives que pour l’adresse de bouclage locale et les 3 espaces d’adresses IPv4 privés.

Pour Windows Server 2012, que vous dites utiliser, vous avez les options ci-dessous.

1. Séparer votre serveur DNS de votre serveur IIS.

  • Au moins dans un monde idéal, il n’y a aucune raison d’exécuter DNS sur la même machine qu’IIS.

  • Mettez DNS sur une machine interne qui n’est pas NATée, pour que le monde extérieur ne puisse pas y accéder, et laissez IIS résider sur la machine exposée en externe. Vous pouvez utiliser le double raccordement ou des règles de pare-feu pour permettre sélectivement l’accès à votre serveur DNS depuis votre serveur IIS.

2. Bloquer les requêtes DNS externes avec un pare-feu, tel que le pare-feu Windows intégré.

  • À ma grande surprise, Windows DNS ne vous permet pas de restreindre les adresses auxquelles les requêtes DNS récursives sont honorées, c’est donc la méthode recommandée par Microsoft.

  • Sélectionnez les règles DNS (TCP et UDP), allez à la section Adresse IP distante et ajoutez les sous-réseaux utilisés sur votre LAN, ainsi que toutes les adresses IP publiques des serveurs qui ont besoin d’accéder à Active Directory. Comme dans l’exemple BIND, les espaces d’adresses privées IPv4 sont 127.0.0.0/8 10.0.0.0/8 192.168.0.0/16 et 172.16.0.0/12.

3. Désactiver la récursion.

  • Honnêtement, je ne suis pas sûr de l’effet que cela aura sur votre environnement, puisque vous n’avez pas vraiment précisé comment DNS et AD sont configurés dans votre environnement. C’est donc la dernière option.

  • Ouvrez le Gestionnaire DNS.

  • Dans l’arborescence de la console, faites un clic droit sur le serveur DNS applicable, puis cliquez sur Propriétés.

  • Cliquez sur l’onglet Avancé.

  • Dans les options du serveur, cochez la case Désactiver la récursion, puis cliquez sur OK.

  • Comme nous avons un environnement multi-forêts et utilisons des redirecteurs conditionnels pour que cela fonctionne, je ne vais pas cocher cette case. C’est peut-être quelque chose à considérer pour vous aussi.