
Implementa tu propio dispositivo USB en Python, compatible con un periférico de hardware como Cynthion o GreatFET
Este repositorio alberga la próxima generación del software Facedancer. Descendiente del Facedancer original basado en GoodFET, este repositorio proporciona un módulo de Python que ofrece soporte ampliado para Facedancer -- incluyendo soporte para múltiples placas y algunas características nuevas bastante significativas.
La documentación de Facedancer está disponible en Read the Docs. Las fuentes de documentación sin procesar están en la carpeta docs/.
Instala este paquete con el siguiente comando:
pip install facedancer
Después de eso puedes importar el paquete facedancer como de costumbre:
$ python
>>> import facedancer
Facedancer 3.0 es una reescritura desde cero del núcleo de emulación original y no soporta scripts heredados.
Si estás usando scripts o materiales de formación que dependen de características
o APIs obsoletas en v3.0.x, puedes instalar la última versión
v2.9.x de Facedancer con:
pip install "facedancer<=3"
Los applets y ejemplos heredados se pueden encontrar en la rama v2.9.x.
Las placas Facedancer son dispositivos de hardware simples que actúan como controladores USB "controlados remotamente". Con el software adecuado, puedes usar estas placas para emular dispositivos USB de forma rápida y sencilla -- ¡y para hacer fuzzing de controladores USB host!
Este repositorio de software en particular actualmente te permite crear fácilmente emulaciones de dispositivos USB en Python. El control es lo suficientemente detallado como para que puedas provocar todo tipo de comportamientos USB incorrectos. :)
Para más información, consulta:
Una característica nueva importante de la base de código más reciente de Facedancer es la capacidad de hacer MITM (Meddler-In-The-Middle) en conexiones USB -- reemplazando uno de los proyectos originales de los autores, USBProxy. Esto abre todo un nuevo abanico de aplicaciones -- incluyendo el análisis de protocolos y la manipulación en vivo de paquetes USB -- y es especialmente útil cuando no controlas el software que se ejecuta en el dispositivo objetivo (por ejemplo, en sistemas embebidos o consolas de videojuegos).
+-----------------------------------------------------------------------+
+------------+ | +--------------------------------+ +---------------------------+ | +--------------+
| | | | | | | | | |
| PROXIED | | | HOST COMPUTER | | FACEDANCER DEVICE | | | TARGET USB |
| DEVICE <------> running Facedancer software <---> acts as USB-Controlled <------> HOST |
| | | | | | USB Controller | | | |
| | | | | | | | | |
+------------+ | +--------------------------------+ +---------------------------+ | +--------------+
| |
| MITM Setup (HOST + FACEDANCER) |
+-----------------------------------------------------------------------+
Esta característica está completa, pero podría usar más documentación. Las pull requests son bienvenidas. :)
Primero, probablemente querrás establecer la variable de entorno BACKEND, que permite
al software saber qué tipo de placa Facedancer te gustaría usar. Si esta variable
no está establecida, el software intentará adivinarlo por ti según lo que esté conectado. No
siempre hace las mejores conjeturas, así que probablemente sea mejor que la establezcas tú mismo.
A continuación, probablemente querrás echar un vistazo a uno de los ejemplos, o a uno de los scripts predefinidos.
Los ejemplos con la nueva sintaxis se encuentran en examples. Los scripts principales de Facedancer con la
sintaxis "antigua" se encuentran en legacy-applets.
Por ejemplo:
export BACKEND=greatfet
./examples/rubber-ducky.py
BACKEND=cynthion)BACKEND=greatfet)BACKEND=greatfet)BACKEND=greatfet)BACKEND=goodfet)BACKEND=raspdancer)BACKEND=hydradancer)Ten en cuenta que las restricciones de hardware impiden que las placas MAX3420/MAX3421 emulen dispositivos más complejos -- hay limitaciones en el número/tipo de endpoints que se pueden configurar. Las placas LPC4330 -- como la GreatFET -- tienen menos limitaciones.
Por una razón similar, las placas MAX3420/MAX3421 (BACKEND=goodfet o BACKEND=raspdancer)
actualmente no pueden usarse como dispositivos MITM USBProxy-nv. Todas las placas modernas (BACKEND=greatfet, BACKEND=hydradancer)
deberían ser totalmente funcionales.
Ten en cuenta que las placas HydraDancer y HydraUSB3 (BACKEND=hydradancer) actualmente no soportan el modo host.
Ten en cuenta que el FaceDancer 3.0 actual no funciona en Windows (algunos problemas en pyusb...) y solo en GNU/Linux
La hoja de ruta está en desarrollo, pero además del soporte para múltiples placas, este repositorio eventualmente albergará algunas características nuevas interesantes, incluyendo:
Hay mucha gente a la que culpar por la maravilla que es este repositorio, incluyendo:
... siempre son bienvenidas. ¡Envíanos una PR!