All Articles

A PART OF ANTI-VIRUS【1 章 本書で使用する環境のセットアップ】

もくじ

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 のインストールの手間なくすぐに仮想マシンの利用を開始できます。

評価版の OS イメージダウンロード画面

セットアップした Windows Server 2019 の仮想マシンを起動したら、 サーバマネージャから Microsoft Defender ウイルス対策のアンインストールを行います。

サーバマネージャの [Remove Role and Features] 画面を起動した後、[Windows Defender AntiVirus] のチェックを外し、操作を完了することで Microsoft Defender ウイルス対策のアンインストールが完了します。

サーバマネージャで Microsoft Defender ウイルス対策のアンインストールを行う

アンインストールが完了したら、コマンドプロンプトで fltmc コマンドを実行し、WdFilter ミニフィルタドライバーがロードされなくなったことを確認します。

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 のインストール

SDK のインストールが完了したら WDK のインストールを行います。

なお、本書の執筆時点で最新の Visual Studio 2022 を使用している場合、WDK のインストール完了時に表示される Visual Studio extension のインストールに関するチェックは外しても問題無いようです。

WDK のインストール

すべてのインストールが完了したら、Visual Studio の [新しいプロジェクトの作成] から [Empty WDM Driver] を選択可能になっていることを確認します。

WDM Driver のテンプレート

ドライバサンプルコードのダウンロードとビルド

Visual Studio のインストールが完了したら、 以下のリポジトリからドライバサンプルのソースコードをダウンロードします。


URL:Windows-driver-samples

https://github.com/Microsoft/Windows-driver-samples


このリポジトリからダウンロードしたファイルを展開し、 インストールした Visual Studio で <展開したフォルダ>\filesys\miniFilter\scanner\scanner.sln ファイルを開きます。

Scanner サンプルのソリューションファイルを開く

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 のファイルシステムミニフィルタドライバーの概要について紹介します。

本書のもくじ