
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 仍然是一个实验性、 alpha 阶段的工具。 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 一起安装, 但是,您可能还需要做一些事情来增加对某些设备的支持:
大容量存储
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 还可以扫描主机对厂商特定设备的支持情况。
厂商特定扫描有助于识别主机上可用的厂商特定驱动程序。
可以使用当前 Umap2 的 VID-PID 数据库(仍在完善中), 或使用相同格式的另一个文件来完成:
::
$ 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. 在单独的 shell 中启动 kitty 模糊器,
并为其提供步骤 1 中生成的消息阶段。
::
$ umap2kitty -s keyboard.stages
3. 以模糊模式启动 umap2 键盘仿真
::
$ umap2fuzz -P fd:/dev/ttyUSB0 -C keyboard
执行完步骤 3 后,模糊测试会话将开始。
关于 MTP 模糊测试的说明
++++++++++++++++++++++
虽然 umap2 可用于仿真和发现 MTP 设备
(参见本 README 的“软依赖”一节),
但当前它不会对 MTP 层进行模糊测试。
要对 MTP 层进行模糊测试,
可以使用 MTP 库中内置的模糊器。
我们计划在未来的版本中直接支持通过 umap2 进行 MTP 模糊测试。
主机操作系统检测
待定
如果您在使用 Umap2 时遇到问题,请尝试
故障排除部分 <https://github.com/nccgroup/umap2/blob/master/docs/troubleshooting.rst>_
您需要 SPI-Py https://github.com/lthiery/SPI-Py 和 GPIO Python 库。
使用 phy rd