====== Fiche savoir : la fragmentation IP ======
===== Présentation =====
La taille maximale d’un paquet IP qui est envoyé sur le réseau est définie par la valeur de la MTU (Maximum transmission unit) de l'interface de sortie.
Ce paramètre permet à l'interface de sortie d'un équipement :
* d'**adapter** la taille des paquets aux **capacités** de la couche 1 et 2 (Ethernet pour les réseaux locaux) pour un PC ou un routeur ;
* de tenir compte de l’utilisation d’encapsulation spécifiques (VPN, PPP, …) pour un routeur.
Lors de l'acheminement du paquet dans les différents traversés jusqu’à sa destination, des liens ayant une capacité de transmission inférieure peuvent être utilisés. Dans ces cas, le paquet IP est **fragmenté** par les routeurs intermédiaires qui ont une MTU plus petite :
* En IPv4, la fragmentation d’un paquet est **interdite*** lorsque le bit **DF** est positionné dans l’en-tête IP. La MTU minimale est de 576 octets.
* En IPv6, la fragmentation par un équipement intermédiaire est **interdite**. La MTU minimale est de 1280 octets.
Un paquet IP qui ne peut être acheminé compte tenu de la MTU de l'interface d'entrée est détruit (**drop**).
Une valeur **optimale** de MTU correspond à la valeur maximale que le réseau accepte. S’il est trop bas, cela ajoute de la **latence**.
L’option **offset** indique la position de chaque portion des données qui ont dû être fragmentées.
{{ :bloc3s1:enteteip_1.png |}}
Lors de la fragmentation d'un paquet, seul le **premier fragment contient les ports (TCP/UDP) utilisés** par la connexion. Pour que le pare-feu puisse analyser tous les fragments celui-ci doit reconstituer le paquet original.
==== MTU discovery (PMTUD) ====
Lien : https://www.malekal.com/quest-ce-que-le-mtu-et-mss-et-optimiser/
MTU discovery (PMTUD) est une méthode qui permet d’obtenir le MTU de tous les équipements que traversent un paquet :
* on envoie des paquets jusqu’à ce que ce dernier ne soit plus droppé par un des routeurs le long du chemin.
* Lorsqu’un périphérique le long du chemin abandonne le paquet, il renvoie un message ICMP avec son MTU.
* Le périphérique source abaisse son MTU et envoie un autre paquet de test.
* Ce processus est répété jusqu’à ce que les paquets de test soient suffisamment petits pour traverser tout le chemin du réseau sans être abandonnés.
Le site [[https://www.speedguide.net/analyzer.php|speedguide]] permet d’obtenir les réglages MTU et MSS d'un PC ainsi que d’autres paramètres TCP/IP.
Des ajustements supplémentaires doivent alors être faits pour la partie **Données utiles**.
=== Optimiser le MTU ===
La commande **ping** permet de déterminer le meilleur **MTU**, en utilisant le même principe que le **path MTU discovery** : envoyer des paquets **fragmentés de différentes tailles** pour voir si un équipement **drop** ou **fragmente** le paquet.
Paramètres de la commande ping :
* envoyer des paquets **non fragmentés** avec l’option -f
* envoyer des paquets avec une taille de MTU différente avec -l
ping www.yahoo.com -f -l 1500
La commande netsh de Windows permet de modifier la valeur de la MTU du PC.
=== Attaque par fragmentation IP ===
Le mécanisme de fragmentation IP peut être détourné pour véhiculer des attaques :
* la menace est répartie sur **plusieurs fragments**.
* Le code malveillant est découpé puis inséré dans des fragments consécutifs ,
* l’analyse unitaire des fragments par le PC ou le serveur pare-feu **ne révèle pas l’attaque**.
* C’est au moment du **réassemblage** des fragments que la menace est **reconstituée**.
=== Attaque par recouvrement ===
Détournement de l’usage de l’option **offset** :
* utilisation de deux fragments consécutifs avec des valeurs d’offset qui se **chevauchent** ,
* l'acceptation et la reconstitution du paquet se traduit par le second fragment qui écrase la fin du premier fragment et reconstitue la menace.
{{ :bloc3s1:enteteip_2.png |}}