
Umap2 is the second revision of NCC Group's python based USB host security assessment tool.
Umap2 es la segunda revisión de la herramienta de evaluación de seguridad de hosts USB basada en Python de NCC Group.
Esta revisión tendrá todas las funciones que se admitían en la primera revisión:
En esta revisión habrá algunas características adicionales:
Umap2 es desarrollado por NCC Group y el equipo Cisco SAS.
Advertencia: umap2 sigue siendo una herramienta experimental, en fase alfa. Es probable que las APIs, los nombres de los ejecutables, etc. cambien en un futuro cercano. Úsela bajo su propio riesgo.
#umap2 en Freenode <https://webchat.freenode.net/?channels=umap2>_
InstalaciónDado que esta es una versión muy temprana, Umap2 aún no está disponible en pypi, en su lugar, usa pip para instalarlo directamente desde github:
::
$ pip install git+https://github.com/nccgroup/umap2.git#egg=umap2
Umap2 es compatible con python2/3 en su mayor parte. Sin embargo, el script de fuzzing (umap2kitty) solo se ejecuta en python2.
Las dependencias de Umap2 están listadas en setup.py y se instalarán con umap2, sin embargo, hay un par de cosas que quizás quieras hacer para añadir soporte para algunos dispositivos:
Almacenamiento masivo
1. Requiere una imagen de disco llamada **stick.img** en el directorio actual.
MTP
~~~
1. Requiere una carpeta/archivo llamado **mtp_fs** en el directorio actual.
2. Requiere el paquete de Python pymtpdevice. Este paquete no está en pypi
por el momento, pero se puede descargar e instalar desde aquí:
https://github.com/BinyaminSharet/Mtp
Hardware
--------
- `Facedancer <http://goodfet.sourceforge.net/hardware/facedancer21/>`_
es el hardware recomendado para Umap2.
Umap2 fue desarrollado basándose en él, y con él obtendrás el mayor soporte.
- `Raspdancer <http://wiki.yobi.be/wiki/Raspdancer>` es compatible con RPi
- **GadgetFS** es parcialmente compatible.
Este soporte es muy experimental (incluso más que el resto de Umap2)
y limitado.
- BeagleboneBlack a partir del kernel de Linux 4.4.9 con un controlador gadgetfs
parcheado
- RaspberryPi Zero W a partir del kernel de Linux 4.12.0-rc3+ que no requiere
parches
- Dado que 4.12.0-rc3+ no requiere parches, es posible que haya otros dispositivos
que puedan ser compatibles; si conoces alguno o has realizado cambios para hacer
que funcione en otros dispositivos, por favor, envíanos un mensaje.
Si estás interesado, lee el **gadget/README.rst** para obtener más información.
Uso
-----
Emulación de dispositivos
La funcionalidad básica de Umap2 es emular un dispositivo USB. Puedes emular uno de los dispositivos existentes (usa umap2list para ver los dispositivos disponibles):
::
$ umap2emulate -P fd:/dev/ttyUSB0 -C mass_storage
o emular tu propio dispositivo:
::
$ umap2emulate -P fd:/dev/ttyUSB0 -C ~/my_mass_storage.py
Pronto se añadirá una guía detallada para agregar tu dispositivo, mientras tanto, puedes echar un vistazo a los dispositivos de umap2 en umap2/dev/
Escaneo de compatibilidad con dispositivos
Umap2 puede intentar detectar qué tipos de dispositivos USB
son compatibles con el host.
Esto se hace emulando cada dispositivo implementado en Umap2
durante un breve período de tiempo,
y comprobando si se envió un mensaje específico del dispositivo.
::
$ umap2scan -P fd:/dev/ttyUSB0
Escaneo de compatibilidad con dispositivos específicos del fabricante
Además de escanear la compatibilidad de varias clases de dispositivos, Umap2 puede escanear el host en busca de compatibilidad con dispositivos específicos del fabricante.
El escaneo específico del fabricante ayuda a identificar los controladores específicos del fabricante que están disponibles en el host.
Esto se puede hacer usando la base de datos VID-PID actual de Umap2 (aún en desarrollo), u otro archivo con el mismo formato:
::
$ umap2vsscan -P fd:/dev/ttyUSB0 -d $UMAP2_DIR/data/vid_pid_db.py
O escaneando un rango específico de vid-pid - en este ejemplo - se escanea cada combinación de VID de 0x1001 a 0x1004 y PID de 0x0000 a 0xffff:
::
$ umap2vsscan -P fd:/dev/ttyUSB0 -s 1001-1004:0000-ffff
¡Cualquier parche o adición al archivo vid_pid_db.py es bienvenido!
Fuzzing
Se puede encontrar una guía detallada sobre fuzzing con Umap2 en
`docs/fuzzing.rst <https://github.com/nccgroup/umap2/blob/master/docs/fuzzing.rst>`_
El fuzzing con Umap2 se compone de tres pasos,
que podrían unificarse en un solo script en el futuro.
1. Determina cuál es el orden de los mensajes
para el host que quieres fuzzear y el
dispositivo USB que emulas:
::
$ umap2stages -P fd:/dev/ttyUSB0 -C keyboard -s keyboard.stages
2. Inicia el fuzzer kitty en un shell separado,
y provéelo con las etapas generadas en el paso 1.
::
$ umap2kitty -s keyboard.stages
3. Inicia la emulación de teclado de umap2 en modo fuzz
::
$ umap2fuzz -P fd:/dev/ttyUSB0 -C keyboard
Una vez realizado el paso 3, comenzará la sesión de fuzzing.
Nota sobre fuzzing MTP
++++++++++++++++++++++
Si bien umap2 puede usarse para emular y descubrir dispositivos MTP
(consulta la sección "Dependencias blandas" de este README),
no aplica fuzzing a la capa MTP en este momento.
Para fuzzear la capa MTP,
puedes usar el fuzzer integrado en la biblioteca MTP.
Planeamos admitir fuzzing MTP directamente desde umap2 en futuras versiones.
Detección del sistema operativo del host
TBD
Si tienes problemas con Umap2, prueba la
sección de solución de problemas <https://github.com/nccgroup/umap2/blob/master/docs/troubleshooting.rst>_
Necesitas SPI-Py https://github.com/lthiery/SPI-Py y las bibliotecas GPIO de Python.
Usa phy rd