Vous êtes sur la page 1sur 9

ICMP pour IPv4

Les bases de l'ICMP


ICMP (Internet Control Message Protocol) a été publié en septembre 1981
dans le cadre de la RFC 792. Il a été introduit pour permettre aux
périphériques réseau de renvoyer des messages à la source d'un message. Il
s'agit d'une fonctionnalité importante, car le protocole Internet  (IP) ne
renvoie pas lui-même de retour d'information de manière native.

 IPv4 et IPv6
Il existe deux versions d'ICMP ; ICMP pour IPv4 et ICMP pour IPv6.Cet article se
concentre sur ICMP pour IPv4

ICMP fournit des informations sur les hôtes et les réseaux à l'expéditeur
d'un paquet IP. Les routeurs et les commutateurs le long du chemin réseau
ne sont pas informés des erreurs. Un exemple de rapport d'erreur ICMP
inclut « hôte/réseau introuvable » lorsque le point de terminaison de
destination ne peut pas être atteint.

ICMP n'inclut pas la correction d'erreurs, donc cela ne rend pas IP plus
fiable. Cependant, cela permet à l'expéditeur de pouvoir gérer les erreurs. La
gestion réelle des erreurs est effectuée avec des protocoles de couche
supérieure (tels que TCP) ou au sein de l'application elle-même.

Pour éviter de créer des boucles d'erreur, ICMP n'envoie pas de notifications
d'erreur concernant d'autres paquets ICMP ayant échoué.

Une autre utilisation d'ICMP est de fournir un meilleur chemin pour les
paquets à prendre vers une destination. Par exemple, si un routeur reçoit un
paquet destiné au réseau 'A', ce routeur peut connaître un routeur avec un
meilleur chemin. Dans ce cas, le premier routeur enverra
une redirection ICMP   à l'expéditeur, lui suggérant d'utiliser l'autre routeur à
la place.

Le dépannage est une troisième utilisation d'ICMP. Les exemples


incluent  ping  et  traceroute , qui envoient des requêtes d' écho ICMP   pour
déterminer si un hôte est accessible et le chemin emprunté pour y arriver.
Comme ICMP fait partie de la pile IP au niveau de la couche 3, il n'utilise pas
de ports pour identifier les « flux » ou « flux » de trafic. ICMP utilise à la place
des « messages de contrôle », qui sont constitués d'un type et d'une  valeur
de code . De plus, certains types ICMP utilisent l'identifiant et les   numéros
de séquence pour suivre quel processus a généré une demande ICMP. En
cas d'erreurs envoyées non sollicitées par un autre hôte ou routeur, une
partie du paquet IP d'origine est intégrée dans la charge utile ICMP, pour
faire correspondre l'erreur avec le processus qui a envoyé le paquet
d'origine.

Architecture
ICMP est distinct de, mais étroitement intégré à IP. Il est encapsulé dans IP
( numéro de protocole 1 ), juste après l'en-tête IP, mais contrairement à
d'autres protocoles dans cette situation, il est toujours considéré comme du
trafic de couche 3.

ICMP utilise un en-tête et une zone de données. L'en-tête a une longueur de


8 octets et la longueur de la zone de données peut varier. Les quatre
premiers octets de l'en-tête incluent le Type, le Code et une  somme de
contrôle .

Le  type  définit de  quel type de message ICMP  il s'agit,


comme  Echo,  Unreachable , etc. Le code n'est utilisé que par certains types
et est utilisé pour donner plus d'informations sur une erreur.

La seconde moitié de l'en-tête (appelée officieusement l'en-  tête étendu sur


ce site) est utilisée pour donner des commentaires supplémentaires dans
certains cas. Il n'est pas utilisé par tous les types de message et peut être
laissé à zéro dans ces cas.

 En-tête étendu
Les quatre derniers octets de l'en-tête tels que décrits sur ce site peuvent être un
peu ambigus. Certaines descriptions d'ICMP considèrent qu'il s'agit des 4
premiers octets de la zone de données.
ICMP est souvent utilisé pour signaler des erreurs. La plupart des erreurs
incluront les 8 premiers octets de données du paquet IP d'origine qui a causé
l'erreur dans la charge utile ICMP (erreur de données). Ceci est utilisé pour
aider l'expéditeur à faire correspondre l'erreur au processus qui a envoyé le
paquet d'origine.

Usage courant
Certains des types de messages ICMP les plus courants sont répertoriés
dans le tableau ci-dessous. Pour la liste complète, voir l'article sur les  types
ICMP .
Taper La description Usage courant

0 Réponse d'écho Ping et Traceroute

3 Destination inaccessible Vu dans le ping lorsque l'hôte final ne peut pas être atteint
Taper La description Usage courant

5 Réorienter Redirige un flux vers un meilleur routeur

8 Écho Ping et Traceroute

