6135 links
  • GuiGui's Show
  • Home
  • Login
  • RSS Feed
  • ATOM Feed
  • Tag cloud
  • Picture wall
  • Daily
Links per page: 20 50 100
 
  • Surveiller l'activité USB sur un système GNU/Linux

    Débit

    usbtop permet de surveiller l'activité des ports USB. Comme iotop permet de visualiser celle des supports de stockage et logtop celle de fichiers (de journaux, souvent). Je l'ai découvert ici.

    Cet outil est empaqueté dans Debian GNU/Linux depuis sa version 10 / Buster.

    Avant de l'utiliser, il faut charger le module noyau « usbmon » : sudo modprobe usbmon. Sinon, on se mange l'erreur « No USB bus can be captured thanks to libpcap. Check your name filter and make sure relevent permissions are set ! ».

    Ne pas oublier de décharger le module après usage (motifs : sécurité et propreté) : sudo rmmod usbmon.


    Contenu

    Pour voir ce qui circule sur un bus USB, on peut utiliser les indispensables tshark et wireshark puisque la libpcap sur laquelle ils reposent permet la capture USB.

    Comme pour usbtop, il faut charger le module noyau « usbmon » au préalable.

    Ensuite, il faut identifier le bus sur lequel est connecté le périphérique USB que l'on veut écouter avec lsusb -t. Il faudra écouter sur l'interface usbmon correspondante. Exemple : bus 2 = interface « usbmon2 ».



    Mais wireshark et tshark m'envoient bouler lorsque je veux écouter sur l'interface en question : « The capture session could not be initiated on interface 'usbmon2' (You don't have permission to capture on that device). Please check to make sure you have sufficient permissions ». Pourtant, mon utilisateur est bien dans le groupe wireshark depuis fort longtemps.

    Solution : sudo setfacl -m u:$USER:r /dev/usbmon*. Évidemment, il faudra refaire cette manip' à chaque chargement du module usbmon (la modif' n'est pas permanente, et, vu ce qu'elle permet, je pense que c'est mieux ainsi).



    Que ce soit avec tshark ou avec wireshark, Il n'est pas possible d'utiliser des filtres de capture, mais uniquement des filtres d'affichage. Liste des filtres d'affichage applicables à une capture USB.

    Exemple : si l'on veut afficher le trafic d'un seul périphérique sur un bus qui en raccorde plusieurs, disons le périphérique qui a l'identifiant 23 sur le bus 2 (d'après lsusb -t), le filtre est « usb.addr == "2.23.1" ». Attention : ne surtout pas oublier les guillemets autour de l'adresse sinon aucun paquet sera affiché !

    Attention : certains périphériques, comme les périphériques de stockage, utilisent plusieurs endpoints. Ainsi, si un disque dur externe USB a l'identifiant 23 sur le bus 2, utiliser un filtre « usb.addr == "2.23.1" » masquera une partie des échanges. Pour tout voir, il faut utiliser le filtre « usb.device_address == 23 ». Même source.

    Je constate qu'il vaut mieux utiliser le filtre « usb.device_address » par rapport au filtre « usb.addr ».



    Mode d'emploi tshark :

    • Afficher la liste des interfaces et mémoriser l'identifiant de l'interface usbmonX qui correspond au bus sur lequel est connecté le périphérique : tshark -D ;

    • Capture : tshark -i <identifiant_mémorisé_à_l'étape_précédente> ;

    • Appliquer un filtre d'affichage : tshark -i <identifiant_mémorisé_à_l'étape_précédente> -Y 'usb.device_address == 23'.



    Lors de l'utilisation d'une souris, on voit des messages « URB_INTERRUPT » à chaque mouvement / clic. Lors d'une lecture de fichiers sur un périphérique de stockage, on voit des « SCSI: Read(16) LUN ». Et des « SCSI: Write(16) LUN » lors d'une écriture. Et sur une clé USB (uniquement), on voit des « SCSI: Test Unit Ready LUN » toutes les deux secondes d'inactivité. Amusant. :)

    October 9, 2022 at 7:37:37 PM UTC - permalink - http://shaarli.guiguishow.info/?bg1NAg
Links per page: 20 50 100
 
Mentions légales identiques à celles de mon blog | CC BY-SA 3.0

Shaarli - The personal, minimalist, super fast, database-free, bookmarking service by the Shaarli community