在 Windows 篩選平臺 (WFP) 中,基礎篩選引擎 (BFE) 服務會根據存取令牌和安全性描述元實作標準的 Windows 訪問控制模型 。
訪問控制模型
新增新的 WFP 物件時,可以指定安全性描述元,例如篩選條件和子層。 安全性描述項是使用 WFP 管理功能 Fwpm*GetSecurityInfo0 和 Fwpm*SetSecurityInfo0 來管理,其中 * 代表 WFP 對象的名稱。 這些函式在語意上與 Windows GetSecurityInfo 和 SetSecurityInfo 函式相同。
注意
Fwpm*SetSecurityInfo0 函式無法從明確交易內呼叫。
注意
Fwpm*SetSecurityInfo0 函式只有在用來管理在同一會話內建立的動態物件時,才能從動態會話內呼叫。
篩選引擎的預設安全性描述元(下圖中的根引擎物件)如下所示。
- 將GENERIC_ALL (GA) 訪問許可權授與內建 管理員 istrators 群組。
- 將GENERIC_READ (GR) GENERIC_WRITE (GW) GENERIC_EXECUTE (GX) 訪問許可權授與網路設定操作員。
- 將 GRGWGX 訪問許可權授與下列服務安全性識別碼 (SSID:MpsSvc (Windows 防火牆)、NapAgent (網路存取保護代理程式)、PolicyAgent (IPsec 原則代理程式)、RpcSs (遠端過程調用)和 WdiServiceHost (診斷服務主機)。
- 將FWPM_ACTRL_OPEN和FWPM_ACTRL_CLASSIFY授與每個人。 (這些是糧食計劃署特定的訪問許可權,如下表所述。
其餘的預設安全性描述元是透過繼承衍生而來。
有一些存取檢查,例如 Fwpm*Add0、 Fwpm*CreateEnumHandle0、 Fwpm*SubscribeChanges0 函式呼叫,無法在個別物件層級完成。 針對這些函式,每個物件類型都有容器物件。 針對標準物件類型(例如提供者、圖說文字、篩選條件),現有的 Fwpm*GetSecurityInfo0 和 Fwpm*SetSecurityInfo0 函式會多載,讓 Null GUID 參數識別相關聯的容器。 對於其他物件類型(例如網路事件和 IPsec 安全性關聯),有明確的函式可用來管理容器的安全性資訊。
BFE 支援自動繼承任意 存取控制 清單 (DACL) 訪問控制專案 (ACE)。 BFE 不支援系統 存取控制 清單 (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 外,內建系統管理員群組的成員一律會被 授與引擎物件FWPM_ACTRL_OPEN 。 因此,系統管理員可以透過下列步驟重新取得存取權。
- 啟用SE_TAKE_OWNERSHIP_NAME許可權。
- 呼叫 FwpmEngineOpen0。 呼叫成功,因為呼叫端是內建 管理員 istrators 的成員。
- 取得引擎對象的擁有權。 這會成功,因為呼叫端具有 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_TXN和FWPM_ACTRL_BEGIN_WRITE_TXN |
| FwpmFilterAdd0 | 容器提供者 層 子層 圖說文字 提供者內容 |
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_ENUM和FWPM_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_ENUM和FWPM_ACTRL_READ |
| FwpmNetEventCreateEnumHandle0 | 容器 | FWPM_ACTRL_ENUM |
| FwpmIPsecTunnelAdd0 FwpmIPsecTunnelDeleteByKey0 |
除了個別篩選和提供者內容之外,沒有其他存取檢查 |