Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
USB Spy — Intercepte et analyse le trafic USB Mass Storage au niveau bloc et fichier, émule des périphériques USB, et prend en charge des stubs Python personnalisés pour la recherche en sécurité, la forensique et les tests de vulnérabilité TOCTOU. | Kitploit
Outils/GitLabGitLab/christophe.duvernois/usb-spy
Analyse des VulnérabilitésExploitationRétro-ingénierieAnalyse ForensiqueCriminalistique NumériqueTests d'IntrusionSécurité MatérielleRed TeamingAnalyse de Micrologiciel
GitLabchristophe.duvernois/usb-spy

USB Spy

Intercepte et analyse le trafic USB Mass Storage au niveau bloc et fichier, émule des périphériques USB, et prend en charge des stubs Python personnalisés pour la recherche en sécurité, la forensique et les tests de vulnérabilité TOCTOU.

Voir le dépôt
32115il y a 3 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

USB SPY

Logo

License: GPL v3 pipeline

usb-spy est un analyseur de trafic USB Mass Storage conçu autour d'un microcontrôleur compatible WiFi ou Ethernet.

La carte expose une image disque (FAT ou tout autre système de fichiers) comme un faux périphérique USB Mass Storage à un système cible, tandis que les données de stockage réelles sont fournies par un serveur distant via WiFi ou Ethernet. Cette configuration permet à usb-spy d'intercepter et d'analyser chaque accès aux blocs effectué par la cible.

Au-delà du traçage brut au niveau des blocs, usb-spy comprend les systèmes de fichiers et peut mapper chaque bloc accédé au fichier et répertoire correspondant, ce qui permet de voir immédiatement quel fichier est lu ou écrit, au lieu de simples numéros de secteurs bruts.

De plus, usb-spy peut émuler n'importe quel périphérique USB en personnalisant les propriétés du périphérique telles que l'identifiant du fournisseur, l'identifiant du produit, le numéro de série, le fabricant et le nom du produit via un fichier de configuration JSON. Cela vous permet d'usurper des périphériques USB spécifiques à des fins de test et d'analyse.

L'outil est facilement extensible grâce à des stubs Python écrits par l'utilisateur, vous permettant d'implémenter une logique personnalisée pour gérer les événements de lecture/écriture USB et les opérations au niveau des blocs.

Design

Connaissance des systèmes de fichiers

Lorsqu'un système de fichiers pris en charge est détecté, usb-spy :

  • Analyse les métadonnées du système de fichiers
  • Résout les adresses de blocs en chemins de fichiers
  • Affiche des noms de fichiers et répertoires lisibles pour chaque accès

Systèmes de fichiers actuellement pris en charge :

  • FAT32
  • EXT4

La prise en charge de systèmes de fichiers supplémentaires sera ajoutée à l'avenir.

Si le système de fichiers n'est pas pris en charge, usb-spy peut toujours être utilisé :

  • Toutes les opérations de lecture/écriture USB sont capturées
  • Les accès sont affichés au niveau des blocs bruts
  • Les informations sur les noms de fichiers et répertoires ne sont pas disponibles

Cela garantit qu'usb-spy reste utile même avec des systèmes de fichiers inconnus, personnalisés ou propriétaires.

Cas d'utilisation typiques

  • Rétro-ingénierie USB Mass Storage
  • Analyse du comportement du firmware et du système d'exploitation
  • Compréhension des modèles d'accès aux fichiers pendant le démarrage ou l'exécution
  • Recherche en sécurité et criminalistique numérique
  • Détection et exploitation des vulnérabilités Time-of-Check Time-of-Use (TOCTOU)

Compiler le firmware USB-SPY pour les cartes prises en charge

SupportedBoard

Les instructions de compilation du firmware pour chaque carte prise en charge sont décrites ici :

  • Carte Raspberry Pi Pico basée sur le microcontrôleur RP2040
    • Raspberry Pico W
    • W5500-EVB-Pico
    • W6100-EVB-Pico
  • Adafruit Feather M0 (toutes les fonctionnalités ne sont pas prises en charge)

