Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Byla provedena vylepšení, která ovlivňují, jak integrované ověřování systému Windows zpracovává HttpWebRequest, HttpListener, SmtpClient, SslStream, NegotiateStreama související třídy v System.Net a souvisejících oborech názvů. Byla přidána podpora pro rozšířenou ochranu za účelem zvýšení zabezpečení.
Tyto změny mohou ovlivnit aplikace, které tyto třídy používají k provádění webových požadavků a přijímání odpovědí, kde se používá integrované ověřování systému Windows. Tato změna může mít vliv také na webové servery a klientské aplikace nakonfigurované tak, aby používaly integrované ověřování systému Windows.
Tyto změny mohou také ovlivnit aplikace, které tyto třídy používají k provádění jiných typů požadavků a přijímání odpovědí, kde se používá integrované ověřování systému Windows.
Změny podpory rozšířené ochrany jsou k dispozici pouze pro aplikace v systémech Windows 7 a Windows Server 2008 R2. Rozšířené funkce ochrany nejsou k dispozici ve starších verzích Windows.
Přehled
Návrh integrovaného ověřování systému Windows umožňuje univerzální odpovědi na výzvy k přihlašovacím údajům, což znamená, že je možné je znovu použít nebo předat. Odpovědi na výzvy by měly být sestaveny minimálně s konkrétními informacemi cíle a nejlépe také s některými informacemi o konkrétních kanálech. Služby pak můžou poskytovat rozšířenou ochranu, aby odpovědi na výzvy s přihlašovacími údaji obsahovaly informace specifické pro službu, jako je hlavní název služby (SPN). Díky informacím v výměnách přihlašovacích údajů můžou služby lépe chránit před škodlivým použitím odpovědí na výzvy k přihlašovacím údajům, které by mohly být nesprávně použity.
Návrh rozšířené ochrany je vylepšení ověřovacích protokolů navržených pro zmírnění útoků na předávací ověřování. Týká se konceptu informací o propojení kanálů a služeb.
Celkové cíle jsou následující:
Pokud se klient aktualizuje tak, aby podporoval rozšířenou ochranu, měly by aplikace poskytovat informace o vazbě kanálu a vazbě služby všem podporovaným ověřovacím protokolům. Informace o vazbě kanálu je možné zadat pouze v případech, kdy existuje kanál (TLS) pro vazbu. Informace o vazbě služby musí být vždy dodány.
Aktualizované servery, které jsou správně nakonfigurované, mohou ověřit informace o vazbě kanálu a služby, pokud se nacházejí v ověřovacím tokenu klienta, a zamítnout pokus o ověření, pokud se vazby kanálu neshodují. V závislosti na scénáři nasazení mohou servery ověřovat vazbu kanálu, vazbu služby nebo obojí.
Aktualizované servery mají možnost přijímat nebo odmítat požadavky klientů z nižších verzí, které neobsahují informace o svázání kanálů na základě politiky.
Informace používané rozšířenou ochranou se skládají z jedné nebo obou následujících dvou částí:
Token vazby kanálu (CBT).
Informace o vazbě služby ve formě Principálu služby nebo hlavního názvu služby.
Informace o vazbě služby značí záměr klienta ověřit se u konkrétního koncového bodu služby. Komunikuje z klienta na server s následujícími vlastnostmi:
Hodnota hlavního názvu služby (SPN) musí být k dispozici pro server provádějící ověřování klientů ve formátu prostého textu.
Hodnota hlavního názvu služby (SPN) je veřejná.
Hlavní název služby (SPN) musí být při přenosu kryptograficky chráněn tak, aby útok typu man-in-the-middle nemohl vložit, odebrat nebo změnit jeho hodnotu.
CBT je vlastnost vnějšího zabezpečeného kanálu (například TLS), která slouží k jeho propojení s konverzací probíhající přes vnitřní kanál autentizovaný klientem. CBT musí mít následující vlastnosti (definované také IETF RFC 5056):
Pokud existuje vnější kanál, hodnota CBT musí být vlastnost identifikující buď vnější kanál, nebo koncový bod serveru, nezávisle příchozí na straně klienta i serveru konverzace.
Hodnota CBT odeslaného klientem nesmí být něco, co může útočník ovlivnit.
O důvěrnosti hodnoty CBT nejsou poskytovány žádné záruky. Toto však neznamená, že hodnotu vazby služby a informace o vazbě kanálu může vždy zkoumat jiný server než ten, který provádí ověřování, protože protokol přenášející CBT je může šifrovat.
CBT musí být při přenosu kryptograficky chráněn z hlediska integrity, aby útočník nemohl vložit, odebrat nebo upravit jeho hodnotu.
Kanálová vazba je prováděna klientem, který přenáší SPN a CBT na server nezměněným způsobem. Server ověří informace o vazbě kanálu v souladu se svými zásadami a odmítne pokusy o ověření, u kterých nevěří, že byl zamýšleným cílem. Tímto způsobem se tyto dva kanály stanou kryptograficky svázané.
Aby se zachovala kompatibilita s existujícími klienty a aplikacemi, může být server nakonfigurovaný tak, aby umožňoval pokusy o ověření klienty, kteří ještě nepodporují rozšířenou ochranu. To se označuje jako "částečně posílená" konfigurace na rozdíl od "plně posílené" konfigurace.
Více komponent v oborech názvů System.Net a System.Net.Security provádí integrované ověřování systému Windows jménem volající aplikace. Tato část popisuje změny součástí System.Net, které při jejich použití integrovaného ověřování systému Windows přidávají rozšířenou ochranu.
Rozšířená ochrana se v současné době podporuje ve Windows 7. Poskytuje se mechanismus, který aplikaci umožňuje určit, jestli operační systém podporuje rozšířenou ochranu.
Změny na podporu rozšířené ochrany
Proces ověřování používaný s integrovaným ověřováním systému Windows v závislosti na použitém ověřovacím protokolu často zahrnuje výzvu vystavenou cílovým počítačem a odesílanou zpět do klientského počítače. Rozšířená ochrana přidává do tohoto procesu ověřování nové funkce.
Obor System.Security.Authentication.ExtendedProtection názvů poskytuje podporu ověřování pomocí rozšířené ochrany pro aplikace. Třída ChannelBinding v tomto oboru názvů představuje vazbu kanálu. ExtendedProtectionPolicy Třída v tomto oboru názvů představuje zásady rozšířené ochrany používané serverem k ověření příchozích klientských připojení. Ostatní členové třídy se používají pod rozšířenou ochranou.
Pro serverové aplikace patří tyto třídy:
A ExtendedProtectionPolicy , který má následující prvky:
Vlastnost OSSupportsExtendedProtection , která označuje, zda operační systém podporuje integrované ověřování systému Windows s rozšířenou ochranou.
Hodnota PolicyEnforcement , která označuje, kdy se mají vynucovat zásady rozšířené ochrany.
Hodnota ProtectionScenario , která označuje scénář nasazení. To má vliv na kontrolu rozšířené ochrany.
Nepovinný ServiceNameCollection seznam, který obsahuje vlastní seznam hlavního názvu služby( SPN), který se používá ke shodě s hlavním názvem služby poskytovaným klientem jako zamýšleným cílem ověřování.
Volitelné ChannelBinding , které obsahuje vlastní vazbu kanálu, která se má použít k ověření. Tento scénář není běžným případem.
Obor System.Security.Authentication.ExtendedProtection.Configuration názvů poskytuje podporu konfigurace ověřování pomocí rozšířené ochrany pro aplikace.
Bylo provedeno několik změn funkcí, které podporují rozšířenou ochranu v existujícím System.Net oboru názvů. Mezi tyto změny patří:
Nová TransportContext třída přidaná do System.Net oboru názvů, která představuje kontext přenosu.
Nové EndGetRequestStream a GetRequestStream přetížené metody ve HttpWebRequest třídě, které umožňují načtení TransportContext pro podporu rozšířené ochrany klientských aplikací.
Doplnění do tříd HttpListener a HttpListenerRequest pro podporu serverových aplikací.
Změna funkce pro podporu rozšířené ochrany klientských aplikací SMTP v existujícím System.Net.Mail oboru názvů:
- Vlastnost TargetName ve třídě SmtpClient, která určuje SPN (hlavní název služby) pro ověření, když je použita rozšířená ochrana pro klientské aplikace SMTP.
Bylo provedeno několik změn funkcí, které podporují rozšířenou ochranu v existujícím System.Net.Security oboru názvů. Mezi tyto změny patří:
Nové BeginAuthenticateAsClient a AuthenticateAsClient přetížené metody ve NegotiateStream třídě, které umožňují předat CBT pro podporu rozšířené ochrany klientských aplikací.
Nové BeginAuthenticateAsServer a AuthenticateAsServer přetížené metody ve NegotiateStream třídě, které umožňují předat ExtendedProtectionPolicy pro podporu rozšířené ochrany serverových aplikací.
Nová TransportContext vlastnost třídy SslStream , která podporuje rozšířenou ochranu klientských a serverových aplikací.
Do SmtpNetworkElement vlastnosti byla přidána možnost konfigurace rozšířené ochrany pro klienty SMTP v System.Net.Security oboru názvů.
Rozšířená ochrana klientských aplikací
Rozšířená podpora ochrany většiny klientských aplikací probíhá automaticky. Třídy HttpWebRequest a SmtpClient podporují rozšířenou ochranu, kdykoliv základní verze Windows tuto funkci podporuje. Instanci HttpWebRequest odešle SPN konstruovaný z Uri. Ve výchozím nastavení SmtpClient instance odešle název hlavní služby vytvořený z názvu hostitele poštovního serveru SMTP.
Pro vlastní ověřování můžou klientské aplikace používat HttpWebRequest.EndGetRequestStream(IAsyncResult, TransportContext) metody nebo HttpWebRequest.GetRequestStream(TransportContext) metody ve HttpWebRequest třídě, které umožňují načtení TransportContext a CBT pomocí GetChannelBinding metody.
Hlavní název služby (SPN), který instance HttpWebRequest použije pro integrované ověřování systému Windows při odesílání do dané služby, lze přepsat nastavením vlastnosti CustomTargetNameDictionary.
Vlastnost TargetName lze použít k nastavení vlastního záznamu SPN pro integrované ověřování systému Windows pro připojení SMTP.
Rozšířená ochrana pro serverové aplikace
HttpListener automaticky poskytuje mechanismy pro ověřování vazeb služby při ověřování HTTP.
Nejbezpečnějším scénářem je povolení rozšířené ochrany předpon HTTPS://
. V tomto případě nastavte HttpListener.ExtendedProtectionPolicy na ExtendedProtectionPolicy s PolicyEnforcement nastaveným na WhenSupported nebo Always, a ProtectionScenario nastavte na TransportSelected. Hodnota WhenSupported nastaví HttpListener do částečně posíleného režimu, zatímco Always odpovídá plně posílenému režimu.
V této konfiguraci, když je vznesen požadavek na server prostřednictvím vnějšího zabezpečeného kanálu, se vnější kanál dotazuje na vazbu kanálu. Tato vazba kanálu se předá k volání autentizace v rámci SSPI, která ověřují, že ověřovací blob odpovídá vazbě kanálu. Existují tři možné výsledky:
Základní operační systém serveru nepodporuje rozšířenou ochranu. Požadavek nebude vystaven aplikaci a klientovi se vrátí neautorizovaná odpověď (401). Do zdroje trasování se zaprotokoluje zpráva HttpListener specifikující důvod selhání.
Volání SSPI selže, což znamená, že klient zadal vazbu kanálu, která neodpovídá očekávané hodnotě načtené z vnějšího kanálu, nebo se klientovi nepodařilo poskytnout vazbu kanálu, pokud byly na serveru nakonfigurovány Alwayszásady rozšířené ochrany . V obou případech se požadavek nezpřístupní aplikaci a klientovi se vrátí neautorizovaná odpověď (401). Do zdroje trasování se zaprotokoluje zpráva HttpListener specifikující důvod selhání.
Klient určuje správnou vazbu kanálu nebo se může připojit bez zadání vazby kanálu, protože zásady rozšířené ochrany na serveru jsou nakonfigurovány s WhenSupported. Požadavek se vrátí do aplikace ke zpracování. Automaticky se neprovádí žádná kontrola názvu služby. Aplikace se může rozhodnout provést vlastní ověření názvu služby pomocí ServiceName vlastnosti, ale za těchto okolností je redundantní.
Pokud aplikace provádí vlastní volání SSPI k provádění ověřování na základě objektů blob předávajících se tam a zpět v těle požadavku HTTP a chce využívat vazbu kanálu, musí načíst očekávanou vazbu kanálu z vnějšího zabezpečeného kanálu, aby ji HttpListener mohla předat nativní funkci Win32 AcceptSecurityContext. Použijte vlastnost TransportContext a zavolejte metodu GetChannelBinding k načtení CBT. Podporují se jenom vazby koncových bodů. Pokud je zadáno něco jiného Endpoint, bude vyvolána NotSupportedException. Pokud základní operační systém podporuje vazbu kanálu, metoda GetChannelBinding vrátí ChannelBindingSafeHandle zabalený ukazatel na vazbu kanálu, který je vhodný pro předání do funkce AcceptSecurityContext jako pvBuffer, což je člen struktury SecBuffer předané v parametru pInput
. Vlastnost Size obsahuje délku vazby kanálu v bajtech. Pokud podkladový operační systém nepodporuje vazby kanálů, funkce vrátí null
.
Dalším možným scénářem je povolení rozšířené ochrany předpon HTTP://
v případě, že se nepoužívají proxy servery. V tomto případě nastavte HttpListener.ExtendedProtectionPolicy na ExtendedProtectionPolicy s PolicyEnforcement nastaveným na WhenSupported nebo Always, a ProtectionScenario nastavte na TransportSelected. Hodnota WhenSupported nastaví HttpListener do částečně posíleného režimu, zatímco Always odpovídá plně posílenému režimu.
Výchozí seznam povolených názvů služeb se vytvoří na základě předpon, které byly zaregistrovány v HttpListenersouboru . Tento výchozí seznam lze prozkoumat prostřednictvím DefaultServiceNames vlastnosti. Pokud tento seznam není vyčerpávající, může aplikace zadat vlastní kolekci názvů služeb v konstruktoru ExtendedProtectionPolicy pro třídu, která se použije místo výchozího seznamu názvů služeb.
V této konfiguraci probíhá při provedení požadavku na server bez vnějšího zabezpečeného kanálu ověřování normálně, bez kontroly vazby kanálu. Pokud ověřování proběhne úspěšně, kontext se dotazuje na název služby, který klient zadal a ověřil v seznamu přijatelných názvů služeb. Existují čtyři možné výsledky:
Základní operační systém serveru nepodporuje rozšířenou ochranu. Požadavek nebude vystaven aplikaci a klientovi se vrátí neautorizovaná odpověď (401). Do zdroje trasování se zaprotokoluje zpráva HttpListener specifikující důvod selhání.
Základní operační systém klienta nepodporuje rozšířenou ochranu. WhenSupported V konfiguraci bude pokus o ověření úspěšný a požadavek se vrátí do aplikace. V této Always konfiguraci se pokus o ověření nezdaří. Požadavek nebude vystaven aplikaci a klientovi se vrátí neautorizovaná odpověď (401). Do zdroje trasování se zaprotokoluje zpráva HttpListener specifikující důvod selhání.
Základní operační systém klienta podporuje rozšířenou ochranu, ale aplikace neurčila vazbu služby. Požadavek nebude vystaven aplikaci a klientovi se vrátí neautorizovaná odpověď (401). Do zdroje trasování se zaprotokoluje zpráva HttpListener specifikující důvod selhání.
Klient určil konfiguraci služby. Vazba služby se porovnává se seznamem povolených služebních vazeb. Pokud odpovídá, požadavek se vrátí do aplikace. Jinak požadavek nebude vystaven aplikaci a klientovi se automaticky vrátí neautorizovaná odpověď (401). Do zdroje trasování se zaprotokoluje zpráva HttpListener specifikující důvod selhání.
Pokud tento jednoduchý přístup s povoleným seznamem přijatelných názvů služeb není dostatečný, může aplikace zadat vlastní ověření názvu služby dotazováním na ServiceName vlastnost. V případech 1 a 2 výše vlastnost vrátí null
. V případě 3 vrátí prázdný řetězec. V případě 4 se vrátí název služby určený klientem.
Tyto rozšířené funkce ochrany můžou také serverové aplikace používat k ověřování s jinými typy požadavků a při použití důvěryhodných proxy serverů.