11 Temps écoulé Messages d'expiration TTL

12 Problème de paramètre Une erreur "fourre-tout"

13 Horodatage Synchronisation de l'horloge

14 Réponse d'horodatage Synchronisation de l'horloge

Ping et Traceroute

Ping et traceroute sont des outils ICMP courants, qui


utilisent des messages d'écho et de réponse d'écho pour déterminer si un
hôte est allumé et répond, et le chemin emprunté par le trafic pour y arriver.

Pour déterminer si un hôte est actif, un expéditeur créera un paquet


d'écho ICMP et placera  un tas de caractères ASCII dans la zone de données
(charge utile). Selon l'implémentation, un horodatage peut également être
intégré.

Si la destination reçoit et traite avec succès le paquet d'écho, elle répondra


par un écho-réponse. La charge utile de la réponse doit être identique à la
charge utile de l'écho.

Si le ping échoue, l'expéditeur peut recevoir un message d'erreur ICMP d'un


périphérique provisoire, tel qu'Unreachable  s'il y a un problème de routage
ou de fragmentation, ou  Time Exceeded  si le paquet d'origine est resté
bloqué dans une boucle.

 
Traceroute peut également utiliser l'écho ICMP, l'écho-réponse et les
messages de dépassement de temps pour tracer le chemin qu'un paquet
prendra. Ceci est utilisé à des fins de diagnostic, pas pour modifier le flux de
paquets.

Certaines implémentations de traceroute (comme dans Windows) utilisent


ICMP. Cependant, d'autres implémentations utilisent UDP à la place, ou
offrent les deux options. L'implémentation UDP n'est pas abordée ici.

Lorsqu'un traceroute est démarré, l'expéditeur crée d'abord un paquet


d'écho ICMP et définit le TTL dans l'en-tête IP sur 1. Lorsque le premier
routeur reçoit ce paquet, il décrémente le TTL à zéro et renvoie un message
Time-Exceeded. L'expéditeur enregistre alors le premier saut dans le chemin.

L'expéditeur crée ensuite un autre paquet d'écho, avec un TTL de deux. Le


premier routeur décrémente le TTL et transmet le message au deuxième
routeur du chemin. Le deuxième routeur décrémente le TTL à zéro et
renvoie le message Time-Exceeded. L'expéditeur enregistre ensuite le
deuxième saut dans le chemin.

Ce processus se poursuit, avec une incrémentation de TTL à chaque fois,


pour obtenir la liste complète des routeurs d'un chemin. Cela continuera
jusqu'à ce que la destination soit atteinte ou que le traceroute échoue pour
une raison quelconque.

Habituellement, trois paquets sont envoyés pour chaque saut, ce qui permet
de diagnostiquer la disponibilité du saut, mais aide également à révéler s'il
existe plusieurs chemins vers une destination.

Il est important de noter que certains appareils se "cachent" de traceroute,


en ne décrémentant pas le TTL. Le  pare-feu ASA est un exemple  d'un tel
périphérique.

 Traceroute

Le traceroute moderne utilise ICMP ou UDP comme décrit ci-


dessus. Cela ne doit pas être confondu avec  ICMP type 30 , qui est une
version obsolète de traceroute
 
 
Redirections

Une redirection est utilisée pour informer un hôte qu'il


existe une meilleure passerelle disponible pour la destination qu'il essaie
d'atteindre.

Un exemple de ceci est lorsqu'il y a deux routeurs sur le LAN local ; Routeur-
A et Routeur-B. Le routeur-A est utilisé pour l'accès Internet et est la
passerelle par défaut pour les hôtes sur le réseau. Le routeur B est utilisé
pour la connectivité WAN et possède des routes spécifiques dans sa table
de routage.

Si un hôte sur le réseau souhaite envoyer un paquet vers une destination via
le WAN, il enverra le paquet à la passerelle par défaut (Router-A), en
s'appuyant sur elle pour acheminer le paquet. Lorsque le routeur-A reçoit le
paquet, il regarde sa table de routage et détermine que le routeur-B est le
meilleur saut suivant pour cette destination. Le routeur-A transmet ensuite
le paquet au routeur-B.

Voulant être un peu plus utile, le routeur-A se rend compte que l'hôte
expéditeur et le routeur-B sont sur le même réseau local. Le routeur-A
envoie ensuite un message de redirection à l'hôte, l'informant que le
routeur-B serait une meilleure passerelle pour ce réseau. L'hôte utilisera
ensuite le routeur B pour les futures communications avec cette destination.

Notification de boucle de routage

Parfois, un routage sous-optimal conduit à une boucle


