[[labs.beatcraft.com]] #contents **BadUSB とは? [#d68ce428] USBフラッシュメモリなどの micro-controller のファームウェアを書き換えて、~ 他の USB 機器のふりをして動作させ Windows PC などをあれこれ好きにできてしまう危険なツールです。 **経緯 [#w8be790b] 最初に発表されたのは 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 [#d925dc1b] 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:http://ja.wikipedia.org/wiki/Intel_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メモリ [#nec69d6d] https://github.com/adamcaudill/Psychson/wiki/Known-Supported-Devices~ にユーザーからの情報も統合した使用可能デバイスのリストがあります。~ ここで挙げられているのは以下の製品です。~ ~ [[Patriot 8GB Supersonic Xpress USB 3.0 Flash Drive (PSF8GXPUSB):http://patriotmemory.com/product/detail.jsp?prodline=7&catid=92&prodgroupid=214&id=1087]] (ディスコン。市場在庫のみ)~ [[Patriot 16GB Supersonic Xpress USB 3.0 Flash Drive (PSF16GXPUSB):http://patriotmemory.com/product/detail.jsp?prodline=7&catid=92&prodgroupid=214&id=1088]] (ディスコン。市場在庫のみ)~ [[Patriot Stellar 64GB USB/OTG 3.0 Flash Drive (PSF64GSTROTG):http://www.patriotmemory.com/product/detail.jsp?prodline=7&catid=101&prodgroupid=270&id=1495&type=27]] (マイクロUSB端子)~ [[Kingston DataTraveler 111 — DT111:http://www.kingston.com/us/support/technical/products?model=DT111]] (ディスコン。市場在庫のみ)~ [[Kingston DataTraveler 100 G3 — DT100G3:http://patriotmemory.com/product/detail.jsp?prodline=7&catid=92&prodgroupid=214&id=1087]] (DriveCom.exe では書き換えできない)~ [[Kingston DataTraveler G4 — DTiG4:http://www.kingston.com/us/support/technical/products?model=DTIG4]]~ [[Silicon Power Marvel M60:http://www.silicon-power.com/product/product_detail.php?main=10&sub=73&pro=157&currlang=utf8]]~ [[Silicon Power Blaze B30:http://www.silicon-power.com/product/product_detail.php?main=10&sub=70&pro=238&currlang=utf8]]~ [[Toshiba TransMemory-MX USB 3.0 16GB/8GB:http://www.toshiba.co.jp/p-media/usb/tnub_spec_j.htm]] (8Gはすでに入手困難)~ ~ 全て Phison PS2251-03 (2303) controller を使っている製品です。~ ~ ここに名前の挙がっている製品も、製造メーカーの都合により同じ型番の同じ製品でありながら~ コントローラーが PS2251-03 (2303) から別のものに変更になっている場合があるため~ 実際に購入して試してみるまで BadUSB に書き換え可能かどうかは分かりません。~ ~ 当方では国内で入手性が良く価格の安い以下の二つを使用して書き換えを試行しました。~ ~ Silicon Power Blaze B30 32GB~ &ref(SP_BLAZEB30_PACKAGE.jpg,,30%); &ref(SP_BLAZEB30_CASE.jpg,,30%); &ref(SP_BLAZEB30_board.jpg,,30%); ~ Toshiba TransMemory-MX USB3.0 16GB~ &ref(TS_TRANSMX_PACKAGE.jpg,,30%); &ref(TS_TRANSMX_CASE.jpg,,30%); &ref(TS_TRANSMX_board.jpg,,30%); ~ ***ビルド環境のセットアップ [#tbc30a39] -Visual Studio 2012 Express~ DriveCom、EmbedPayload のビルドに使用します。~ マイクロソフトのサイト~ http://www.microsoft.com/en-us/download/details.aspx?id=3467~ からインストーラーをダウンロードし、インストーラーの指示に従ってインストールします。~ ~ -SDCC~ firmware のビルドに使用します。~ Sourceforge のダウンロードページ~ http://sdcc.sourceforge.net/~ からインストーラーをダウンロードし、インストーラーの指示に従ってインストールします。~ インストールの最後に SDCC 実行バイナリの PATH(C:\Program Files\SDCC\bin) を環境変数の PATH に追加するかどうか聞かれるので~ 追加してインストールしてください。~ ~ ***Psychson の入手とコンパイル [#u4effbaa] ブラウザで 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 の入手 [#jf7423e1] 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 フォルダ内にコピーして使用しました。~ ~ ***現在のファームウェアのバックアップ [#u158579b] 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 できました。~ このオリジナルのファームウェアを保存しておけば元の状態に書き戻すことが出来ます。 ***カスタムファームウェアの作成 [#p4869cb2] -ファームウェアのビルド~ Psychson-master フォルダ内の firmware をビルドし、~ カスタムファームウェア作成の元にします。~ firmware のパスに移動しビルド用バッチファイルを実行します。 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 が出来ます。~ これを tools/ フォルダにコピーしておきます。~ ~ -ペイロードの作成~ キー入力インジェクションツール [[USB Rubber Ducky:http://usbrubberducky.com/?resources]] のフォーマットで~ HID ペイロードを作成し、これをファームウェアに埋め込みます。~ (https://github.com/hak5darren/USB-Rubber-Ducky/wiki/Payloads にペイロードのサンプルがいろいろあります。)~ ~ これには [[Duckencoder:https://code.google.com/p/ducky-decode/]] と、ビルドした EmbedPayload.exe を使います。~ Duckencoder は java で書かれているので Java もインストールする必要があります。~ Oracle のダウンロードページ~ https://java.com/ja/download/~ からインストーラをダウンロードし、インストーラーの指示に従ってインストールしてください。~ Java インストール後 Duckencoder_2.6.3.zip をダウンロードし、展開します。~ 展開して出来た Deckencoder_2_6_3/ フォルダに移動し、~ [[Payload hello world:https://github.com/hak5darren/USB-Rubber-Ducky/wiki/Payload---hello-world]] のキー入力内容のスクリプトを keys.txt という名前で保存、~ Duckencoder で encode します。 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 が作成されます。~ これも tools/ フォルダへコピーしておきます。~ ~ -ファームウェアへのペイロードの埋め込み~ EmbedPayload.exe でファームウェアへ作成したHIDペイロードを埋め込み~ カスタムファームウェアを作成します。 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 が作成できました。 ***カスタムファームウェアの書き込み [#n98a74b4] 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 の実行 [#x98dbac6] 作成した BadUSB を Windows PC の USB ポートに差し込むと、~ 以下の内容が全く操作しないまま実行されます。~ ~ 新しい USB デバイスを接続したと認識され、自動的にドライバーのインストールが始まる。~ 以下の四つのドライバーがインストールされる。~ ・USB Composite Device~ ・USB 大容量記憶装置~ ・USB 入力デバイス~ ・USB Device~ ドライバーのインストールが完了すると~ 「ファイル名を指定して実行」のダイアログが開き、~ notepad が実行され、 Hello World! の文字列が入力される。~ ~ HIDペイロードのキー入力の内容を変えれば、~ どんな有害な操作も自動で行わせることが可能です。~ ~ ** 更新履歴 [#j0d6560c] 2015/01/13 初稿公開 ~ RIGHT:Satoshi OTSUKA