マルウェアの解析などで役に立つものの一つに、カーネルモードデバッガがあります。
カーネルモードデバッガとは、OSのカーネルに対してデバッグを行う(カーネルモードデバッグ)デバッガのことです。
今回は仮想マシンに対するカーネルモードデバッグを快適に行えるようにするツールである、VirtualKDの紹介を行います。
VirtualKDとは?
VirtualKDは、Sysprogsが提供している仮想マシン上のWindowsに対するカーネルモードデバッグを高速化するツールです。
主な機能は以下の通りです(公式サイトより)
- ● VMwareとVirtualBoxを使用したカーネルモードデバッグの大幅な性能改善
- ● Windows XPからWindows 10までをサポート(32/64bit両対応)
- ● 切り詰められたDriver Verifierのロードメッセージの修正
- ● WinDbgとVisualDDKをサポート
- ● 簡単なインストール
ライセンスはLGPLであり、ソースはGitHub上に公開されています。
使用した環境
項目 | |
---|---|
ホストOS | Windows 10 Pro Version 1709 64bit |
仮想化ソフトウェア | Oracle VM VirtualBox 5.2.6 |
ゲストOS | Windows 10 Version 1709 64bit |
デバッガ | WinDbg |
VirtualKD | 3.0 |
VirtualKDのインストール
ホストOS側
ダウンロードページからVirtualKDのアーカイブをダウンロードし、展開します。
アーカイブに含まれているファイルは以下の通りです。
インストール先フォルダを決め、これらのファイルをそのフォルダへコピーします
(以降、インストール先フォルダのパスを%VKDPATH%
と表記します)
次にkdclient.dll
とkdclient64.dll
をシステムに登録するために、コマンドプロンプト等で以下のコマンドを実行します。
> regsvr32 %VKDPATH%\kdclient.dll
> regsvr32 %VKDPATH%\kdclient64.dll
ゲストOS側
VirtualBoxの共有フォルダ機能等を使用して、VirtualKDのアーカイブに含まれているtarget
フォルダをゲストOS上にコピーします。
このフォルダには、VirtualKDがゲストOSにおいて必要となるファイルが含まれています。
次にtarget
フォルダ内のvminstall.exe
を実行します。
実行すると、以下のウィンドウが表示されます。
ここでは、特に設定を変更しないでそのまま「Install」ボタンをクリックします。
途中、再起動するかどうかの確認をされますが「いいえ」を選択します。
最後に、システム構成ユーティリティを使用してVirtualKDを正常に動作させるための設定を行います。
システム構成ユーティリティの起動方法は以下の2種類があります。
- ● 「ファイル名を指定して実行」で「
msconfig
」を実行 - ● スタートメニューの検索ボックスに「システム構成」と入力して選択
システム構成ユーティリティが起動したら「ブート」タブを選び、新たに追加されたブートエントリを選び「詳細オプション」ボタンをクリックします。
なお、デフォルトでは新たに追加されたブートエントリは「Disable Signature Enforcement Manually!!! (Press F8)[VirtualKD]
」という名前で登録されます。
設定を見ると、デバッグポートが「1394」に設定されていると思います。
このままでは正常に動作しないので、設定を以下のように変更します。
設定が完了したら「OK」ボタンで設定を保存し、ゲストOSをシャットダウンします。
仮想マシンへの設定
VirtualBoxのバージョンによって、GUIの設定ツールが動作しない場合(該当するissue)があるため手動で設定します。
コマンドプロンプトを開き、以下のコマンドを実行します。
> cd /d "<VirtualBoxのインストール先>"
> vboxmanage setextradata "<VM名>" VBoxInternal/Devices/VirtualKD/0/Config/Path "%VKDPATH%"
なお、VirtualBoxのデフォルトのインストール先はC:\Program Files\Oracle\VirtualBox
です。
VirtualKD経由でのアタッチ
VirtualKDのインストール先のvmmon64.exe
を実行し、モニタを起動させます。
ウィンドウの下の方にあるデバッガの選択欄で「WINDBG.EXE」を選択し「Debugger path...」ボタンをクリックしWinDbg (x64)へのパスを設定します。
そして、デバッガを自動起動するために「Start debugger automatically」にチェックを入れます。
モニタは開いたまま、デバッグ対象の仮想マシンを起動させます。
ブートマネージャで新たに追加されたブートエントリを選び、F8キーを押します。
そして「ドライバー署名の強制を無効にする」を選択します。
正常に接続できると、WinDbgが起動してカーネルへアタッチされます。
このとき、VirtualKDのモニタは以下のような表示になります。
おわりに
VirtualKDを使うと、仮想マシンに対するカーネルモードデバッグが高速化されます。
個人的に、高速化が実感できるのはメモリダンプとのような大きなデータがやりとりされるコマンドを発行した際だと思っています。
しかしVirtualKDも完璧ではなく、以下のような問題点があるので注意してください。
- ● 通信にVMwareのバックドアI/Oを使用しているため、仮想化ソフトウェアを選ぶ
- ● セキュリティを高めるためにバックドアI/Oを無効化した環境では動作しない
- ● 配布側ではドライバに署名がされていない
問題点を理解した上で使用するのであれば、とても良いツールであると思います。