labs.beatcraft.com

BadUSB とは?

USBフラッシュメモリなどの micro-controller のファームウェアを書き換えて、
他の USB 機器のふりをして動作させ Windows PC などをあれこれ好きにできてしまう危険なツールです。

経緯

最初に発表されたのは 2014年8月7日。
black hat USA 2014 の BRIEFINGS AUGUST 7 での発表

BADUSB - ON ACCESSORIES THAT TURN EVIL
https://www.blackhat.com/us-14/briefings.html#badusb-on-accessories-that-turn-evil
https://www.youtube.com/watch?v=nuruzFqMgIw
https://srlabs.de/blog/wp-content/uploads/2014/07/SRLabs-BadUSB-BlackHat-v1.pdf

で、この発表者の Karsten Nohl と Jakob Lell が BadUSB と命名しました。

発表した危険性の内容は、
「USB端子を利用する端末には専用チップとファームウェアがあり、ファームウェアによって端末を認識できるようになっている。
 このUSBのファームウェアは適切なツールを入手するか作成すればだれでも書き換えることができる。
 書き換えを製造者に限定するような認証や暗号化などは特に行われていない。
 ファームウェアを改変すれば、USBフラッシュメモリにマルウェアをこっそり送り込んだり、USBストレージのデータを改竄したり、
 USBキーボードを無断で操作したりできる。」
というものです。
この発表者の二人はUSB規格の仕様に由来するため容易に修正できない危険性の内容に鑑みて
実行可能なコード内容は発表しなかったのですが、

DERBYCON 2014 で 9月26日に Adam Caudill と Brandon Wilson が
Making BadUSB Work For You
https://www.derbycon.com/schedule/ (Stable Talks on Friday, September 26th, 2014)
https://www.youtube.com/watch?v=xcsxeJz3blI
http://adamcaudill.com/2014/10/02/making-badusb-work-for-you-derbycon/
http://www.slideshare.net/adam_caudill/derby-con2014presentation

という発表を行い、BadUSB を作成する手順と作成に使用するツールのソースコードを github にて公開しました。
https://github.com/adamcaudill/Psychson

Psychson

Phison 2251-03 (2303) Custom Firmware & Existing Firmware Patches (BadUSB)
という説明の通り、Phison Electronics Corp. の 2251-03 micro-controller
http://www.phison.com/english/newProductView.asp?SortID=60&ID=235
を使用している USB フラッシュメモリのファームウェアを書き換えて BadUSB を作成することが出来るツールです。
この micro-controller を使用していない USB フラッシュメモリを書き換えて BadUSB を作ることは出来ません。

ファームウェアは Intel MCS 8051 互換形式の C で書かれており、
書き換えツールは C# で書かれています。
そのため、それぞれをビルドするには
SDCC (Small Device C Compiler)
http://sdcc.sourceforge.net/

Visual Studio Express 2012
http://www.microsoft.com/en-us/download/details.aspx?id=34673
以上の Edition の Visual Studio が必要になります。

使用可能なUSBメモリ

https://github.com/adamcaudill/Psychson/wiki/Known-Supported-Devices
にユーザーからの情報も統合した使用可能デバイスのリストがあります。
ここで挙げられているのは以下の製品です。

Patriot 8GB Supersonic Xpress USB 3.0 Flash Drive (PSF8GXPUSB) (ディスコン。市場在庫のみ)
Patriot 16GB Supersonic Xpress USB 3.0 Flash Drive (PSF16GXPUSB) (ディスコン。市場在庫のみ)
Patriot Stellar 64GB USB/OTG 3.0 Flash Drive (PSF64GSTROTG) (マイクロUSB端子)
Kingston DataTraveler 111 — DT111 (ディスコン。市場在庫のみ)
Kingston DataTraveler 100 G3 — DT100G3 (DriveCom.exe では書き換えできない)
Kingston DataTraveler G4 — DTiG4
Silicon Power Marvel M60
Silicon Power Blaze B30
Toshiba TransMemory-MX USB 3.0 16GB/8GB (8Gはすでに入手困難)

