Skip to content
KitploitKITPLOIT
HerramientasBlog
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.

··Feeds·Contacto·Privacidad·© 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
323hace 1 mesAú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

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

Luego ejecute el comando de configuración de waf.

root@kitploit:~
./waf configure

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

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

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

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

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

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

Añadir un archivo

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

Listar archivos

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

Extraer un archivo

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

Ejecutar usb-spy

Ejecute el spy con la imagen recién creada

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

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

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

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

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

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

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

La salida de dmesg para este dispositivo:

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

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:

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

Y ejecute el spy con su módulo de Python.

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

También puede pasar argumentos arbitrarios desde la línea de comandos a su clase de Python. Los argumentos están disponibles en kwargs.

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

También puede comenzar desde el ejemplo rawimage que proporciona una implementación completa (~100 líneas de código) de lo que está implementado de forma nativa en el binario usb-spy.

Aviso legal

Este proyecto se proporciona "tal cual". No hay garantía de corrección, seguridad o idoneidad para ningún propósito particular.

Use las herramientas y el firmware bajo su propio riesgo. El autor y los colaboradores no son responsables de ningún daño, pérdida de datos o consecuencias legales que puedan surgir del uso de este software o hardware.

Contribuciones

¡Las contribuciones son bienvenidas! Por favor, siga estos pasos:

  1. Haga un fork del repositorio.
  2. Cree una nueva rama para su función o corrección de errores.
  3. Envíe una solicitud de extracción con una descripción detallada.

Licencia

License: GPL v3

Este proyecto está licenciado bajo la Licencia Pública General de GNU v3.0. Consulte el archivo LICENSE para más detalles.

Descargar herramienta