VirtualKDで快適カーネルモードデバッグ!|セキュリティごった煮ブログ

ネットエージェント
セキュリティごった煮ブログ

 コース:こってり

VirtualKDで快適カーネルモードデバッグ!

ν (ニュー)

マルウェアの解析などで役に立つものの一つに、カーネルモードデバッガがあります。
カーネルモードデバッガとは、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.dllkdclient64.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を無効化した環境では動作しない
  • ● 配布側ではドライバに署名がされていない

問題点を理解した上で使用するのであれば、とても良いツールであると思います。

メルマガ読者募集 採用情報 2020年卒向けインターンシップ

月別