Sdílet prostřednictvím


Řešení problému s protokolem TLS 1.0, 2. vydání

Tento dokument obsahuje nejnovější pokyny k rychlé identifikaci a odebrání závislostí protokolu TLS (Transport Layer Security) verze 1.0 v softwaru založeném na operačních systémech Microsoftu, a to s podrobnými informacemi o změnách produktů a nových funkcích poskytovaných Microsoftem za účelem ochrany vlastních zákazníků a online služeb. Je určená jako výchozí bod pro vytvoření plánu migrace do síťového prostředí TLS 1.2 nebo novější. I když zde popsané řešení můžou přenášet a pomoct s odebráním použití protokolu TLS 1.0 v operačních systémech nebo kryptografických knihovnách jiných společností než Microsoft, nezaměřují se na tento dokument.

TLS 1.0 je protokol zabezpečení definovaný v roce 1999 pro vytvoření šifrovacích kanálů přes počítačové sítě. Společnost Microsoft tento protokol podporuje od verze Windows XP/Server 2003. I když už není výchozí protokol zabezpečení, který používá moderní operační systém, protokol TLS 1.0 je stále podporovaný pro zpětnou kompatibilitu. Vývoj zákonných požadavků a nové chyby zabezpečení v protokolu TLS 1.0 poskytují společnostem pobídku k úplné zakázání protokolu TLS 1.0.

Microsoft doporučuje, aby zákazníci před tímto problémem napřed odebrali závislosti PROTOKOLU TLS 1.0 ve svých prostředích a zakázali protokol TLS 1.0 na úrovni operačního systému, pokud je to možné. Vzhledem k tomu, že softwarové odvětví podporuje protokol TLS 1.0, důrazně doporučujeme, aby jakýkoli plán vyřazení protokolu TLS 1.0 obsahoval následující:

  • Analýza kódu pro vyhledání nebo opravu pevně zakódovaných instancí protokolu TLS 1.0 nebo starších protokolů zabezpečení

  • Prohledávání koncových bodů sítě a analýza provozu za účelem identifikace operačních systémů pomocí protokolů TLS 1.0 nebo starších protokolů

  • Úplné regresní testování vaší kompletní aplikační struktury s vypnutým protokolem TLS 1.0.

  • Migrace starších operačních systémů a vývojových knihoven/architektur na verze, které ve výchozím nastavení umožňují vyjednávání protokolu TLS 1.2.

  • Testování kompatibility napříč operačními systémy používanými vaší firmou k identifikaci problémů s podporou protokolu TLS 1.2

  • Koordinace s vlastními obchodními partnery a zákazníky, aby je informovali o přechodu na vyřazení protokolu TLS 1.0.

  • Pochopení, kteří klienti se možná již nebudou moci připojit k vašim serverům, jakmile bude zakázán protokol TLS 1.0.

Cílem tohoto dokumentu je poskytnout doporučení, která mohou pomoci odebrat technické blokátory, které brání v deaktivaci protokolu TLS 1.0, a zároveň zvyšují přehled o dopadu této změny na vaše vlastní zákazníky. Dokončení takových šetření může pomoct snížit obchodní dopad dalšího ohrožení zabezpečení protokolu TLS 1.0. Pro účely tohoto dokumentu obsahují odkazy na vyřazení protokolu TLS 1.0 také protokol TLS 1.1.

Podnikoví vývojáři softwaru mají strategickou potřebu přijmout bezpečnější a agilnější řešení (jinak označovaná jako Crypto Agility) k řešení budoucích ohrožení zabezpečení protokolu. I když tento dokument navrhuje agilní řešení pro odstranění pevného kódování TLS, širší řešení kryptografické flexibility jsou nad rámec tohoto dokumentu.

Aktuální stav implementace protokolu TLS 1.0 od Microsoftu

Implementace protokolu TLS 1.0 od Microsoftu je bez známých ohrožení zabezpečení. Vzhledem k potenciálu budoucích útoků na downgrade protokolů a dalším zranitelnostem TLS 1.0, které nejsou specifické pro implementaci Microsoftu, se doporučuje odstranit závislosti na všech bezpečnostních protokolech starších než TLS 1.2, pokud je to možné (TLS 1.1/1.0/SSLv3/SSLv2).

