Skip to content
KitploitKITPLOIT
HerramientasBlog
Log in
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
USB Spy — Intercepta y analiza el tráfico de almacenamiento masivo USB a nivel de bloques y archivos, emula dispositivos USB y admite stubs personalizados de Python para investigación de seguridad, análisis forense y pruebas de vulnerabilidad TOCTOU. | Kitploit
Herramientas/GitLabGitLab/christophe.duvernois/usb-spy
Análisis de VulnerabilidadesExplotaciónIngeniería InversaAnálisis ForenseForensia DigitalPruebas de PenetraciónSeguridad de HardwareRed TeamingAnálisis de Firmware
GitLabchristophe.duvernois/usb-spy

USB Spy

Intercepta y analiza el tráfico de almacenamiento masivo USB a nivel de bloques y archivos, emula dispositivos USB y admite stubs personalizados de Python para investigación de seguridad, análisis forense y pruebas de vulnerabilidad TOCTOU.

Ver Repositorio
3296hace 2 mesesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

USB SPY

Logo

License: GPL v3 pipeline

usb-spy es un analizador de tráfico de almacenamiento masivo USB construido alrededor de un microcontrolador con WiFi o Ethernet.

La placa expone una imagen de disco (FAT o cualquier sistema de archivos) como un dispositivo USB de almacenamiento masivo falso para un sistema objetivo, mientras que los datos de almacenamiento reales son proporcionados por un servidor remoto a través de WiFi o Ethernet. Esta configuración permite a usb-spy interceptar y analizar cada acceso a bloques realizado por el objetivo.

Más allá del rastreo a nivel de bloques, usb-spy comprende sistemas de archivos y puede mapear cada bloque accedido de vuelta al archivo y directorio correspondiente, lo que facilita ver inmediatamente qué archivo se está leyendo o escribiendo, en lugar de solo números de sector en bruto.

Además, usb-spy puede emular cualquier dispositivo USB personalizando las propiedades del dispositivo, como el ID de proveedor, ID de producto, número de serie, fabricante y nombre de producto a través de un archivo de configuración JSON. Esto le permite suplantar dispositivos USB específicos para fines de prueba y análisis.

La herramienta es fácilmente extensible mediante stubs de Python escritos por el usuario, lo que le permite implementar lógica personalizada para manejar eventos de lectura/escritura USB y operaciones a nivel de bloques.

Design

Conocimiento del sistema de archivos

Cuando se detecta un sistema de archivos compatible, usb-spy:

  • Analiza los metadatos del sistema de archivos
  • Resuelve las direcciones de bloques a rutas de archivos
  • Muestra nombres de archivos y directorios legibles para cada acceso

Sistemas de archivos actualmente compatibles:

  • FAT32
  • EXT4

Se añadirá soporte para sistemas de archivos adicionales en el futuro.

Si el sistema de archivos no es compatible, usb-spy aún puede utilizarse:

  • Todas las operaciones de lectura/escritura USB se capturan
  • Los accesos se muestran a nivel de bloques en bruto
  • La información de nombres de archivos y directorios no está disponible

Esto garantiza que usb-spy siga siendo útil incluso con sistemas de archivos desconocidos, personalizados o propietarios.

Casos de uso típicos

  • Ingeniería inversa de almacenamiento masivo USB
  • Análisis de comportamiento de firmware y sistemas operativos
  • Comprensión de patrones de acceso a archivos durante el arranque o la ejecución
  • Investigación de seguridad y análisis forense digital
  • Detección y explotación de vulnerabilidades de Time-of-Check Time-of-Use (TOCTOU)

Compilar el firmware de USB-SPY para placas compatibles

SupportedBoard

Las instrucciones de compilación del firmware para cada placa compatible se describen aquí:

  • Placa Raspberry Pi Pico basada en el microcontrolador RP2040
    • Raspberry Pico W
    • W5500-EVB-Pico
    • W6100-EVB-Pico
  • Adafruit Feather M0 (no todas las funciones son compatibles)

Compilar la herramienta de servidor USB-SPY

El código fuente está en el directorio src. Cargará una imagen FAT, la expondrá a través de un puerto TCP y registrará cada acceso realizado a la imagen. Para imprimir información de archivos y directorios, la herramienta se basa en la biblioteca TheSleuthKit.

Para compilar, ejecute el siguiente comando en el directorio raíz

Obtener todos los submódulos

git submodule update --init --recursive

Luego ejecute el comando de configuración de waf.

./waf configure

Si desea compilar sin soporte de integración de Python, configure con:

./waf configure --disable-python

Comprobará y compilará todas las dependencias que necesite, luego para compilar realmente el proyecto ejecute

./waf build

El binario estará en el directorio wbuild

Cuando se compila con --disable-python, las opciones de ejecución --py y --py-args no están disponibles.

Crear una imagen FAT32

Podemos hacerlo fácilmente con el paquete de utilidades mtools

Crear un archivo de 2 MB

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

Poner un sistema de archivos FAT en él (use -F para FAT32, de lo contrario es automático)

mformat -i disk.img ::

Añadir un archivo

mcopy -i disk.img example.txt ::

Listar archivos

mdir -i disk.img ::

Extraer un archivo

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

Ejecutar usb-spy

Ejecute el spy con la imagen recién creada

./usb-spy -v disk.img

Para forzar el modo en bruto y omitir la detección automática del sistema de archivos:

./usb-spy --raw disk.img

Para proxy de acceso directamente a un dispositivo de bloques real:

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

Conecte la placa al puerto USB del objetivo.

Emular un dispositivo USB específico

Para emular un dispositivo USB específico, los parámetros se pueden sobrescribir mediante un archivo de configuración json:

El siguiente archivo json emulará un dispositivo 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
}

Ejecute el spy con este archivo de configuración

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

La salida de dmesg para este dispositivo:

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

Implementar su propio comportamiento

Si desea implementar su propia lógica para cada evento de lectura/escritura, puede hacerlo fácilmente en Python.

Implemente la clase USBImage en Python como esta imagen 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

    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
Descargar herramienta