Attaques DoS IPv6 sur votre lien
|Bonjour-Bonsoir-Bonjoir ! Nouveau sur ce blog, les bonnes manières m’obligent à me présenter à toi, lecteur averti. En deux mots, je suis, moi aussi dans la sécurité et mon domaine, ma passion, est la cryptographie. Je serais enclin à écrire d’autres articles où vous me côtoierez sous le pseudonyme de 0x0c.
Je m’immisce donc fièrement dans ce flux de très bons articles IPv6 pour vous présenter à mon tour quelques attaques DoS…sur IPv6 – vu que c’est le sujet.
Je remercie mille fois l’ami et le créateur de ce site 0x0ff qui me permet de m’exprimer ici dans le premier billet de toute ma vie. J’essaierais d’égaler sa verve !… avec un V. Le réseau n’est pas mon domaine de prédilection, donc si vous constatez quelques énormités, je vous autorise à me fouetter outrageusement avec des bouquets d’orties au travers des commentaires. D’abord parce que j’adore ça, ensuite parce que les réponses constructives permettent toujours de s’améliorer.
Bien ! Rentrons à présent dans le vif du sujet : comprendre le fonctionnement d’IPv6 à travers un profil attaquant.
Nous allons voir une attaque locale où l’attaquant est sur le même lien que la cible (–i.e. y’a pas de routeur entre les deux). Et pour bien comprendre ce qu’il se passe, nous allons d’abord regarder comment marche l’auto-configuration stateless.
NB : A tous ceux qui n’ont pas eu le temps de lire la RFC4291 d’adressage IPv6 (quelques feignants tout au plus), je vous ai fait un petit tableau qui devrait vous aider.
Type d’adressage | Kékécé ? |
:::::1/128 | Adresse Localhost |
FE80:x:x:x:x:x | Adresse de lien (non-routable) |
FF02::1 | Tous les noeuds du lien(non-routable) |
FF02::2 | Tous les routeurs du lien (non-routable) |
:::::/128 | correspond au /32 d’IPv4 |
C’toi stateless!
Les configurations stateless IPv6 ont pour objectif de faciliter l’intégration d’équipements. En gros, vous pouvez définir un sous réseaux sur l’interface d’un routeur et toutes les nouvelles machines qui se connectent sur cette interface récupéreront une adresse automatiquement dans le bon sous réseau…et cela sans DHCP ! Joie !
Comment ça marche ?
Une image valant mille mots, je vous laisse l’animation ci-dessous accompagnée des étapes d’auto-configuration stateless :
- La machine s’auto-configure une adresse de lien,
- Elle demande à tout le monde si elle peut la prendre (Neighbor Solicitation),
- Au bout de quelques secondes (1,2,3), elle prévient tout le monde de sa nouvelle adresse (envoi d’un MDNS),
- Elle demande si il y a un routeur sur son lien (Router Solicitation),
- Elle récupère les infos du routeur et s’autoconfigure une adresse dans le bon sous réseau (Router Advertisement),
- Elle prévient tout le monde de ses nouvelles adresses (envoi d’un MDNS).
Comment sait on si le client accepte les Router Advertisement ?
Sous Linux (sysctl)
# je ne fais pas de forwarding net.ipv6.conf.all.forward=0 # j'accepte de traiter les Routeurs Advertisement (RA) net.ipv6.conf.all.accept_ra=1 # j'accepte de prendre en compte les informations contenues # dans ces RA net.ipv6.conf.all_accept_pinfo=1 # 0=pas d'autoconf, # 1=autoconf si pas de forwarding, # 2=autoconf point barre net.ipv6.conf.all.autoconf=1
Sous Windows
C’est automatique… Windows prend parti que ses interfaces réseaux seront en général des noeuds et a donc mis en place l’auto-configuration par défaut.
Et comment je sais que ça marche ?
Et bien il vous suffit de lancer ces commandes sur la machine cliente (Ici mon routeur est en rouge) :
Sous Linux
#>ip -6 neigh fe80::a00:27ff:fe61:3080 dev eth0 08:00:27:61:30:80 router #>route -6 Destination Next Hop Flag Met Ref Use If ::/0 fe80::a00:27ff:fe61:3080 UGDAe 1024 0 0 eth0
Sous Windows
#> netsh interface IPv6 show neigh fe80::a00:27ff:fe61:3080 08-00-27-fa-ea-97 Joignable<Routeur> #>route PRINT -6 If Metric Network Destination Gateway 11 26 ::/0 fe80::a00:27ff:fe61:3080
Ouais OK…et?
Vous avez donc compris qu’il est possible d’envoyer des informations de routage et de configuration via une requête ICMPv6 Router Advertisement, tout simplement. Et surtout que dans la configuration actuelle aucun mécanisme permet à une machine de chipoter quand elle reçoit ce genre de message. Imaginons maintenant que vous vous faites passer pour le-dit routeur… Et oui, ça vous donne un certain pouvoir en effet !
Flood de Router-Advertisement
Avec cette attaque très (très) connue, nous allons simuler un très grand nombre de routeurs différents qui envoient leur RA. Allez c’est parti !
#>flood_router26 eth1
Vous aurez noté que les Routers Advertisement sont envoyés à tous les noeuds du lien… attaque massive donc! (En effet ff02::1 et ff02::2 sont des adresses de multicast, si vous aviez lu le tableau aussi !)
Résultat : les tables de voisins et de routage saturent !
Windows n’arrivant pas à gérer la table de voisins et de routage qui deviennent gigantesques, cette attaque le met KO en 1 seconde et 6 centièmes. Linux/Unix n’est qu’un brin plus combatif. La table des voisins est saturée et, deuxième effet KissCool de cette attaque, la table de routage possède à présent près de 2000 routes par défaut différentes, la machine est coupée du réseau. Un joli DoS donc pour toutes les machines du lien, sauf celle de l’attaquant et du routeur qui, lui, n’accepte pas les RA.
Bene diagnoscitur, bene curatur
L’un des moyen de se prémunir de cette attaque est de filtrer les requêtes de Routeur-Advertisement :
ip6tables -I INPUT -i eth0 -p icmpv6 -s fe80::a00:27ff:fe61:3080 --icmpv6-type router-advertisement -j ACCEPT ip6tables -A INPUT -i eth0 -p icmpv6 --icmpv6-type router-advertisement -j DROP
Malheureusement, cette solution est un peu lourde, imaginez que vous deviez changer le routeur d’un parc de 100 ou même 1000 machines, il y a de quoi devenir neurasthénique…
Il est également possible d’utiliser un RA-Guard, sorte de proxy permettant de filtrer les requêtes RA en fonction des paramètres exigés sur les couches L2 et L3 (RFC6105).
Vulnéromètre
Menaces | |
Linux | Moyenne |
Windows | Forte |
Unix-BSD | Moyenne |
A propos de rien : Le combo flood_router6 + dos-new-ip6 vous permet de mettre hors service un lien complet tant que le dos-new-ip6 tourne… ;)
(Affaire à suivre…)