アクセス制御 (Windows フィルタリング プラットフォーム)
Windows フィルタリング プラットフォーム (WFP) では、基本フィルター エンジン (BFE) サービスは、アクセス トークンとセキュリティ記述子に基づいて標準 の Windows アクセス制御モデル を実装します。
アクセス制御モデル
セキュリティ記述子は、フィルターやサブレイヤーなどの新しい WFP オブジェクトを追加するときに指定できます。 セキュリティ記述子は、WFP 管理機能 Fwpm*GetSecurityInfo0 と Fwpm*SetSecurityInfo0 を使用して管理されます。ここで * 、WFP オブジェクトの名前を表します。 これらの関数は、Windows GetSecurityInfo 関数および SetSecurityInfo 関数と意味的に同じです。
注意
Fwpm*SetSecurityInfo0 関数は、明示的なトランザクション内から呼び出すことはできません。
注意
Fwpm*SetSecurityInfo0 関数は、同じセッション内で作成された動的オブジェクトを管理するために使用されている場合にのみ、動的セッション内から呼び出すことができます。
フィルター エンジンの既定のセキュリティ記述子 (下の図のルート エンジン オブジェクト) は次のとおりです。
- 組み込みの Administrators グループに GENERIC_ALL (GA) アクセス権を付与します。
- GENERIC_READ (GR ) GENERIC_WRITE (GW) GENERIC_EXECUTE (GX) アクセス権をネットワーク構成オペレーターに付与します。
- 次のサービス セキュリティ識別子 (SSD) に GRGWGX アクセス権を付与します。MpsSvc (Windows ファイアウォール)、NapAgent (ネットワーク アクセス保護エージェント)、PolicyAgent (IPsec ポリシー エージェント)、RpcSs (リモート プロシージャ コール)、WdiServiceHost (診断サービス ホスト)。
- すべてのユーザーにFWPM_ACTRL_OPENとFWPM_ACTRL_CLASSIFYを付与します。 (これらは WFP 固有のアクセス権であり、以下の表で説明します)。
残りの既定のセキュリティ記述子は、継承によって派生します。
Fwpm*Add0、Fwpm*CreateEnumHandle0、Fwpm*SubscribeChanges0 関数呼び出しなど、個々のオブジェクト レベルでは実行できないアクセス チェックがあります。 これらの関数には、オブジェクトの種類ごとにコンテナー オブジェクトがあります。 標準のオブジェクトの種類 (プロバイダー、吹き出し、フィルターなど) の場合、既存の Fwpm*GetSecurityInfo0 関数と Fwpm*SetSecurityInfo0 関数がオーバーロードされ、null GUID パラメーターによって関連付けられているコンテナーが識別されます。 その他のオブジェクトの種類 (ネットワーク イベントや IPsec セキュリティ 関連付けなど) には、コンテナーのセキュリティ情報を管理するための明示的な関数があります。
BFE では、随意Access Controlリスト (DACL) アクセス制御エントリ (ACE) の自動継承がサポートされています。 BFE では、システム Access Control リスト (SACL) ACE はサポートされていません。 オブジェクトは、そのコンテナーから ACE を継承します。 コンテナーはフィルター エンジンから ACE を継承します。 伝達パスを次の図に示します。
標準オブジェクトの種類の場合、BFE ではすべての汎用アクセス権と標準アクセス権が適用されます。 さらに、WFP は次の特定のアクセス権を定義します。
WFP アクセス権 | 説明 |
---|---|
FWPM_ACTRL_ADD |
コンテナーにオブジェクトを追加するために必要です。 |
FWPM_ACTRL_ADD_LINK |
オブジェクトへの関連付けを作成するために必要です。 たとえば、吹き出しを参照するフィルターを追加するには、呼び出し元が吹き出しにADD_LINKアクセスできる必要があります。 |
FWPM_ACTRL_BEGIN_READ_TXN |
明示的な読み取りトランザクションを開始するために必要です。 |
FWPM_ACTRL_BEGIN_WRITE_TXN |
明示的な書き込みトランザクションを開始するために必要です。 |
FWPM_ACTRL_CLASSIFY |
ユーザー モード レイヤーに対して分類するために必要です。 |
FWPM_ACTRL_ENUM |
コンテナー内のオブジェクトを列挙するために必要です。 ただし、列挙子は、呼び出し元がアクセスFWPM_ACTRL_READオブジェクトのみを返します。 |
FWPM_ACTRL_OPEN |
BFE とのセッションを開くために必要です。 |
FWPM_ACTRL_READ |
オブジェクトのプロパティを読み取るために必要です。 |
FWPM_ACTRL_READ_STATS |
統計を読み取るために必要です。 |
FWPM_ACTRL_SUBSCRIBE |
通知をサブスクライブするために必要です。 サブスクライバーは、FWPM_ACTRL_READアクセス権を持つオブジェクトに対してのみ通知を受け取ります。 |
FWPM_ACTRL_WRITE |
エンジン オプションを設定するために必要です。 |
BFE は、カーネル モードの呼び出し元のすべてのアクセス チェックをスキップします。
管理者が BFE から自分自身をロックしないようにするために、組み込みの administrators グループのメンバーには、常にエンジン オブジェクト へのFWPM_ACTRL_OPEN が付与されます。 したがって、管理者は次の手順を使用してアクセス権を回復できます。
- SE_TAKE_OWNERSHIP_NAME特権を有効にします。
- FwpmEngineOpen0 を呼び出します。 呼び出し元が組み込み管理者のメンバーであるため、呼び出しは成功します。
- エンジン オブジェクトの所有権を取得します。 呼び出し元に SE_TAKE_OWNERSHIP_NAME 特権があるため、これは成功します。
- DACL を更新します。 所有者は常に WRITE_DAC アクセス権を持っているため、これは成功します
BFE では独自のカスタム監査がサポートされているため、汎用オブジェクト アクセス監査は生成されません。 したがって、SACL は無視されます。
WFP の必要なアクセス権
次の表は、さまざまなフィルタリング プラットフォーム オブジェクトにアクセスするために WFP 関数に必要なアクセス権を示しています。 FwpmFilter* 関数は、標準オブジェクトにアクセスするための例として一覧表示されています。 標準オブジェクトにアクセスする他のすべての関数は 、FwpmFilter* 関数アクセス モデルに従います。
機能 | チェックされたオブジェクト | アクセス権が必要 |
---|---|---|
FwpmEngineOpen0 | エンジン | FWPM_ACTRL_OPEN |
FwpmEngineGetOption0 | エンジン | FWPM_ACTRL_READ |
FwpmEngineSetOption0 | エンジン | FWPM_ACTRL_WRITE |
FwpmSessionCreateEnumHandle0 | エンジン | FWPM_ACTRL_ENUM |
FwpmTransactionBegin0 | エンジン | & FWPM_ACTRL_BEGIN_READ_TXNFWPM_ACTRL_BEGIN_WRITE_TXN |
FwpmFilterAdd0 | コンテナー プロバイダー レイヤー Sub-Layer コールアウト プロバイダー コンテキスト |
FWPM_ACTRL_ADDFWPM_ACTRL_ADD_LINK FWPM_ACTRL_ADD_LINK FWPM_ACTRL_ADD_LINK FWPM_ACTRL_ADD_LINK FWPM_ACTRL_ADD_LINK |
FwpmFilterDeleteById0 FwpmFilterDeleteByKey0 |
フィルター | DELETE |
FwpmFilterGetById0 FwpmFilterGetByKey0 |
フィルター | FWPM_ACTRL_READ |
FwpmFilterCreateEnumHandle0 | コンテナー フィルター |
FWPM_ACTRL_ENUMFWPM_ACTRL_READ |
FwpmFilterSubscribeChanges0 | コンテナー | FWPM_ACTRL_SUBSCRIBE |
FwpmFilterSubscriptionsGet0 | コンテナー | FWPM_ACTRL_READ |
IPsecGetStatistics0 | IPsec SA DB | FWPM_ACTRL_READ_STATS |
IPsecSaContextCreate0 IPsecSaContextGetSpi0 IPsecSaContextAddInbound0 IPsecSaContextAddOutbound0 |
IPsec SA DB | FWPM_ACTRL_ADD |
IPsecSaContextDeleteById0 IPsecSaContextExpire0 |
IPsec SA DB | DELETE |
IPsecSaContextGetById0 | IPsec SA DB | FWPM_ACTRL_READ |
IPsecSaContextCreateEnumHandle0 IPsecSaCreateEnumHandle0 |
IPsec SA DB | & FWPM_ACTRL_ENUMFWPM_ACTRL_READ |
IkeextGetStatistics0 | IKE SA DB | FWPM_ACTRL_READ_STATS |
IkeextSaDeleteById0 | IKE SA DB | DELETE |
IkeextSaGetById0 | IKE SA DB | FWPM_ACTRL_READ |
IkeextSaCreateEnumHandle0 | IKE SA DB | & FWPM_ACTRL_ENUMFWPM_ACTRL_READ |
FwpmNetEventCreateEnumHandle0 | コンテナー | FWPM_ACTRL_ENUM |
FwpmIPsecTunnelAdd0 FwpmIPsecTunnelDeleteByKey0 |
個々のフィルターとプロバイダー コンテキスト以外の追加のアクセス チェックはありません |