dans le réseau. Par exemple, cela peut se produire si le routeur-A pointe vers
le routeur-B, le routeur-B pointe vers le routeur-C et le routeur-C renvoie
vers le routeur-A.
Sans prévention de boucle, un paquet pourrait être transmis indéfiniment
autour de ces trois routeurs (au moins jusqu'à ce qu'un routeur redémarre,
qu'une liaison échoue, que les routes changent, etc.).

Ce problème est résolu par le champ TTL dans l'en-tête IP. Chaque routeur
décrémente la valeur de ce champ jusqu'à ce qu'elle atteigne zéro, puis le
paquet est rejeté. Cela limite le nombre de sauts que le paquet peut
traverser, en fonction de ce que l'hôte source définit initialement le TTL.

S'il y a une boucle de couche 3 dans le réseau, le TTL finira par tomber à
zéro et le paquet sera rejeté. Le routeur qui décrémente le TTL à zéro créera
alors un message ICMP  Time-Expired  , qui est renvoyé à l'hôte d'origine.

Sécurité

ICMP peut être un outil très utile, mais il peut être abusé, ce qui peut
conduire à des failles de sécurité sur le réseau. Vous trouverez ci-dessous
quelques problèmes de sécurité liés à ICMP, qui peuvent aider les
administrateurs à décider quand bloquer et quand autoriser ICMP.

Empreinte
La première étape d'une attaque consiste à recueillir des informations sur la
cible. C'est ce qu'on appelle « l'empreinte du réseau », et ICMP peut être très
utile pour cela. Des exemples d'empreinte via ICMP incluent les « balayages
ping » pour trouver des hôtes en direct et la découverte de routeurs à l'aide
de messages de sollicitation.

De nombreux administrateurs bloqueront entièrement ICMP pour empêcher


ce type d'empreinte. Cela présente certains inconvénients, car cela rend le
dépannage et la surveillance un peu plus difficiles. Un moyen terme consiste
à bloquer ICMP des réseaux non fiables (tels qu'Internet) et à autoriser ICMP
en interne.

Déni de service
Il existe plusieurs façons d'utiliser ICMP pour créer une attaque DoS ou
DDoS. Tout d'abord, pensez aux messages inaccessibles. Ils indiquent à un
hôte source qu'un hôte de destination particulier est en panne ou
indisponible. Si l'un de ces messages devait être usurpé, cela pourrait
amener un hôte à fermer volontairement une connexion. Un exemple de
ceci est l'   outil Click , qui déconnecte les clients IRC de leurs serveurs.

Un autre exemple est une attaque Smurf, où un grand nombre de paquets


Echo (pings) sont envoyés à partir de plusieurs hôtes source (DDoS) vers une
cible. Cela peut submerger la cible, l'obligeant à passer plus de temps à
traiter les paquets ping qu'à traiter le trafic légitime. L'utilisation de la
fonction de limitation de débit ICMP d'un pare-feu peut aider à atténuer
cette attaque.

Un exemple plus ancien est le Ping of Death. Le plus grand paquet IP


autorisé fait 65535 octets. Un système d'exploitation peut avoir une
mémoire tampon pour recevoir ces paquets et peut également définir la
mémoire tampon sur 65535 octets, car aucun paquet ne peut être plus
volumineux. Cependant, un attaquant peut créer de
gros paquets fragmentés personnalisés, que la cible essaie de réassembler. La
taille réassemblée est supérieure à la mémoire tampon, ce qui provoque un
débordement et peut faire planter le système d'exploitation. Les systèmes
d'exploitation modernes ont corrigé cette faille.

Tunneling
Le tunneling est une méthode d'encapsulation d'un type de trafic dans un
autre type de trafic. Du point de vue des attaques, un tunneling réussi
signifie que des données ou des commandes restreintes peuvent être
envoyées dans et hors d'un système, tout en ressemblant à du trafic
ordinaire.
Cela peut être fait avec les paquets d'écho et de réponse d'écho ICMP. Le
champ de données de ces paquets n'est généralement que du texte ASCII,
ce qui le rend approprié pour cacher d'autres données. Ce qui pourrait
ressembler à une série de ping et de réponses pourrait en réalité être une
canalisation secrète, et cela peut être autorisé, car de nombreux pare-feu ne
regardent que les en-têtes layer3 et 4.

Une atténuation pour cela serait d'utiliser un pare-feu d'application ou un


IPS qui effectue une inspection approfondie des paquets et examine la
charge utile ainsi que les en-têtes.

L'homme au milieu
Une attaque Man-In-The-Middle (MITM) est un dispositif où la circulation
INTERCEPTIONS compromis légitime, et qu'il soit en avant
sur inaltérée  (mais garder les informations qu'il apprend du trafic), ou
modifie la circulation avant de le transmettre.

Les redirections ICMP peuvent être falsifiées, ce qui amène un hôte à utiliser
un routeur compromis comme passerelle pour un réseau de destination
particulier. Un attaquant peut alors utiliser ou modifier à sa guise les paquets
qu'il reçoit.

Vous aimerez peut-être aussi