
Un framework de fuzzing USB basé sur QEMU/KVM qui détecte les bugs de pilotes de périphériques grâce à une exécution de VM reproductible, au multiprocessing et à la génération de cas de test XML.
_ __ __ __ _______ ____
_ __(_)____/ /___ ______ _/ / / / / / ___// __ )
| | / / / ___/ __/ / / / __ `/ / / / / /\__ \/ __ |
| |/ / / / / /_/ /_/ / /_/ / / / /_/ /___/ / /_/ /
|_______/ \__/\__,_/\__,_/_/ \____//____/_____/
/ __/_ __________ ___ _____
/ /_/ / / /_ /_ / / _ \/ ___/
/ __/ /_/ / / /_/ /_/ __/ /
/_/ \__,_/ /___/___/\___/_/
Un framework de fuzzing USB basé sur KVM/QEMU.
Sergej Schumilo, OpenSource Security Spenneberg 2015
Version : 0.2
Un fuzzer USB qui tire parti d'une utilisation massive de machines virtuelles et offre également une haute reproductibilité. Ce framework a été initialement présenté à la Black Hat Europe 2014.
Ce logiciel est en développement actif. Obtenez une copie de la version actuelle sur github :
Ce logiciel est sous licence GPLv2.
Ce framework fournit :
vUSBf a été écrit en python2 et nécessite le framework Scapy.
Tout d'abord, il faut compiler une version compatible de QEMU ! Récupérez la dernière version de QEMU et d'usbredir :
QEMU : http://www.qemu.org usbredir : https://github.com/SPICE/usbredir
Assurez-vous de compiler QEMU avec l'option « usb_redir » et de patcher également le fichier /hw/usb/redirection.c. Si vous utilisez la version 2.1.1 de QEMU, vous pouvez appliquer notre patch (qemu-2.1.1.patch). QEMU 2.2.x n'est actuellement pas pris en charge par vUSBf !
vUSBf nécessite des images QCOW2 préparées pour le fuzzing ! Vous devez d'abord créer une image QCOW2 pour votre machine virtuelle. Pour cela, utilisez la commande suivante :
qemu-img create -f qcow2 vm.qcow2 10G
Installez le système d'exploitation de votre choix sur cette image. Vous devez configurer un TTY disponible sur le port série (virtuel).
L'étape suivante consiste à créer un backing-file (un overlay qui contiendra tous les futurs écarts) et une image qui contiendra un instantané de la VM (sa taille doit être supérieure à votre mémoire virtuelle configurée) :
qemu-img create -b vm.img -f qcow2 overlay.qcow2
qemu-img create -f qcow2 ram.qcow2 1G
Démarrez votre VM avec la commande suivante, attendez que le noyau soit chargé, connectez-vous et modifiez la verbosité de printk en exécutant « echo '7' > /proc/sys/kernel/printk ». Vous pouvez alors prendre un instantané en ouvrant la console QEMU (appuyez sur ctrl+a puis c) et en tapant savevm . Vous devriez démarrer la VM avec la commande suivante :
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
Créez une configuration personnalisée dans le dossier « vusbf/configurations/ ». Vous y trouverez quelques exemples. Modifiez les informations suivantes :
- localisation du binaire QEMU que vous souhaitez utiliser
- support KVM (écrivez yes ou no)
- taille de votre mémoire (l'unité est le Mo)
- localisation de votre fichier ram
- localisation de votre fichier overlay
- localisation où doivent être stockées les copies de votre overlay
- contrôleur hôte USB configuré (si vous n'en avez aucune idée, écrivez simplement nec-usb-xhci)
- quelques paramètres supplémentaires pour QEMU (si vous en avez besoin)
- le nom de l'instantané
Voilà tout. Votre VM est maintenant prête pour un peu de fuzzing.
Consultez help.txt ou lancez vusbf avec le paramètre -h pour obtenir de l'aide :-)
Il existe quelques bugs connus, comme le support approximatif des systèmes Windows. Nous travaillons sur ces problèmes, alors assurez-vous d'utiliser la version la plus récente. De plus, le manque d'émulateurs USB est un autre point sur lequel nous travaillons.
Par ailleurs, certains commentaires en ligne ont été écrits dans ma langue maternelle (l'allemand). Ils seront traduits plus tard ;-) et le code sera mieux documenté !
Les compagnons d'armes sont les bienvenus :-) ! Il y a beaucoup de travail à faire !
N'hésitez pas à nous envoyer un e-mail : [email protected] [email protected]