dos-new-ip6

thc logoIci commence une petite série d’articles consacrés aux nombreuses vulnérabilités d’IPv6. En m’appuyant sur l’excellente doc que me fournit mon ami 0x0c (qui a explicitement demandé d’être cité en rose cochonne), je vais présenter quelques outils de la suite THC-IPV6. Le premier d’entre eux porte un nom qui ne laisse aucune place au mystère quant à sa fonction. dos-new-ip6 est en effet capable d’empêcher toute nouvelle machine d’entrer sur un réseau…

ip vessieLe but du blog n’étant pas de vous faire prendre IPv6 pour des lanternes, je vous fais une petite confidence sur l’oreiller. Je n’ai jamais travaillé avec le protocole susnommé jusqu’à ce jour, sur ce sujet mes connaissances en sont encore à un stade embryonnaire. Je m’inspire de ce cours, très intéressant et très complet pour essayer de comprendre ce que je fais au moment ou je le fais. Je risque donc d’écrire quelques énormités, n’hésitez surtout pas à m’engueuler au travers des commentaires ou du compte Twitter !

Nudisme mécanique

IPv6 à la capacité de s’auto-configurer. Par le biais du protocole ICMPv6, une interface va être en mesure d’effectuer un certain nombre de contrôles pour établir sa configuration, notamment récupérer une adresse IPv6 valide. C’est à cet endroit précis du mécanisme que nous allons jeter un boulon dans les engrenages…

Les requêtes de Neighbor sollicitation (NS) permettent de vérifier la disponibilité de l’adresse que l’on revendique. Dos-new-ip6 répond à ces NS en prétendant déjà posséder cette adresse, l’associant alors à une adresse mac aléatoire. En conséquence, le protocole DAD (Duplicate Adress Detection) empêche la configuration IPv6 d’aboutir sur l’interface concernée. Ainsi, l’outil est en mesure d’empêcher toute nouvelle machine de récupérer une adresse IPv6 de façon dynamique.

icmpv6 dos-new-ip6

Il est difficile de détecter cette entourloupe, car le programme en plus d’être très peu gourmand en ressource, est parfaitement silencieux sur le réseau en dehors de ce court échange. Rien de fantaisiste donc, à imaginer qu’un tel programme soit installé et configuré en temps que service sur une machine légitime du réseau sans que personne ne remarque rien.

Mais rassurez-vous, il est possible de se prémunir de ce genre d’attaques, en préférant par exemple le protocole  Secure Neighbor Discovery  (SEND) au protocole Neighbor Discovery Protocol (NDP). Légèrement plus sécurisé, il rajoute une couche d’authentification supplémentaire. SEND n’est tout de même pas infaillible, il est par exemple potentiellement sensible aux attaques par rejeu…

Let’s Do It !

IPv6 est capable de s’auto-configurer (autoconf). C’est principalement ce mécanisme que nous allons attaquer. Cependant, j’ai aussi configuré un serveur DHCP IPv6 (dhcpd6) afin d’étudier le comportement d’une interface configurée pour récupérer une adresse de cette façon lorsque dos-new-ipv6 est à l’oeuvre.

La commande est très simple à utiliser : dos-new-ip6 <interface>. Ce qui pour moi donne à peu près ceci :

0x0ff@kali:~# dos-new-ip6 eth1
Started ICMP6 DAD Denial-of-Service (Press Control-C to end) ...
Spoofed packet for existing ip6 as 2001:70::194
Spoofed packet for existing ip6 as fe80::250:56ff:fe9f:2b95
Spoofed packet for existing ip6 as 2001:70::194
Spoofed packet for existing ip6 as fe80::250:56ff:fe9f:2b95
Spoofed packet for existing ip6 as fe80::250:56ff:fe98:2d14
Spoofed packet for existing ip6 as fe80::250:56ff:fe98:2d14
Spoofed packet for existing ip6 as 2001:17::140
Spoofed packet for existing ip6 as 2001:17::140

A chaque fois qu’une machine tente de s’attribuer une adresse IPv6, une ligne est affichée sur la sortie standard précisant que dos-new-ip6 l’en a empêché (Spoofed packet for existing ip6 as @IPv6).

Résultats sur Linux

Figurez-vous que c’est assez troublant. Si vous faites un ifconfig de l’interface concernée, vous verrez apparaître les différentes IPv6 que la machine aura tenté de récupérer, même si elle a rencontré un échec de configuration !

Lors de ce test, ni l’interface préférant autoconf ni celle utilisant DHCPv6 n’a réussi à récupérer une adresse… Je vais vous présenter trois commandes qui vous permettront d’établir le diagnostique réseau :

Tester la connectivité vers le serveur DHCP :

ping6 -I eth0 2001:17::51

Regarder si la machine connait des voisins IPv6 :

ip -6 neigh

Et le plus important, vérifier l’état associé à l’adresse IPv6 :

ip -6 addr
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
inet6 2001:17::140/64 scope global tentative dadfailed
valid_lft forever preferred_lft forever
inet6 fe80::250:56ff:fe98:2d14/64 scope link tentative dadfailed
valid_lft forever preferred_lft forever

Résultats sur Windows

Sur Windows l’analyse est un poile plus rapide, il vous suffira de vérifier la présence ou non d’une adresse IPv6 dans le champ “IP Address” :

ipconfig /all
[...]
IP Address. . . . . . . : 2001:70::195
[...]

Le résultat ci-dessus est une illustration d’un fonctionnement normal. Lors de ce test, l’interface n’a pu récupérer d’adresse, ni par autoconf, ni par DHCP. Le champ était donc vide.

skullVulnéromètre

Menaces
Linux Moyenne
Windows Moyenne
Unix-BSD Moyenne