Un DNS désigne les serveurs de noms à la base des communications sur Internet. Le simple fait d'envoyer un mail ou de surfer sur un site utilise de manière sous jacente un ou plusieurs DNS. Pièce clé dans la toile internet, la sécurité des DNS est primordiale. Si un pirate controle votre DNS, il peut vous rediriger vers les sites de son choix. Voyons plus en détail de quoi il s'agit.

Qu'est ce qu'un DNS ?

Un DNS Domain Name Server est un serveur de nom, il est chargé de la correspondance entre un nom et une adresse IP. Par exemple, www.acbm.com a pour adresse IP 61.206.130.249. Un DNS fonctionne par zone, il y a deux types de zone:

Les différents champs d'information

Chaque zone peut contenir différents champs d'informations (SOA, NS, MX,A, PTR, CNAME), les voici avec un exemple utilisant la commande dig. Pour la commande nslookup, seule commande disponible sous Windows, se référer à l'encadré.

Il existe d'autres types, mais ils sont rarement utilisés.

Fonctionnement du DNS

Les DNS mondiaux et les différents DNS

Lorsqu'un nom de domaine est déposé, un ou plusieurs DNS doivent gérer les noms associés (www par exemple) à celui-ci. A l'échelle mondiale, il faut enregistrer le fait que ces DNS gèrent ce domaine, cette information se retrouve alors dans de nombreuses bases. Regardons ce qu'il en est.

Treize serveurs centralisent les informations à l'échelle mondiale. Il s'agit des serveurs A.ROOT-SERVERS.NET à M.ROOT-SERVERS.NET. Prenons comme exemple la résolution de l'adresse www.acbm.com en interrogeant le serveur A.ROOT-SERVERS.NET Remarque, nous utilisons la commande dig sous Linux, mais la même chose est réalisable sous Windows avec nslookup (installé par défaut sous W2K et NT, je ne sais plus pour Win9x).

dig @a.root-servers.net www.acbm.com

com.			2D IN NS	G.GTLD-SERVERS.NET.
com.			2D IN NS	A.GTLD-SERVERS.NET.
com.			2D IN NS	H.GTLD-SERVERS.NET.
com.			2D IN NS	C.GTLD-SERVERS.NET.
com.			2D IN NS	I.GTLD-SERVERS.NET.
com.			2D IN NS	B.GTLD-SERVERS.NET.
com.			2D IN NS	D.GTLD-SERVERS.NET.
...
Pour résoudre ce nom en .com, on est invité à interroger le serveur G.GTLD-SERVERS.NET ou tout autre serveur de la liste.
dig @G.GTLD-SERVERS.NET www.acbm.com

acbm.com.		2D IN NS	NS1.SHIMPINOMORI.NET.
acbm.com.		2D IN NS	NS2.SHIMPINOMORI.NET.
Continuons en interrogeant NS1.SHIMPINOMORI.NET
dig @NS1.SHIMPINOMORI.NET www.acbm.com

www.acbm.com.		1D IN A		61.206.130.249
Finalement, la réponse 61.206.130.249 est obtenue.

De manière pratique, un ordinateur utilise le DNS de son entreprise ou de son fournisseur d'accès qui effectuera automatiquement ces requêtes et stockera le résultat en prévision d'une prochaine résolution de ce nom. Le serveur DNS finira par oublier cette information si celle-ci est peu utilisée au profit de requêtes plus fréquentes ou lorsque l'information va être considérée comme périmé. Cette durée de vie est de 1D, soit 1 jour (1 Day), dans l'exemple précédent.

Identifier la version d'un serveur DNS

Il est très facile de récupérer la version d'un serveur DNS, il suffit de demander :

$ nslookup

> server NS1.SHIMPINOMORI.NET
> set class=chaos
> set q=txt
> version.bind
Server:  NS1.SHIMPINOMORI.NET
Address:  61.206.130.242