Compiler l'outil serveur USB-SPY

Le code source se trouve dans le répertoire src. Il charge une image FAT, l'expose via un port TCP et journalise chaque accès effectué à l'image. Pour afficher les informations sur les fichiers et répertoires, l'outil s'appuie sur la bibliothèque TheSleuthKit.

Pour compiler, exécutez la commande suivante dans le répertoire racine

Récupérez tous les sous-modules

git submodule update --init --recursive

Puis exécutez la commande de configuration waf.

./waf configure

Si vous souhaitez compiler sans la prise en charge de l'intégration Python, configurez avec :

./waf configure --disable-python

Cela vérifiera et compilera toutes les dépendances nécessaires, puis pour compiler réellement le projet, exécutez

./waf build

Le binaire se trouvera dans le répertoire wbuild

Lorsqu'il est compilé avec --disable-python, les options d'exécution --py et --py-args ne sont pas disponibles.

Créer une image FAT32

Nous pouvons facilement le faire avec le paquet utilitaire mtools

Créez un fichier de 2 Mo

dd if=/dev/zero of=disk.img bs=1M count=2

Placez un système de fichiers FAT dessus (utilisez -F pour FAT32, sinon c'est automatique)

mformat -i disk.img ::

Ajoutez un fichier

mcopy -i disk.img example.txt ::

Listez les fichiers

mdir -i disk.img ::

Extrayez un fichier

mcopy -i disk.img ::/example.txt extracted.txt

Exécuter usb-spy

Exécutez le spy avec l'image nouvellement créée

./usb-spy -v disk.img

Pour forcer le mode brut et ignorer la détection automatique du système de fichiers :

./usb-spy --raw disk.img

Pour rediriger l'accès directement vers un vrai périphérique bloc :

./usb-spy --proxy /dev/sda

Branchez la carte sur le port USB de la cible.

Émuler un périphérique USB spécifique

Pour émuler un périphérique USB spécifique, les paramètres peuvent être remplacés via un fichier de configuration json :

Le fichier json suivant émule un périphérique USB Kingston DataTraveler :

{
	"vendor_id": 2385,
	"product_id": 5734,
	"bcd_device": 272,
	"product_rev": "3.0",
	"manufacturer": "Kingston",
	"product_name": "DataTraveler",
	"serial": "509C4BBFACCDE742880C026B",
	"language": 1033
}

Exécutez le spy avec ce fichier de configuration

./usb-spy -c config/kingston.json disk.img

La sortie dmesg pour ce périphérique :

usb 1-8: New USB device found, idVendor=0951, idProduct=1666, bcdDevice= 1.10
usb 1-8: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 1-8: Product: DataTraveler
usb 1-8: Manufacturer: Kingston
usb 1-8: SerialNumber: 509C4BBFACCDE742880C026B
usb-storage 1-8:1.0: USB Mass Storage device detected
scsi host6: usb-storage 1-8:1.0
scsi 6:0:0:0: Direct-Access     Kingston DataTraveler     3.0  PQ: 0 ANSI: 2

Implémenter votre propre comportement

Si vous souhaitez implémenter votre propre logique pour chaque événement de lecture/écriture, vous pouvez facilement le faire en python.

Implémentez la classe USBImage en python comme cette image dummy :

class USBImage:
    def __init__(self, *args, **kwargs):
        """
        Initialize the USBImage.
        :param args: should contain:
            - filename: The name of the file to manage.
        :param kwargs: Arbitrary arguments passed from the c++ command line including:
            readOnly: Whether the interface is read-only.
            verbose: Whether to enable verbose logging.
            block: Whether to enable block mode.
        """
        pass

    def getBlockNumber(self):
        """Get block number"""
        return 100

    def getBlockSize(self):
        """Get block size"""
        return 512
Télécharger l’outil