全て Phison PS2251-03 (2303) controller を使っている製品です。

ここに名前の挙がっている製品も、製造メーカーの都合により同じ型番の同じ製品でありながら
コントローラーが PS2251-03 (2303) から別のものに変更になっている場合があるため
実際に購入して試してみるまで BadUSB に書き換え可能かどうかは分かりません。

当方では国内で入手性が良く価格の安い以下の二つを使用して書き換えを試行しました。

Silicon Power Blaze B30 32GB
SP_BLAZEB30_PACKAGE.jpg SP_BLAZEB30_CASE.jpg SP_BLAZEB30_board.jpg
Toshiba TransMemory-MX USB3.0 16GB
TS_TRANSMX_PACKAGE.jpg TS_TRANSMX_CASE.jpg TS_TRANSMX_board.jpg

ビルド環境のセットアップ

Psychson の入手とコンパイル

ブラウザで Psychson のページ
https://github.com/adamcaudill/Psychson
を開き、ページ上の Download ZIP ボタンを押すと
git の master ブランチが Psychson-master.zip という名前でダウンロードできます。
(GitHub on Windows や git for windows を使用している場合は適宜 clone してください。)

zip を展開すると中身は以下のような構成になっています。

docs/
DriveCom/
EmbedPayload/
firmware/
Injector/
patch/
templates/
tools/
.gitignore
LICENSE
README.md

DriveCom/ フォルダの中の DriveCom.sln と EmbedPayload/ フォルダの中の EmbedPayload.sln を
Visual Studio で開きビルドします。

ビルドされた実行バイナリは tools/ フォルダ内にコピーされます。

Burner の入手

DriveCom.exe を使って ファームウェアをバックアップしたり書き込んだりする際には
Burner イメージというファイルが必要になります。
Phison PS2251-03 (2303) controller 上で動作し、保存されているファームウェアを読出したり
自作したカスタムファームウェアを書き込んだりするために必要となる実行ファイルです。

Burner イメージは以下のような規約に基づいてファイル名が付けられています。

BNxxVyyyz.BIN

xx はコントローラーの version。03 であれば PS2251-03 用。
yyy はファイルの revision 番号で動作との関連はありません。
最後の z は NAND のページサイズを表しており、
2KM はページサイズ 2K の NAND chip 用、4KM はページサイズ 4K の NAND chip用、
M はページサイズ 8K の NAND chip 用であることを示しています。

このファイルは以下のサイトから自分の使用する USBフラッシュメモリに該当するものを探してダウンロードしてください。
http://www.usbdev.ru/files/phison/

当方では firmware_ps2251-03.rar をダウンロードし、展開した中にある BN03V104M.BIN を
tools フォルダ内にコピーして使用しました。

現在のファームウェアのバックアップ

DriveCom.exe で現在 USB メモリに書き込まれているファームウェアの情報を確認し、
BootMode に変更して Dump することが出来ます。
このオリジナルのファームウェアを保存しておけば、書き換えに失敗しても元の状態に書き戻すことができます。
以下、USBフラッシュメモリは E ドライブとして Windows に認識されている前提です。

・Silicon Power Blaze B30 32GB
まず Silicon Power Blaze B30 32GB でファームウェア情報の確認を行ったところ以下のようになりました。

C:\Users\beat\Documents\Psychson-master\tools>DriveCom.exe /drive=E /action=GetInfo
Action specified: GetInfo
Gathering information...
Reported chip type: 0000
Reported chip ID: 70-00-05-00-00-00
Reported firmware version: 0.00.00
Mode: Unknown

chip type が 0000 となっており、Phison 2251-03 ではないようです。
Mode も Unknown となっており、Dump や書き込みを行える状態かの判定も出来ません。
Bootモードへの変更も行ってみましたが変化がなく、BadUSB への書き換えは不可能でした。