Při plánování této migrace na protokol TLS 1.2+ by vývojáři a správci systému měli vědět o potenciálu pevně zakódování verzí protokolu v aplikacích vyvinutých jejich zaměstnanci a partnery. Pevné zakódování zde znamená, že verze PROTOKOLU TLS je opravená na verzi, která je zastaralá a méně zabezpečená než novější verze. Novější verze protokolu TLS, než je pevně zakódovaná verze, nelze použít bez úpravy příslušného programu. Tuto třídu problému nelze vyřešit bez změn zdrojového kódu a nasazení aktualizací softwaru. Pevné zakódování verzí protokolu bylo v minulosti běžné pro účely testování a podpory, protože mnoho různých prohlížečů a operačních systémů mělo různou úroveň podpory protokolu TLS.

Podporované verze protokolu TLS ve Windows

Mnoho operačních systémů má zastaralé výchozí hodnoty verze protokolu TLS nebo podporují stropy, pro které je potřeba počítat.

Obrázek 1: Podpora protokolu zabezpečení podle verze operačního systému

Operační systém Windows SSLv2 SSLv3 TLS 1.0 TLS 1.1 TLS 1.2 TLS 1.3
Windows Vista Enabled Enabled Enabled Nepodporováno Nepodporováno Nepodporováno
Systém Windows Server 2008 Enabled Enabled Enabled Zakázán* Zakázán* Nepodporováno
Windows 7 (WS2008 R2) Enabled Enabled Enabled Zakázán* Zakázán* Nepodporováno
Windows 8 (WS2012) Disabled Enabled Enabled Enabled Enabled Nepodporováno
Windows 8.1 (WS2012 R2) Disabled Enabled Enabled Enabled Enabled Nepodporováno
Systém Windows 10 Disabled Enabled Enabled Enabled Enabled Nepodporováno
Windows 11 Disabled Enabled Enabled Enabled Enabled Enabled
Windows Server 2016 Nepodporováno Disabled Enabled Enabled Enabled Nepodporováno
Windows Server 2016 Nepodporováno Disabled Enabled Enabled Enabled Nepodporováno
Windows Server 2019 Nepodporováno Disabled Enabled Enabled Enabled Nepodporováno
Windows Server 2019 GS Edition Nepodporováno Disabled Disabled Disabled Enabled Nepodporováno
Windows Server 2022 Nepodporováno Disabled Disabled Disabled Enabled Enabled

Windows Server 2019 GS edition je kompatibilní s Microsoft SDL, TLS 1.2 pouze s omezenou sadou šifrovacích sad.

Windows Server 2022 edition je kompatibilní s Microsoft SDL, TLS 1.2 a TLS 1.3 pouze s omezenou sadou šifrovacích sad.

Protokol TLS 1.1/1.2 je možné v systému Windows Server 2008 povolit prostřednictvím tohoto volitelného balíčku služby Windows Update.

Další informace o vyřazení protokolu TLS 1.0/1.1 v prohlížeči IE/Edge najdete v tématu Modernizace připojení TLS v Microsoft Edgi a Internet Exploreru 11, změny, které mají vliv na kompatibilitu webu v Microsoft Edgi , a zakázání protokolu TLS/1.0 a TLS/1.1 v novém prohlížeči Edge.

Rychlý způsob, jak zjistit, jakou verzi protokolu TLS budou vyžadovat různí klienti při připojování k vašim online službám, je odkazem na simulaci Handshake v Qualys SSL Labs. Tato simulace se zabývá kombinacemi klientských operačních systémů a prohlížečů napříč výrobci. V dodatku A na konci tohoto dokumentu najdete podrobný příklad zobrazující verze protokolu TLS vyjednané různými kombinacemi operačního systému a prohlížeče simulovaného klienta při připojování k www.microsoft.com.

Pokud ještě není hotové, důrazně doporučujeme provést inventář operačních systémů používaných vaším podnikem, zákazníky a partnery (zákazníci a partneři prostřednictvím komunikace nebo alespoň sběru řetězců HTTP User-Agent). Tento inventář můžete dále doplnit analýzou provozu na hraniční síti vašeho podniku. V takové situaci analýza provozu přinese verze TLS, které byly úspěšně vyjednány zákazníky/partnery připojujícími se k vašim službám, ale samotný provoz zůstane zašifrovaný.

