Comment cacher des informations dans les transmissions ICMP ?

By | October 13, 2016

Comment cacher des informations dans les transmissions ICMP ?

Suite à mon premier article sur hping aujourd’hui nous apprendrons une autre manière de forger des paquets.
Cette fois, notre but sera de forger des paquets ICMP, protocole utilisé très souvent pour le dépannage dans un réseau.

Selon le schéma suivant, les paquets ICMP comportent normalement un champ de données optionnel valant 32 octets.

Format paquet ICMP

Source: Wikipedia.org

Si vous analysez des requêtes Ping sur Wireshark, vous remarquerez que selon le système d’exploitation, le champ de données d’un paquet ICMP peut contenir des données différentes.

portion de données d'un paquet ping windows

Requête Ping provenant d’un système Windows

portion de données d'un paquet ping linux

Requête Ping provenant d’un système Linux

En clair, ce champ de données est modifiable.
Notre objectif sera de transmettre un fichier à travers cette section des paquets ICMP.

Voici le contenu du fichier à envoyer, un simple fichier texte:
fichier texte à envoyer

Sur la machine de destination (yen.marty.ci), on utilisera tcpdump pour capturer les paquets qui seront ensuite sauvegardés dans un fichier packet.pcap.

commande tcpdump pour la capture

-i etho pour le nom de l’interface qui sera utilisée
‘icmp and src host lex.marty.ci and dst host yen.marty.ci’ pour signifier qu’on ne veut capturer que le protocole icmp dont la source est lex.marty.ci et la destination yen.marty.ci. J’utilise un serveur DNS avec mes machines d’où l’utilisation des noms. Il est bien possible d’utiliser des adresses IP à la place.
-w packet.pcap pour le nom qu’on donnera au fichier de capture.
-s 1500 pour spécifier le MTU

Pour envoyer le fichier donc, il vous faudra appliquer cette commande du côté de l’expéditeur:

commande hping pour envoyer le fichier

-1 pour le protocole icmp,
-E /home/file.txt pour la source du fichier
-d 1500 pour spécifier la taille des données
yen.marty.ci est l’adresse de destination
EOF reached signifie que l’intégralité du message a été envoyé.

Pour arrêter le processus, il suffit de cliquer sur les touches Control et C.

En ouvrant le fichier de capture packet.pcap avec Wireshark, dans le champ des données de l’un des paquets, on peut voir le contenu du fichier en texte clair.

ouverture du fichier packet.pcap avec Wireshark

Pour extraire les données vous aurez besoin de Tshark qui est un outil inclu dans Wireshark.

Les données seront enregistrées dans le fichier hexdata.txt.
A l’ouverture du fichier hexdata.txt, on ne voit que du code hexadécimal.

contenu du fichier hexdata.txt

Il existe plusieurs outils online pour convertir l’hexadécimal en texte dont dcode.fr. Après conversion donc, nous retrouvons l’intégralité du fichier:

conversion du code ascii en texte

Ce qui est intéressant dans cette expérience, c’est d’utiliser le protocole ICMP pour une fonction qui n’est normalement pas la sienne: c’est à dire envoyer et recevoir des données texte. Le ICMP n’étant habituellement qu’un protocole de signal.

Cette faille du protocole ICMP était notamment exploitée pour créer des attaques DOS comme le Ping de la mort. Telle est l’une des raisons pour lesquelles désactiver le protocole ICMP peut être une bonne mesure de sécurité.

Rendez vous dans deux semaines pour le dernier article sur hping.

mdestroy

Leave a Reply

Your email address will not be published. Required fields are marked *