VEHデバッガ用ブレークポイントの挿入/削除(新型32ビット版「UsaMimi32.exe」および64ビット版「UsaMimi64.exe」用)
VEHデバッガの概要・基本操作
●概要
この機能は、VectoredExceptionHandler(VEH、ベクター化例外ハンドラ)というWindowsに実装されている仕組みを使って、デバッガと同等の機能を実現させたものです。解析対象プロセスが行う、プロセスメモリ上の特定アドレスへの書き込みや読み込みおよび実行のアクセスを検出して、その時点での実行情報を出力します。これにより、解析対象プロセスが行う、特定アドレスへの書き込みや読み込みのアクセスを行ったプログラムコードの位置を特定したり、特定位置にあるプログラムコードの実行時の実行情報を取得可能です。 この機能はプログラム解析において「VEHデバッガ」と呼ばれますが、本来のデバッガとは仕組みが異なるものです。そのため、IsDebuggerPresent関数といった、一般的なデバッガ検出手法の多くはこのVEHデバッガを検出できませんし、そのうえVEHデバッガを検出する方法は少数で限定的です。これにより、VEHデバッガは、デバッガ対策を実装しているマルウェアなどの解析に適しているといえます。加えて、当ソフトウェア『うさみみハリケーン』の現バージョンは日本語版のみ公開のため、海外のマルウェア作者等からはノーマークであり、『うさみみハリケーン』のプロセス名を検索といった、ソフトウェアベースの解析対策をされる可能性は低いという利点もあります。ちなみに、このVEHデバッガでは仕様上、プロセスメモリにロードされたモジュール内のプログラムコードといった、プロセスメモリ上のバイナリデータの書き換えは行いません。 |
●参考スクリーンショット
●基本的な操作の流れ
■ブレークポイントの設定 基本操作は、ブレークポイントのアドレスと種類を指定してから「設定」ボタン押し下げです。最初のブレークポイント設定時に、VEHデバッガの初期化処理を行います。ブレークポイントが適切に設定されたならば、指定アドレスへの指定種類アクセス時に、ブレークした結果である実行情報が画面下部のエディットボックスに出力されます。もし「ダンプ表示アドレスをRIP/EIPで変更」チェックボックスがチェックされていたら、当ソフトウェアのメインウィンドウであるダンプ表示画面での選択アドレスを、ブレーク時のプログラムコードの位置に変更します。 ブレークポイントの種類が「実行」と「書き込み」および「読み書き」の場合は、ブレークポイント設定後に新規作成されたスレッドにはブレークポイントの情報が設定されていないため、必要に応じてブレークポイントの再設定を行ってください。 ブレークポイントの種類「ガードページ書き込み」と「ガードページ読み込み」は、プロセスメモリ上の特定範囲に設定可能な保護属性「PAGE_GUARD」を利用して、指定アドレスへの書き込みアクセスまたは読み込みアクセスを行ったプログラムコードの位置を特定するものです。このアプローチは、VEHデバッガをさらに検出されにくくする方法として知られています。また、「ガードページ書き込み」と「ガードページ読み込み」は、ブレークポイント設定後に新規作成されたスレッドによる読み書きアクセスにも有効です。 上記VEHデバッガの初期化処理時には、VEH用DLLのロード処理も行います。このVEH用DLLの名前は変更可能です。解析対象プロセスの解析対策や、外部プロセスからの干渉等により、このVEHデバッガが適切に動作しない場合は、あらかじめVEH用DLLの名前をランダムな文字列に変更し、変更後の名前を当機能の画面上で指定してみてください。解析対象によっては、VEH用DLLの名前を漢字・ひらがな・カタカナの全角文字を使って変更するのが効果的です。なお、DLL名変更時には、32ビット版の「VEHDebugger.dll」と64ビット版の「VEHDebugger64.dll」を混同しないよう注意してください。また、VEH用DLLのロード処理を、当機能が用いる方法とは別の方法で行うことも可能です。この場合、「VEH用DLLを手動でロードする」チェックボックスをチェックしておき、VEHデバッガの初期化処理時に手動のロード処理を促す表示がされたら、手動すなわちインジェクターなどを使って解析対象プロセスにVEH用DLLをロードさせてください。 ■ブレーク時実行情報の表示 「テキストをクリア」ボタンで、エディットボックスに出力されたブレーク時の実行情報をクリアします。「ブレーク情報の取得とテキスト出力を一時停止」チェックボックスをチェックすると、ブレーク情報の取得とテキスト出力を行いません。この際、一時停止を行ったタイミングのずれに対応するため、一定数のブレーク情報は内部でストックされますが、ストック上限に達した後の新規ブレーク情報はストックせず破棄されます。 ■ブレークポイントの解除とVEHデバッガ終了処理 不測の事態を避けるため、不要になったブレークポイントはすみやかに「解除」ボタンで解除してください。 ブレークポイント設定すなわちVEHデバッガの初期化処理が行われていたならば、当機能のダイアログを閉じる際には、VEH用DLLのアンロード処理を含む、VEHデバッガの終了処理を行います。これにより、解析対象プロセスのプロセスメモリ上には、VEHデバッガの痕跡を残さないようにしています。 ■マルウェア対策 当ソフトウェアのメニュー「編集」→「オプション」にある「その他の設定」タブで、「マルウェア対策としてウィンドウタイトル/クラス名を変更(実行ファイル名の変更も推奨)」を有効にしておけば、当ダイアログのウィンドウタイトルをランダムな文字列に変更します。 |
●注意事項
このVEHデバッガは、解析対象プロセスに本来ありえない動作を行わせることから、状況によっては同プロセスがフリーズや強制終了となる可能性があります。当ソフトウェア側でいくつかの安全策を講じているものの、想定外のフリーズや強制終了が起こりうることに留意してください。特にブレークポイントの種類「ガードページ書き込み」と「ガードページ読み込み」は、解析対象プロセスの実行状況他いろいろな要因により強制終了を招きやすいといえます。たとえば「ガードページ読み込み」のブレークポイントを、実行されるプログラムコード上に設定すると、ブレーク時に高確率で強制終了となります。また、高頻度でブレークポイントの設定と解除を繰り返すと、解析対象プロセスの実行状況に齟齬が生じて強制終了する可能性があります。他には、当機能のダイアログを閉じる際のVEHデバッガ終了処理と、解析対象プロセスの実行処理が適切に連携できず強制終了するケースがあるため、当機能のダイアログを閉じる前に解析対象プロセスを終了させるほうが安全です。 このVEHデバッガは、当ソフトウェアの本来のデバッガ(メニュー「デバッグ」→「ブレークポイントの挿入/削除」)との同時使用はできません。これは、デバッガとしての処理に競合が発生するためです。同様に、このVEHデバッガと、他のソフトウェアのデバッガやVEHデバッガとの併用も、解析対象プロセスの異常動作や強制終了といった不測の事態を招くことになるため避けてください。加えて、ブレークポイント設定アドレスに対して読み書きを行う、当ソフトウェアの各種機能の同時使用も、安全性の面からお勧めしません。 解析対象プロセスが、解析されないためにVEHデバッガ検出機能を実装しているケースが想定されます。これにより適切に解析できない場合は、本来のデバッガと、解析対象プロセスによるデバッガ検出を無効化する「ScyllaHide」の併用で対処できる可能性があります。ScyllaHideの使用方法は、本来のデバッガの解説で説明しています。 |