Inspection du contenu des paquets

WiresharkBeginner
Pratiquer maintenant

Introduction

Lorsque vous suivez un colis physique, lire l'étiquette d'expédition suffit généralement à savoir où il va. Mais parfois, vous avez besoin de savoir ce qu'il y a réellement à l'intérieur de la boîte.

En analyse réseau, examiner les adresses IP et les ports revient à lire l'étiquette d'expédition (l'en-tête du paquet). Cependant, les informations réellement précieuses — comme le texte d'une page web, un fichier téléchargé ou même un mot de passe non chiffré — sont dissimulées dans la charge utile (payload) du paquet.

Cette distinction entre en-tête et charge utile est fondamentale en cybersécurité. Les en-têtes répondent aux questions de routage : d'où vient le trafic, où va-t-il et quel protocole est utilisé. Les charges utiles répondent aux questions de contenu : qu'est-ce qui a été demandé, qu'est-ce qui a été renvoyé et des données sensibles ont-elles été exposées ? Les analystes expérimentés apprennent à naviguer entre ces deux points de vue selon la question à laquelle ils tentent de répondre.

Dans ce laboratoire, vous apprendrez à utiliser tcpdump pour ouvrir la boîte et inspecter le contenu réel des paquets réseau. Vous découvrirez comment vous assurer de capturer le paquet entier plutôt que la simple étiquette, et comment afficher les données brutes dans des formats facilement lisibles par les humains et les machines. Enfin, vous vous exercerez à utiliser les outils textuels Linux pour extraire des secrets en clair directement depuis le trafic réseau.

Augmenter le Snaplen (Capturer les paquets complets)

Pour regarder à l'intérieur du paquet, vous devez d'abord vous assurer que tcpdump capture réellement l'intégralité de celui-ci. Par défaut, les anciennes versions de tcpdump et certains outils réseau tentent d'économiser de l'espace disque en tronquant la fin de chaque paquet, ne capturant ainsi que les en-têtes.

Ce compromis explique pourquoi la capture de paquets est toujours un équilibre entre exhaustivité et coût. Capturer des paquets plus courts consomme moins de stockage et peut être plus rapide, ce qui est important sur les réseaux très sollicités. Capturer des paquets complets préserve davantage de preuves, ce qui est crucial lors du dépannage et de l'analyse forensique. Il n'existe pas de réglage universel parfait. Les analystes choisissent en fonction de la question posée, de l'environnement et du budget de performance.

La quantité de données capturées à partir d'un seul paquet est appelée "snapshot length" ou snaplen en abrégé. Si vous voulez la charge utile, vous devez dire à l'outil de ne pas tronquer les données. Vous contrôlez cela avec l'option -s. Régler le snaplen sur 0 (-s 0) est une astuce spéciale qui indique à tcpdump d'utiliser la longueur maximale possible, garantissant qu'aucune donnée n'est perdue.

Dans votre environnement, nous avons déjà démarré un serveur web simple sur le port 8080. Pour capturer les données proprement, nous utiliserons une commande Linux pratique appelée timeout pour exécuter tcpdump automatiquement pendant exactement 10 secondes.

Exécutez la commande suivante. Elle commencera la capture sur l'interface de bouclage (lo), filtrera le port 8080, garantira la capture des paquets complets (-s 0) et enregistrera les résultats dans traffic.pcap en arrière-plan (en utilisant le symbole &) :

sudo timeout 10 tcpdump -i lo port 8080 -s 0 -w ~/project/traffic.pcap &

Pendant que tcpdump surveille silencieusement en arrière-plan, nous devons générer un peu de trafic web intéressant pour qu'il puisse le capturer. Utilisez la commande curl pour demander un fichier caché au serveur web local :

curl http://localhost:8080/secret.txt

Vous verrez le texte SecretPayloadData123 s'afficher, ce qui correspond à la réponse du serveur web à votre requête. Attendez quelques secondes que le minuteur timeout de 10 secondes termine la fermeture du processus tcpdump en arrière-plan. Vous pouvez appuyer sur Entrée quelques fois pour voir apparaître le message de fin de tâche en arrière-plan.

Pour vous assurer que tout a fonctionné, listez le contenu de votre répertoire pour vérifier le fichier de capture :

ls -l ~/project/traffic.pcap

Vous devriez voir le fichier traffic.pcap listé avec une taille supérieure à zéro, confirmant que nos paquets complets et non tronqués ont été capturés et stockés en toute sécurité.

Afficher les charges utiles en ASCII

Maintenant que nous avons enregistré les paquets complets, il est temps de les ouvrir et de les lire. Lorsque des applications réseau comme des sites web basiques, des serveurs FTP ou d'anciens systèmes Telnet communiquent, elles envoient souvent leurs données de charge utile sous forme de texte simple et non chiffré.

C'est aussi pourquoi les protocoles non chiffrés sont considérés comme risqués sur les réseaux non sécurisés. Si un humain peut lire la charge utile dans un fichier de capture, un attaquant interceptant le même trafic le peut aussi. En d'autres termes, l'inspection de paquets n'est pas seulement une technique d'analyse ; c'est aussi un rappel de la raison pour laquelle les systèmes modernes privilégient les protocoles chiffrés comme HTTPS et SSH.

Pour révéler ce texte brut, tcpdump propose l'option -A. Cette option pratique traduit les données binaires brutes à l'intérieur du paquet en caractères ASCII lisibles par l'homme. C'est un excellent moyen de scanner rapidement un fichier de capture à la recherche de mots lisibles, de messages d'erreur ou d'identifiants exposés.

Utilisez l'option -r pour lire votre fichier de capture nouvellement créé, et associez-la à l'option -A pour afficher le contenu ASCII :

sudo tcpdump -r ~/project/traffic.pcap -A

À mesure que le texte défile, observez attentivement la sortie. Vous verrez d'abord les en-têtes techniques des paquets, mais mélangés en dessous, vous verrez de l'anglais lisible.

Vous devriez facilement repérer la requête GET /secret.txt envoyée par votre commande curl, suivie de la réponse du serveur web avec un message HTTP/1.0 200 OK. Près du bas du paquet de réponse du serveur, vous verrez clairement la charge utile cachée exposée en texte clair : SecretPayloadData123.

...
E..e..@.@.............Q...P.P...P...*......
GET /secret.txt HTTP/1.1
Host: localhost:8080
User-Agent: curl/7.81.0
Accept: */*

...
E.....@.@.............P...Q.P...P...*......
HTTP/1.0 200 OK
Server: SimpleHTTP/0.6 Python/3.10.12
...

SecretPayloadData123
...

Vous remarquerez sans doute de nombreux points (.) dispersés dans la sortie. C'est tout à fait normal. L'ordinateur tente d'afficher le code machine sous-jacent (comme les en-têtes TCP/IP) sous forme de texte, et lorsqu'il rencontre une valeur binaire qui ne correspond pas à un caractère clavier standard, il imprime simplement un point à la place.

Afficher en Hexadécimal et ASCII (Hexdump)

Bien que la vue ASCII (-A) soit fantastique pour parcourir du texte brut, elle est limitée face à une logique informatique complexe. Comme les protocoles binaires (comme les requêtes DNS ou le trafic chiffré) s'affichent comme une mer confuse de points en mode ASCII, les ingénieurs réseau ont besoin d'un outil plus précis.

L'hexadécimal est omniprésent dans le travail de sécurité de bas niveau car c'est un moyen compact de représenter des octets bruts. Les ordinateurs stockent les données en binaire, mais le binaire est fastidieux à lire directement pour les humains. L'hexadécimal agit comme un juste milieu pratique : chaque chiffre hexadécimal correspond exactement à quatre bits binaires, permettant aux analystes d'inspecter la structure au niveau de l'octet sans se noyer dans de longues chaînes de zéros et de uns.

Pour obtenir la vue la plus précise de l'anatomie d'un paquet, utilisez l'option -X. Cela transforme la sortie en un format structuré appelé Hexdump. Il affiche les valeurs hexadécimales exactes (base 16) des données aux côtés du texte ASCII, vous offrant le meilleur des deux mondes.

Exécutez la commande suivante pour lire votre fichier de capture et afficher la vue hexdump détaillée :

sudo tcpdump -r ~/project/traffic.pcap -X

Examinez les blocs de données structurés présentés sur votre écran.

...
0x0000:  4500 0065 1419 4000 4006 28b4 7f00 0001  E..e..@.@.(.....
0x0010:  7f00 0001 8152 1f90 50b9 1017 5018 0200  .....R..P...P...
0x0020:  fe59 0000 4745 5420 2f73 6563 7265 742e  .Y..GET./secret.
0x0030:  7478 7420 4854 5450 2f31 2e31 0d0a 486f  txt.HTTP/1.1..Ho
0x0040:  7374 3a20 6c6f 6361 6c68 6f73 743a 3830  st:.localhost:80
...

La sortie est soigneusement organisée en trois colonnes distinctes.

La colonne tout à gauche (commençant par 0x0000:) est essentiellement une règle, vous indiquant la position exacte de l'octet dans le paquet.

La large section centrale affiche les données brutes du paquet au format hexadécimal, regroupées par paires d'octets pour une lecture plus facile par les analystes en sécurité.

Enfin, la section tout à droite tente de traduire cette ligne de données hexadécimales en caractères ASCII familiers, servant de guide de référence rapide.

En présentant les données côte à côte, vous pouvez identifier la valeur binaire exacte de n'importe quel caractère erratique, ce qui est une nécessité absolue pour la rétro-ingénierie d'attaques réseau complexes.

Extraire les en-têtes HTTP en clair

Rechercher manuellement dans une sortie ASCII ou Hexdump brute est acceptable pour de petits tests, mais cela devient rapidement une corvée impossible lors de l'analyse de fichiers de capture réels contenant des milliers de paquets.

Cette étape introduit une autre idée fondamentale de l'ingénierie : les flux de travail puissants naissent souvent de la combinaison de petits outils plutôt que de la dépendance à un seul outil géant. tcpdump est efficace pour lire les paquets. grep est efficace pour rechercher du texte. En les connectant avec un tube (pipe), vous créez un flux de travail à la fois rapide et facile à adapter. Cette composabilité est l'une des forces déterminantes de l'environnement en ligne de commande Linux.

Pour résoudre ce problème, Linux vous permet de combiner les outils. En prenant la sortie ASCII de tcpdump et en la redirigeant (|) directement vers un outil de recherche textuelle appelé grep, vous pouvez filtrer instantanément le flux massif de texte pour ne révéler que les éléments spécifiques que vous recherchez.

Par exemple, si vous enquêtez sur du trafic web, vous pourriez vouloir cartographier rapidement quels sites web sont visités (l'en-tête Host) et quel type de navigateur web les utilisateurs utilisent (l'en-tête User-Agent).

Exécutez la commande suivante. Elle lit le fichier en mode ASCII, redirige le texte vers grep et utilise l'option -E pour activer une recherche étendue sur les lignes contenant "Host:", "User-Agent:" ou "HTTP" :

sudo tcpdump -r ~/project/traffic.pcap -A | grep -E "Host:|User-Agent:|HTTP"

Instantanément, la sortie confuse est remplacée par un résumé propre et hautement organisé de la transaction web :

GET /secret.txt HTTP/1.1
Host: localhost:8080
User-Agent: curl/7.81.0
HTTP/1.0 200 OK
Server: SimpleHTTP/0.6 Python/3.10.12

Ce flux de travail est incroyablement puissant pour la réponse aux incidents de cybersécurité. En modifiant les mots de recherche, vous pouvez utiliser cette même technique pour balayer sans effort une capture réseau entière à la recherche de mots de passe divulgués (par exemple, grep -i "password"), de noms de fichiers confidentiels ou de chaînes de commandes malveillantes connues.

Résumé

Félicitations ! Vous avez terminé avec succès le laboratoire sur l'inspection du contenu des paquets.

Vous avez fait évoluer vos compétences, passant de la simple observation de l'extérieur des paquets réseau à une plongée profonde dans les données réellement transmises. Vous vous êtes exercé à désactiver la troncature des paquets en utilisant l'option snaplen (-s 0) pour garantir une capture complète. Vous avez ensuite révélé le contenu en utilisant l'option -A pour une vue ASCII lisible et l'option -X pour une analyse Hexdump précise et professionnelle. Enfin, vous avez optimisé votre flux de travail en combinant tcpdump avec des outils textuels Linux standard pour traquer et extraire automatiquement des données d'application spécifiques au milieu du bruit.

Ces compétences fondamentales sont la base même de l'inspection approfondie des paquets (Deep Packet Inspection). Que vous soyez en train de dépanner un bug d'application obscur ou d'effectuer une analyse forensique réseau détaillée sur une faille de sécurité, vous disposez désormais des outils nécessaires pour découvrir exactement ce qui circule sur les câbles.