Tout d'abord, ce type d'attaque ne cible pas (principalement) le DNS lui-même comme le suggère votre titre. Bien sûr, cela créera une charge supplémentaire sur les serveurs DNS, mais l'objectif principal est de DDoS quelqu'un d'autre. Une mauvaise configuration de serveur peut aggraver les choses, mais au final, ce problème est inhérent à la conception de DNS et UDP et, en fait, de tout protocole de communication sans état.
Cela fonctionne essentiellement comme ceci: Un attaquant envoie des requêtes ordinaires (DNS) à un serveur (DNS). Ces requêtes sont forgées pour apparaître comme si elles provenaient du système cible. Le serveur DNS répond maintenant à la requête, renvoyant la réponse à son origine présumée - la victime. C'est pourquoi cela s'appelle une attaque par réflexion .
Cela est possible car vous pouvez vérifier la source de la communication sans état (comme DNS sur UDP) aussi bien que vous pouvez faire confiance à l'adresse de l'expéditeur sur une carte postale. Le serveur n'a tout simplement aucun moyen de décider si une requête est légitime ou fait partie d'une telle attaque. Le DNS est juste le protocole le plus populaire ici car il y a beaucoup de serveurs autour de lui et vous n'avez pas besoin de beaucoup de connaissances techniques ou d'équipements spéciaux pour (mal) l'utiliser.
Pour aggraver les choses (et pour éviter les attaques), regardez la partie amplification . Ce ne serait pas très nocif si le trafic de l'attaquant était de taille égale au trafic résultant. Le seul avantage pour l'attaquant serait que son adresse soit cachée derrière le serveur DNS. Il pourrait truquer l'adresse de l'expéditeur directement, il ne serait absolument pas nécessaire de réacheminer via DNS. Mais les réponses DNS, et c'est un autre point pourquoi DNS est si populaire ici, peuvent être beaucoup plus importantes que la question. Vous pouvez trouver des nombres variables à ce sujet en fonction des requêtes exactes utilisées, mais cela peut aller jusqu'à 1:60 si le serveur est assez convivial pour effectuer des requêtes récursivespour vous. L'attaquant n'a donc pas besoin de nombreuses machines sous son contrôle pour produire beaucoup de trafic malveillant.
Comme vous pouvez facilement trouver des centaines et des milliers de serveurs DNS "ouverts" sur Internet public, vous pouvez faire le calcul rapide du peu de travail qu'un attaquant doit faire si chaque serveur DNS ouvert qu'il connaît reflétera ses requêtes multipliées par soixante pour la cible. Comme je l'ai dit au début, il n'y a pas vraiment de bon moyen de contrer cela. Naturellement, de nombreux serveurs DNS sont ouverts à tout le monde alors qu'ils ne devraient pas l'être, en raison d'une mauvaise configuration. Mais il y a autant de serveurs ouverts qui doivent être ouverts, car c'est exactement leur objectif.
Bien que vous ne puissiez pas dire si une demande fait partie d'une attaque ou non, votre seule option est de ne plus exécuter le serveur. Vous pouvez jouer avec la limitation de débit et d'autres jouets, mais vous ne pouvez pas vous en débarrasser complètement. Si vous fournissez DNS pour le plaisir, vous pouvez mettre sur liste noire l'adresse IP source des demandes. Mais si vous êtes à plus grande échelle, cela endommagerait encore plus la victime. N'oubliez pas que tout ce que vous pouvez voir sur le serveur DNS est l'adresse de la victime. Imaginez que votre entreprise soit attaquée via le DNS de votre fournisseur et que votre fournisseur décide de couper le service DNS pour votre entreprise. L'attaquant pourrait marquer cela comme un bazillion de points bonus concernant le déni de service .
Quoi qu'il en soit, ces attaques se produisent toute la journée et la nuit et elles sont considérées comme des «bruits de fond» d'Internet. Si vous configurez un serveur DNS public (récursif), il ne faudra pas longtemps avant de participer à des attaques aléatoires. Bien sûr, parfois, les choses deviennent vraiment mauvaises lorsque de grandes infrastructures (comme même les serveurs racine DNS) sont utilisées à mauvais escient pour s'amplifier, mais dans ces cas, des contre-mesures proactives sont prises par le personnel jusqu'à ce que l'attaque redescende à des niveaux "normaux".
Jusqu'ici sur l'enseignement. Pour répondre enfin à votre question:
Vous savez que votre serveur est vulnérable s'il répond aux requêtes sans restriction. Période. Si vous exécutez des requêtes récursives, votre serveur peut générer le rapport 1:60 mentionné pour l'attaquant. Si cela ne sert que non récursif, ce n'est pas aussi mauvais, mais quand même ...
Donc...
- assurez-vous que vous avez vraiment besoin d'exécuter un serveur DNS public
- si vous le devez, jetez un œil aux directives
allow-recursion
et aux allow-query
directives de BIND
- si votre serveur DNS fera autorité pour votre propre zone , il n'y a aucun besoin de récursivité du tout, réglé
allow-recursion
sur "aucun;"
- si vous souhaitez exécuter un résolveur pour d'autres domaines , limitez les utilisateurs autorisés pour les requêtes et les requêtes récursives. Vous pouvez définir des adresses IP, des réseaux ou des listes d'accès dans les directives mentionnées
- pensez à limiter le trafic DNS non seulement dans BIND mais aussi au niveau du système. À titre d'exemple très simple, ces règles iptables ne permettront pas plus de 10 requêtes par minute à partir de chaque adresse IP:
.
iptables -A INPUT -p udp --dport 53 --set --name dnslimit
iptables -A INPUT -p udp --dport 53 -m recent --update --seconds 60 --hitcount 11 --name dnslimit -j DROP
Maintenant, avec ces points à l'esprit, vous devriez être prêt à partir. Il peut y avoir encore du trafic malveillant sur votre serveur de temps en temps, mais pas dans des quantités qui prennent votre bonne nuit de sommeil.