All Articles

A PART OF ANTI-VIRUS 3 - 公開サンプルコードで学ぶ Windows Filtering Platform (WFP) - (WEB 版)

この記事では、技術書典 20 で無料頒布した A PART OF ANTI-VIRUS 3 - WFP 編 - の内容を公開しています。

img

PDF 版については引き続き上記リンク先の技術書典オンラインマーケットページからダウンロードできます。

本書の内容はすべて、公式ドキュメントやその他の Web サイトに記載の情報、もしくは一般に公開されている書籍やソースコードなどの情報を元に作成しています。技術的な内容について言及する場合は、可能な限り出典を注釈に明記します。また、本書に記載の内容は全て筆者自身の見解であり、所属する企業や組織を代表するものではありません。

本書のもくじ

まえがき

本書について

本書をお手に取っていただき誠にありがとうございます。かしわば(@kash1064) と申します。

私は主にリバースエンジニアリングやフォレンジックの技術領域に関心を持っており、 最近はもっぱら、子育ての傍らでさまざまなアプリケーションのソースコードや技術書を読む生活をしています。

また、本業はセキュリティ製品ベンダーのテクニカルサポートエンジニアで、 これまでに 2 社にて Windows や Linux 用のアンチマルウェア製品のトラブルシューティングやデバッグを行ってきました。

本書では、これまでに頒布してきた「A part of Anti-Virus」シリーズ 1 2 に続き、Windows Filtering Platform (WFP) の概要と、Antivirus や Endpoint Detection and Response (EDR) を含む様々なセキュリティ製品などに利用される WFP コールアウトドライバーについて解説します。

詳しくは 1 章で解説しますが、WFP は Windows Vista および Windows Server 2008 以降で ネットワークフィルタリングアプリケーションを作成するためのプラットフォームを提供する一連の API とシステムサービスです。3

WFP を使用することで、開発者やアプリケーションベンダーは Windows にファイアウォールや侵入検知システム (IDS/IPS)、 また Antivirus による通信の検査およびブロック機能やその他のネットワーク監視ツールなど、様々なソフトウェアを実装できます。

例えば、Windows に既定で搭載されている Microsoft Defender ファイアウォール(旧称: Windows Defender Firewall)も、 この WFP の仕組みを利用して様々な条件に基づく通信のフィルタリングを実現しています。4

本書では、なぜセキュリティにおいてエンドポイント型のネットワークフィルタリングが必要とされているのか、 また Antivirus や EDR が WFP のどのような機能を利用して端末の保護を行っているのかについて、一般に公開されている情報を元に可能な限り詳細に解説します。

また、本書を通して多くのユーザーがエンドポイントにおけるネットワークセキュリティや、 Antivirus による WFP の利用について理解を深める一助となることを目指します。

本書の内容について

本書では、エンドポイントのネットワークセキュリティ対策に利用される WFP の概要や Antivirus の機能について理解を深めることを目的として、 各章で以下の内容について解説します。

  • 1 章: WFP の概要や基本的なアーキテクチャ、またエンドポイント型のネットワークフィルタリング/モニタリングのメリットと、Antivirus や EDR における WFP の利用について解説します。
  • 2 章: Base Filtering Engine (BFE) を使用して WFP による通信を制御するフィルターを登録するユーザーモードプログラムを作成します。
  • 3 章: ユーザーモードプログラム側でスキャンした結果を元に通信を遮断する WFP Callout ドライバーによる通信の制御を行うサンプルプログラムを作成します。

本書を読むための前提知識

本書では、WFP の基本概念から順に解説していますが、以下の知識があると理解しやすくなります。

  • C/C++ の基本的な文法
  • Windows のユーザーモード / カーネルモードの基礎知識
  • Visual Studio と WDK を用いたドライバー開発環境の基本操作
  • PowerShell の基本的なコマンド実行

本書で使用するツールと環境の準備

本書では、WFP を使用したサンプルプログラムをビルドし、仮想マシンで実行することで動作確認を行います。

本書の構成上、環境構築の詳細手順は割愛します。 ここでは、実際に動作確認を行いたい読者のために使用する主要なツールや環境について簡単に記載しておきます。

仮想マシンのセットアップ

本書では、Hyper-V で構築した Windows 10 22H2 の仮想マシンを利用します。

この仮想マシンでは、以下のコマンドでテスト署名モードとカーネルデバッグを有効化します(管理者権限で実行し、実行後は再起動が必要です)。 Secure Boot や BitLocker の構成によっては設定変更できない場合がある点に注意してください。 これらの設定は検証用であり、本番運用端末では有効化しないでください。

bcdedit /set testsigning on
bcdedit /debug on

また、リモートマシンからカーネルデバッグを行うため、kdnet.exe を使用してネットワーク経由のカーネルデバッグ設定を登録します。

なお、本書で使用する仮想マシンのセットアップに使用した手順については、 無料頒布している前著「A part of Anti-Virus」の 1 章で紹介した手順とほぼ同一ですので、 こちらも併せてお読みいただくことをおすすめします。

Visual Studio 2022 のインストール

続いて、本書で使用するプログラムやサンプルコードのビルドのため Visual Studio 2022 Community を使用します。

本書の執筆時点では、WDK は Visual Studio 2022 でのドライバー開発を前提としており、Visual Studio 2026 との互換性は未保証です。 そのため、本書では Visual Studio 2022 を使用します。5

なお、公式のダウンロードサイトからは現在のところ Visual Studio 2022 Community をダウンロードできません。

そこで、https://aka.ms/vs/17/release/vs_community.exe から直接インストーラをダウンロードしています。

各種ツールのインストール

本書で使用するツールのうち、主要なツールを以下に記載します。

これらのツールは、仮想マシンにインストールし、カーネルドライバーのインストールや動作確認、 また WFP フィルターの登録状況などを確認するために使用します。

  • WFP Explorer

https://github.com/zodiacon/AllTools/blob/master/WFPExp.exe

  • Driver Loader

https://www.osronline.com/article.cfm%5Earticle=157.htm

  • Sysinternals Suite

https://learn.microsoft.com/en-us/sysinternals/downloads/sysinternals-suite

  • Wireshark

https://www.wireshark.org/

謝辞

本書の執筆にあたり CTF チーム 0nePadding のメンバーに多大なるご協力を賜りました。

校正に協力いただいた 0nePadding のメンバーである @salty_byte 氏、@rikoteki 氏に深く感謝申し上げます。