DoS IPv6 : attaques à distance et contre mesures

barbare IPv6Oui parce que nous avons vu les DoS IPv6,  et là aussi, et nous avons vu le Man In The Middle mais uniquement sur le réseau “lien”. Du coup, comment un être malveillant, qui n’est pas sur notre réseau lien, s’y prendrait pour faire tomber nos services ?

Supposons donc que notre être malveillant, violent et primaire, nommons le Krog, s’est mis dans la tête de détruire nos services de paiement en ligne. Quelles options a-t-il ? Quelles particularités d’IPv6 peut-il exploiter ? Sont-elles exploitables en l’état?

J’espère que ce petit article vous permettra d’y voir plus clair sur les “risques” IPv6.

 

Les extensions IPv6

Si IPv4 avait une taille d’en-tête variable avec des options possibles (timestamp, traceroute,etc.), IPv6, lui, possède une taille d’en-tête fixe. Les options d’IPv4 sont donc intégrées dans IPv6 via des champs facultatifs appelés Extensions.

Extensions Options Descriptif
Proche en proche Jumbogramme Permet la transmission de très grands paquets (jusqu’à 4 Go) entre les équipements
Proche en proche Router Alert Force les routeurs intermédiaires à analyser/modifier les données des paquets avant de les relayer
Routage Impose à un paquet une route différente de celle offerte par la politique de routage du réseau (routage par la source)
Fragmentation Pareil que pour IPv4
Sécurité AH / ESP Pour la gestion native d’IPSec
Destination Permet la gestion des encapsulations (Tunneling)

Je n’ai pas tout mis, pour les curieux d’IPv6 je vous conseille ce lien de G6 asso très TRES bien fait !

Dans la catégorie “extensions trouées”, les nominées sont…

Proche en proche !

Parce qu’elle comporte deux options qui peuvent être très intéressantes:

  • Router Alert : permet de forcer un routeur à traiter le paquet avant de le transférer, du coup on va utiliser le CPU du routeur pour traiter certaines requêtes…Vous imaginez assez bien que les attaques DoS n’ont pas traînées à pleuvoir.
  • Jumbogramme : permet le transfert de paquets de tailles allant jusqu’à 4Go!! facilitant les attaques par surcharge réseau.

Dois je m’inquiéter ? NON !
D’abord parce que l’option Router Alert n’est plus traitée par les nouveaux noyaux, c’est une option obsolète qui a au moins le mérite de venir étoffer notre culture informatique. Quant à l’option Jumbogramme, même traitée elle est limitée par le MTU de votre équipement, la majorité du temps de 1500 octets.

Par contre, l’extension Proche en Proche (HopByHop) peut être utilisée avec des valeurs spécifiques (Nop par exemple) afin de passer les RA-Guard sans problème… à méditer.

Routage !

En mai 2007, le Centre d’Expertise gouvernemental de Réponse et de Traitement des Attaques informatiques (CERTA) publie un bulletin d’actualité (CERTA-2007-ACT-018) mettant en lumière une vulnérabilité (CVE-2007-2242). Pour résumer, il est possible d’utiliser cette extension pour faire des aller-retours entre deux routeurs et donc d’occuper toute la bande passante en réalisant un ping-pong géant ! Un exemple d’attaque très élégante est décrite ici par Philippe BIONDI et Arnaud EBALARD (slide 78) :

#!/usr/bin/python
import scapy
import time
addr1 = ’2001:4830:ff:12ea::2’ #Routeur A
addr2 = ’2001:360:1:10::2’     #Routeur B
zz=time.time(); \
#Définition de la destination
a=sr1(IPv6(dst=addr2, hlim=255)/ \
#43 aller-retours avant d'atteindre la destination
IPv6OptionHeaderRouting(addresses=[addr1, addr2]*43)/ \
#corps du ping (icmp-Request)
ICMPv6EchoRequest(data="staythere"), verbose=0, timeout=80);  
print "%.2f seconds" % (time.time() - zz)

