今回は無線を離れて物理接続USBについて試してみました。
Facedancerの購入
色々調べて見たところ、1万円くらいで買えるFacedancerなるデバイスでシミュレートして色々やれる様だと分かったので、 以下から速攻でポチり。
FaceDancer21 (USB Emulator/USB Fuzzer)int3.cc
さて、買ったのはいいものの、ストックがないからfew weeks待ってちょんまげとメールがきました。few weeksってどんなもんやと待ってみたら、大体7週間で届きました。
Thank you for you recent order! Unfortunately we are currently out of stock of Facedancers and are unable to fill your order immediately. We are expecting more product from our manufacturer in a few weeks and will fill your order as soon as we are restocked.
Facedancerのセットアップ
Facedancerを使うにあたって、デバイスにファームウェアを焼きこむ必要があります。デバイスのhostと書かれたコネクタ側にlinuxマシンを接続するとUSB-Serialとして認識されます。その状態から以下のコマンドを打つとfirmwareがfacedancerのデバイスに書き込まれて使える様になります。
$ git clone https://github.com/travisgoodspeed/goodfet goodfet
$ cd goodfet/client
$ sudo make link
$ export board=goodfet41
$ goodfet.bsl --fromweb
$ goodfet.monitor test
$ apt-cache search msp430
$ sudo apt-get install binutils-msp430 gcc-msp430 msp430-libc msp430mcu
以下を参考。
umapを使ってみる
umapというUSBホストに対して、USBデバイスをエミュレートして評価するツールを使ってみました。 nmapのUSB版みたいなイメージですかね。多分。
umapを使うには、python3とpyserialが必要なので事前にインストールしておきます。あとはダンロードしてきたpythonコードを実行するだけです。
以下を実行すると、device_class_data.pyで定義したDevice Class, subClass, Protocolに対してスキャンをかけます。ホスト側で稼働しているUSBドライバが何かを把握することができます。
$ sudo python3 umap.py -P /dev/ttyUSB0 -i
01:01:00 - Audio : Audio control : PR Protocol undefined
**SUPPORTED**
01:02:00 - Audio : Audio streaming : PR Protocol undefined
**SUPPORTED**
02:02:01 - CDC Control : Abstract Control Model : AT commands V.250
02:03:ff - CDC Control : Telephone Control Model : Vendor specific
02:06:00 - CDC Control : Ethernet Networking Control Model : No class-specific protocol required
03:00:00 - Human Interface Device : No subclass : None
**SUPPORTED**
06:01:01 - Image : Still image capture device : Bulk-only protocol
**SUPPORTED**
07:01:02 - Printer : Default : Bidirectional interface
08:06:50 - Mass Storage : SCSI : BBB
**SUPPORTED**
09:00:00 - Hub : Default : Default
**SUPPORTED**
0a:00:00 - CDC Data : Default : Default
**SUPPORTED**
0b:00:00 - Smart Card : Default : Default
**SUPPORTED**と表示されたものが稼働しているクラスになります。
USBPcapを使ってUSBメッセージをキャプチャする
umapで実際にどんなメッセージを出しているか確認する方法があります。USBホスト側をWindowsマシンにして、USBPcapを使ってキャプチャすることで、USBのメッセージを確認することができます。USBPcapはWiresharkをインストール際にチェックを入れていれば同時にインストールされています。
USBPcapの使い方は以下を参考。
キャプチャデータは以下の様な形で 確認することができます。
最後に
umapはUSBホストに対するUSBファジングもできる様なので、今後はもう少し深掘りしてみよかと思います。