Menu Fermer

ICMP (Internet message protocol) : définition, fonctionnement du protocole

Il existe de nombreux équipements réseau qui communiquent entre eux.
Mais comment notifier d’un problème de connexion, de transmissions de données ou encore la nécessité d’utiliser tel ou tel chemin pour se connecter à un équipement réseau.
C’est là que le protocole ICMP (Internet message protocol) entre en jeu grâce à la possibilité d’envoyer des messages.
Avec TCP et UDP, le protocole ICMP est l’un des protocoles fondamentaux qui permet à un réseau de fonctionner.

Dans ce tutoriel, je vous explique ce qu’est ICMP, comment il fonctionne, la liste des messages ICMP et la structure d’un paquet et datagramme.

ICMP (Internet message protocol) : définition, structure du protocole

Qu’est ce que le protocole ICMP

ICMP est un protocole de niveau réseau (couche 3 du modèle OSI).
ICMP signifie Internet message protocol et comme son nom l’indique est un protocole axé message.

Les périphériques d’un réseau utilisent les messages ICMP pour communiquer les problèmes de transmission de données.
Il est donc utilisé pour transmettre des informations sur les problèmes de connectivité du réseau à la source de la transmission compromise. Il envoie des messages de contrôle tels que “destination network unreachable”, “source route failed” et “source quench”.
Par exemple :

  • Annoncer les erreurs de réseau : par exemple, un hôte ou une partition entière du réseau est inaccessible, en raison d’une défaillance quelconque. Un paquet TCP ou UDP dirigé vers un numéro de port sans récepteur attaché est également signalé par ICMP
  • Annoncer l’encombrement du réseau : lorsqu’un routeur commence à recevoir trop de paquets, en raison d’une incapacité à les transmettre aussi vite qu’ils sont reçus, il génère des messages ICMP Source Quench. Dirigés vers l’expéditeur, ces messages devraient entraîner un ralentissement du rythme de transmission des paquets

Pour cela, l’une des principales façons dont ICMP est utilisé est de déterminer si les données arrivent à destination et au bon moment. L’ICMP est donc un aspect important du processus de signalement des erreurs et des tests visant à déterminer si un réseau transmet bien les données.

ICMP est utilisé aussi par les outils tels que ping et traceroute.

  • Ping s’appuie sur le message 0 (ICMP Echo) pour vérifier si un hôte est en ligne par sa réponse. Cela permet de vérifier la vitesse de réponse : La latence.
  • Traceroute s’appuie sur le TTL, lorsque ce dernier atteint 0, un message ICMP est envoyé. Traceroute analyse ces retours pour générer le chemin ou carte de la connexion

Quelles sont les messages d’erreur d’ICMP ?

Liste des codes erreurs et messages d’erreur

TypeCodeDescription
30-15Destination unreachableNotification d’un paquet qui ne peut être transmis.
Ce dernier est abandonné.
Le champs du code fournit une explication.
50-3RedirectInforme d’une route alternative pour le datagramme et devrait entraîner une mise à jour de la table de routage.
Le champ code explique la raison du changement de route.
110,1Time excedeedEnvoyé lorsque le champ TTL a atteint zéro (code 0) ou lorsqu’il y a un délai d’attente pour le réassemblage des segments (code 1).
120,11Parameter ProblemEnvoyé lorsque l’en-tête IP est invalide (code 0) ou lorsqu’une option de l’en-tête IP est manquante (code 1).
Les code et messages ICMP

Le type Destination unreachable

Ce type a pour but d’annoncer les erreurs de réseau lorsqu’un équipement réseau ne parvient pas à communiquer avec un autre.
Voici les codes erreurs et messages d’erreur pour le type Destination unreachable (Code 3).

Code erreurMessage ICMP
0Destination network unreachable
1Destination host unreachable
2Destination protocol unreachable
3Destination port unreachable
4Fragmentation required, and DF flag set
5Source route failed
6Destination network unknown
7Destination host unknown
8Source host isolated
9Network administratively prohibited
10Host administratively prohibited
11Network unreachable for ToS
12Host unreachable for ToS
13Communication administratively prohibited
14Host Precedence Violation
15Precedence cutoff in effect
Les messages ICMP pour le type Destination unreachable
Message d’erreurDescription
Destination UnreachableCe message est généré lorsqu’un paquet de données ne peut atteindre sa destination finale pour une autre raison. Par exemple, il peut y avoir des défaillances matérielles, des défaillances de port, des déconnexions de réseau, etc.
Redirection ErrorCe message est généré lorsque l’ordinateur source (tel que le PDC) demande que le flux de paquets de données soit envoyé sur une autre route que celle prévue à l’origine. Cela est souvent fait afin d’optimiser le trafic réseau, en particulier s’il existe un autre moyen pour que les paquets de données atteignent leur destination en moins de temps. Cela implique la mise à jour des tables de routage dans les routeurs associés concernés.
Source QuenchIl s’agit d’un message généré par l’ordinateur source pour réduire ou diminuer le flux de trafic réseau envoyé à l’ordinateur de destination. En d’autres termes, le PDC détecte que le taux de transmission des paquets de données est trop élevé et qu’il doit ralentir afin de s’assurer que l’ordinateur de destination reçoit tous les paquets de données qu’il est censé recevoir
Time Exceeded: Il s’agit du même événement que le Time to Live (TTL) basé sur le réseau
Les descriptions du type ICMP Destination unreachable

