Sdílet prostřednictvím


Maskování (COM)

Cloaking je bezpečnostní funkce COM, která určuje, jakou identitu klient projektuje vůči serveru během zosobnění. Při nastavování maskování zprostředkující server maskuje svou vlastní identitu a prezentuje identitu klienta na server, který volá jménem klienta. V podstatě; identita klienta, kterou server vidí, je identita přidružená k proxy serveru. Identita proxy serveru je určena několika faktory, z nichž jedna je typem maskování, které je nastaveno (pokud existuje). Zprostředkovatel zabezpečení Schannel nepodporuje skrývání.

Následující témata obsahují další informace o cloakingu:

Typy cloakingu

Existují dva typy maskování: statické maskování a dynamické maskování:

  • Při statickém zakrývání (EOAC_STATIC_CLOAKING) server vnímá token vlákna z prvního volání od klienta na server. Pokud byla při prvním volání dříve nastavena identita proxy serveru během volání CoSetProxyBlanket, použije se tato identita proxy serveru. Pokud se ale dříve nenastavila identita proxy serveru, použije se token vlákna. Pokud neexistuje žádný token vlákna, použije se token procesu. Pro všechna budoucí volání se použije identita nastavená na prvním volání.
  • Při použití dynamického maskování (EOAC_DYNAMIC_CLOAKING) se při každém volání aktuálního tokenu vlákna (pokud existuje token vlákna) používá k určení identity klienta. Pokud neexistuje token vlákna, použije se token procesu. To znamená, že servery, které jsou volány jménem klienta během zosobnění, vidí identitu COM klienta, který volání inicioval, což je obecně požadované chování. (Aby bylo zosobnění úspěšné, musí klient dát serveru autoritu pro zosobnění nastavením příslušné úrovně zosobnění. Další informace najdete v tématu úrovně zosobnění.) Tento typ maskování je nákladný.

Jak cloaking ovlivňuje identitu klienta

Když se provede šifrované volání a server požádá klienta o jeho identitu, obvykle získá identitu svázanou s proxy serverem. (Ověřovací služba někdy provádí překlad ze skutečné identity, ale obecně identita proxy serveru je identita, kterou vidí server.) Proxy server představuje identitu serveru, která závisí na typu maskování, které je nastaveno a další faktory.

Pro shrnutí je identita klienta funkcí sady příznaků maskování, tokenu procesu, přítomnosti nebo nepřítomnosti tokenu vlákna a toho, jestli byla dříve nastavena identita proxy serveru. Následující tabulka ukazuje výslednou identitu proxy serveru (identitu klienta), když se tyto faktory liší.

Maskování příznaků Přítomnost tokenu vlákna Dříve nastavená identita proxy serveru Identita proxy serveru (identita klienta)
Zakrytí není nastaveno
Je mi to jedno
Nezajímá mě
Identita tokenu procesu nebo ověřování
EOAC_STATIC_CLOAKING
Přítomný
Ne
Identifikátor vlákna
EOAC_STATIC_CLOAKING
Přítomný
Ano
Aktuální identita proxy serveru
EOAC_STATIC_CLOAKING
Není k dispozici
Ne
Procesní token
EOAC_STATIC_CLOAKING
Není k dispozici
Ano
Aktuální identita proxy serveru
EOAC_DYNAMICKÉ_MASKOVÁNÍ
Přítomný
Nezajímá mě
Token vlákna
EOAC_Dynamické Maskování
Není k dispozici
Nezajímá mě
Token procesu

Následující vývojový diagram znázorňuje, jak se identita proxy serveru určuje v různých situacích.

diagram, který znázorňuje tok pro určení identity proxy serveru.

Nastavení cloakingu

Cloaking je nastaven jako příznak schopnosti ve volání CoInitializeSecurity, který nastavuje cloaking pro celý proces. Možnost cloakingu se pak nastaví, dokud ho klient nezmění prostřednictvím volání IClientSecurity::SetBlanket (nebo na CoSetProxyBlanket), který nastaví cloaking pro proxy.

Ve výchozím nastavení není maskování nastaveno. Pokud ho chcete nastavit, předejte EOAC_STATIC_CLOAKING nebo EOAC_DYNAMIC_CLOAKING parametru pCapabilities v CoInitializeSecurity nebo SetBlanket.

Pokud je povolené statické zavíjení pomocí CoInitializeSecurity, každý proxy server převezme token (vlákno nebo proces) při prvním volání proxy serveru. Pokud je povoleno statické maskování pomocí SetBlanket, proxy převezme token z vlákna v daný moment. Pokud při volání SetBlanket není k dispozici token vlákna, použije se token procesu pro identitu proxy. V podstatě SetBlanket opravuje identitu proxy serveru.

