WFP 操作

Windows フィルター プラットフォーム (WFP) は、レイヤーフィルター、Shim、吹き出しの基本的なエンティティを統合することで、そのタスク実行します。

レイヤー

レイヤーは、フィルター エンジンによって管理されるコンテナーであり、その関数はフィルターをセットに整理することです。 レイヤーはネットワーク スタック内のモジュールではありません。 各レイヤーには、追加できるフィルターの種類を定義するスキーマがあります。 詳細については、「 各フィルター レイヤーで使用できるフィルター条件 」を参照してください。

レイヤーには、"1024 より上の TCP ポートをブロックする" や "ポート 1080 を開く" などの競合するフィルター要件を管理するためのサブレイヤーが含まれている場合があります。 フィルター処理の競合を管理するためのルールは、フィルターアー ビトレーションによって決定されます。

WFP には、 組み込みのサブレイヤーのセットが含まれています。 すべてのレイヤーは、すべての組み込みサブレイヤーを継承します。 ユーザーは、独自のサブレイヤーを追加することもできます。

フィルター エンジン レイヤーの一覧は、「フィルターレイヤー識別子」のリファレンス セクションで提供 されています

フィルター

フィルターは、受信パケットまたは送信パケットと照合されるルールです。 ルールは、ディープ パケットまたはストリーム検査のためにコールアウト モジュールを呼び出すなど、パケットを処理する処理をフィルター エンジンに指示します。 たとえば、フィルターで "TCP ポートが 1024 より大きいトラフィックをブロックする" または "セキュリティで保護されていないすべてのトラフィックに対して IDS に呼び出す" を指定できます。

ブート時フィルターは、TCP/IP スタック ドライバー (tcpip.sys) が起動するとすぐにブート時に適用されるフィルターです。 BFE の起動時にブート時フィルターが無効になります。 FwpmFilterAdd0 が呼び出されたときに FWPM_FILTER_FLAG_BOOTTIME フラグを設定することで、フィルターはブート時としてマークされます。

実行時フィルターは、BFE の開始後に適用されるフィルターです。 実行時フィルターは、作成方法に応じて静的、動的、または永続的にすることができます。 さまざまな種類のランタイム フィルターとその有効期間の詳細については、「 オブジェクト管理 」を参照してください。

シム

shim は、フィルター エンジン レイヤーに対して分類することでフィルター処理の決定を行うカーネル モード コンポーネントです。 各 shim は、1 つ以上のレイヤーに対して分類されます。 たとえば、トランスポート層モジュール shim は、フローの最初のパケットの受信トランスポート 層、送信トランスポート 層、ALE Connect および Receive-Accept レイヤーに対して分類します。

パケット、ストリーム、およびイベントがネットワーク スタックを通過すると、shim はそれらを解析して分類可能な条件と値を抽出し、フィルター エンジンを呼び出して、特定のレイヤー内のフィルターに対してそれらを評価します。 フィルター エンジンは、分類の一部として 1 つ以上の吹き出しを呼び出すことができます。 shim は、フィルター エンジンによって実行された分類の結果に基づいて、パケット、ストリーム、およびイベントの実際のドロップを行います。

吹き出し

吹き出しは、ドライバーによって公開され、特殊なフィルター処理に使用される関数のセットです。 ウイルス スキャン、保護者による不適切なコンテンツのスキャン、監視ツール用のパケット データ解析など、パケットの分析と操作を実行するために使用されます。 ネットワーク アドレス変換 (NAT) ドライバーなどの一部の吹き出しは、オペレーティング システムに組み込まれています。 HTTP ペアレンタル コントロールコールアウトや侵入検知システム(IDS)コールアウトなどのその他のコールアウトは、独立系ソフトウェア ベンダー (ISV) によって提供できます。 吹き出し関数は、特定のレイヤーで対応する吹き出しフィルターが一致すると、フィルター エンジンによって呼び出されます。

吹き出しは、カーネル モード WFP レイヤーのいずれかで登録できます。 吹き出しは、アクション ("ブロック"、"許可"、およびストリーム検査の実行時に "Defer"、"Need more data"、"Drop connection") を返し、受信および送信のネットワーク トラフィックを変更およびセキュリティで保護できます。

