Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
USB Spy — Fängt USB-Massenspeicherverkehr auf Block- und Dateiebene ab und analysiert ihn, emuliert USB-Geräte und unterstützt benutzerdefinierte Python-Stubs für Sicherheitsforschung, Forensik und TOCTOU-Schwachstellentests. | Kitploit
Tools/GitLabGitLab/christophe.duvernois/usb-spy
SchwachstellenanalyseExploitationReverse EngineeringForensikDigitale ForensikPenetrationstestsHardware-SicherheitRed TeamingFirmware-Analyse
GitLabchristophe.duvernois/usb-spy

USB Spy

Fängt USB-Massenspeicherverkehr auf Block- und Dateiebene ab und analysiert ihn, emuliert USB-Geräte und unterstützt benutzerdefinierte Python-Stubs für Sicherheitsforschung, Forensik und TOCTOU-Schwachstellentests.

323vor 1 MonatNoch nicht geprüft
Repository anzeigen

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

USB SPY

Logo

License: GPL v3 pipeline

usb-spy ist ein USB-Massenspeicher-Verkehrsanalysator, der auf einem Mikrocontroller mit WiFi- oder Ethernet-Anbindung basiert.

Das Board stellt einem Zielsystem ein Festplatten-Image (FAT oder ein beliebiges Dateisystem) als gefälschtes USB-Massenspeichergerät zur Verfügung, während die tatsächlichen Speicherdaten von einem entfernten Server über WiFi oder Ethernet bereitgestellt werden. Dieses Setup ermöglicht es usb-spy, jeden vom Zielsystem durchgeführten Blockzugriff abzufangen und zu analysieren.

Über die reine Block-Level-Verfolgung hinaus versteht usb-spy Dateisysteme und kann jeden zugegriffenen Block der entsprechenden Datei und dem entsprechenden Verzeichnis zuordnen. So ist sofort ersichtlich, welche Datei gerade gelesen oder geschrieben wird, anstatt nur rohe Sektornummern zu sehen.

Darüber hinaus kann usb-spy jedes USB-Gerät emulieren, indem Geräteeigenschaften wie Vendor-ID, Produkt-ID, Seriennummer, Hersteller und Produktname über eine JSON-Konfigurationsdatei angepasst werden. Dies ermöglicht die Nachbildung bestimmter USB-Geräte für Test- und Analysezwecke.

Das Tool lässt sich leicht durch benutzerdefinierte Python-Stubs erweitern, sodass Sie eigene Logik für die Behandlung von USB-Lese-/Schreibereignissen und Block-Level-Operationen implementieren können.

Design

Dateisystem-Erkennung

Wenn ein unterstütztes Dateisystem erkannt wird, führt usb-spy Folgendes aus:

  • Analysiert Dateisystem-Metadaten
  • Löst Blockadressen in Dateipfade auf
  • Zeigt für jeden Zugriff menschenlesbare Dateinamen und Verzeichnisse an

Derzeit unterstützte Dateisysteme:

  • FAT32
  • EXT4

Die Unterstützung für weitere Dateisysteme wird in Zukunft hinzugefügt.

Wenn das Dateisystem nicht unterstützt wird, kann usb-spy weiterhin verwendet werden:

  • Alle USB-Lese-/Schreiboperationen werden erfasst
  • Zugriffe werden auf Roh-Block-Ebene angezeigt
  • Dateinamen- und Verzeichnisinformationen sind nicht verfügbar

Dadurch bleibt usb-spy auch bei unbekannten, benutzerdefinierten oder proprietären Dateisystemen nützlich.

Typische Anwendungsfälle

  • Reverse Engineering von USB-Massenspeichern
  • Analyse von Firmware- und Betriebssystemverhalten
  • Verständnis von Dateizugriffsmustern während des Bootvorgangs oder zur Laufzeit
  • Sicherheitsforschung und digitale Forensik
  • Erkennung und Ausnutzung von Time-of-Check-Time-of-Use-Schwachstellen (TOCTOU)

USB-SPY-Firmware für unterstützte Boards erstellen

SupportedBoard

