
Um framework de fuzzing USB baseado em QEMU/KVM que encontra bugs em drivers de dispositivos por meio de execução de VM reproduzível, multiprocessamento e geração de casos de teste XML.
_ __ __ __ _______ ____
_ __(_)____/ /___ ______ _/ / / / / / ___// __ )
| | / / / ___/ __/ / / / __ `/ / / / / /\__ \/ __ |
| |/ / / / / /_/ /_/ / /_/ / / / /_/ /___/ / /_/ /
|_______/ \__/\__,_/\__,_/_/ \____//____/_____/
/ __/_ __________ ___ _____
/ /_/ / / / /_/ / / / _ \/ ___/
/ __/ /_/ / / /_/ /_/ __/ /
/_/ \__,_/ /___/___/\___/_/
Um framework de fuzzing USB baseado em KVM/QEMU.
Sergej Schumilo, OpenSource Security Spenneberg 2015
Versão: 0.2
Um fuzzer USB que tira proveito do uso massivo de máquinas virtuais e também oferece alta reprodutibilidade. Este framework foi inicialmente lançado na Black Hat Europe 2014.
Este software está em desenvolvimento intenso. Obtenha uma cópia da versão atual no github:
Este software é licenciado sob GPLv2.
Este framework fornece:
O vUSBf foi escrito em python2 e requer o framework Scapy.
Antes de tudo, precisamos compilar uma versão compatível do QEMU! Obtenha a versão mais recente do QEMU e do usbredir:
QEMU: http://www.qemu.org usbredir: https://github.com/SPICE/usbredir
Certifique-se de compilar o QEMU com a opção "usb_redir" e também aplique o patch no arquivo /hw/usb/redirection.c. Se você estiver usando a versão 2.1.1 do QEMU, pode aplicar nosso patch (qemu-2.1.1.patch). QEMU 2.2.x não é suportado atualmente pelo vUSBf!
O vUSBf requer algumas imagens QCOW2 preparadas para fuzzing! Primeiro, você precisa criar uma imagem QCOW2 para sua máquina virtual. Para isso, use o seguinte comando:
qemu-img create -f qcow2 vm.qcow2 10G
Instale o sistema operacional de sua preferência nessa imagem. Você precisa configurar um TTY disponível na porta serial (virtual).
O próximo passo é criar um backing-file (overlay que conterá todo o delta futuro) e uma imagem que conterá um snapshot da VM (o tamanho deve ser maior do que a memória virtual que você configurou):
qemu-img create -b vm.img -f qcow2 overlay.qcow2
qemu-img create -f qcow2 ram.qcow2 1G
Inicie sua VM com o seguinte comando, aguarde até o kernel ser carregado, faça login e altere a verbosidade do printk digitando "echo '7' > /proc/sys/kernel/printk". Agora você pode tirar um snapshot entrando no console do QEMU (pressione ctrl+a e c) e digitando savevm . Você deve iniciar a VM com o seguinte 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
Crie uma configuração personalizada na pasta "vusbf/configurations/". Você encontrará alguns exemplos ali. Modifique as seguintes informações:
- localização do binário do QEMU que você deseja usar
- suporte a KVM (escreva yes ou no)
- tamanho da sua memória (a unidade é MB)
- localização do seu arquivo ram
- localização do seu arquivo overlay
- local onde as duplicatas do overlay devem ser armazenadas
- controlador de host USB configurado (se não tiver ideia, apenas escreva nec-usb-xhci)
- alguns parâmetros extras para o QEMU (se precisar de alguns)
- o nome do snapshot
Isso é tudo. Agora sua VM está pronta para fuzzing.
Dê uma olhada no help.txt ou execute o vusbf com o parâmetro -h para obter ajuda :-)
Existem alguns bugs conhecidos, como o suporte instável para sistemas Windows. Estamos trabalhando nesses problemas, portanto certifique-se de estar usando a versão mais recente. Além disso, a falta de emuladores USB é outro ponto em que estamos trabalhando.
Além disso, alguns comentários inline foram escritos no meu idioma nativo (alemão). Eles serão traduzidos depois ;-) e o código será mais documentado!
Camaradas de armas são bem-vindos :-)! Há muito trabalho a fazer!
Fique à vontade para nos enviar um e-mail: [email protected] [email protected]