存取控制 (Windows 篩選平臺)
在 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 |
除了個別篩選和提供者內容之外,沒有其他存取檢查 |