Build-Anweisungen für die Firmware jedes unterstützten Boards sind hier beschrieben:

  • Raspberry Pi Pico Board basierend auf dem RP2040-Mikrocontroller
    • Raspberry Pico W
    • W5500-EVB-Pico
    • W6100-EVB-Pico
  • Adafruit Feather M0 (nicht alle Funktionen werden unterstützt)

USB-SPY-Server-Tool erstellen

Der Quellcode befindet sich im Verzeichnis src. Er lädt ein FAT-Image, stellt es über einen TCP-Port bereit und protokolliert jeden Zugriff auf das Image. Um Datei- und Verzeichnisinformationen auszugeben, verwendet das Tool die TheSleuthKit-Bibliothek.

Führen Sie zum Erstellen den folgenden Befehl im Stammverzeichnis aus

Alle Submodule abrufen

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

Dann den waf-Konfigurationsbefehl ausführen.

root@kitploit:~
./waf configure

Wenn Sie ohne Python-Embedding-Unterstützung bauen möchten, konfigurieren Sie mit:

root@kitploit:~
./waf configure --disable-python

Es prüft und erstellt alle benötigten Abhängigkeiten. Um das Projekt dann tatsächlich zu bauen, führen Sie Folgendes aus:

root@kitploit:~
./waf build

Die Binärdatei befindet sich im Verzeichnis wbuild

Bei einem Build mit --disable-python stehen die Laufzeitoptionen --py und --py-args nicht zur Verfügung.

FAT32-Image erstellen

Dies lässt sich einfach mit dem mtools-Dienstprogrammpaket bewerkstelligen.

Eine 2-MB-Datei erstellen

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

Ein FAT-Dateisystem darauf anlegen (mit -F für FAT32, ansonsten automatisch)

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

Eine Datei hinzufügen

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

Dateien auflisten

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

Eine Datei extrahieren

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

usb-spy ausführen

Führen Sie den Spy mit dem neu erstellten Image aus

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

Um den Rohmodus zu erzwingen und die Dateisystem-Autoerkennung zu überspringen:

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

Um Zugriffe direkt an ein echtes Blockgerät weiterzuleiten:

root@kitploit:~
./usb-spy --proxy /dev/sda

Stecken Sie das Board in den USB-Port des Zielsystems.

Ein bestimmtes USB-Gerät emulieren

Um ein bestimmtes USB-Gerät zu emulieren, können Parameter über eine JSON-Konfigurationsdatei überschrieben werden:

Die folgende JSON-Datei emuliert ein Kingston-DataTraveler-USB-Gerät:

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

Führen Sie den Spy mit dieser Konfigurationsdatei aus

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

Die dmesg-Ausgabe für dieses Gerät:

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

Eigenes Verhalten implementieren

Wenn Sie Ihre eigene Logik für jedes Lese-/Schreibereignis implementieren möchten, können Sie dies einfach in Python tun.

Implementieren Sie die USBImage-Klasse in Python wie dieses dummy-Image:

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")

Und führen Sie den Spy mit Ihrem Python-Modul aus.

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

Sie können auch beliebige Argumente von der Befehlszeile an Ihre Python-Klasse übergeben. Die Argumente sind in den kwargs verfügbar.

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

Sie können auch mit dem rawimage-Beispiel beginnen, das eine vollständige Implementierung (~100 Zeilen Code) dessen bietet, was nativ in der usb-spy-Binärdatei implementiert ist.

Haftungsausschluss

Dieses Projekt wird "wie besehen" bereitgestellt. Es gibt keine Garantie für Richtigkeit, Sicherheit oder Eignung für einen bestimmten Zweck.

Die Verwendung der Tools und Firmware erfolgt auf eigenes Risiko. Der Autor und die Mitwirkenden sind nicht verantwortlich für Schäden, Datenverluste oder rechtliche Konsequenzen, die aus der Verwendung dieser Software oder Hardware entstehen können.

Mitwirken

Beiträge sind willkommen! Bitte folgen Sie diesen Schritten:

  1. Forken Sie das Repository.
  2. Erstellen Sie einen neuen Branch für Ihr Feature oder Ihren Bugfix.
  3. Reichen Sie einen Pull-Request mit einer detaillierten Beschreibung ein.

Lizenz

License: GPL v3

Dieses Projekt ist unter der GNU General Public License v3.0 lizenziert. Siehe die Datei LICENSE für Details.

Tool herunterladen