もくじ
Windows Server 2019 仮想マシンのセットアップ
本書では、ビルドしたミニフィルタドライバーをインストールしてデバッグを行うために Windows Server 2019 の仮想マシンを使用します。
デバッグ用の OS として Windows Server 2019 を選択した理由は、 プリインストールされている AntiVirus ソフトウェアである Microsoft Defender ウイルス対策(MDAV)を アンインストールするためです。
Windows Server 2016 以降のサーバ OS は、Windows 10 や 11 などのクライアント OS と異なり、 プリインストールされている AntiVirus ソフトウェアである Microsoft Defender ウイルス対策を簡単に無効化、もしくはアンインストールすることができます。
なお、AntiVirus ソフトウェアのアンインストールはセキュリティリスクにつながるため、 必ずデバッグに使用する仮想マシンでのみ実施するようにしてください。
仮想マシンのセットアップ方法については本書では詳しくは解説しませんが、 Hyper-V や VirtualBox、VMware Workstation など任意の仮想化ソフトウェアを使用できます。
OS のインストールには、以下の URL からダウンロード可能な評価版のイメージを使用します。
URL:Microsoft Evaluation Center Windows Server 2019
https://www.microsoft.com/ja-jp/evalcenter/evaluate-windows-server-2019
上記の URL にアクセスし、フォームに必要な情報を入力することで ISO もしくは VHD ファイルとして 評価版の Windows Server 2019 の OS イメージをダウンロードできます。
ISO ではなく VHD ファイルを使用すると、 OS のインストールの手間なくすぐに仮想マシンの利用を開始できます。
セットアップした Windows Server 2019 の仮想マシンを起動したら、 サーバマネージャから Microsoft Defender ウイルス対策のアンインストールを行います。
サーバマネージャの [Remove Role and Features] 画面を起動した後、[Windows Defender AntiVirus] のチェックを外し、操作を完了することで Microsoft Defender ウイルス対策のアンインストールが完了します。
アンインストールが完了したら、コマンドプロンプトで fltmc
コマンドを実行し、WdFilter ミニフィルタドライバーがロードされなくなったことを確認します。
続けて、以下からダウンロードしたインストーラを使用して、 仮想マシンに再頒布可能パッケージをインストールします。
これは、Scanner サンプルモジュールのクライアントプログラムを実行する際に必要になります。
URL:サポートされている最新の Visual C++ 再頒布可能パッケージのダウンロード
https://learn.microsoft.com/ja-jp/cpp/windows/latest-supported-vc-redist?view=msvc-170
Microsoft Defender ウイルス対策のアンインストールと再頒布パッケージのインストールが完了したら、 最後に管理者権限で起動したコマンドプロンプトで以下の 3 つのコマンドを実行し、テスト署名モードとカーネルデバッグを有効化します。
bcdedit /set testsigning on
bcdedit /debug on
bcdedit /dbgsettings serial debugport:1 baudrate:115200
これらのコマンドを実行することで、対象の仮想マシンでテスト署名されたドライバのインストール 1 と COM ポートを利用したカーネルデバッグ 2 を有効化することができます。
Scanner ミニフィルタドライバーなどの独自にビルドしたカーネルドライバモジュールをインストールする場合は、上記のコマンドでテスト署名モードを有効化する必要があります。
これは、Windows Vista 以降のシステムではシステムにインストールするすべてのドライバに有効な署名が必要となるためです。 (特に、Windows 10 バージョン 1607 以降のシステムでは、ドライバは Microsoft によって有効な署名が付与されている必要があります。3 4)
ただし、デバッグ用の Windows システムにて bcdedit /set testsigning on
コマンドによるテスト署名モードの有効化を行うことで、テスト用の自己署名証明書などによって署名されたドライバのインストールを行うことができるようになります。
そのため、本書で使用するカーネルドライバをシステムにインストールして実行するために、 テスト署名モードを有効化する必要があります。
なお、テスト署名モードが有効化されている場合は Microsoft による署名が付与されていないドライバをシステムにインストールできるようになるため、不正なドライバがインストールされるリスクがあります。
そのため、テスト署名モードは必ずデバッグ用の仮想マシンでのみ有効化するようにしてください。
Visual Studio のインストール
続いて、デバッグ用の仮想マシンとは別のマシンでミニフィルタドライバーをビルドするための Visual Studio のセットアップを行います。
まずは Visual Studio 2022 Community のインストーラを以下からダウンロードし、実行します。
URL:Visual Studio 2022 Downloads
https://visualstudio.microsoft.com/downloads/
ダウンロードしたインストーラを起動したら、[C++ によるデスクトップ開発] を含む任意の項目にチェックを入れます。
続けて、[個別のコンポーネント] タブで検索ボックスに [64 最新] と入力し、以下の項目にチェックを入れます。
さらに、[個別のコンポーネント] にて [Windows Driver Kit] にチェックを入れます。
なお、SDK は別途インストーラからインストールしたいので、ここではチェックを外してインストールを行います。
この時、必要に応じて [Windows for Git] なども追加しておきます。
Visual Studio のインストールが完了したら、以下の URL の [手順 2: SDK のインストール] と [手順 3: WDK のインストール] から、 最新の SDK と WDK のインストーラをダウンロードします。
本書では、執筆時点で最新のバージョン 10.0.26100.1 のインストーラを取得しました。
URL:SDK と WDK のダウンロード
https://learn.microsoft.com/ja-jp/windows-hardware/drivers/download-the-wdk
インストーラのダウンロードが完了したら、SDK から WDK の順にインストールを行います。
SDK と WDK のインストールパスはどちらもデフォルトのままとします。
SDK のインストール項目についても、デフォルトのまますべての項目をインストールすることにします。
SDK のインストールが完了したら WDK のインストールを行います。
なお、本書の執筆時点で最新の Visual Studio 2022 を使用している場合、WDK のインストール完了時に表示される Visual Studio extension のインストールに関するチェックは外しても問題無いようです。
すべてのインストールが完了したら、Visual Studio の [新しいプロジェクトの作成] から [Empty WDM Driver] を選択可能になっていることを確認します。
ドライバサンプルコードのダウンロードとビルド
Visual Studio のインストールが完了したら、 以下のリポジトリからドライバサンプルのソースコードをダウンロードします。
URL:Windows-driver-samples
https://github.com/Microsoft/Windows-driver-samples
このリポジトリからダウンロードしたファイルを展開し、
インストールした Visual Studio で <展開したフォルダ>\filesys\miniFilter\scanner\scanner.sln
ファイルを開きます。
Visual Studio のソリューションエクスプローラでソリューションファイルを開くと、 Filter と User という 2 つのプロジェクトが存在していることを確認できます。
まずはそれぞれのプロジェクトを右クリックし、[プロパティ] から Windows SDK バージョンに現在インストールしているバージョンを指定します。
なお、本書では仮想マシン側にデバッグバージョンの依存ファイルをインストールしないため、 Scanner をビルドする際の [構成] は [Release] に変更しておく必要があります。
また、[プラットフォーム] は利用している環境に適した設定(本書では x64 を指定)であることを確認します。
すでに Visual Studio のセットアップと SDK/WDK のインストールが完了している場合、ソリューションのビルドを行うことで Scanner のカーネルドライバとユーザモードプログラムが正常にビルドできることを確認できます。
WinDbg のインストール
プログラムの解析のため、コンピュータに最新の WinDbg をインストールします。
本書では、Windows SDK の Debug Tools に含まれる WinDbg Classic ではなく、最新の WinDbg アプリを使用します。
また、本書ではカーネルデバッグを行うため、WinDbg は必ず仮想マシンを管理するホスト端末にインストールしてください。
最新の WinDbg は、WinGet パッケージマネージャを利用できる環境であれば、コマンドプロンプトや PowerShell で以下のコマンドを実行することで簡単にインストールできます。
winget install Microsoft.WinDbg
WinGet パッケージマネージャを利用できない場合は、以下の URL から WinDbg のインストーラファイルをダウンロードし、WinDbg のインストールを行います。
Windows デバッガーをインストールする:
https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/
WinDbg をインストールしたら、以下の手順で WinDbg の参照するシンボルサーバの設定を更新します。
WinDbg を使用してデバッグを行う際に適切なシンボルを取得することは非常に重要です。
シンボル 5 とは、exe や dll などの実行ファイルには含まれない関数や変数の名称などを含む情報です。
WinDbg などのツールを使用する際には、適切なシンボルを取得し参照することで、よりスムーズな解析を行うことが可能です。
一般的なデバッグで使用するシンボル情報は Microsoft が公開しているシンボルサーバ 6 から取得できます。
ただし、一部の公開されていないモジュールのシンボル情報や、サードパーティが独自に開発したソフトウェアのシンボル情報は、Microsoft によって公開されているシンボルサーバからダウンロードすることはできません。
シンボルサーバの設定のため、WinDbg を管理者権限で起動して、[ファイル]>[Settings]>[Debugging Settings] を開きます。
起動したウインドウの [Default Symbol Path] に以下を入力して、[OK] をクリックします。
srv*https://msdl.microsoft.com/download/symbols
これで WinDbg の参照するシンボルサーバを変更することができました。
もし独自に作成したプログラムのシンボルファイルを参照したい場合などには、
シンボルパスにファイルを配置するローカルフォルダのパスを追加し、.reload
コマンドでモジュールのリロード行います。
なお、インストールした WinDbg を使用して仮想マシンのカーネルデバッグを行う環境を用意する方法については本書では詳しく解説しません。
カーネルデバッグを行うための環境構築については、公式ドキュメント7の記載が充実しているのでこちらを参照できます。
また、技術書典 16 で無料頒布している Magical WinDbg 28 でも、カーネルデバッグを行うための環境構築手順について詳しく解説しています。
本章のまとめ
本章では、Scanner サンプルドライバのビルドと、 作成したモジュールのデバッグを行う環境を用意する方法について紹介しました。
2 章では、Windows のファイルシステムミニフィルタドライバーの概要について紹介します。
本書のもくじ
- まえがき
- 1 章 本書で使用する環境のセットアップ
- 2 章 ファイルシステムミニフィルタドライバー入門
- 3 章 Scanner のサンプルコードを読む
- 4 章 WinDbg で Scanner をカーネルデバッグする
-
テスト署名されたドライバーの読み込みの有効化 https://learn.microsoft.com/ja-jp/windows-hardware/drivers/install/the-testsigning-boot-configuration-option
↩ -
仮想 COM ポートを使用した仮想マシンのカーネル モード デバッグの手動設定 https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/attaching-to-a-virtual-machine—kernel-mode-
↩ -
ドライバーへの署名 https://learn.microsoft.com/ja-jp/windows-hardware/drivers/develop/signing-a-driver
↩ - ↩
-
シンボルとシンボルファイル https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/symbols-and-symbol-files
↩ -
シンボルサーバーの使用 https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/using-a-symbol-server
↩ -
仮想 COM ポートを使用した仮想マシンのカーネル モード デバッグの手動設定 https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/attaching-to-a-virtual-machine—kernel-mode-
↩ -
Magical WinDbg 2 -CTFで学ぶユーザモード&カーネルデバッギング-:https://techbookfest.org/product/6hBEkTPSxJC5vSRTqa81F9
↩