Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
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é.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
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

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
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
32il y a 1 moisPas encore vérifié

USB SPY

Logo

License: GPL v3 pipeline

usb-spy est un analyseur de trafic de stockage de masse USB construit autour d'un microcontrôleur compatible WiFi ou Ethernet.

La carte expose une image disque (FAT ou tout système de fichiers) en tant que faux périphérique de stockage de masse USB pour 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 bloc effectué par la cible.

Au-delà du simple traçage au niveau bloc, usb-spy comprend les systèmes de fichiers et peut mapper chaque bloc accédé au fichier et au répertoire correspondants, ce qui permet de voir immédiatement quel fichier est lu ou écrit, au lieu de simples numéros de secteur 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 l'identité de 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 la gestion des événements de lecture/écriture USB et des opérations au niveau bloc.

Design

Sensibilité au système 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 des blocs en chemins de fichiers
  • Affiche les 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 bloc brut
  • Les informations sur le nom de fichier et le répertoire 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 de stockage de masse USB
  • Analyse du comportement du firmware et du système d'exploitation
  • Compréhension des modèles d'accès aux fichiers lors du démarrage ou de 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)

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

SupportedBoard

Les instructions de construction 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)

Construire 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 utilise la bibliothèque TheSleuthKit.

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

Récupérez tous les sous-modules

root@kitploit:~
git submodule update --init --recursive

Ensuite, exécutez la commande de configuration waf.

root@kitploit:~
./waf configure

Cela vérifiera et construira toutes les dépendances nécessaires, puis pour vraiment construire le projet, exécutez

root@kitploit:~
./waf build

Le binaire se trouvera dans le répertoire wbuild

Créer une image FAT32

Nous pouvons le faire facilement avec le paquet utilitaire mtools

Créez un fichier de 2 Mo

root@kitploit:~
dd if=/dev/zero of=disk.img bs=1M count=2

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

root@kitploit:~
mformat -i disk.img ::

Ajoutez un fichier

root@kitploit:~
mcopy -i disk.img example.txt ::

Listez les fichiers

root@kitploit:~
mdir -i disk.img ::

Extrayez un fichier

root@kitploit:~
mcopy -i disk.img ::/example.txt extracted.txt

Exécuter usb-spy

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

root@kitploit:~
./usb-spy -v disk.img

Branchez la carte sur le port USB 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 :

root@kitploit:~
{
	"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

root@kitploit:~
./usb-spy -c config/kingston.json disk.img

La sortie dmesg pour ce périphérique :

root@kitploit:~
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 le faire facilement en Python.

Implémentez la classe USBImage en Python comme cette image factice :

root@kitploit:~
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

    def read(self, lba, buffer, size):
        """Read block"""
        print(f"read block={lba} size={size}")
        for i in range(size):
            buffer[i] = (lba + i) % 256  # Simulate reading data
        return size

    def write(self, lba, buffer, size):
        """Write block"""
        print(f"write block={lba} size={size}")
        print(buffer)
        return size

    def flush(self):
        """Flush block"""
        print("flush data")

Et exécutez le spy avec votre module python.

root@kitploit:~
./usb-spy --py python/dummy.py disk.img

Vous pouvez également passer des arguments arbitraires depuis la ligne de commande à votre classe Python. Les arguments sont disponibles dans kwargs.

root@kitploit:~
./usb-spy --py python/dummy.py --py-args arg1=2 --py-args arg2=Hello disk.img

Vous pouvez également partir de l'exemple rawimage qui fournit une implémentation complète (~100 lignes de code) de ce qui est implémenté en natif dans le binaire usb-spy.

Avertissement

Ce projet est fourni "en l'état". Il n'y a aucune garantie d'exactitude, de sécurité ou d'adéquation à un usage particulier.

Utilisez les outils et le firmware à vos propres risques. L'auteur et les contributeurs ne sont pas responsables des dommages, pertes de données ou conséquences juridiques pouvant découler de l'utilisation de ce logiciel ou matériel.

Contribuer

Les contributions sont les bienvenues ! Veuillez suivre ces étapes :

  1. Forkez le dépôt.
  2. Créez une nouvelle branche pour votre fonctionnalité ou correction.
  3. Soumettez une pull request avec une description détaillée.

Licence

License: GPL v3

Ce projet est sous licence GNU General Public License v3.0. Voir le fichier LICENSE pour plus de détails.

Télécharger l’outil