Integrované ověřování systému Windows s rozšířenou ochranou

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í. To se týká konceptu informací o vazbě kanálů a služeb.

Celkové cíle jsou následující:

  1. 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 by měly být vždy zadány.

  2. 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í můžou servery ověřit vazbu kanálu, vazbu služby nebo obojí.

  3. Aktualizované servery mají možnost přijímat nebo odmítat požadavky klientů nižší úrovně, které neobsahují informace o vazbě kanálu na základě zásad.

Informace používané rozšířenou ochranou se skládají z jedné nebo obou následujících dvou částí:

  1. Token vazby kanálu nebo CBT.

  2. Informace o vazbě služby ve formě hlavního názvu 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 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) sloužícího k navázání (svázání) ke konverzaci přes vnitřní kanál ověřený 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 tajemství hodnoty CBT nejsou provedeny žádné záruky. To však neznamená, že hodnotu vazby služby a informace o vazbě kanálu je možné vždy prozkoumat jakýmkoli jiným serverem, ale server provádějící ověřování, protože protokol, který obsahuje CBT, ho může šifrovat.

  • CBT musí být při přenosu chráněn kryptograficky integritou, aby útočník nemohl vložit, odebrat nebo upravit jeho hodnotu.

Vazby kanálu provádí klient, který přenáší hlavní název služby (SPN) a CBT na server manipulací. Server ověří informace o vazbě kanálu v souladu se svými zásadami a odmítne pokusy o ověření, pro které se domnívá, že se jedná o zamýšlený cíl. 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 a System.NetSystem.Net.Security oborů názvů 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 rozšířené ochrany podpory

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. ChannelBinding Třída 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í s 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ů. Dochází k následujícím změnám:

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 SmtpClient třídě, která představuje hlavní název služby pro ověřování při použití rozšířené ochrany 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ů. Dochází k následujícím změnám:

Byla SmtpNetworkElement přidána vlastnost pro podporu 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 podporují SmtpClient rozšířenou ochranu vždy, když základní verze Windows podporuje rozšířenou ochranu. Instance HttpWebRequest odešle hlavní název služby vytvořené z objektu Uri. Ve výchozím nastavení SmtpClient instance odešle hlavní název 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ý se má použít pro integrované ověřování systému Windows odeslané HttpWebRequest instancí do dané služby, lze přepsat nastavením CustomTargetNameDictionary vlastnosti.

Vlastnost TargetName lze použít k nastavení vlastního hlavního názvu služby 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 hodnotu nastavenou WhenSupportedPolicyEnforcementExtendedProtectionPolicy na hodnotu nebo Alwaysa ProtectionScenario nastavte TransportSelected hodnotu WhenSupportedHttpListener částečně posíleného režimu, zatímco Always odpovídá plně posílený režim.

V této konfiguraci při provedení požadavku 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ává voláním SSPI ověřování, která ověřují, že vazba kanálu v objektu blob ověřování odpovídá. Existují tři možné výsledky:

  1. 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 HttpListener zpráva určující důvod selhání.

  2. 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 HttpListener zpráva určující důvod selhání.

  3. 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žadavkem 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ávaných zpět v těle požadavku HTTP a chce podporovat vazbu kanálu, musí načíst očekávanou vazbu kanálu z vnějšího zabezpečeného kanálu, aby HttpListener ji předala nativní funkci Win32 AcceptSecurityContext . K tomu použijte vlastnost a metodu TransportContext volání GetChannelBinding k načtení CBT. Podporují se jenom vazby koncových bodů. Pokud je zadáno něco jiného Endpoint , NotSupportedException vyvolá se chyba. Pokud základní operační systém podporuje vazbu kanálu, GetChannelBinding metoda vrátí ChannelBindingSafeHandle zabalení ukazatele na vazbu kanálu vhodné pro předání funkce AcceptSecurityContext jako pvBuffer č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 hodnotu nastavenou WhenSupportedPolicyEnforcementExtendedProtectionPolicy na hodnotu nebo Alwaysa ProtectionScenario nastavte TransportSelected hodnotu WhenSupportedHttpListener částečně posíleného režimu, zatímco Always odpovídá plně posílený režim.

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 ověřování vnějšího zabezpečeného kanálu 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:

  1. 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 HttpListener zpráva určující důvod selhání.

  2. 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. Always V 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 HttpListener zpráva určující důvod selhání.

  3. 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 HttpListener zpráva určující důvod selhání.

  4. Klient zadal vazbu služby. Vazba služby se porovnává se seznamem povolených vazeb služby. 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 HttpListener zpráva určují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 vrátí nullvlastnost . 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ů.

Viz také