Technická vylepšení Microsoftu, která eliminují závislosti protokolu TLS 1.0

Od vydání tohoto dokumentu verze 1 společnost Microsoft odeslala řadu aktualizací softwaru a nových funkcí pro podporu vyřazení protokolu TLS 1.0. Tady jsou některé z nich:

  • Vlastní protokolování služby IIS ke korelaci řetězce IP/uživatelského agenta klienta, URI služby, verze protokolu TLS a šifrovací sady.

    • Díky tomuto protokolování můžou správci nakonec kvantifikovat ohrožení zákazníků slabým protokolem TLS.
  • SecureScore – kvůli tomu, aby správci tenantů Office 365 mohli identifikovat vlastní slabé využití protokolu TLS, byl portál SecureScore vytvořený tak, aby tyto informace sdílel, protože podpora protokolu TLS 1.0 byla ukončena v Office 365 v říjnu 2018.

    • Tento portál poskytuje správcům tenantů Office 365 cenné informace, které potřebují, aby se mohli spojit se svými vlastními zákazníky, kteří si nemusí všimnout vlastních závislostí TLS 1.0.

    • Další informace najdete v https://securescore.microsoft.com/.

  • Aktualizace rozhraní .Net Framework, které eliminují hardcoding na úrovni aplikace a předcházejí závislostem na TLS 1.0, které jsou zděděné architekturou.

  • Vydali jsme pokyny pro vývojáře a aktualizace softwaru, které zákazníkům pomůžou identifikovat a odstranit závislosti rozhraní .NET na slabém protokolu TLS: Osvědčené postupy pro protokol TLS (Transport Layer Security) s rozhraním .NET Framework

    • FYI: Všechny aplikace, které cílí na .NET 4.5 nebo nižší, se pravděpodobně budou muset upravit, aby podporovaly protokol TLS 1.2.
  • Protokol TLS 1.2 byl backportován do systému Windows Server 2008 SP2 a XP POSReady 2009 , aby zákazníkům pomohl se staršími povinnostmi.

  • Další oznámení budou provedena na začátku roku 2019 a v následných aktualizacích tohoto dokumentu.

Vyhledání a oprava závislostí protokolu TLS 1.0 v kódu

Pro produkty používající kryptografické knihovny a protokoly zabezpečení operačního systému Windows by následující kroky měly pomoct identifikovat veškeré pevně zakódované použití protokolu TLS 1.0 ve vašich aplikacích:

  1. Identifikujte všechny instance AcquireCredentialsHandle(). Pomáhá to recenzentům dostat se blíže k blokům kódu, kde může být TLS natvrdo zakódovaný.

  2. Zkontrolujte všechny instance SecPkgContext_SupportedProtocols a struktury SecPkgContext_ConnectionInfo pro pevně zakódovaný protokol TLS.

  3. V nativním kódu nastavte všechna nenulová přiřazení grbitEnabledProtocols na nulu. Operační systém tak může používat výchozí verzi protokolu TLS.

  4. Pokud je povolený režim FIPS kvůli možnému konfliktu s nastavením požadovaným pro explicitní zakázání protokolu TLS 1.0/1.1 v tomto dokumentu, zakažte režim FIPS . Další informace najdete v dodatku B .

  5. Aktualizujte a rekompilujte všechny aplikace pomocí WinHTTP hostovaného na Serveru 2012 nebo starším.

    1. Spravované aplikace – opětovné sestavení a změna cílení na nejnovější verzi rozhraní .NET Framework

    2. Aplikace musí přidat kód pro podporu protokolu TLS 1.2 přes WinHttpSetOption.

  6. Pokud chcete pokrýt všechny základy, prohledejte zdrojový kód a konfigurační soubory online služeb podle vzorů níže odpovídajících hodnotám výčtu typů, které se běžně používají v pevném kódování TLS:

    1. SecurityProtocolType (typ bezpečnostního protokolu)

    2. SSLv2, SSLv23, SSLv3, TLS1, TLS 10, TLS11

    3. WINHTTP_FLAG_SECURE_PROTOCOL_

    4. SP_PROT_

    5. NSStreamSocketSecurityLevel

    6. PROTOCOL_SSL nebo PROTOCOL_TLS

