
Umap2 is the second revision of NCC Group's python based USB host security assessment tool.
Umap2 は、NCC Group による python ベースの USB ホストセキュリティ評価ツールの第2版です。
このリビジョンでは、第1版でサポートされていたすべての機能を備えます:
このリビジョンには、いくつかの追加機能もあります:
Umap2 は NCC Group と Cisco SAS チームによって開発されています。
警告: umap2 はまだ実験的であり、 アルファ段階のツールです。 API、実行可能ファイル名などは、近い将来変更される可能性があります。 使用は自己責任でお願いします。
#umap2 on Freenode <https://webchat.freenode.net/?channels=umap2>_
Installationこれは非常に初期のバージョンであるため、 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
Hardware
--------
- `Facedancer <http://goodfet.sourceforge.net/hardware/facedancer21/>`_
は Umap2 に推奨されるハードウェアです。
Umap2 はこれをベースに開発されており、最も多くのサポートが得られます。
- `Raspdancer <http://wiki.yobi.be/wiki/Raspdancer>` は RPi でサポートされています
- **GadgetFS** は部分的にサポートされています。
このサポートは非常に実験的です (Umap2 の他の部分よりもさらに実験的) そして制限付きです。
- Linux カーネル 4.4.9 以降で、パッチ適用済み gadgetfs
ドライバを使用した BeagleboneBlack
- Linux カーネル 4.12.0-rc3+ 以降の RaspberryPi Zero W
(パッチは不要です)
- 4.12.0-rc3+ 以降はパッチが不要なため、サポートできる他のデバイスがあるかもしれません。
そのようなデバイスをご存知の場合、または他のデバイスで動作するように変更を加えた場合は、
ぜひお知らせください。
興味があれば、**gadget/README.rst** を読んで詳細を確認してください。
Usage
-----
Device Emulation
Umap2 の基本的な機能は USB デバイスのエミュレーションです。 既存のデバイスのいずれかをエミュレートできます (利用可能なデバイスを確認するには umap2list を使用します):
::
$ umap2emulate -P fd:/dev/ttyUSB0 -C mass_storage
または、独自のデバイスをエミュレートします:
::
$ umap2emulate -P fd:/dev/ttyUSB0 -C ~/my_mass_storage.py
デバイスを追加するための詳細なガイドは後日追加される予定です。 それまでの間は、umap2/dev/ の下にある umap2 デバイスを参照してください。
Device Support Scanning
Umap2 は、ホストがどのタイプの USB デバイスをサポートしているかを検出できます。
これは、Umap2 に実装されている各デバイスを短時間エミュレートし、
デバイス固有のメッセージが送信されたかどうかを確認することで行います。
::
$ umap2scan -P fd:/dev/ttyUSB0
Vendor Specific Device Support Scanning
さまざまなデバイスクラスのサポートをスキャンすることに加えて、 Umap2 はベンダー固有デバイスのサポートについてホストをスキャンできます。
ベンダー固有スキャンは、ホスト上で利用可能なベンダー固有ドライバを 特定するのに役立ちます。
これは、現在の Umap2 VID-PID DB (まだ作業中) または 同じ形式の別のファイルを使用して実行できます:
::
$ 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 ファイルへのパッチや追加は大歓迎です!
Fuzzing
Umap2 を使ったファジングの詳細なガイドは、
`docs/fuzzing.rst <https://github.com/nccgroup/umap2/blob/master/docs/fuzzing.rst>`_ にあります。
Umap2 を使ったファジングは3つのステップで構成されており、
将来は1つのスクリプトに統合されるかもしれません。
1. ファズ対象のホストと、エミュレートする
USB デバイスに対するメッセージの順序を調べます:
::
$ umap2stages -P fd:/dev/ttyUSB0 -C keyboard -s keyboard.stages
2. 別のシェルで kitty ファザーを起動し、
ステップ1で生成したステージを指定します。
::
$ umap2kitty -s keyboard.stages
3. umap2 keyboard エミュレーションをファズモードで起動します。
::
$ umap2fuzz -P fd:/dev/ttyUSB0 -C keyboard
ステップ3の実行後、ファジングセッションが開始されます。
Note About MTP fuzzing
++++++++++++++++++++++
umap2 は MTP デバイスのエミュレーションと検出に使用できますが
(この README の "Soft dependencies" セクションを参照)、
現時点では MTP レイヤーのファジングは行いません。
MTP レイヤーをファジングするには、
MTP ライブラリに組み込まれているファザーを使用できます。
将来のリリースで umap2 から直接 MTP ファジングをサポートする予定です。
Host OS Detection
TBD
Umap2 に問題がある場合は、
troubleshooting section <https://github.com/nccgroup/umap2/blob/master/docs/troubleshooting.rst>_ を試してください。
SPI-Py https://github.com/lthiery/SPI-Py と GPIO python ライブラリが必要です。
phy rd を使用してください。