
Un framework de fuzzing USB basado en QEMU/KVM que encuentra bugs en controladores de dispositivos mediante ejecución de VM reproducible, multiprocesamiento y generación de casos de prueba XML.
_ __ __ __ _______ ____
_ __(_)____/ /___ ______ _/ / / / / / ___// __ )
| | / / / ___/ __/ / / / __ `/ / / / / /\__ \/ __ |
| |/ / / / / /_/ /_/ / /_/ / / / /_/ /___/ / /_/ /
|_______/ \__/\__,_/\__,_/_/ \____//____/_____/
/ __/_ __________ ___ _____
/ /_/ / / / /_/ /_/ / _ \/ ___/
/ __/ /_/ / / / /_/ /_/ __/ /
/_/ \__,_/ /___/___/\___/_/
A KVM/QEMU based USB-fuzzing framework.
Sergej Schumilo, OpenSource Security Spenneberg 2015
Version: 0.2
Un fuzzer USB que aprovecha el uso masivo de máquinas virtuales y ofrece una alta reproducibilidad. Este framework fue publicado inicialmente en Black Hat Europe 2014.
Este software está en desarrollo activo. Obtén una copia de la versión actual en github:
Este software está licenciado bajo GPLv2.
Este framework proporciona:
vUSBf fue escrito en python2 y requiere el framework Scapy.
En primer lugar, ¡tenemos que compilar una versión compatible de QEMU! Obtén la versión más reciente de QEMU y usbredir:
QEMU: http://www.qemu.org usbredir: https://github.com/SPICE/usbredir
Asegúrate de compilar QEMU con la opción "usb_redir" y de parchear también el archivo /hw/usb/redirection.c. Si estás usando la versión 2.1.1 de QEMU, puedes aplicar nuestro parche (qemu-2.1.1.patch). ¡QEMU 2.2.x actualmente no es compatible con vUSBf!
vUSBf requiere algunas imágenes QCOW2 preparadas para el fuzzing. Primero tienes que crear una imagen QCOW2 para tu máquina virtual. Puedes hacerlo usando el siguiente comando:
qemu-img create -f qcow2 vm.qcow2 10G
Instala tu sistema operativo preferido en esa imagen. Tienes que configurar una TTY que esté disponible en el puerto serie (virtual).
El siguiente paso es crear un backing-file (overlay que contiene todo el delta futuro) y una imagen que contendrá una instantánea de la VM (el tamaño debe ser mayor que la memoria virtual que hayas configurado):
qemu-img create -b vm.img -f qcow2 overlay.qcow2
qemu-img create -f qcow2 ram.qcow2 1G
Inicia tu VM con el siguiente comando, espera hasta que el kernel esté cargado, inicia sesión y cambia la verbosidad de printk introduciendo "echo '7' > /proc/sys/kernel/printk". Ahora puedes tomar una instantánea entrando en la consola de QEMU (pulsa ctrl+a y c) y escribir savevm . Debes iniciar la VM con el siguiente comando:
qemu-system-x86_64 --enable-kvm -m 1024 -hdb ram.qcow2 -hda overlay.qcow2 -serial mon:stdio -device nec-usb-xhci -device usb-redir,chardev=usbchardev,debug=0 -chardev socket,server,id=usbchardev,nowait,host=127.0.0.1,port=1336
Crea una configuración personalizada en la carpeta "vusbf/configurations/". Allí encontrarás algunos ejemplos. Modifica la siguiente información:
- ubicación del binario de QEMU que quieras usar
- soporte KVM (escribe yes o no)
- tamaño de tu memoria (la unidad es MB)
- ubicación de tu ram-file
- ubicación de tu overlay-file
- ubicación donde se deben almacenar las copias duplicadas de tu overlay
- controlador host USB configurado (si no tienes idea, escribe nec-usb-xhci)
- algunos parámetros extra para QEMU (si necesitas alguno)
- el nombre de la instantánea
Eso es todo. Ahora tu VM está lista para algo de fuzzing.
Echa un vistazo a help.txt o ejecuta vusbf con el parámetro -h para obtener ayuda :-)
Hay algunos errores conocidos, como el soporte inestable para sistemas Windows. Estamos trabajando en estos problemas, así que asegúrate de usar la versión más reciente. Además, la falta de emuladores USB es otro punto en el que estamos trabajando.
Asimismo, algunos comentarios inline han sido escritos en mi idioma nativo (alemán). Se traducirán más tarde ;-) y el código estará más documentado!
¡Los compañeros de armas son bienvenidos :-)! ¡Hay mucho trabajo por hacer!
No dudes en enviarnos un correo electrónico: [email protected] [email protected]