Bind9 - DNS Snooping

Bonjour à tous,

J’ai scanné mon serveur DNS avec Nessus, et il est apparu qu’il était vulnérable au DNS snooping.
J’aurai voulu savoir si il y avait un moyen d’éviter des attaques de ce type.
J’ai recherché sur google sans succès.

Merci à tous.

Quelle est la version de bind9 ?

la dernière version de bind9 pour lenny:
bind9 (1:9.5.1.dfsg.P3-1+lenny1)

scan local (depuis le LAN) ou extérieur?

depuis le réseau local.

Le véritable test devrait être fait depuis une machine extérieur, tu as beaucoup de choses qui ne peuvent être faites de l’extérieur et qui peuvent être faite du LAN (les appels récursifs par exemple si le DNS est bien fait).

d’accord bien noté je referais le test à partir de l’extérieur. Mais connais tu une solution pour enrayer le pb du dns snooping si le test est positif à cette vulnérabilité?

merci

<disclaimer : je ne suis pas un expert ! ne basez pas votre sécurité uniquement sur ce que j’écris>

D’abord, un mot sur le “DNS snooping”, juste pour préciser de quoi on parle. Il s’agit d’interroger un serveur DNS récursif pour essayer de savoir si une donnée est déjà présente dans son cache, et donc a déjà fait l’objet d’une requête par un client. A noter que cela ne signifie pas que la requête portait sur cette donnée exactement, celle-ci a pu être récupérée en tant que donnée intermédiaire ou additionnelle à l’occasion d’une requête portant sur une autre donnée.

Comme déjà dit, un serveur devrait être configuré pour ne servir les requêtes récursives qu’en provenance des clients autorisés. BIND9 a différentes options pour cela (recursion yes|no dans des views avec match-clients, allow-recursion). Ainsi le DNS snooping est limité aux clients autorisés. Est-il vraiment utile de se protéger contre cette attaque dans ce cas ? C’est loin d’être aussi grave que du cache poisoning.

Je connais deux techniques différentes pour faire un DNS snooping.

La première consiste à faire une requête non récursive, ainsi le serveur renvoie la réponse seulement si elle est déjà dans son cache. A priori on peut s’en prémunir avec l’option match-recursive-only dans une view autorisant la récursion, mais je n’ai pas testé.

La seconde consiste à faire une requête récursive ; le serveur renvoie la réponse même si elle n’était pas dans le cache (il fait la récursion pour aller la chercher), mais la comparaison entre le TTL initial de la donnée et le TTL de la réponse permet de déterminer indirectement si elle était dans le cache ou non. Pas grand chose à faire dans ce cas, c’est une requête “normale”. Cependant cette méthode n’est pas aussi fiable que la première si le serveur DNS utilise des “forwarders” (redirecteurs), c’est-à-dire interroge d’autres serveurs DNS récursifs au lieu de faire la recherche récursive lui-même : si le TTL reçu est inférieur au TTL initial, cela peut être parce que la donnée était présente dans le cache d’un de ces forwarders et pas forcément dans le cache du serveur DNS lui-même.

Dans tous les cas, les options

[quote] allow-recursion {192.168.1.0/24; 127.0.0.0/8;};
allow-query-cache {192.168.1.0/24; 127.0.0.0/8;};
[/quote](pour un réseau local 192.168.1.0/24 ici) permettent de configurer bind pour cela. Attention, ces options ne sont pas mises par défaut je crois (j’ai du les mettre il y a longtemps, fichier //etc/bind/named.conf.options

PS: Merci des précvisions Pascal