
Фреймворк для фаззинг-тестирования USB на базе QEMU/KVM, который выявляет ошибки в драйверах устройств с помощью воспроизводимого выполнения виртуальных машин, многопроцессорности и генерации тестовых сценариев в формате XML.
_ __ __ __ _______ ____
_ __(_)____/ /___ ______ _/ / / / / / ___// __ )
| | / / / ___/ __/ / / / __ `/ / / / / /\__ \/ __ |
| |/ / / / / /_/ /_/ / /_/ / / / /_/ /___/ / /_/ /
|_______/ \__/\__,_/\__,_/_/ \____//____/_____/
/ __/_ __________ ___ _____
/ /_/ / / / /_/ /_/ / / _ \/ ___/
/ __/ /_/ / / /_/ /_/ __/ /
/_/ \__,_/ /___/___/\___/_/
Фреймворк для USB-фаззинга на основе KVM/QEMU.
Sergej Schumilo, OpenSource Security Spenneberg 2015
Версия: 0.2
USB-фаззер, который использует преимущества массового использования виртуальных машин, а также обеспечивает высокую воспроизводимость. Этот фреймворк был впервые представлен на Black Hat Europe 2014.
Данное программное обеспечение находится в стадии активной разработки. Получите копию актуальной версии на github:
Это программное обеспечение распространяется под лицензией GPLv2.
Этот фреймворк предоставляет:
vUSBf написан на python2 и требует фреймворк Scapy.
Прежде всего нам необходимо собрать совместимую версию QEMU! Получите новейшие версии QEMU и usbredir:
QEMU: http://www.qemu.org usbredir: https://github.com/SPICE/usbredir
Убедитесь, что вы компилируете QEMU с опцией "usb_redir", а также пропатчите файл /hw/usb/redirection.c. Если вы используете версию QEMU 2.1.1, вы можете применить наш патч (qemu-2.1.1.patch). QEMU 2.2.x в настоящее время не поддерживается vUSBf!
vUSBf требует подготовленных QCOW2-образов для фаззинга! Сначала вам необходимо создать QCOW2-образ для вашей виртуальной машины. Это можно сделать с помощью следующей команды:
qemu-img create -f qcow2 vm.qcow2 10G
Установите предпочитаемую операционную систему на этот образ. Вам нужно настроить TTY, доступный на (виртуальном) последовательном порту.
Следующий шаг — создать backing-файл (оверлей, содержащий всю будущую дельту) и образ, который будет содержать снимок ВМ (размер должен быть больше вашей виртуальной памяти, которую вы сконфигурировали):
qemu-img create -b vm.img -f qcow2 overlay.qcow2
qemu-img create -f qcow2 ram.qcow2 1G
Запустите вашу ВМ следующей командой, дождитесь загрузки ядра, войдите в систему и измените уровень детализации printk, введя "echo '7' > /proc/sys/kernel/printk". Теперь вы можете сделать снимок: войдите в консоль QEMU (нажмите ctrl+a и c) и введите savevm <имя>. Запускать ВМ следует следующей командой:
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
Создайте собственную конфигурацию в папке "vusbf/configurations/". Там вы найдёте несколько примеров. Измените следующую информацию:
- путь к используемому бинарному файлу QEMU
- поддержку KVM (укажите yes или no)
- размер памяти (единица измерения — МБ)
- путь к вашему ram-файлу
- путь к вашему overlay-файлу
- каталог, где должны храниться дубликаты вашего оверлея
- настроенный USB-host-контроллер (если вы не знаете, что указать, просто напишите nec-usb-xhci)
- дополнительные параметры для QEMU (если они вам нужны)
- имя снимка
На этом всё. Теперь ваша ВМ готова к фаззингу.
Ознакомьтесь с help.txt или запустите vusbf с параметром -h для получения справки :-)
Известны некоторые ошибки, например, нестабильная поддержка систем Windows. Мы работаем над этими проблемами, поэтому убедитесь, что вы используете новейшую версию. Кроме того, нехватка USB-эмуляторов — ещё один аспект, над которым мы работаем.
Кроме того, некоторые встроенные комментарии написаны на моём родном языке (немецком). Они будут переведены позже ;-), и код будет лучше документирован!
Соратники приветствуются :-)! Предстоит много работы!
Не стесняйтесь написать нам по электронной почте: [email protected] [email protected]