Le type redirect Message

Ce type est utiliser par des routeurs pour informer d’une route alternative pour le datagramme.
Il est est conçu pour informer un hôte d’un itinéraire plus optimal à travers un réseau, ce qui peut induire une une mise à jour de la table de routage.

Code erreurMessage ICMP
0Redirect Datagram for the Network
1Redirect Datagram for the Host
2Redirect Datagram for the ToS & network
3Redirect Datagram for the ToS & host
Les messages ICMP pour le type redirect

Le type Time Exceeded

Le message ICMP – Time exceeded est généré lorsque la passerelle qui traite le datagramme (ou le paquet, selon la façon dont vous le regardez) constate que le champ Time To Live (ce champ se trouve dans l’en-tête IP de tous les paquets) est égal à zéro et doit donc être éliminé. Cette même passerelle peut également notifier l’hôte source via le message de dépassement de temps.

Le terme “fragment” signifie “couper en morceaux”. Lorsque les données sont trop volumineuses pour tenir dans un seul paquet, elles sont découpées en petits morceaux et envoyées à la destination. À l’autre bout, l’hôte de destination recevra les morceaux fragmentés et les rassemblera pour créer le gros paquet de données original qui a été fragmenté à la source.

Code erreurMessage ICMP
0TTL expired in transit
1Fragment reassembly time exceeded
Les messages ICMP pour le type Time Exceeded

Le type Parameter Problem

Les messages ICMP Parameter Problem sont utilisés pour indiquer qu’un hôte ou un routeur n’a pas pu interpréter un paramètre invalide dans un en-tête de datagramme IPv4.
Lorsqu’un hôte ou un routeur du réseau trouve un mauvais paramètre dans un en-tête de datagramme IPv4, il abandonne le paquet et envoie un message ICMP Parameter Problem à l’expéditeur d’origine.
Le message ICMP Parameter Problem comporte également une option pour un pointeur spécial afin d’informer l’expéditeur de l’endroit où l’erreur s’est produite dans l’en-tête IPv4 original.

Code erreurMessage ICMP
0Pointer indicates the error
1Missing a required option
2Bad length
Les messages ICMP pour le type Parameter Problem

Quelle est la structure d’un paquet ICMP (Datagramme)

Il utilise une structure de paquet de données avec un en-tête de 8 octets et une section de données de taille variable.

Quelle est la structure d'un paquet ICMP (Datagramme)
La structure d’un paquet ICMP (Datagramme)

Voici un description des champs de l’en-tête ICMP (header) :

  • Type : Le type de message ICMP
  • Code : Sous-type du message ICMP
  • Somme de contrôle : Similaire à la somme de contrôle de l’en-tête IP. La somme de contrôle est calculée en fonction du message ICMP entier
  • Reste de l’en-tête : Données additionnelles qui peuvent être à zéro si aucune

Les messages d’erreur ICMP contiennent une section de données qui comprend une copie de l’intégralité de l’en-tête IPv4, plus au moins les huit premiers octets de données du paquet IPv4 à l’origine du message d’erreur.
La longueur des messages d’erreur ICMP ne doit pas dépasser 576 octets.
Ces données sont utilisées par l’hôte pour faire correspondre le message au processus approprié. Si un protocole de niveau supérieur utilise des numéros de port, ils sont supposés se trouver dans les huit premiers octets des données du datagramme original[6].

Les attaques par ICMP

Il existe des détournements du protocole ICMP afin de mener des attaques.
Voici quelques exemples.

Le type Time Exceeded peut être utilisé de manière malveillante pour des attaques visant à rediriger le trafic vers un système spécifique. Dans ce type d’attaque, le pirate, se faisant passer pour un routeur, envoie un message de redirection ICMP (Internet Control Message Protocol) à un hôte, qui indique que tout le trafic futur doit être dirigé vers un système spécifique en tant que route plus optimale pour la destination.
Un IDS peut être utilisé pour avertir lorsque ces messages de redirection ICMP se produisent ou pour qu’il les ignore.

Puis on trouve les attaques DoS et ICMP flood :

Ping of the death : Cette attaque vise à exploiter la taille variable de la section des données du paquet ICMP.
Dans le “Ping of death”, les paquets ICMP volumineux ou fragmentés sont utilisés pour des attaques par déni de service. Les données ICMP peuvent également être utilisées pour créer des canaux secrets de communication. Ces canaux sont connus sous le nom de tunnels ICMP.

Smurf attack : L’attaquant transmet un paquet ICMP dont l’adresse IP est usurpée ou falsifiée. Lorsque l’équipement du réseau répond, chaque réponse est envoyée à l’adresse IP usurpée, et la cible est inondée d’une tonne de paquets ICMP. Ce type d’attaque n’est généralement un problème que pour les équipements anciens.

Twinge Attack : Cette attaque est similaire à l’attaque Ping Flood, mais les demandes d’écho ICMP ne proviennent pas d’un seul ordinateur, mais de plusieurs. Elles comportent également une fausse adresse IP source dans l’en-tête du paquet de données.