Při dynamickém maskování se identita proxy serveru určuje stejným způsobem bez ohledu na to, jestli je dynamické maskování nastaveno pomocí CoInitializeSecurity nebo s SetBlanket. Aktuální token vlákna se používá, pokud existuje; jinak se použije token procesu.

Pokud je cloaking nastaven pro celý proces prostřednictvím volání CoInitializeSecurity a chcete volat pomocí tokenu procesu, nezosobňovat při volání.

Úrovně maskování a zosobnění

Jak už bylo zmíněno dříve, schopnost maskování určuje, jaká identita se předá serveru během zosobnění. Cloaking umožňuje serveru projektovat identitu jinou než vlastní na jiný server, který volá jménem klienta. Úroveň zosobnění označuje, kolik autority klient serveru udělil.

Zosobnění bez maskování funguje, ale nemusí být nejlepší volbou, protože v některých případech musí konečný server znát identitu počátečního volajícího. Toho nelze dosáhnout bez zakrývání, protože je obtížné zajistit, aby ke vzdálenému počítači měli přístup pouze autorizovaní klienti. Při použití zosobnění bez maskování se identita předaná podřízeným serveru týká procesu okamžitého volání.

Maskování však není užitečné bez přetvářky. Maskování dává smysl pouze tehdy, když klient nastavil úroveň zosobnění na impersonate nebo delegate. (S nižšími úrovněmi zosobnění nemůže server provádět zastřené volání.) Zda je cloaking úspěšné, závisí na počtu hranic počítače, které jsou překročeny, a na úrovni zosobnění, což označuje, jakou autoritu má server k jednání jménem klienta.

V některých situacích má smysl, aby server nastavil maskování, když klient nastaví úroveň zosobnění na RPC_C_IMP_LEVEL_IMPERSONATE. Platí však určitá omezení. Pokud původní klient nastaví úroveň zosobnění na RPC_C_IMP_LEVEL_IMPERSONATE, může zprostředkující server (fungující jako klient na stejném počítači) maskovat pouze přes jednu počítačovou hranici. Důvodem je to, že token zosobnění na úrovni impersonace může být předán pouze přes jednu hranici počítače. Po překročení hranice počítače je možné získat přístup pouze k místním prostředkům. Identita prezentovaná na serveru závisí na typu zakrývání, které je nastaveno. Pokud není nastaveno žádné maskování, identita prezentovaná serveru bude identitou procesu, který provádí okamžité volání.

Chcete-li maskovat přes více hranic počítače, musíte zadat odpovídající příznak schopnosti maskování i napodobení na úrovni delegace. S tímto typem zosobnění se serveru předávají přihlašovací údaje klienta pro místní i síť, takže token zosobnění může překračovat libovolný počet hranic počítače. Identita prezentovaná na serveru opět závisí na typu zakrývání, které je nastaveno. Pokud není nastaveno žádné maskování při zosobnění na úrovni delegáta, identita prezentovaná serveru je identita procesu, který provádí volání.

Předpokládejme například, že proces A volá B a B volá C. B nastavil skrývání a A nastavil úroveň zosobnění na přímé zosobnění. Pokud jsou A, B a C ve stejném počítači, předání tokenu zosobnění z A do B a pak do C bude fungovat. Pokud jsou však A a C na stejném počítači a B není, předání tokenu bude fungovat mezi A a B, ale nikoli z B do C. Volání z B do C selže, protože při skrývání nemůže B zavolat C. Pokud ale A nastaví úroveň zosobnění na delegování, může být token předán z B do C a volání může proběhnout úspěšně.

Scénáře maskování

Na následujícím obrázku proces A volá B, volá C, volá D, když není zakrývání nastaveno. V důsledku toho vidí každý zprostředkující proces identitu procesu, který ho volal.

Diagram, který znázorňuje proces, když není aktivováno maskování.

Při statickém zakrývání vidí server identitu proxy serveru, která byla nastavena během prvního volání klienta na server. Následující obrázek znázorňuje příklad identity proxy serveru, která se nastavuje během volání z B do C. Při následném volání proces D uvidí identitu B, když je statické zakrývání nastaveno B a C.

Diagram znázorňující proces statického zakrývání

Při dynamickém maskování je identita volajícího během imitace založena na aktuálním tokenu vlákna, pokud existuje. Následující obrázek znázorňuje situaci, kdy B a C nastavili dynamické zakrývání a D vidí identitu A, a to i přes dřívější volání B do C.

diagram, který znázorňuje proces dynamického maskování

Delegování a napodobování