Wireshark est un outil incontournable pour connaître les paquets qui transitent sur le réseau. Mais on se retrouve vite bloqué à cause d’un problème de droits.

En effet, en démarrant wireshark avec un compte utilisateur non-root, l’interface graphique s’affiche, mais il est impossible de capturer les trames : aucune interface réseau n’est disponible.

Devant ce problème, que fait l’utilisateur pressé ? Il démarre wireshark en root, bien sûr (c’est ce que je faisais sous Ubuntu) ! Eh bien pas de chance :

$ sudo wireshark
No protocol specified

(wireshark:27210): Gtk-WARNING **: cannot open display: :0

Déjà, c’est bien fait pour lui : on n’essaie pas de démarrer une interface graphique en root !

Mais comment faire alors ? En non-root on ne peut pas capturer, en root on ne peut pas démarrer…

Alors on lit la doc, qui propose deux solutions :

less /usr/share/doc/wireshark/README.Debian

Une troisième solution, donnée en commentaire, me semble encore meilleure :

sudo tcpdump -pni eth0 -s0 -U -w - | wireshark -k -i -

Utiliser dumpcap pour capturer

Avec cette méthode, il faut d’abord capturer les paquets réseau et les sauver dans un fichier, grâce à dumpcat (en root), puis ouvrir ce fichier dans wireshark (non-root).

Pour démarrer la capture de l’interface eth0 dans le fichier /tmp/mycapture :

sudo dumpcap -i eth0 -w /tmp/mycapture

Pour connaître la liste des interfaces réseau capturables :

$ sudo dumpcap -D 
1. eth0
2. wlan0
3. nflog (Linux netfilter log (NFLOG) interface)
4. any (Pseudo-device that captures on all interfaces)
5. lo

Ctrl+C arrête la capture.

Le fichier généré n’est lisible que par root. Avant de l’ouvrir dans Wireshark, il faut donc changer ses droits :

sudo chmod +r /tmp/mycapture

C’est la méthode configurée par défaut sous Debian.

Autoriser les utilisateurs non-root

Si on souhaite à la fois capturer et analyser à partir de Wireshark (et permettre les captures « en live »), sans passer par dumpcap en ligne de commande, il faut autoriser les utilisateur non-root à capturer des paquets.

Pour cela :

sudo dpkg-reconfigure wireshark-common
 ┌─────────────────────┤ Configuration de wireshark-common ├──────────────────────┐  
 │                                                                                │  
 │ Dumpcap peut être installé afin d'autoriser les membres du groupe              │  
 │ « wireshark » à capturer des paquets. Cette méthode de capture est préférable  │  
 │ à l'exécution de Wireshark ou Tshark avec les droits du superutilisateur, car  │  
 │ elle permet d'exécuter moins de code avec des droits importants.               │  
 │                                                                                │  
 │ Pour plus d'informations, veuillez consulter                                   │  
 │ /usr/share/doc/wireshark-common/README.Debian.                                 │  
 │                                                                                │  
 │ Cette fonctionnalité constitue un risque pour la sécurité, c'est pourquoi      │  
 │ elle est désactivée par défaut. En cas de doute, il est suggéré de la laisser  │  
 │ désactivée.                                                                    │  
 │                                                                                │  
 │ Autoriser les utilisateurs non privilégiés à capturer des paquets ?            │  
 │                                                                                │  
 │                      <Oui>                         <Non>                       │  
 │                                                                                │  
 └────────────────────────────────────────────────────────────────────────────────┘  

Après avoir répondu Oui, tous les utilisateurs du groupe wireshark (aucun, par défaut) seront autorisés à capturer les paquets.

Remarque : un programme non-root sera donc en théorie capable de savoir tout ce qui passe sur le réseau (déjà qu’il est capable de connaître tout ce qui est tapé au clavier).

Il ne reste donc plus qu’à ajouter son compte utilisateur au groupe wireshark :

sudo addgroup $USER wireshark

Cette modification ne sera prise en compte qu’après une reconnexion du compte utilisateur (il faut donc fermer la session et en démarrer une nouvelle).

Avec cette méthode, seul le processus de capture aura les droits root, l’interface graphique se contentant de droits non-root (merci la séparation des privilèges).