Le protocole ICMP

To the non-french speaker, note that you can translate the articles using the Google Trad widget situated at the bottom of all pages.


Le protocole ICMP (Internet Control Message Protocol) permet de gérer l’envoie d’informations relatives aux erreurs du protocole TCP/IP. C’est ce protocole qui dira par exemple à un ordinateur que l’hôte qu’il cherche à joindre est inexistant.
Les commandes PING et tracert utilisent ce protocole.

Vous connaissez, PING, elle envoie des paquets de données à un destinataire et attend une réponse.
Sous windows vous pouvez utiliser PING de deux manières :

-En pingant à l’aide d’une adresse IP :

ping

-En pingant une URL :

pingurl

J’utilise souvent le PING via URL pour trouver l’adresse IP du serveur d’un site.

Quant à la commande tracert, elle permet de savoir par quel routeur passent vos paquets pour atteindre le serveur.

tracert

Le protocole ICMP est un protocole qui utilise la couche 3 (couche réseau). Il est utilisé par les ordinateurs, les serveurs mais aussi les switchs et les routeurs. Concrètement il y a énormément de matériels qui utilisent ce protocole.

Les paquets ICMP sont encapsulés par le protocole IP et sont donc envoyés via des datagrammes de ce style :

datagramme

On retrouve les champs d’un datagramme classique : version, ihl, type de service, longueur totale etc… Et à ceux-là on ajoute les champs « type de message », « code (de l’erreur) » et « somme de contrôle (différente du checksum) ».

Il existe 18 types de message et la plupart d’entre eux ont plusieurs codes d’erreur. Je vous ai récapitulé le tout dans ce tableau :

Type Code Descriptif de l’erreur
8 0 Utilisé par la commande PING
3 0 Réseau non accessible
3 1 Machine non accessible
3 2 Protocole non accessible
3 3 Port non accessible
3 4 Fragmentation nécessaire mais impossible (le bit Don’t Framgent est à 1)
3 5 Routage échoué
3 6 Réseau inconnu
3 7 Machine inconnue
3 8 Machine non connectée au réseau (plus utilisé)
3 9 Communication avec le réseau interdite
3 10 Communication avec la machine interdite
3 11 Réseau inaccessible pour ce service
3 12 Machine inaccessible pour ce service
4 0 Volume de données envoyés trop important
5 0 Redirection pour un hôte (optimisation du routage)
5 1 Redirection pour un hôte et un service
5 2 Redirection pour un réseau
5 3 Redirection pour un réseau et un service donné
11 0 Ré-assemblage des fragments trop long
12 0 Entête erronnée
13 0 Demande de l’heure et date système à une machine (request)
14 0 Envoie de l’heure et date système (reply)
15 0 Demande à un réseau son adresse IP (request)
16 0 Envoie de l’adresse IP du réseau (reply)
17 0 Demande du masque de sous réseau à un réseau (request)
18 0 Envoie du masque de sous réseau (reply)
8 0 Réponse à un PING (echo)
1 0 Réservé
2 0 Réservé

Tableau récapitulatif des types d’erreurs d’ICMP

Pour voir comment tout ça fonctionne, nous allons envoyer un PING au serveur qui héberge le site http://www.parisdescartes.fr et avec Wireshark nous allons analyser les trame ICMP.
Pour faciliter les choses je vais ajouter un filtre pour n’avoir que ce qui m’intéresse comme trame :

filtre
Puis je vais lancer un PING vers le serveur :

ping

Et voici le résultat sur wireshark :

trame

Et si on ouvre le paquet et qu’on regarde les champs ICMP :

plustrame

On retrouve bien le type 8 et le code 0 ce qui correspond à un PING.

Concrètement à quoi va servir ce protocole ?
Eh bien pour tout ce qui est gestion d’un réseau, ICMP va être extrêmement utile puisqu’il va permettre (avec un minimum de réflexion) de détecter tout comportement inhabituel (tel qu’une intrusion par exemple).

Je vous laisse ce lien qui en parle

Le protocole ICMP permet aussi de dresser la cartographie d’un réseau mais ça on le verra plus tard avec nmap.


Passons à la partie pratique.

Tout d’abord on peut spammer une cible de paquets ICMP. C’est une attaque par Ddos. Mais le plus sympas reste la redirection ICMP ! Pour cela on va envoyer une requête ICMP de type 5 et de code 1 (ce qui correspond à une redirection). On va donc pouvoir rediriger le trafic d’un ordinateur/serveur.

Mais pourquoi faire ça sachant qu’on peut faire pareil avec une attaque de type arp spoofing ? Eh bien tout simplement parce qu’avec une attaque par redirection ICMP on peut aussi attaquer des ordinateurs qui ne sont pas sur notre réseau !

Imaginez la situation suivante :

reseau

Nous avons deux réseaux 192.168.0.1 et 192.168.0.2. Ce qui serait intéressant serait de forcer le router 1 a redirigé le trafic du PC1 vers le routeur0. De cette manière le PC0 aura accès aux données envoyées par le PC1.

Pour cela on pourra utiliser l’outil Ettercap et son option ICMP redirect. Malheureusement je ne pourrais pas vous le montrer car je ne dispose pas de deux réseaux pour effectuer les tests. Et bien évidemment je n’utilise pas des réseaux qui ne m’appartiennent pas.

Bon on ne va pas se mentir, les attaques par redirection ICMP sont peu existantes. En effet il suffit de créer des routes statiques sur les routeurs pour éliminer cette faille. De même il existe des firewalls qui empêchent l’utilisation d’ICMP redirect… Mais bon ça reste intéressant à voir ahah !


Le but de cet article était surtout d’introduire la notion d’ICMP pour pouvoir ensuite travailler sur le scan de réseau qui pour le coup sera bien plus intéressant ahah !
Encore une fois si vous avez des questions/conseils n’hésitez pas à m’en faire part !

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l'aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s