
Ein auf QEMU/KVM basierendes USB-Fuzzing-Framework, das Gerätetreiber-Fehler durch reproduzierbare VM-Ausführung, Multiprocessing und XML-Testfallgenerierung findet.
_ __ __ __ _______ ____
_ __(_)____/ /___ ______ _/ / / / / / ___// __ )
| | / / / ___/ __/ / / / __ `/ / / / / /\__ \/ __ |
| |/ / / / / /_/ /_/ / /_/ / / / /_/ /___/ / /_/ /
|_______/ \__/\__,_/\__,_/_/ \____//____/_____/
/ __/_ __________ ___ _____
/ /_/ / / / /_/ /_/ / _ \/ ___/
/ __/ /_/ / / /_/ /_/ __/ /
/_/ \__,_/ /___/___/\___/_/
Ein KVM/QEMU-basiertes USB-Fuzzing-Framework.
Sergej Schumilo, OpenSource Security Spenneberg 2015
Version: 0.2
Ein USB-Fuzzer, der massiv von virtuellen Maschinen Gebrauch macht und zudem eine hohe Reproduzierbarkeit bietet. Dieses Framework wurde erstmals auf der Black Hat Europe 2014 veröffentlicht.
Diese Software wird intensiv weiterentwickelt. Holen Sie sich eine Kopie der aktuellen Version auf GitHub:
Diese Software ist unter GPLv2 lizenziert.
Dieses Framework bietet:
vUSBf wurde in Python2 geschrieben und benötigt das Scapy-Framework.
Zuerst müssen wir eine kompatible Version von QEMU bauen! Holen Sie sich die neueste Version von QEMU und usbredir:
QEMU: http://www.qemu.org usbredir: https://github.com/SPICE/usbredir
Stellen Sie sicher, dass Sie QEMU mit der Option „usb_redir“ kompilieren und außerdem die Datei /hw/usb/redirection.c patchen. Wenn Sie die QEMU-Version 2.1.1 verwenden, können Sie unseren Patch (qemu-2.1.1.patch) anwenden. QEMU 2.2.x wird von vUSBf derzeit nicht unterstützt!
vUSBf benötigt einige vorbereitete QCOW2-Images zum Fuzzing! Zuerst müssen Sie ein QCOW2-Image für Ihre virtuelle Maschine erstellen. Dies können Sie mit dem folgenden Befehl tun:
qemu-img create -f qcow2 vm.qcow2 10G
Installieren Sie Ihr bevorzugtes Betriebssystem auf diesem Image. Sie müssen ein TTY konfigurieren, das am (virtuellen) seriellen Port verfügbar ist.
Der nächste Schritt besteht darin, eine Backing-Datei (ein Overlay, das das gesamte zukünftige Delta enthält) und ein Image zu erstellen, das einen Snapshot der VM enthält (die Größe sollte größer sein als Ihr konfigurierter virtueller Speicher):
qemu-img create -b vm.img -f qcow2 overlay.qcow2
qemu-img create -f qcow2 ram.qcow2 1G
Starten Sie Ihre VM mit dem folgenden Befehl, warten Sie, bis der Kernel geladen ist, melden Sie sich an und ändern Sie die Ausführlichkeit von printk, indem Sie „echo '7' > /proc/sys/kernel/printk“ eingeben. Jetzt können Sie einen Snapshot erstellen, indem Sie die QEMU-Konsole öffnen (drücken Sie Strg+A und C) und savevm eingeben. Sie sollten die VM mit dem folgenden Befehl starten:
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
Erstellen Sie eine angepasste Konfiguration im Ordner „vusbf/configurations/“. Dort finden Sie einige Beispiele. Ändern Sie die folgenden Informationen:
- Speicherort der QEMU-Binärdatei, die Sie verwenden möchten
- KVM-Unterstützung (schreiben Sie yes oder no)
- Größe Ihres Arbeitsspeichers (die Einheit ist MB)
- Speicherort Ihrer RAM-Datei
- Speicherort Ihrer Overlay-Datei
- Speicherort, an dem Ihre Overlay-Duplikate gespeichert werden sollen
- konfigurierter USB-Host-Controller (wenn Sie keine Idee haben, schreiben Sie einfach nec-usb-xhci)
- einige zusätzliche Parameter für QEMU (falls Sie welche benötigen)
- den Namen des Snapshots
Das ist alles. Jetzt ist Ihre VM bereit fürs Fuzzing.
Werfen Sie einen Blick auf help.txt oder führen Sie vusbf mit dem Parameter -h aus, um Hilfe zu erhalten :-)
Es gibt einige bekannte Fehler, wie die fehlerhafte Unterstützung für Windows-Systeme. Wir arbeiten an diesen Problemen, stellen Sie also sicher, dass Sie die neueste Version verwenden. Darüber hinaus ist der Mangel an USB-Emulatoren ein weiterer Punkt, an dem wir arbeiten.
Außerdem wurden einige Inline-Kommentare in meiner Muttersprache (Deutsch) verfasst. Sie werden später übersetzt ;-) und der Code wird besser dokumentiert!
Mitstreiter sind willkommen :-)! Es gibt viel zu tun!
Zögern Sie nicht, uns eine E-Mail zu senden: [email protected] [email protected]