
Un framework di fuzzing USB basato su QEMU/KVM che individua bug nei driver di dispositivo tramite esecuzione riproducibile di VM, multiprocessing e generazione di testcase XML.
_ __ __ __ _______ ____
_ __(_)____/ /___ ______ _/ / / / / / ___// __ )
| | / / / ___/ __/ / / / __ `/ / / / / /\__ \/ __ |
| |/ / / / / /_/ /_/ / /_/ / / / /_/ /___/ / /_/ /
|_______/ \__/\__,_/\__,_/_/ \____//____/_____/
/ __/_ __________ ___ _____
/ /_/ / / / /_/ /_/ / _ \/ ___/
/ __/ /_/ / / /_/ /_/ __/ /
/_/ \__,_/ /___/___/\___/_/
Un framework di USB-fuzzing basato su KVM/QEMU.
Sergej Schumilo, OpenSource Security Spenneberg 2015
Versione: 0.2
Un USB-fuzzer che sfrutta l'uso massiccio di macchine virtuali e offre anche un'elevata riproducibilità. Questo framework è stato inizialmente presentato al Black Hat Europe 2014.
Questo software è in fase di sviluppo intenso. Ottieni una copia della versione attuale su github:
Questo software è rilasciato sotto licenza GPLv2.
Questo framework fornisce:
vUSBf è stato scritto in python2 e richiede il framework Scapy.
Prima di tutto dobbiamo compilare una versione compatibile di QEMU! Ottieni la versione più recente di QEMU e usbredir:
QEMU: http://www.qemu.org usbredir: https://github.com/SPICE/usbredir
Assicurati di compilare QEMU con l'opzione "usb_redir" e di applicare la patch al file /hw/usb/redirection.c. Se stai usando la versione 2.1.1 di QEMU, puoi applicare la nostra patch (qemu-2.1.1.patch). QEMU 2.2.x non è attualmente supportato da vUSBf!
vUSBf richiede alcune immagini QCOW2 preparate per il fuzzing! Per prima cosa devi creare un'immagine QCOW2 per la tua macchina virtuale. Puoi farlo usando il seguente comando:
qemu-img create -f qcow2 vm.qcow2 10G
Installa il tuo sistema operativo preferito su quell'immagine. Devi configurare una TTY disponibile sulla porta seriale (virtuale).
Il passo successivo è creare un backing-file (overlay che conterrà tutti i delta futuri) e un'immagine che conterrà uno snapshot della VM (la dimensione dovrebbe essere maggiore della memoria virtuale che hai configurato):
qemu-img create -b vm.img -f qcow2 overlay.qcow2
qemu-img create -f qcow2 ram.qcow2 1G
Avvia la tua VM con il seguente comando, attendi il caricamento del kernel, accedi e modifica la verbosità di printk inserendo "echo '7' > /proc/sys/kernel/printk". Ora puoi creare uno snapshot accedendo alla console QEMU (premi ctrl+a e c) e digitare savevm . Dovresti avviare la VM con il seguente 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 configurazione personalizzata nella cartella "vusbf/configurations/". Lì troverai alcuni esempi. Modifica le seguenti informazioni:
- posizione del binario QEMU che vuoi utilizzare
- supporto KVM (scrivi yes o no)
- dimensione della memoria (l'unità è MB)
- posizione del tuo ram-file
- posizione del tuo overlay-file
- posizione in cui devono essere salvati i duplicati del tuo overlay
- controller host USB configurato (se non hai idea, scrivi semplicemente nec-usb-xhci)
- alcuni parametri extra per QEMU (se ti servono)
- il nome dello snapshot
Tutto qui. Ora la tua VM è pronta per un po' di fuzzing.
Dai un'occhiata a help.txt o esegui vusbf con il parametro -h per l'aiuto :-)
Ci sono alcuni bug noti come il supporto difettoso per i sistemi Windows. Stiamo lavorando su questi problemi, quindi assicurati di usare la versione più recente. Inoltre, la mancanza di emulatori USB è un altro punto su cui stiamo lavorando.
Inoltre alcuni commenti inline sono stati scritti nella mia lingua madre (tedesco). Saranno tradotti in seguito ;-) e il codice sarà più documentato!
I compagni d'arme sono i benvenuti :-)! C'è molto lavoro da fare!
Sentiti libero di inviarci un'email: [email protected] [email protected]