
Umap2 is the second revision of NCC Group's python based USB host security assessment tool.
Umap2 — вторая ревизия инструмента NCC Group на Python для оценки безопасности USB-хостов.
Эта ревизия будет содержать все функции, которые поддерживались в первой ревизии:
В этой ревизии появятся некоторые дополнительные возможности:
Umap2 разрабатывается командами NCC Group и Cisco SAS.
Предупреждение: umap2 всё ещё является экспериментальным, инструментом стадии альфа. API, имена исполняемых файлов и т. д., вероятно, будут изменены в ближайшем будущем. Используйте на свой страх и риск.
#umap2 на Freenode <https://webchat.freenode.net/?channels=umap2>_Поскольку это очень ранняя версия, Umap2 пока недоступен на pypi, вместо этого установите его через pip напрямую из github:
::
$ pip install git+https://github.com/nccgroup/umap2.git#egg=umap2
Umap2 по большей части совместим с python2/3. Однако скрипт фаззинга (umap2kitty) работает только на python2.
Зависимости Umap2 перечислены в setup.py и будут установлены вместе с umap2, однако есть пара вещей, которые вы, возможно, захотите сделать, чтобы добавить поддержку некоторых устройств:
Mass Storage
1. Требуется образ диска с именем **stick.img** в текущем рабочем каталоге
MTP
~~~
1. Требуется папка/файл с именем **mtp_fs** в текущем каталоге.
2. Требуется python-пакет pymtpdevice. Этого пакета сейчас нет на pypi,
но его можно скачать и установить отсюда:
https://github.com/BinyaminSharet/Mtp
Оборудование
--------
- `Facedancer <http://goodfet.sourceforge.net/hardware/facedancer21/>`_
— рекомендуемое оборудование для Umap2.
Umap2 разрабатывался на его основе, и с ним вы получите наибольшую поддержку.
- `Raspdancer <http://wiki.yobi.be/wiki/Raspdancer>` поддерживается на RPi
- **GadgetFS** поддерживается частично.
Эта поддержка очень экспериментальная (даже больше, чем остальная часть Umap2)
и ограниченная.
- BeagleboneBlack, начиная с ядра Linux 4.4.9, с пропатченным драйвером
gadgetfs
- RaspberryPi Zero W, начиная с ядра Linux 4.12.0-rc3+, которое не требует
патчей
- Поскольку 4.12.0-rc3+ не требует патчей, возможно, есть и другие устройства,
которые можно поддерживать; если вы знаете о таком устройстве или внесли изменения,
чтобы заставить его работать на других устройствах, сообщите нам.
Если вам интересно, прочитайте **gadget/README.rst** для получения дополнительной информации.
Использование
-----
Эмуляция устройств
Основная функциональность Umap2 — эмуляция USB-устройства. Вы можете эмулировать одно из существующих устройств (используйте umap2list, чтобы увидеть доступные устройства):
::
$ umap2emulate -P fd:/dev/ttyUSB0 -C mass_storage
или эмулировать собственное устройство:
::
$ umap2emulate -P fd:/dev/ttyUSB0 -C ~/my_mass_storage.py
Подробное руководство по добавлению вашего устройства будет добавлено в ближайшее время, а пока вы можете посмотреть на устройства umap2 в каталоге umap2/dev/
Сканирование поддержки устройств
Umap2 может попытаться определить, какие типы USB-устройств
поддерживаются хостом.
Это делается путём кратковременной эмуляции каждого устройства,
реализованного в Umap2,
и проверки, было ли отправлено специфичное для устройства сообщение.
::
$ umap2scan -P fd:/dev/ttyUSB0
Сканирование поддержки вендор-специфичных устройств
В дополнение к сканированию поддержки различных классов устройств, Umap2 может сканировать хост на предмет поддержки вендор-специфичных устройств.
Вендор-специфичное сканирование помогает выявить вендор-специфичные драйверы, доступные на хосте.
Это можно сделать с помощью текущей базы VID-PID Umap2 (всё ещё в процессе разработки), или другого файла в том же формате:
::
$ umap2vsscan -P fd:/dev/ttyUSB0 -d $UMAP2_DIR/data/vid_pid_db.py
Или сканируя определённый диапазон vid-pid - в этом примере - сканирование всех комбинаций VID от 0x1001 до 0x1004 и PID от 0x0000 до 0xffff:
::
$ umap2vsscan -P fd:/dev/ttyUSB0 -s 1001-1004:0000-ffff
Любые патчи/дополнения к файлу vid_pid_db.py приветствуются!
Фаззинг
Подробное руководство по фаззингу с использованием Umap2 можно найти в
`docs/fuzzing.rst <https://github.com/nccgroup/umap2/blob/master/docs/fuzzing.rst>`_
Фаззинг с Umap2 состоит из трёх шагов,
которые в будущем могут быть объединены в один скрипт.
1. Выясните порядок сообщений
для хоста, который вы хотите фаззить, и
USB-устройства, которое вы эмулируете:
::
$ umap2stages -P fd:/dev/ttyUSB0 -C keyboard -s keyboard.stages
2. Запустите фаззер kitty в отдельной оболочке,
и передайте ему этапы, сгенерированные на шаге 1.
::
$ umap2kitty -s keyboard.stages
3. Запустите эмуляцию клавиатуры umap2 в режиме фаззинга
::
$ umap2fuzz -P fd:/dev/ttyUSB0 -C keyboard
После выполнения шага 3 начнётся сеанс фаззинга.
Примечание о фаззинге MTP
++++++++++++++++++++++
Хотя umap2 может использоваться для эмуляции и обнаружения MTP-устройств
(см. раздел "Мягкие зависимости" в этом README),
в настоящее время он не фаззит уровень MTP.
Для фаззинга уровня MTP
вы можете использовать фаззер, встроенный в библиотеку MTP.
Мы планируем поддержать фаззинг MTP напрямую из umap2 в будущих релизах.
Определение ОС хоста
TBD
Если у вас возникли проблемы с Umap2, обратитесь к
разделу устранения неполадок <https://github.com/nccgroup/umap2/blob/master/docs/troubleshooting.rst>_
Вам понадобятся SPI-Py https://github.com/lthiery/SPI-Py и библиотеки GPIO для Python.
Используйте phy rd