VERSION.BIND	text = "8.2.3-REL-NOESW"
Enfin, pour être plus précis, les serveurs Microsoft ne savent pas répondre et les serveurs BIND (http://www.isc.org/products/BIND/) ont la possibilité de masquer leur version ou de renvoyer un texte défini par l'administrateur. Les versions antérieures à la 8.2.3 sont vulnérables à divers bogues.

Le transfert de zone

Mecanisme de duplication

Pour chaque zone DNS, le serveur servant de référence est appelé DNS maître ou DNS primaire. Les DNS servant cette zone vont récupérer les informations du DNS maître, ce sont les DNS esclaves ou DNS secondaires. Cette récupération d'information est appelée transfert de zone. Seuls les DNS secondaires ont besoin d'être autorisés à effectuer cette opération, mais assez souvent aucune restriction n'est présente. Le serial ou numéro de série est utilisé par le DNS secondaire pour vérifier si une nouvelle version est présente et la récupérer au besoin. Ce numéro est constitué de la date au format américain: année, mois, jour; version du jour, il est donc toujours incrémenté (La machine à remonter dans le temps n'est pas encore disponible).

Voici le résultat du transfert de la zone acbm.com.

dig @ns1.shimpinomori.net acbm.com axfr

$ORIGIN acbm.com.
@			1D IN SOA	ns1.shimpinomori.net. hostmaster.shim
omori.net. (
					2002040701	; serial
					1D		; refresh
					1H		; retry
					1W		; expiry
					1D )		; minimum

			1D IN NS	ns1.shimpinomori.net.
			1D IN NS	ns2.shimpinomori.net.
			1D IN MX	0 mail
			1D IN MX	10 h
			1D IN A		61.206.130.249
mail2			1D IN A		61.206.130.243
l			1D IN A		61.206.130.249
pop			1D IN A		61.206.130.249
localhost		1D IN A		127.0.0.1
mail			1D IN A		61.206.130.249
www			1D IN A		61.206.130.249
h			1D IN A		210.230.60.150
ns1			1D IN A		61.206.130.242
ns2			1D IN A		61.206.130.243
ftp			1D IN A		61.206.130.249

La liste de tous les serveurs est ainsi récupéré. Cela peut aider un pirate à aiguiller ces recherches.

Sécurité TSIG pour identifier les DNS maîtres et esclaves

De manière basique, les DNS secondaires sont authentifiés par leurs adresses IP. La sécurité TSIG Transaction Signature permet d'obtenir une plus grande sécurité en identifiant les partenaires de réplication par la connaissance d'un secret partagé : une clé HMAC-MD5.

Le DNS spoofing

DNS caching, première version

Un DNS stocke temporairement les résultats d'une requête pour un usage ultérieur, de façon à réduire le temps de réponse et la charge réseau. Considérons que le pirate a déposé le domaine hacker.com et qu'il a désigné sa machine comme serveur DNS pour ce domaine. En modifiant son serveur DNS, il peut renvoyer des réponses de son choix au DNS client. Une fois ces réponses dans le cache du DNS client, n'importe quel client utilisant ce DNS recevra ces fausses informations.

Victime DNS de la victime DNS du pirate
www.hacker.com A ?--> -->
Récupération de
www.hacker.com A 1.2.3.4
<--Mise en cache de
www.hacker.com A 1.2.3.4
www.microsoft.com A 1.2.3.4
<--Envoi de
www.hacker.com A 1.2.3.4
www.microsoft.com A 1.2.3.4
Un peu plus tard, la victime veut aller sur le site de Microsoft...
www.microsoft.com A ?-->
www.microsoft.com A 1.2.3.4<--Utilisation du cache

La victime va se retrouver sur le site du pirate, celui-ci pourra reproduire l'aspect visuel du site et convaincre l'utilisateur, par exemple d'installer un soi-disant patch sur sa machine alors qu'il s'agit d'un cheval de Troie.

Depuis la version 4.9.6, Bind vérifie si les réponses sont relatives à la question posée. La réponse du pirate sur www.microsoft.com n'a aucun rapport avec la question et elle sera donc rejetée.

DNS caching, seconde version de l'attaque

Comme dans l'attaque précédente, le pirate peut renvoyer une réponse de son choix. Si celle-ci correspond à la requête, elle passera le filtrage et sera ajoutée au cache. Par exemple, si la requete concerne hacker.com, un champ MX, CNAME ou NS concernant hacker.com pointant vers l'information que le pirate veut ajouter au cache suffira à contourner cette protection.