Dois je m’inquiéter ? Normalement non…
Si, et seulement si, un contrôle correct est fait sur cette extension car il est désormais possible de dropper les paquets contenant plus d’une fois la même adresse dans l’extension Routage (par défaut sur Linux >2.6). Tout dépend donc de l’implémentation et de la mise à jour de l’équipement qui traite ces paquets.

Fragmentation !

Pour les mêmes raisons que sur IPv4 : la fragmentation permet l’évasion de firewall. Notamment lorsque la taille est inférieur à 1280 Octets (comme quoi, la taille, ça compte !).

Ce type d’évasion (tiny fragmentation) est bien gérée par les nouveaux noyaux. Donc même sentence que pour l’extension Routage : ça dépend de la date de mise à jour de l’équipement.

 Un petit flood ?

Bien, nous avons donc vu les extensions. A présent, laissez moi vous présenter thcsyn6, le flood TCP de THC ! Si cet outil est aussi puissant, c’est avant tout parce qu’il est difficile de maîtriser un réseau mixte IPv4/IPv6. Si votre réseau possède des services en Dual-Stack, il vous faudra gérer les règles de firewall (avec deep-inspection) en IPv4 ET en IPv6… Ce qui complexifie fortement la gestion du réseau, et pour l’administrateur et pour l’équipement (va falloir qu’il gère la charge…).

Un petit exemple à plume

Dans cet exemple nous avons un serveur Apache2, Linux 3.2, en IPv6 avec juste la page de garde. (!) En IPv6, une URL IP s’écrit sous la forme : http://[x:x:x:x:x:x]:port.

Apache IPv6

Du côté attaquant, un bon flood commence toujours par la suppression les requêtes RST, oui car sinon on reset la connexion TCP… Aucun intérêt pour un flood, vous en conviendrez…

ip6tables -I OUTPUT -p tcp --tcp-flags RST RST -d c::1:1:1:1/64 -j DROP

Nous pouvons à présent lancer notre attaque en toute quiétude :

thcsyn6 -r eth0 c::1:1:1:1 80
# -r pour utiliser des adresses sources aléatoires sur notre /64 
#ce qui est largement suffisant

Dos IPv6 flood syn

Résultat : La page n’est plus accessible, le serveur sature, le client mouline dans le vide… Viens Marianne, jetons nous dans le foin de l’allégresse ! C’est gagné !! 

 

Du coup on fait quoi ?

Du coup, on suit attentivement les 10 commandements du CERTA lorsqu’on déploie un réseau IPv6, tout simplement :

Les 10 commandements réseau
1 – Les adresses IPv6 en sortie vers l’internet tu filtreras
Ne pas oublier qu’une machine peut avoir plusieurs adresses IPv6
2 – Les adresses IPv6 conformes mais non prévisibles tu utiliseras
surtout pour les systèmes critiques
3 – Au niveau du pare-feu, les services inutiles tu bloqueras

  • pour éviter les tunnels sortants, bloquer le port 41 des paquets IPv4
  • pour interdire Teredo, bloquer les ports UDP 3544(src/dst)
4 – De manière sélective les paquets ICMP tu filtreras
bien différencier l’icmpV4 et l’icmpV6
5 – La fragmentation IP tu interdiras
si c’est possible, sinon tu ne l’accepteras que pour des paquets supérieurs à 1280 Octets tu seras gentil
6 – Seules les extensions qui ont légitimité dans le réseau tu sélectionneras
7 – Pour les communications avec les systèmes critiques, IPSec tu utiliseras
8 – La sécurité au niveau des stations tu renforceras
9 – Les bonnes pratiques IPv4 de correctifs de sécurité tu garderas
10 – Des surveillances adaptées à IPv6 tu développeras

  • blocage de périmètre, surveillance de volume, etc.
  • tester les outils de sécurité qui disent prendre en compte l’IPv6