・Toshiba TransMemory-MX USB3.0 16GB
Toshiba TransMemory-MX USB3.0 16GB でファームウェア情報の確認を行ったところ、以下のようになりました。

C:\Users\beat\Documents\Psychson-master\tools>DriveCom.exe /drive=E /action=GetInfo
Action specified: GetInfo
Gathering information...
Reported chip type: 2303
Reported chip ID: 98-3A-A8-92-76-57
Reported firmware version: 2.08.53
Mode: Firmware

2303 なので PS2251-03 に間違いありません。

Bootモード に変更します。

C:\Users\beat\Documents\Psychson-master\tools>DriveCom.exe /drive=E /action=SetBootMode
Action specified: SetBootMode

Boot モードに移行したか念のため確認します。

C:\Users\beat\Documents\Psychson-master\tools>DriveCom.exe /drive=E /action=GetInfo
Action specified: GetInfo
Gathering information...
Reported chip type: 2303
Reported chip ID: 98-3A-A8-92-76-57
Reported firmware version: 1.01.10
Mode: BootMode

Bootモードに切り替わっているので、Dump を実行します。
まず Burner イメージを送り込みます。

C:\Users\beat\Documents\Psychson-master\tools>DriveCom.exe /drive=E /action=SendExecutable /burner=BN03V104M.BIN
Action specified: SendExecutable

名前を付けて現在書き込まれているファームウェアを Dump します。

C:\Users\beat\Documents\Psychson-master\tools>DriveCom.exe /drive=E /action=DumpFirmware /burner=BN03V104M.BIN /firmware=orig_firm.bin
Action specified: DumpFirmware

205,824 byte = 201k byte のファームウェアが Dump できました。
このオリジナルのファームウェアを保存しておけば元の状態に書き戻すことが出来ます。

カスタムファームウェアの作成

カスタムファームウェアの書き込み

DriveCom.exe を使って作成したカスタムファームウェアを書き込みます。
まずBootモードに変更します。

C:\Users\beat>cd C:\Users\beat\Documents\Psychson-master\tools
C:\Users\beat\Documents\Psychson-master\tools>DriveCom.exe /drive=E /action=SetBootMode
Action specified: SetBootMode

Burner イメージを送り込みます。

C:\Users\beat\Documents\Psychson-master\tools>DriveCom.exe /drive=E /action=SendExecutable /burner=BN03V104M.BIN
Action specified: SendExecutable

カスタムファームウェアを送り込み、Burner で書き込みます。

C:\Users\beat\Documents\Psychson-master\tools>DriveCom.exe /drive=E /action=SendFirmware /burner=BN03V104M.BIN /firmware=fw.bin
Action specified: SendFirmware
Gathering information...
Reported chip type: 2302
Reported chip ID: 98-3A-A8-92-76-57
Reported firmware version: 1.01.10
Mode: Burner
Rebooting...
Sending firmware...
Executing...
Mode: Firmware

これで BadUSB が完成しました。
元のファームウェアへ書き戻さない限りもう USB フラッシュメモリとしては認識しません。

BadUSB の実行

作成した BadUSB を Windows PC の USB ポートに差し込むと、
以下の内容が全く操作しないまま実行されます。

新しい USB デバイスを接続したと認識され、自動的にドライバーのインストールが始まる。
以下の四つのドライバーがインストールされる。
・USB Composite Device
・USB 大容量記憶装置
・USB 入力デバイス
・USB Device
ドライバーのインストールが完了すると
「ファイル名を指定して実行」のダイアログが開き、
notepad が実行され、 Hello World! の文字列が入力される。

HIDペイロードのキー入力の内容を変えれば、
どんな有害な操作も自動で行わせることが可能です。

更新履歴

2015/01/13 初稿公開

Satoshi OTSUKA

BC::labsへの質問は、bc9-dev @ googlegroups.com までお願い致します。
トップ   新規 一覧 単語検索 最終更新   最終更新のRSS