Řešení problému s protokolem TLS 1.0, druhá edice

Tento dokument nabízí nejnovější pokyny, jak rychle identifikovat a odebrat závislosti na protokolu Transport Layer Security (TLS) verze 1.0 v softwaru navrženém pro operační systémy Microsoftu. Navíc v něm najdete podrobnosti o změnách produktů a nové funkce, které Microsoft nabízí pro ochranu vlastních zákazníků a online služeb. Jeho účelem je být výchozím bodem při vytváření plánu migrace na prostředí sítě s protokolem TLS 1.2 a novějším. Přestože řešení, která se tady popisují, můžou být platná a nápomocná i při odebírání protokolu TLS 1.0 z operačních systémů nebo kryptografických knihoven, které nevytvořil Microsoft, tento dokument se na ně nezaměřuje.

TLS 1.0 je protokol, který se poprvé definoval v roce 1999 s cílem zavést v počítačových sítích šifrovací kanály. Microsoft tento protokol podporuje od systémů Windows XP / Server 2003. Přestože jej už moderní operační systémy nepoužívají jako výchozí protokol zabezpečení, stále se TLS 1.0 podporuje kvůli zpětné kompatibilitě. Vývoj požadavků regulátorů a objevování nových ohrožení zabezpečení v protokolu TLS 1.0 nutí organizace tento protokol zcela zakázat.

Microsoft zákazníkům doporučuje, aby tomuto problému předešli tak, že ve svých prostředích odeberou závislosti na protokolu TLS 1.0 a všude, kde je to možné, tento protokol zakážou na úrovni operačního systému. Vzhledem k tomu, jak dlouho se protokol TLS 1.0 v softwarovém průmyslu podporoval, důrazně se doporučuje, aby jakýkoli plán na vyřazení tohoto protokolu obsahoval následující:

  • Analýzu kódu, aby se našly a opravily pevně zakódované instance protokolu zabezpečení TLS 1.0 nebo starších

  • Skenování a analýzu provozu koncového bodu sítě, aby se zjistily operační systémy, které používají protokol TLS 1.0 nebo starší

  • Úplné regresní testování v celém stacku aplikací se zakázaným protokolem TLS 1.0

  • Migrace starších verzí operačních systémů a vývoj knihoven a architektur na verze, které dokáží standardně vyjednávat o protokolu TLS 1.2

  • Testování kompatibility v operačních systémech, které se používají ve firmě, aby se zjistily případné problémy s podporou protokolu TLS 1.2

  • Spolupráci s vlastními obchodními partnery a zákazníky, aby byli vyrozuměni, že se chystáte vyřadit protokol TLS 1.0

  • Zjišťování, kteří klienti se po zákazu protokolu TLS 1.0 už nebudou moct připojit k vašim serverům

Cílem tohoto dokumentu je poskytnout doporučení, která pomůžou odstranit technické problémy, které by mohly blokovat zákaz protokolu TLS 1.0, a zároveň zvýšit viditelnost dopadů této změny na zákazníky. Když se taková prověřování provedou, může se omezit dopad dalšího ohrožení zabezpečení v protokolu TLS 1.0 na firmu. Pro účely tohoto dokumentu se odkazy na vyřazení protokolu TLS 1.0 týkají i protokolu TLS 1.1.

Vývojáři firemního softwaru mají strategickou potřebu přijímat dlouhodobější a agilnější řešení (říká se tomu kryptografická flexibilita), aby mohli řešit budoucí narušení protokolů zabezpečení. I když tento dokument navrhuje agilní řešení, jak eliminovat pevné kódování protokolu TLS, rozsáhlejší řešení kryptografické flexibility jsou nad rámec tohoto dokumentu.

Aktuální stav implementace protokolu TLS 1.0 Microsoftu