Doporučeným řešením ve všech výše uvedených případech je odebrat výběr pevně zakódované verze protokolu a odložit výchozí nastavení operačního systému. Pokud používáte DevSkim, kliknutím sem zobrazíte pravidla, která pokrývají výše uvedené kontroly, které můžete použít s vlastním kódem.

Windows PowerShell používá rozhraní .NET Framework 4.5, které nezahrnuje protokol TLS 1.2 jako dostupný protokol. Pokud chcete tento problém obejít, jsou k dispozici dvě řešení:

  1. Upravte příslušný skript tak, aby zahrnoval následující:

    [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12;
    
  2. Přidejte klíč registru pro celý systém (např. prostřednictvím zásad skupiny) do libovolného počítače, který potřebuje připojení TLS 1.2 z aplikace .NET. To způsobí, že .NET použije výchozí systémové verze TLS, které přidají TLS 1.2 jako dostupný protokol, a umožní skriptům používat budoucí verze protokolu TLS, když je operační systém bude podporovat. (např. TLS 1.3)

    reg add HKLM\SOFTWARE\Microsoft.NETFramework\v4.0.30319 /v SystemDefaultTlsVersions /t REG_DWORD /d 1 /f /reg:64

    reg add HKLM\SOFTWARE\Microsoft.NETFramework\v4.0.30319 /v SystemDefaultTlsVersions /t REG_DWORD /d 1 /f /reg:32

Řešení (1) a (2) se vzájemně vylučují, což znamená, že není nutné je implementovat společně.

Opětovné sestavení nebo změna cílení spravovaných aplikací pomocí nejnovější verze rozhraní .Net Framework

Aplikace využívající rozhraní .NET Framework ve verzích starších než 4.7 mohou mít omezení, která efektivně omezují podporu na TLS 1.0, bez ohledu na výchozí nastavení operačního systému. Další informace najdete v následujícím diagramu a osvědčených postupech TLS (Transport Layer Security) pro .NET Framework.

Opětovné sestavení spravovaných aplikací

SystemDefaultTLSVersion má přednost před cílením verzí PROTOKOLU TLS na úrovni aplikace. Doporučenými osvědčenými postupy je vždy spoléhat se na výchozí verzi TLS operačního systému. Jedná se také o jediné kryptografické agilní řešení, které umožňuje vašim aplikacím využívat budoucí podporu protokolu TLS 1.3.

Pokud cílíte na starší verze rozhraní .NET Framework, například 4.5.2 nebo 3.5, bude vaše aplikace ve výchozím nastavení používat starší a nedoporučují se protokoly, jako je SSL 3.0 nebo TLS 1.0. Důrazně doporučujeme upgradovat na novější verze rozhraní .NET Framework, jako je .NET Framework 4.6, nebo nastavit příslušné klíče registru pro UseStrongCrypto.

Testování s protokolem TLS 1.2 nebo novějším

Podle oprav doporučených v části výše by měly být produkty regresně testovány na chyby vyjednávání protokolu a kompatibilitu s jinými operačními systémy ve vašem podniku.

  • Nejběžnějším problémem v tomto regresním testování bude selhání vyjednávání PROTOKOLU TLS kvůli pokusu o připojení klienta z operačního systému nebo prohlížeče, který nepodporuje protokol TLS 1.2.

    • Klient Vista například nepodaří vyjednat protokol TLS se serverem nakonfigurovaným pro protokol TLS 1.2 nebo novější, protože maximální podporovaná verze protokolu TLS systému Vista je 1.0. Tento klient by měl být upgradován nebo vyřazen z provozu v prostředí TLS 1.2 nebo novější.
  • Produkty používající vzájemné ověřování TLS založené na certifikátech mohou vyžadovat další regresní testování, protože kód pro výběr certifikátu přidružený k protokolu TLS 1.0 byl méně výrazný než u protokolu TLS 1.2.

    • Pokud produkt vyjednává MTLS s certifikátem z nestandardního umístění (mimo standardní pojmenované úložiště certifikátů ve Windows), může tento kód potřebovat aktualizaci, aby se zajistilo správné získání certifikátu.
  • Vzájemné vztahy služeb by měly být zkontrolovány na problémy.

    • Všechny služby, které interoperují se službami třetích stran, by měly provádět další testování interoperability s těmito třetími stranami.

    • Všechny aplikace jiné než Windows nebo serverové operační systémy, které se používají, vyžadují šetření / potvrzení, že můžou podporovat protokol TLS 1.2. Skenování je nejjednodušší způsob, jak to zjistit.

Jednoduchý podrobný plán pro testování těchto změn v online službě se skládá z následujících:

  1. Proveďte kontrolu systémů produkčního prostředí a identifikujte operační systémy, které nepodporují protokol TLS 1.2.

  2. Kontrola zdrojového kódu a konfiguračních souborů online služeb pro pevně zakódovaný protokol TLS, jak je popsáno v tématu "Hledání a oprava závislostí protokolu TLS 1.0 v kódu"

  3. Podle potřeby aktualizujte nebo rekompilujte aplikace:

    1. Spravované aplikace

      1. Znovu sestavte na nejnovější verzi rozhraní .NET Framework.

      2. Ověřte, že jakékoli použití výčtu SSLProtocols je nastavené na SSLProtocols.None, aby bylo možné použít výchozí nastavení operačního systému.

    2. Aplikace WinHTTP – opětovné sestavení pomocí WinHttpSetOption pro podporu protokolu TLS 1.2

  4. Spusťte testování v předprodukčním nebo přípravném prostředí se všemi protokoly zabezpečení staršími než TLS 1.2 zakázanými prostřednictvím registru.

  5. Opravte všechny zbývající instance pevného kódování TLS, protože jsou zjištěny při testování. Opět nasaďte software a proveďte nové spuštění regresního testu.

Upozorňování partnerů na vaše plány vyřazení TLS 1.0

Po vyřešení pevného zakódování protokolu TLS a dokončení aktualizací operačního systému nebo vývojového prostředí, pokud se rozhodnete vyřadit protokol TLS 1.0, bude nutné koordinovat se zákazníky a partnery.

  • Pro úspěšné vyřazení protokolu TLS 1.0 je nezbytné provést počáteční oslovování partnerů/zákazníků. Minimálně by se to mělo skládat z blogových příspěvků, dokumentů white paper nebo jiného webového obsahu.

  • Partneři musí vyhodnotit vlastní připravenost protokolu TLS 1.2 prostřednictvím iniciativ testování operačního systému, skenování kódu nebo regrese popsaných v předchozích částech.

Conclusion

Odebrání závislostí protokolu TLS 1.0 je složitý problém, který je potřeba řídit od začátku do konce. Partneři Microsoftu a odvětví dnes podnikají opatření k zajištění lepšího zabezpečení celého zásobníku produktů, a to od komponent operačního systému a vývojových architektur až po aplikace a služby postavené na nich. Pokud budete postupovat podle doporučení uvedených v tomto dokumentu, pomůže to vašemu podniku zvolit správný směr a zjistit, jaké výzvy můžete očekávat. Pomůže také vašim zákazníkům, aby byli připraveni na přechod.

Příloha A: Simulace handshake pro různé klienty, kteří se připojují k www.microsoft.com, díky službě SSLLabs.com

Výsledky simulace navázání spojení

Příloha B: Vyřazení protokolu TLS 1.0/1.1 při zachování režimu FIPS

Pokud vaše síť vyžaduje režim FIPS, ale chcete také vypsat protokol TLS 1.0/1.1, postupujte následovně:

  1. Nakonfigurujte verze protokolu TLS prostřednictvím registru nastavením položky "Enabled" na nulu pro nechtěné verze TLS.

  2. Zakažte křivku 25519 (pouze pro Server 2016) prostřednictvím zásad skupiny.

  3. Zakažte všechny šifrovací sady pomocí algoritmů, které nejsou povoleny příslušnou publikací FIPS. Pro Server 2016 (za předpokladu, že platí výchozí nastavení), to znamená zakázání RC4, PSK a null šifr.

Přispěvatelé /Děkujeme

Mark Cartwright
Bryan Sullivan
Patrick Jungles
Michael Scovetta
Tony Rice
David LeBlanc
Mortimer Cook
Daniel Sommerfeld
Andrei Popov
Michiko Short
Justin Burke
Gov Maharaj
Brad Turner
Sean Stevenson