Maîtriser l'analyse de paquets avec Tcpdump : Les fondamentaux

L'un des principaux obstacles à l'étude des protocoles réseau est l'opacité des échanges. La plupart du temps, la complexité technique est masquée par des interfaces utilisateur fluides. Lorsque vous accédez à un serveur, vous ne voyez pas les requêtes ARP ou le processus de "three-way handshake" TCP, à moins d'utiliser des outils spécifiques. Tcpdump est l'outil de référence pour lever ce voile, permettant de capturer, filtrer et inspecter le trafic réseau brut afin de comprendre le fonctionnement réel des communications.

Développé à la fin des années 80, Tcpdump repose sur la bibliothèque libpcap (portée sous Windows sous le nom de winpcap ou npcap). Écrit en C/C++, il reste l'un des outils les plus performants et les plus stables pour l'analyse de trafic sur les systèmes de type Unix.

Configuration de base de la capture

L'exécution de Tcpdump sans argument est possible, mais peu utile en situation réelle. Il est crucial de définir l'interface à écouter et la manière dont les données doivent être traitées.

Sélection de l'interface réseau

L'option -i permet de spécifier l'interface. Pour voir toutes les interfaces disponibles, on utilise généralement ip link show ou ip addr.

# Lister les interfaces
user@system:~$ ip link
1: lo: <LOOPBACK,UP,LOWER_UP> ...
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> ...

# Capturer sur eth0
sudo tcpdump -i eth0

Sauvegarde et lecture de fichiers

Pour une analyse ultérieure (par exemple dans Wireshark), on enregistre le trafic dans un fichier .pcap avec l'option -w. Pour relire ce fichier, on utilise -r.

# Sauvegarder dans un fichier
sudo tcpdump -i eth0 -w traffic_capture.pcap

# Lire le fichier enregistré
tcpdump -r traffic_capture.pcap

Optimisatoin de l'affichage

Par défaut, Tcpdump tente de résoudre les adresses IP en noms de domaine et les numéros de ports en noms de services, ce qui peut ralentir le processus et polluer la sortie. L'option -n désactive la résolution DNS, et -nn désactive également la résolution des ports.

# Capture sans résolution de noms ni de ports
sudo tcpdump -i eth0 -c 10 -nn
Option Description
-i [interface] Définit l'interface réseau (ex: eth0, any).
-c [nombre] Arrête la capture après un nombre précis de paquets.
-v, -vv, -vvv Augmente le niveau de détail des informations affichées.

Précision via les expressions de filtrage

Face au volume massif de données transitant sur une carte réseau, le filtrage est indispensable pour isoler les communications pertinentes.

Filtres par hôte et port

Il est possible de cibler une machine spécifique par son IP ou son nom d'hôte, ainsi que des services via leurs ports.

# Filtrer le trafic d'un hôte spécifique
sudo tcpdump host 192.168.1.50

# Filtrer par source ou destination
sudo tcpdump src host 10.0.0.5
sudo tcpdump dst host 10.0.0.10

# Filtrer le trafic DNS (port 53)
sudo tcpdump port 53

Filtres par protocole

Tcpdump permet de restreindre la capture à des protocoles spécifiques comme icmp, tcp, udp, ou arp.

# Capturer uniquement les requêtes PING (ICMP)
sudo tcpdump icmp

Combinaisons logqiues

Les opérateurs and, or et not permettent de construire des requêtes complexes.

# Capturer le trafic HTTP (80) ou HTTPS (443) pour une IP donnée
sudo tcpdump host 1.1.1.1 and \(port 80 or port 443\)

# Capturer tout sauf le trafic SSH
sudo tcpdump not port 22

Analyse avancée des en-têtes

Pour les besoins d'investigation poussée, Tcpdump permet d'accéder directement aux octets des en-têtes de protocoles via la syntaxe proto[offset:taille].

Opérations binaires et Flags TCP

L'analyse des flags TCP (SYN, ACK, RST, etc.) est cruciale pour diagnostiquer des problèmes de connexion ou détecter des scans de ports. On peut utiliser des alias prédéfinis pour simplifier les filtres.

  • tcpdump "tcp[tcpflags] & tcp-syn != 0" : Capture les paquets ayant au moins le flag SYN activé.
  • tcpdump "tcp[tcpflags] == tcp-rst" : Isole les paquets de réinitialisation de connexion (RST).

Il est également possible de filtrer par taille de paquet avec les primitives less et greater :

# Trouver des paquets anormalement volumineux
sudo tcpdump greater 1000

Personnalisation du format de sortie

La manière dont les données sont présentées à l'écran peut varier selon l'objectif de l'analyse (débogage de flux, lecture de contenu, etc.).

  • -q (Quiet) : Affiche des informations minimales pour une lecture rapide.
  • -e : Inclut les en-têtes de la couche de liaison, affichant ainsi les adresses MAC.
  • -A : Affiche le contenu des paquets en format ASCII. Très utile pour inspecter du trafic Web non chiffré.
  • -X : Affiche les données en hexadécimal et en ASCII simultanément.
# Inspecter le contenu d'une requête HTTP
sudo tcpdump -i eth0 port 80 -A

# Analyse complète avec adresses MAC et contenu Hex/ASCII
sudo tcpdump -i eth0 -e -X

L'utilisation combinée de ces options permet de transformer Tcpdump d'un simple moniteur de trafic en un puissant outil de diagnostic et de sécurité réseau.

Étiquettes: tcpdump libpcap networking Network-Security packet-analysis

Publié le 21 juillet à 10h36