Victime DNS de la victime DNS du pirate
www.hacker.com A ?--> -->
Récupération de
www.hacker.com A 1.2.3.4
<--Mise en cache de
www.hacker.com A 1.2.3.4
www.hacker.com MX www.microsoft.com
www.microsoft.com A 1.2.3.4
<--Envoi de
www.hacker.com A 1.2.3.4
www.hacker.com MX www.microsoft.com
www.microsoft.com A 1.2.3.4
Un peu plus tard, la victime veut aller sur le site de Microsoft...
www.microsoft.com A ?-->
www.microsoft.com A 1.2.3.4<--Utilisation du cache

L'information sur www.microsoft.com est gardée par le serveur DNS car elle est relative à la résolution MX de www.hacker.com.

Les serveurs Bind ont été patchés depuis pour ne stocker les informations obtenues que si le serveur DNS fait autorité pour les différentes zones.

Id prediction

Les paquets DNS contiennent un champ ID. A l'origine, ce numéro était incrémenté de 1 à chaque fois. Il était donc possible de deviner la valeur que ce champ prendrait et de tenter de répondre avant le DNS véritablement interrogé.

Depuis, ce numéro est aléatoire mais comme le champ est sur 16 bits, il est possible dans des conditions proches de l'idéal (grande bande passante...) de générer les 65536 paquets réponses. Cette attaque peut être détectée en vérifiant le nombre de paquets réponses avec des ID erronés par serveur et par requête. Lorsque ce nombre atteint 5, un nouveau paquet est généré avec un nouvel ID. Et enfin, si aucun résultat n'est obtenu au bout de trois tentatives, le serveur renvoie une erreur SERVFAIL.

Les fausses informations

Si une application autorise toutes les machines d'un certain domaine cgsecurity.org, il ne faut pas se contenter d'effectuer une résolution inverse

IP 1.2.3.4 ?	=>	www.cgsecurity.org
mais il faut aussi vérifier qu'au nom obtenu correspond bien l'adresse IP du départ
www.cgsecurity.org => 194.51.152.252
Ce n'est pas le cas ici, on peut en deduire une tentative de piratage depuis l'adresse 1.2.3.4 de l'exemple.

Sur le chemin réseau

Si un pirate peut observer le trafic réseau (sniffer, arpspoofing...) entre l'utilisateur et les DNS qu'il utilise, il sera alors capable de renvoyer des informations de son choix très facilement. Mais si le pirate est capable de faire, il peut faire des choses bien plus intéressantes...

DNSSEC

DNSSEC est un ensemble de protocoles utilisant de la cryptographie symétrique et/ou asymétrique incorporant un système de stockage et de publication des clés publiques. Ainsi, il permet de résoudre les différents problèmes de sécurité lors des transferts de zone, des mises à jour (update dynamique par exemple) et de rendre inopérant le DNS spoofing. A ces nouveautés s'ajoute la compatibilité avec IPv6 et surtout l'interopérabilité des deux systèmes d'adressages, ce qui en fait un système très complexe. Les dernières versions de Bind 9 incorporent ces dernières possibilités, mais il faudrait un déploiement à l'échelle mondiale pour que le système soit réellement utilisable.


Christophe GRENIER, Consultant Sécurité chez Global Secure.
grenier@cgsecurity.org http://www.cgsecurity.org

Lexique

Utiliser nslookup

La requête dig @a.root-servers.net www.acbm.com peut aussi être faite avec nslookup

nslookup
> server a.root-servers.net
> www.acbm.com
...
Pour obtenir la passerelle de messagerie, le MX, il suffit de spécifier le type de requête
nslookup
nslookup
Default Server:  DNS03001.global-asp.net
Address:  194.51.152.250
> set query=mx
> acbm.com
Server:  DNS03001.global-asp.net
Address:  194.51.152.250

Non-authoritative answer:
acbm.com	preference = 10, mail exchanger = h.acbm.com
acbm.com	preference = 0, mail exchanger = mail.acbm.com

Authoritative answers can be found from:
acbm.com	nameserver = ns1.shimpinomori.net
acbm.com	nameserver = ns2.shimpinomori.net
mail.acbm.com	internet address = 61.206.130.249
h.acbm.com	internet address = 210.230.60.150
ns1.shimpinomori.net	internet address = 61.206.130.242
ns2.shimpinomori.net	internet address = 61.206.130.243
> exit