吹き出しがフィルター エンジンに登録されると、処理するネットワーク トラフィックを受信できます。 トラフィックは、レイヤーに応じてパケット、ストリーム、またはイベントである場合があります。 アプリケーションまたはファイアウォール エージェントは、アクションが "Callout" で吹き出し ID がその吹き出し ID であるフィルターを追加することで、トラフィックを引き出しに渡します。 吹き出しは、フィルター エンジンに"ブロック" または "許可" を shim に返すように指示できます。 吹き出しでは、"Continue" を返して、他のフィルターがパケットを処理できるようにすることもできます。

1 つの引き出し線ドライバーによって、複数の吹き出しが公開される場合があります。

吹き出しを使用するには、( FwpmCalloutAdd0 を使用して) 追加し、( FwpsCalloutRegister に) 登録する必要があります。 吹き出しを参照するフィルターを作成する前に、 FwpmCalloutAdd0 の呼び出しが必要です。 吹き出しフィルターが一致したときに WFP が吹き出しを呼び出すには、FwpsCalloutRegister の呼び出しが必要です。 既定では、追加されたが、フィルター エンジンにまだ登録されていない吹き出しを参照するフィルターは、"ブロック" フィルターとして扱われます。 FwpmCalloutAdd0 と FwpsCalloutRegister を呼び出す順序は関係ありません。 永続的な吹き出しは 1 回だけ追加する必要があり、吹き出しを実装するドライバーが起動するたびに登録する必要があります (再起動後など)。

分類

分類は、ネットワーク トラフィック (パケット、ストリーム、またはイベント) にフィルターを適用して、そのトラフィックの "許可" または "ブロック" の結果を決定するプロセスです。 1 つのパケット、ストリーム、またはイベントに対して、レイヤーごとに 1 つの分類呼び出しがあります。

分類中に、パケット、ストリーム、またはイベントのプロパティ (ソース アドレスなど) が、分類が呼び出されるレイヤーのフィルターに設定されたフィルター条件と比較されます。 一致が見つかると、 フィルターアービトレーション アルゴリズムを使用して分類プロセスの結果が決定されます。

分類要求は shim によってトリガーされます。

分類アクションは、次のいずれかになります。

  • 許可
  • ブロック
  • コールアウト
    • 許可
    • ブロック
    • 続行
    • 延期
    • より多くのデータが必要
    • 接続を削除する

WFP 操作

起動時に、TCP/IP スタック ドライバー (tcpip.sys) が起動するとすぐに、カーネル モード フィルター エンジンによって、ブート時フィルターを使用してシステムのセキュリティ ポリシーが適用されます。

基本フィルター エンジン (BFE) がユーザー モードで起動すると、永続的なフィルターがプラットフォームに追加され、ブート時フィルターが無効になり、 FwpmBfeStateSubscribeChanges0 を使用してサブスクライブしたコールアウト ドライバーに通知が送信されます。 通知は、BFE の初期化が完了した直後にディスパッチされます。 これで、プラットフォームでコールアウトを登録し、実行時オブジェクトを追加する準備が整いました。

ブート時間から永続的なフィルターへの切り替えは、数秒、または低速コンピューターではさらに長くなる可能性があります。 これはアトミックであるため、プロバイダーにブート時と永続的なフィルターの両方がある場合、どちらも有効でないときにウィンドウは表示されません。

BFE の起動後、ランタイム フィルターはファイアウォール エージェントまたはカスタム ファイアウォール ソリューションによって追加できます。 BFE はこれらのフィルターを処理し、適用のために適切なフィルター エンジン レイヤーに送信します。 BFE は認証設定も受け入れ、これらの設定を IPsec キー モジュール (IKE/AuthIP) に送信します。 詳細については、「 IPsec 構成」 を参照してください。

フィルターと認証の設定はいつでも、BFE によって公開される RPC インターフェイスを使用して、システム内で追加、削除、または変更できます。 サブレイヤーと吹き出しモジュールも同様に追加または削除できます。

データ フロー:

  1. パケットがネットワーク スタックに入ってくる。
  2. ネットワーク スタックは shim を検索して呼び出します。
  3. shim は、特定のレイヤーで分類プロセスを呼び出します。
  4. 分類中にフィルターが一致し、結果のアクションが実行されます。 ( 「フィルターアービトレーション」を参照)。
  5. 分類プロセス中に吹き出しフィルターが一致すると、対応する吹き出しが呼び出されます。
  6. shim は、最終的なフィルター処理の決定に対して動作します (たとえば、パケットをドロップします)。

送信データ フローは、同様のパターンに従います。

次のトピックでは、WFP の動作についてさらに説明します。

オブジェクト モデル

オブジェクト管理