Kontrola dostępu (platforma filtrowania systemu Windows)
W przypadku platformy filtrowania systemu Windows (WFP) usługa podstawowego aparatu filtrowania (BFE) implementuje standardowy model kontroli dostępu systemu Windows na podstawie tokenów dostępu i deskryptorów zabezpieczeń.
Model kontroli dostępu
Deskryptory zabezpieczeń można określić podczas dodawania nowych obiektów WFP, takich jak filtry i warstwy podrzędne. Deskryptory zabezpieczeń są zarządzane przy użyciu funkcji zarządzania WFP Fwpm*GetSecurityInfo0 i Fwpm*SetSecurityInfo0, gdzie * oznacza nazwę obiektu WFP. Te funkcje są semantycznie identyczne z funkcjami Windows GetSecurityInfo i SetSecurityInfo.
Notatka
Funkcje Fwpm*SetSecurityInfo0 nie mogą być wywoływane z poziomu jawnej transakcji.
Notatka
Funkcje Fwpm*SetSecurityInfo0 można wywoływać tylko z poziomu sesji dynamicznej, jeśli są one używane do zarządzania obiektem dynamicznym utworzonym w ramach tej samej sesji.
Domyślny deskryptor zabezpieczeń silnika filtrującego (główny obiekt Silnika w poniższym diagramie) jest jak poniżej.
- Przyznaj GENERIC_ALL (GA) prawa dostępu do grupy Administratorzy (wbudowanej).
- Przyznaj GENERIC_READ (GR) GENERIC_WRITE (GW) GENERIC_EXECUTE (GX) prawa dostępu operatorom konfiguracji sieci.
- Przyznaj GRGWGX prawa dostępu do następujących identyfikatorów zabezpieczeń usługi (SSID): MpsSvc (Zapora systemu Windows), NapAgent (agent ochrony dostępu do sieci), PolicyAgent (agent zasad IPsec), RpcSs (zdalne wywołanie procedury) i WdiServiceHost (host usługi diagnostycznej).
- Przyznaj wszystkim FWPM_ACTRL_OPEN i FWPM_ACTRL_CLASSIFY. (Są to prawa dostępu specyficzne dla programu WFP, opisane w poniższej tabeli).
Pozostałe domyślne deskryptory zabezpieczeń są uzyskiwane za pośrednictwem dziedziczenia.
Istnieją pewne kontrole dostępu, których nie można wykonać na poziomie pojedynczego obiektu, takie jak wywołania funkcji Fwpm*Add0, Fwpm*CreateEnumHandle0, Fwpm*SubscribeChanges0. W przypadku tych funkcji istnieją obiekty kontenera dla każdego typu obiektu. W przypadku standardowych typów obiektów (na przykład dostawców, wywołań, filtrów) istniejące funkcje Fwpm*GetSecurityInfo0 i Fwpm*SetSecurityInfo0 są przeciążone, tak aby parametr null GUID identyfikował skojarzony kontener. W przypadku innych typów obiektów (na przykład zdarzeń sieciowych i skojarzeń zabezpieczeń IPsec) istnieją jawne funkcje do zarządzania informacjami o zabezpieczeniach kontenera.
BFE obsługuje automatyczne dziedziczenie wpisów listy kontroli dostępu (DACL - Discretionary Access Control List). BFE nie obsługuje wpisów kontroli dostępu w Systemowej Liście Kontroli Dostępu (SACL) ACE. Obiekty dziedziczą aces z ich kontenera. Kontenery dziedziczą ACEs z silnika filtrującego. Ścieżki propagacji są wyświetlane na poniższym diagramie.
W przypadku standardowych typów obiektów BFE wymusza wszystkie ogólne i standardowe prawa dostępu. Ponadto WFP definiuje następujące określone prawa dostępu.
Prawo dostępu do WFP | Opis |
---|---|
FWPM_ACTRL_ADD |
Wymagane do dodania obiektu do kontenera. |
FWPM_ACTRL_ADD_LINK |
Wymagane do utworzenia skojarzenia z obiektem. Aby na przykład dodać filtr odnoszący się do wywołania, osoba wywołująca musi mieć dostęp typu ADD_LINK do tego wywołania. |
FWPM_ACTRL_BEGIN_READ_TXN |
Wymagane do rozpoczęcia jawnej transakcji odczytu. |
FWPM_ACTRL_BEGIN_WRITE_TXN |
Wymagane do rozpoczęcia jawnej transakcji zapisu. |
FWPM_ACTRL_CLASSIFY |
Wymagane jest klasyfikowanie względem warstwy trybu użytkownika. |
FWPM_ACTRL_ENUM |
Wymagane do wyliczenia obiektów w kontenerze. Jednak moduł wyliczający zwraca tylko obiekty, do których obiekt wywołujący ma dostęp FWPM_ACTRL_READ. |
FWPM_ACTRL_OPEN |
Wymagane do otwarcia sesji z BFE. |
FWPM_ACTRL_READ |
Wymagane do odczytania właściwości obiektu. |
FWPM_ACTRL_READ_STATS |
Wymagane do odczytu statystyk. |
FWPM_ACTRL_SUBSCRIBE |
Wymagane do subskrybowania powiadomień. Subskrybenci otrzymają tylko powiadomienia dotyczące obiektów, do których mają dostęp FWPM_ACTRL_READ. |
FWPM_ACTRL_WRITE |
Wymagane do ustawienia opcji silnika. |
Funkcja BFE pomija wszystkie kontrole dostępu dla wywołań w trybie jądra.
Aby uniemożliwić administratorom zablokowanie się z BFE, członkowie wbudowanej grupy administratorów są zawsze przyznawani FWPM_ACTRL_OPEN do obiektu silnika. W związku z tym administrator może odzyskać dostęp za pomocą poniższych kroków.
- Włącz uprawnienia SE_TAKE_OWNERSHIP_NAME.
- Wywołaj FwpmEngineOpen0. Wywołanie powiedzie się, ponieważ obiekt wywołujący jest członkiem grupy Wbudowani Administratorzy.
- Przejmij własność obiektu silnika. Działa to, ponieważ wywołujący ma uprawnienia SE_TAKE_OWNERSHIP_NAME.
- Zaktualizuj DACL. Powodzenie tego jest możliwe, ponieważ właściciel zawsze ma dostęp do WRITE_DAC.
Ponieważ BFE obsługuje własne niestandardowe inspekcje, nie generuje ogólnych inspekcji dostępu do obiektów. W związku z tym SACL jest ignorowany.
Wymagane prawa dostępu WFP
W poniższej tabeli przedstawiono prawa dostępu wymagane przez funkcje WFP w celu uzyskania dostępu do różnych obiektów platformy filtrowania. Funkcje FwpmFilter* są wyświetlane jako przykład uzyskiwania dostępu do obiektów standardowych. Wszystkie inne funkcje, które uzyskują dostęp do obiektów standardowych, są zgodne z modelem dostępu funkcji FwpmFilter*.
Funkcja | Sprawdzono obiekt | Wymagany dostęp |
---|---|---|
FwpmEngineOpen0 | Silnik | FWPM_ACTRL_OPEN |
FwpmEngineGetOption0 | Silnik | FWPM_ACTRL_READ |
FwpmEngineSetOption0 | Silnik | FWPM_ACTRL_WRITE |
FwpmSessionCreateEnumHandle0 | Silnik | FWPM_ACTRL_ENUM |
FwpmTransactionBegin0 | Silnik | FWPM_ACTRL_BEGIN_READ_TXN & FWPM_ACTRL_BEGIN_WRITE_TXN |
FwpmFilterAdd0 | Dostawca kontenerów Warstwa Sub-Layer Objaśnienie Kontekst dostawcy |
FWPM_ACTRL_ADDFWPM_ACTRL_ADD_LINK FWPM_ACTRL_ADD_LINK FWPM_ACTRL_ADD_LINK FWPM_ACTRL_ADD_LINK FWPM_ACTRL_ADD_LINK |
FwpmFilterDeleteById0 FwpmFilterDeleteByKey0 |
Filtr | DELETE |
FwpmFilterGetById0 FwpmFilterGetByKey0 |
Filtr | FWPM_ACTRL_READ |
FwpmFilterCreateEnumHandle0 | Filtr kontenera |
FWPM_ACTRL_ENUMFWPM_ACTRL_READ |
FwpmFilterSubscribeChanges0 | Kontener | FWPM_ACTRL_SUBSCRIBE |
FwpmFilterSubscriptionsGet0 | Kontener | FWPM_ACTRL_READ |
IPsecGetStatistics0 | IPsec SA DB | FWPM_ACTRL_READ_STATS |
IPsecSaContextCreate0 IPsecSaContextGetSpi0 IPsecSaContextAddInbound0 IPsecSaContextAddOutbound0 |
Baza danych SA IPsec | FWPM_ACTRL_ADD |
IPsecSaContextDeleteById0 IPsecSaContextExpire0 |
Baza danych SA IPsec | USUŃ |
IPsecSaContextGetById0 | IPsec SA DB | FWPM_ACTRL_READ |
IPsecSaContextCreateEnumHandle0 IPsecSaCreateEnumHandle0 |
IPsec SA DB | FWPM_ACTRL_ENUM & FWPM_ACTRL_READ |
IkeextGetStatistics0 | Baza danych IKE SA | FWPM_ACTRL_READ_STATS |
IkeextSaDeleteById0 | Baza danych IKE SA | USUŃ |
IkeextSaGetById0 | Baza danych IKE SA | FWPM_ACTRL_READ |
IkeextSaCreateEnumHandle0 | Baza danych IKE SA | FWPM_ACTRL_ENUM & FWPM_ACTRL_READ |
FwpmNetEventCreateEnumHandle0 | Kontener | FWPM_ACTRL_ENUM |
FwpmIPsecTunnelAdd0 FwpmIPsecTunnelDeleteByKey0 |
Brak dodatkowych kontroli dostępu poza tymi dla poszczególnych filtrów i kontekstów dostawcy |