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.
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:
acbm.com
.130.206.61.in-addr.arpa
est la zone correspondant à la classe C 61.206.130
. L'ordre des octets de l'adresse IP est inversé.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é.
Start Of Authority
, décrit le DNS faisant référence ainsi que différentes valeurs indiquant la durée de validité des informations et l'adresse email du responsable de la zone.
dig acbm.com soa acbm.com. 3H IN SOA ns1.shimpinomori.net. hostmaster.shimpinomori.net. ( 2002040701 ; serial 1D ; refresh 1H ; retry 1W ; expiry 1D ) ; minimumDans cet exemple,
ns1.shimpinomori.net
est le DNS maître pour la zone acbm.com
et le responsable est hostmaster@shimpinomori.com.
Le caractère @
étant réservé, il est remplacé dans l'email par un point.
Par définition, les DNS secondaires sauvegardent les informations de la zone à partir d'un DNS primaire.
Ils vérifient tous les jours refresh=1D
si une nouvelle version de cette zone est disponible en comparant le serial
ou numéro de série avec celui de la zone sauvegardée.
En cas d'echec, une nouvelle tentative est faite toutes les heures retry=1H
jusqu'à la péremption des informations au bout d'une semaine expiry=1W
. Les informations peuvent être conservées dans un cache DNS au moins un jour minimum=1D
.
Name Server
, désigne les serveurs de noms pour la zone interrogée.
dig acbm.com ns acbm.com. IN NS ns1.shimpinomori.net. acbm.com. IN NS ns2.shimpinomori.net.Ils ne sont pas listés dans un ordre particulier. Aucun n'a de priorité par rapport à l'autre.
Mail Exchange
, indique le ou les serveurs de messagerie avec une priorité. Le nombre le plus faible indique le serveur le plus prioritaire.
dig acbm.com mx acbm.com. 1D IN MX 0 mail.acbm.com. acbm.com. 1D IN MX 10 h.acbm.com.Dans cet exemple, un mail à destination d'une personne d'acbm.com passera par le serveur
mail.acbm.com
à moins que celui-ci soit en panne auquel cas, le serveur h.acbm.com
sera utilisé.
A
, Address
, fait correspondre un nom à une adresse IP.
dig bow.rain.fr a bow.rain.fr. 23h12m59s IN A 194.51.3.49
in-addr=Internet Address
) vers un nom de machine.
dig 49.3.51.194.in-addr.arpa ptr 49.3.51.194.in-addr.arpa. 1D IN PTR bow.rain.fr.
dig www.cgsecurity.org cname www.cgsecurity.org. 12H IN CNAME WEB03004.global-asp.net.
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.249Finalement, 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.
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.
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.
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.
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.
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.
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
.
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.orgmais il faut aussi vérifier qu'au nom obtenu correspond bien l'adresse IP du départ
www.cgsecurity.org => 194.51.152.252Ce n'est pas le cas ici, on peut en deduire une tentative de piratage depuis l'adresse 1.2.3.4 de l'exemple.
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 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.
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