Implementace protokolu TLS 1.0 Microsoftu neobsahuje žádná známá ohrožení zabezpečení. Vzhledem k možnosti budoucích útoků downgradem protokolů a dalších ohrožení protokolu TLS 1.0, která nejsou specifická pro implementaci od Microsoftu, se doporučuje, aby se všude tam, kde je to možné, odebraly všechny protokoly zabezpečení starší než TLS 1.2 (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 mít povědomí o možnosti pevného zakódování verze protokolu v aplikacích, které vyvíjejí jejich zaměstnanci a partneři. Pevné kódování tady znamená, že verze protokolu TLS je pevně stanovená na verzi, která je zastaralá nebo méně bezpečná než novější verze. Verze protokolu TLS novější než pevně zakódovaná verze se nedají použít bez úpravy daného programu. Tato třída problémů se nedá řešit beze změny kódu a vývoje aktualizace softwaru. Pevné kódování verze 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ůzné úrovně podpory protokolu TLS.

Podporované verze protokolu TLS ve Windows

Mnoho operačních systémů má jako výchozí protokol TLS nebo maximální podporu nastavené zastaralé verze, což je zapotřebí nějak řešit.

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 Povolený Povolený Povolený Nepodporuje se Nepodporuje se Nepodporuje se
Windows Server 2008 Povolený Povolený Povolený Zakázáno* Zakázáno* Nepodporuje se
Windows 7 (WS2008 R2) Povolený Povolený Povolený Zakázáno* Zakázáno* Nepodporuje se
Windows 8 (WS2012) Disabled Povolený Povolený Povolený Povolený Nepodporuje se
Windows 8.1 (WS2012 R2) Disabled Povolený Povolený Povolený Povolený Nepodporuje se
Windows 10 Disabled Povolený Povolený Povolený Povolený Nepodporuje se
Windows 11 Disabled Povolený Povolený Povolený Povolený Povolený
Windows Server 2016 Nepodporuje se Disabled Povolený Povolený Povolený Nepodporuje se
Windows Server 2016 Nepodporuje se Disabled Povolený Povolený Povolený Nepodporuje se
Windows Server 2019 Nepodporuje se Disabled Povolený Povolený Povolený Nepodporuje se
Windows Server 2019 GS Edition Nepodporuje se Disabled Disabled Disabled Povolený Nepodporuje se
Windows Server 2022 Nepodporuje se Disabled Disabled Disabled Povolený Povolený

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žba Windows Update.

Další informace o vyřazování protokolu TLS 1.0/1.1 v prohlížečích IE/Edge najdete v článcích o modernizaci připojení TLS v Microsoft Edgi a Internet Exploreru 11, o změnách připravovaných pro Microsoft Edge, které budou mít vliv na kompatibilitu webů a o zákazu protokolů TLS/1.0 a TLS/1.1 v novém prohlížeči Edge.

Rychlý způsob, jak ověřit, o kterou verzi protokolu TLS budou žádat různí klienti, až se budou připojovat k online službám, je simulace metody handshake v prostředí Qualys SSL Labs. Tato simulace se zabývá kombinacemi klientských operačních systémů a prohlížečů různých výrobců. Podrobný příklad verzí protokolu TLS vyjednaných různými simulovanými kombinacemi klientských operačních systémů a prohlížečů při připojování k adrese www.microsoft.com najdete v Příloze A na konci tohoto dokumentu.

Pokud se ještě neprovedla inventarizace operačních systémů ve vaší firmě, u zákazníků a partnerů (u druhých dvou prostřednictvím kontaktu nebo komunikace, nebo alespoň shromážděním řetězce uživatelského agenta HTTP), důrazně se doporučuje ji provést. Inventarizaci může dále doplnit analýza provozu na hranici firemní sítě. V takové situaci analýza provozu vrátí verze TLS, které si úspěšně vyjednali zákazníci nebo partneři připojující se k vašim službám, ale provoz samotný zůstane zašifrovaný.

Technická vylepšení Microsoftu pro eliminaci závislostí na protokolu TLS 1.0

Od vydání první verze tohoto dokumentu Microsoft vydal několik aktualizací softwaru a nové funkce, které podporují vyřazení protokolu TLS 1.0. Tady jsou některé z nich:

  • Vlastní protokolování služby IIS pro korelaci IP adresy nebo řetězce uživatelského agenta klienta, identifikátoru URI, verze protokolu TLS a šifrovací sady

    • Pomocí tohoto protokolování můžou správci konečně kvantifikovat ohrožení zákazníků slabým protokolem TLS.
  • SecureScore – Aby správci tenantů Office 365 mohli snadněji identifikovat používání slabého protokolu TLS ve vlastní infrastruktuře, vznikl portál SecureScore, pomocí kterého se tyto informace sdílejí, protože podpora protokolu TLS 1.0 v Office 365 skončila v říjnu 2018.

    • Tento portál nabízí správcům tenantů Office 365 cenné informace, které potřebují, aby mohli kontaktovat své zákazníky, kteří si nemusejí být vědomi svých závislostí na protokolu TLS 1.0.

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

  • Aktualizace rozhraní .NET Framework, které umožňují eliminovat pevné kódování na úrovni aplikace a zabránit vzniku závislostí na protokolu TLS 1.0 z důvodu použité architektury

  • 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.
  • Abychom zákazníkům pomohli s původními závazky, protokol TLS 1.2 se zpětně portoval na Windows Server 2008 SP2 a XP POSReady 2009.

  • Další oznámení se budou sdělovat zkraje roku 2019 v dalších aktualizacích tohoto dokumentu.

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

Pro produkty, které používají protokoly zabezpečení a kryptografické knihovny poskytované operačním systémem Windows, by následující postup měl pomoct najít v aplikacích jakékoli použití pevně zakódovaného protokolu TLS 1.0:

  1. Identifikujte všechny instance AcquireCredentialsHandle(). To kontrolorům pomáhá přiblížit se k blokům kódu, kde může být protokol TLS pevně zakódovaný.

  2. Zkontrolujte všechny instance SecPkgContext_SupportedProtocols a struktury SecPkgContext_Připojení ionInfo pro pevně zakódovaný protokol TLS.

  3. V nativním kódu nastavte všechna nenulová přiřazení grbitEnabledProtocols na nulu. To umožní operačnímu systému používat svou výchozí verzi protokolu TLS.

  4. Pokud je povolený režim FIPS, zakažte ho, protože by mohlo dojít ke konfliktu s nastaveními potřebnými k explicitnímu zákazu protokolu TLS 1.0/1.1 v tomto dokumentu. Další informace najdete v Příloze B.

  5. Aktualizujte a znovu zkompilujte všechny aplikace, které používají službu WinHTTP hostovanou na Serveru 2012 nebo starším.

    1. Spravované aplikace – Sestavte je znovu, nově s cílením na nejnovější verzi rozhraní .NET Framework.

    2. Aplikace musí přidávat kód pro podporu protokolu TLS 1.2 prostřednictvím WinHttpSetOption.

  6. Abychom nic nevynechali, prohledejte zdrojový kód a konfigurační soubory online služeb a zkuste najít vzory uvedené níže, které korespondují s hodnotami typů výčtu běžně používanými při pevném kódování protokolu TLS:

    1. SecurityProtocolType

    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é řešení ve všech výše uvedených případech je odebrat pevně kódovaný výběr verze protokolu a používat výchozí nastavení operačního systému. Pokud používáte DevSkim, klikněte sem a zobrazí se vám pravidla, která se vztahují na výše uvedené kontroly. Ta můžete použít ve svém vlastním kódu.

Windows PowerShell používá rozhraní .NET Framework 4.5, které nezahrnuje protokol TLS 1.2 jako dostupný protokol. Existují dvě řešení, jak se tomuto problému vyhnout:

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

    [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12;
    
  2. Přidejte na jakémkoli počítači, který potřebuje navazovat spojení protokolu TLS 1.2 z aplikace .NET, klíč registru pro celý systém (třeba prostřednictvím zásad skupiny). Díky tomu bude .NET používat výchozí verze protokolu TLS v systému, čímž se mezi dostupné protokoly přidá i TLS 1.2 A umožní to skriptům používat budoucí verze protokolu TLS, až je bude podporovat operační systém. (třeba 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 se nemusí implementovat obě.

Nové sestavení a změna cíle spravovaných aplikací pomocí nejnovější verze rozhraní .NET Framework

Aplikace, které používají rozhraní .NET Framework starší než 4.7, můžou být bez ohledu na výchozí hodnoty operačního systému omezené na podporu protokolu TLS 1.0. Další informace najdete v následujícím diagramu a osvědčených postupech TLS (Transport Layer Security).

Opětovné sestavení spravovaných aplikací

SystemDefaultTLSVersion má přednost před cílením na verze protokolu TLS na úrovni aplikace. Doporučeným osvědčeným postupem je vždy používat výchozí verzi protokolu TLS nastavenou operačním systémem. Je to taky jediné kryptograficky flexibilní řešení, které aplikacím umožňuje využít budoucí podporu protokolu TLS 1.3.

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

Testování s protokolem TLS 1.2+

Po opravách doporučených v části výše by se produkty měly podrobit regresnímu testování, jestli nedochází k chybám při vyjednávání o protokolu a v kompatibilitě s ostatními operačními systémy ve firmě.

  • Nejběžnější problém v těchto regresních testech bude chyba vyjednávání o protokolu TLS způsobená tím, že se klient pokusí o připojení z operačního systému nebo prohlížeče, který nepodporuje protokol TLS 1.2.

    • Například klient se systémem Vista nebude moct vyjednat protokol TLS se serverem konfigurovaným na TLS 1.2+, protože maximální podporovaná verze protokolu TLS v systému Vista je 1.0. Daný klient by se měl v prostředí s protokolem TLS 1.2+ buď upgradovat, nebo vyřadit.
  • Produkty, které používají vzájemné ověřování TLS založené na certifikátech, můžou potřebovat další regresní testy, protože kód pro výběr certifikátu přidružený k protokolu TLS 1.0 nebyl tak expresivní jako kód pro TLS 1.2.

    • Pokud nějaký produkt vyjedná MTLS s certifikátem mimo standardní umístění (mimo standardně pojmenovaná úložiště certifikátů ve Windows), může být nutné daný kód aktualizovat, aby se zajistilo, že se certifikát získá správným způsobem.
  • Ve vzájemných závislostech služeb by se měla zkontrolovat případná problémová místa.

    • Všechny služby, které spolupracují se službami třetích stran, by se měly podrobit dalšímu testování spolupráce s těmito třetími stranami.

    • Všechny používané aplikace, které nejsou určené pro Windows, nebo serverové operační systémy, které nejsou Windows, vyžadují prověření a potvrzení, že můžou podporovat protokol TLS 1.2. Nejjednodušší způsob, jak to zjistit, je prohledání.

Jednoduchý podrobný plán, jak tyto změny otestovat v online službě, má tyto součásti:

  1. Provedení kontroly systémů produkčního prostředí, aby se zjistilo, které operační systémy nepodporují protokol TLS 1.2

  2. Kontrola zdrojového kódu a konfiguračních souborů online služeb, jestli neobsahují pevně zakódovaný protokol TLS, jak se popisuje v části Hledání a oprava závislostí na protokolu TLS 1.0 v kódu

  3. Aktualizujte a znovu zkompilujte aplikace podle potřeby:

    1. Spravované aplikace

      1. Znovu je sestavte pomocí nejnovější verze rozhraní .NET Framework.

      2. Ověřte, že všechna použití výčtu SSLProtocols jsou nastavená na SSLProtocols.None, aby se používala výchozí nastavení operačního systému.

    2. Aplikace WinHTTP – Sestavte je znovu s možností WinHttpSetOption, aby podporovaly protokol TLS 1.2.

  4. Začněte testovat v předprodukčním nebo přípravném prostředí, kde budou prostřednictvím registru zakázané všechny protokoly zabezpečení starší než TLS 1.2.

  5. Opravte všechny zbývající instance pevného kódování protokolu TLS vždy, když při testování nějakou najdete. Znovu nasaďte software a spusťte nové běhy regresních testů.

Oznámení plánů na vyřazení protokolu TLS 1.0 partnerům

Jakmile se vyřeší pevné kódování protokolu TLS, dokončí se aktualizace operačního systému a vývojové architektury a budete chtít vyřadit protokol TLS 1.0, bude nutné tento krok koordinovat se zákazníky a partnery:

  • K úspěšnému vyřazení protokolu TLS 1.0 je nezbytná včasná komunikace s partnerem nebo zákazníkem. Přinejmenším by to mělo znamenat příspěvky na blogu, dokumenty white paper nebo jiný webový obsah.

  • Partneři musí vyhodnotit svou vlastní připravenost na protokol TLS 1.2 prostřednictvím iniciativ prohledávání a regresního testování operačního systému a kódu popsaných v částech výše.

Závěr

Odebírání závislostí na protokolu TLS 1.0 od začátku až do konce je složitý problém. Microsoft a partneři v oboru dnes spolupracují na tom, aby zajistili, že jejich produktový stack bude už ve výchozím nastavení bezpečnější, ať už jde o součásti operačního systému a vývojová rozhraní, nebo aplikace a služby, které je využívají. Když budete dodržovat doporučení v tomto dokumentu, navedou vaši firmu tím správným směrem a budete vědět, jaké výzvy můžete očekávat. Kromě toho pomůžou vašim zákazníkům se lépe připravit na přechod.

Příloha A: Simulace handshake pro různé klienty, kteří se připojují k www.microsoft.com, se svolením SSLLabs.com

Výsledky simulace metody handshake

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 zároveň chcete vyřadit protokol TLS 1.0/1.1, postupujte podle pokynů níže:

  1. Nakonfigurujte verze protokolu TLS prostřednictvím registru tak, že pro nežádoucí verze protokolu TLS nastavíte hodnotu Enabled na nulu.

  2. Prostřednictvím Zásad skupiny zakažte křivku 25519 (jen Server 2016).

  3. Zakažte všechny šifrovací sady používající algoritmy, které příslušná publikace FIPS nepovoluje. Pro Server 2016 (za předpokladu, že se používají výchozí nastavení) to znamená zákaz šifer RC4, PSK a NULL.

Přispěvatelé/poděkování

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