Table des matières
- Introduction
- Environnement utilisé
- Démarrer une capture réseau avec Wireshark
- Générer et filtrer du trafic ICMP
- Analyser un paquet ICMP
- Frame
- Ethernet II
- Internet Protocol Version 4
- Internet Control Message Protocol
- Filtrer les paquets avec une adresse IP
- Filtrer et analyser une requête DNS
- Filtrer le trafic TCP
- Filtrer le trafic UDP
- Filtrer avec un numéro de port
- Combiner plusieurs filtres
- Suivre une conversation TCP
- Effacer un filtre
- Quelques filtres Wireshark à retenir
- Conclusion
Introduction
Lorsqu’une capture réseau est réalisée avec Wireshark, de nombreux paquets peuvent apparaître en seulement quelques secondes. Un ordinateur communique en permanence avec différents équipements et services utilisant plusieurs protocoles réseau.
Analyser manuellement l’ensemble des paquets capturés peut donc rapidement devenir difficile.
Wireshark dispose d’un système de filtres d’affichage permettant d’isoler uniquement les paquets qui nous intéressent. Il est par exemple possible d’afficher uniquement :
- les paquets ICMP ;
- les requêtes DNS ;
- les communications TCP ou UDP ;
- les communications provenant d’une adresse IP particulière ;
- les communications utilisant un port précis.
Dans ce tutoriel, nous allons apprendre à utiliser plusieurs filtres Wireshark et à examiner les informations contenues dans les paquets capturés.
Environnement utilisé
Pour réaliser les différentes manipulations, nous allons utiliser deux machines virtuelles connectées au même réseau.
| Machine | Adresse IP | Rôle |
|---|---|---|
| Ubuntu Desktop | 192.168.50.20 | Capture et analyse avec Wireshark |
| Debian Desktop | 192.168.50.30 | Génération du trafic réseau |
Ubuntu sera donc notre machine d’analyse tandis que Debian permettra de générer différents types de trafic.
La communication peut être représentée de cette manière :
Avant de commencer la capture, nous pouvons vérifier que les deux machines communiquent correctement.
Depuis Debian, ouvrez un terminal puis exécutez :
ping 192.168.50.20
Si Ubuntu est accessible, Debian doit recevoir des réponses similaires à celles-ci :
Utilisez Ctrl + C pour arrêter la commande.
Démarrer une capture réseau avec Wireshark
Sur Ubuntu, ouvrez Wireshark.
L’écran d’accueil affiche les différentes interfaces réseau disponibles sur la machine.
Sélectionnez l’interface utilisée par Ubuntu pour communiquer avec le réseau 192.168.50.0/24.
Selon la configuration de votre machine, l’interface peut par exemple porter un nom comme ens33.
Double-cliquez sur l’interface pour commencer la capture.
Wireshark commence immédiatement à afficher les paquets transitant par cette interface.
Même sans effectuer d’action particulière, plusieurs communications peuvent déjà apparaître. Le système et les applications utilisent régulièrement le réseau en arrière-plan.
C’est précisément pour cette raison que les filtres sont particulièrement utiles.
Générer et filtrer du trafic ICMP
Nous allons commencer avec un protocole simple à identifier : ICMP.
ICMP est notamment utilisé par la commande ping pour vérifier si une machine est accessible sur le réseau.
Depuis Debian, exécutez :
ping 192.168.50.20
Laissez la commande fonctionner pendant quelques secondes.
Sur Ubuntu, Wireshark doit capturer les paquets générés par cette communication.
Dans la barre de filtre située en haut de Wireshark, saisissez :
icmp
Validez avec la touche Entrée.
Wireshark affiche maintenant uniquement les paquets ICMP présents dans la capture.
Vous devriez notamment observer des lignes contenant :
Echo (ping) request
Echo (ping) reply
Les requêtes correspondent aux paquets envoyés par Debian vers Ubuntu.
Les réponses correspondent aux paquets retournés par Ubuntu vers Debian.
L’échange peut être représenté ainsi :
Analyser un paquet ICMP
Cliquez sur l’un des paquets Echo (ping) request.
La partie inférieure de Wireshark affiche les différentes informations contenues dans le paquet.
Vous devriez notamment retrouver plusieurs sections :
Frame
Ethernet II
Internet Protocol Version 4
Internet Control Message Protocol
Ces sections correspondent aux différentes couches utilisées pour transporter les données sur le réseau.
Frame
La section Frame contient des informations générales concernant la trame capturée.
Wireshark indique notamment :
- la taille de la trame ;
- l’heure de capture ;
- l’interface utilisée ;
- le numéro de la trame dans la capture.
Ethernet II
Développez ensuite :
Ethernet II
Cette partie contient notamment les adresses MAC utilisées pour la communication sur le réseau local.
Vous pouvez y retrouver :
- l’adresse MAC source ;
- l’adresse MAC destination.
Internet Protocol Version 4
Développez :
Internet Protocol Version 4
Wireshark affiche les informations liées au protocole IPv4.
Dans notre exemple, pour une requête envoyée par Debian vers Ubuntu, nous retrouvons notamment :
Source Address: 192.168.50.30
Destination Address: 192.168.50.20
Debian est donc la source du paquet tandis qu’Ubuntu est sa destination.
Internet Control Message Protocol
Développez enfin :
Internet Control Message Protocol
Wireshark indique qu’il s’agit d’une requête ICMP :
Type: 8 (Echo (ping) request)
Si vous sélectionnez maintenant la réponse envoyée par Ubuntu, les adresses IP sont inversées.
La source devient 192.168.50.20 et la destination 192.168.50.30.
Le type ICMP devient également :
Type: 0 (Echo (ping) reply)
Wireshark permet ainsi d’observer précisément les échanges qui se produisent lors d’un simple ping.
Filtrer les paquets avec une adresse IP
Il est également possible d’isoler les communications concernant une machine particulière.
Pour afficher tous les paquets dans lesquels Debian apparaît comme source ou destination, utilisez :
ip.addr == 192.168.50.30
Ce filtre permet d’afficher toutes les communications concernant l’adresse IP de Debian.
Nous pouvons être encore plus précis.
Pour afficher uniquement les paquets envoyés depuis Debian, utilisez :
ip.src == 192.168.50.30
src signifie ici source.
Pour afficher uniquement les paquets envoyés vers Debian, utilisez :
ip.dst == 192.168.50.30
dst signifie ici destination.
Ces filtres permettent de distinguer facilement les communications émises et reçues par une machine.
Filtrer et analyser une requête DNS
Nous allons maintenant observer une communication DNS.
Le Domain Name System, ou DNS, permet notamment de traduire un nom de domaine en adresse IP.
Sur Debian, arrêtez éventuellement le ping avec :
Ctrl + C
Exécutez ensuite :
nslookup sysnettuto.fr
Debian interroge alors son serveur DNS afin d'obtenir l'adresse IP associée au nom de domaine.
Dans Wireshark, saisissez le filtre suivant :
dns
Wireshark affiche uniquement les communications DNS présentes dans la capture.
Vous devriez pouvoir identifier une requête contenant le nom sysnettuto.fr.
Sélectionnez cette requête.
Dans les détails du paquet, développez :
Domain Name System (query)
Vous pourrez notamment observer :
- le nom de domaine demandé ;
- le type de requête DNS ;
- l'adresse IP du serveur DNS interrogé.
Une réponse DNS doit également apparaître dans la capture.
En sélectionnant cette réponse, Wireshark permet d'observer les informations retournées par le serveur DNS, notamment les enregistrements correspondant au domaine lorsque ceux-ci sont présents dans la réponse.
Nous pouvons donc visualiser le principe suivant :
Filtrer le trafic TCP
Wireshark permet également d’isoler les communications utilisant le protocole TCP.
Dans la barre de filtre, saisissez :
tcp
Tous les paquets TCP présents dans la capture sont maintenant affichés.
En sélectionnant un paquet TCP, plusieurs informations importantes peuvent être observées :
- l’adresse IP source ;
- l’adresse IP destination ;
- le port source ;
- le port destination ;
- les numéros de séquence ;
- les différents indicateurs TCP.
Dans les détails du paquet, développez :
Transmission Control Protocol
Vous pouvez notamment retrouver des informations similaires à celles présentées ci-dessous :
Les ports permettent d’identifier les applications ou services impliqués dans la communication.
Filtrer le trafic UDP
Le même principe peut être utilisé avec UDP.
Dans Wireshark, saisissez :
udp
Seuls les paquets utilisant UDP sont maintenant affichés.
En sélectionnant un paquet, développez :
User Datagram Protocol
Vous pourrez notamment observer :
Contrairement à TCP, UDP fonctionne sans établir préalablement une connexion entre les deux machines.
Certains protocoles réseau peuvent utiliser UDP, notamment DNS selon le type et la taille de l'échange.
Filtrer avec un numéro de port
Dans le tutoriel consacré aux ports réseau TCP et UDP, nous avons vu qu’un numéro de port permet notamment d’identifier le service ou l’application concerné par une communication.
Wireshark permet d’utiliser directement ces numéros dans les filtres.
Pour rechercher les communications TCP utilisant le port 443, utilisez :
tcp.port == 443
Ce filtre recherche le port 443 aussi bien comme port source que comme port destination.
Pour rechercher uniquement un port de destination, il est possible d’utiliser :
tcp.dstport == 443
Pour rechercher uniquement un port source :
tcp.srcport == 443
Le même principe existe avec UDP.
Par exemple :
udp.port == 53
permet de rechercher les communications UDP utilisant le port 53, traditionnellement associé au DNS.
Combiner plusieurs filtres
Les filtres deviennent particulièrement intéressants lorsqu’ils sont combinés.
Supposons que nous souhaitions afficher uniquement les paquets ICMP concernant Debian.
Nous pouvons utiliser :
ip.addr == 192.168.50.30 && icmp
L’opérateur && signifie ET.
Les deux conditions doivent donc être respectées.
Le paquet doit concerner l’adresse 192.168.50.30 et utiliser ICMP.
Nous pouvons également rechercher les communications DNS concernant Debian :
ip.addr == 192.168.50.30 && dns
Il est également possible d’utiliser l’opérateur || qui signifie OU.
Par exemple :
icmp || dns
affiche les paquets ICMP ainsi que les paquets DNS.
Ces opérateurs permettent de construire progressivement des filtres plus précis.
Suivre une conversation TCP
Lorsqu’une communication TCP contient de nombreux paquets, analyser chaque paquet individuellement peut devenir difficile.
Wireshark dispose d’une fonction permettant de regrouper les données appartenant à une même conversation TCP.
Sélectionnez un paquet TCP dans la capture.
Effectuez un clic droit sur le paquet puis sélectionnez Suivre, puis Flux TCP :
Wireshark ouvre alors une nouvelle fenêtre contenant les données associées à cette conversation TCP.
Cette fonctionnalité est particulièrement pratique pour comprendre les échanges entre un client et un serveur.
Cependant, le contenu d’une communication n’est pas nécessairement lisible.
Lorsqu’un protocole de chiffrement comme TLS est utilisé, les données applicatives sont chiffrées. Wireshark peut toujours afficher de nombreuses informations concernant la communication, mais le contenu échangé n’apparaît pas directement en clair.
Effacer un filtre
Lorsqu’un filtre est actif, Wireshark continue d’utiliser la capture complète. Le filtre modifie uniquement les paquets affichés à l’écran.
Pour afficher de nouveau tous les paquets, effacez simplement le contenu de la barre de filtre puis appuyez sur Entrée.
Vous pouvez également utiliser le bouton permettant d’effacer le filtre situé à proximité de la barre de filtre.
Les paquets qui étaient masqués réapparaissent alors.
Quelques filtres Wireshark à retenir
Voici les principaux filtres utilisés dans ce tutoriel :
| Filtre | Utilité |
|---|---|
icmp |
Afficher les paquets ICMP |
dns |
Afficher les communications DNS |
tcp |
Afficher les paquets TCP |
udp |
Afficher les paquets UDP |
ip.addr == 192.168.50.30 |
Afficher le trafic concernant Debian |
ip.src == 192.168.50.30 |
Afficher les paquets provenant de Debian |
ip.dst == 192.168.50.30 |
Afficher les paquets à destination de Debian |
tcp.port == 443 |
Afficher le trafic TCP utilisant le port 443 |
udp.port == 53 |
Afficher le trafic UDP utilisant le port 53 |
ip.addr == 192.168.50.30 && icmp |
Afficher uniquement le trafic ICMP concernant Debian |
ip.addr == 192.168.50.30 && dns |
Afficher uniquement le trafic DNS concernant Debian |
icmp || dns |
Afficher le trafic ICMP ou DNS |
Il existe de nombreux autres filtres Wireshark. Il est également possible de construire des expressions beaucoup plus précises en combinant plusieurs critères.
Conclusion
Wireshark permet non seulement de capturer les communications réseau, mais également d’isoler et d’analyser précisément les paquets qui nous intéressent.
Dans ce tutoriel, nous avons utilisé Debian pour générer différents types de trafic et Ubuntu pour les capturer et les analyser avec Wireshark.
Nous avons appris à filtrer les paquets selon leur protocole avec ICMP, DNS, TCP et UDP. Nous avons également utilisé les adresses IP et les numéros de ports pour rechercher des communications précises.
En examinant le contenu des paquets, nous avons pu retrouver les adresses MAC, les adresses IP, les protocoles utilisés ainsi que différentes informations propres à ICMP, TCP, UDP et DNS.
Enfin, la combinaison de plusieurs filtres et la fonction Follow TCP Stream permettent d’aller plus loin dans l’analyse d’une communication réseau.
Ces fonctionnalités constituent une base essentielle pour utiliser Wireshark lors du diagnostic et de l’analyse d’un réseau.
Commentaires
Laisser un commentaire
Soyez le premier à commenter cet article !