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

Autor: Andrew Marshall
Správce programu zabezpečení objektu zabezpečení
Microsoft Corporation

Celkové shrnutí

Tento dokument obsahuje nejnovější pokyny k rychlé identifikaci a odebrání závislostí protokolu TLS (Transport Layer Security) verze 1.0 v softwaru, který je založený na operačních systémech Microsoftu, s podrobnými informacemi o změnách produktů a nových funkcích doručovaných Microsoftem za účelem ochrany vlastních zákazníků a online služeb. Slouží jako výchozí bod pro vytvoření plánu migrace do síťového prostředí TLS 1.2+ . I když se zde popsané řešení můžou přenést a pomoct s odebráním využití PROTOKOLU TLS 1.0 v operačních systémech jiných než Microsoftu nebo kryptografických knihovnách, nejsou fokusem tohoto dokumentu.

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 podporuje tento protokol od systému 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ých ohrožení zabezpečení v protokolu TLS 1.0 poskytují společnostem pobídku k úplné zakázání protokolu TLS 1.0.

Společnost Microsoft doporučuje zákazníkům tento problém předcházet odebráním závislostí TLS 1.0 ve svých prostředích a zakázáním protokolu TLS 1.0 na úrovni operačního systému, pokud je to možné. Vzhledem k tomu, že obor softwaru 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 pro identifikaci operačních systémů pomocí protokolů TLS 1.0 nebo starších protokolů

  • Úplné regresní testování prostřednictvím celého zásobníku aplikací se zakázaný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í dokážou vyjednat protokol 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.

  • Po zakázání protokolu TLS 1.0 se už nemusí klienti moct připojit k vašim serverům.

Cílem tohoto dokumentu je poskytnout doporučení, která můžou pomoct odebrat technické blokátory pro zakázání protokolu TLS 1.0 a zároveň zvýšit přehled o dopadu této změny na vlastní zákazníky. Dokončení takových šetření může pomoct snížit obchodní dopad na další ohrožení zabezpečení protokolu TLS 1.0. Pro účely tohoto dokumentu zahrnují 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í ř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 TLS 1.0 od Microsoftu

Implementace protokolu TLS 1.0 od Microsoftu je bezplatná z známých ohrožení zabezpečení. Vzhledem k potenciálním útokům downgradu protokolů a dalším ohrožením zabezpečení protokolu TLS 1.0, která nejsou specifická pro implementaci Microsoftu, doporučujeme odebrat závislosti na všech protokolech zabezpečení 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 znát potenciál pevně zakódování verzí protokolu v aplikacích vyvinutých svými zaměstnanci a partnery. Pevné kó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, kolik různých prohlížečů a operačních systémů mělo různou úroveň podpory PROTOKOLU TLS.

Zajištění podpory protokolu TLS 1.2 v nasazených operačních systémech

Mnoho operačních systémů má zastaralé výchozí verze protokolu TLS nebo stropy podpory, které je potřeba zohlednit. Použití Windows 8/Server 2012 nebo novější znamená, že protokol TLS 1.2 bude výchozí verzí protokolu zabezpečení:

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
Windows Vista Povoleno Povoleno Výchozí Nepodporuje se Nepodporuje se
Windows Server 2008 Povoleno Povoleno Výchozí Zakázáno* Zakázáno*
Windows 7 (WS2008 R2) Povoleno Povoleno Výchozí Zakázáno* Zakázáno*
Windows 8 (WS2012) Zakázáno Povoleno Povoleno Povoleno Výchozí
Windows 8.1 (WS2012 R2) Zakázáno Povoleno Povoleno Povoleno Výchozí
Windows 10 Zakázáno Povoleno Povoleno Povoleno Výchozí
Windows Server 2016 Nepodporuje se Zakázáno Povoleno Povoleno Výchozí

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

Další informace o vyřazení protokolu TLS 1.0/1.1 v IE/Edge najdete v tématu Modernizace připojení TLS v Microsoft Edgi a Internet Exploreru 11, změny ovlivňující kompatibilitu webů přicházejících do Microsoft Edge 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 pož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. Podrobný příklad znázorňující verze protokolu TLS vyjednané různými kombinacemi operačního systému nebo prohlížeče simulovaného klienta při připojování k www.microsoft.com najdete v dodatku A.

Pokud ještě není dokončeno, důrazně doporučujeme provést inventář operačních systémů používaných vašimi podnikovými, zákazníky a partnery (druhé dva prostřednictvím outreach/komunikace nebo alespoň kolekce řetězců http User-Agent). Tento inventář můžete dále doplnit analýzou provozu na hraničních zařízeních podnikové sítě. V takové situaci bude analýza provozu úspěšně vyjednávat verze PROTOKOLU TLS, které zákazníci/partneři připojují k vašim službám, ale samotný provoz zůstane zašifrovaný.

Vylepšení technického řešení Microsoftu, která eliminují závislosti TLS 1.0

Od vydání tohoto dokumentu v1 společnost Microsoft odeslala řadu aktualizací softwaru a nových funkcí podporujících 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, identifikátoru URI služby, verze protokolu TLS a šifrovací sady.

    • Díky tomuto 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 pomohli identifikovat vlastní slabé využití protokolu TLS, byl portál SecureScore sestaven tak, aby tyto informace sdílel jako podporu ukončení protokolu TLS 1.0 v Office 365 v říjnu 2018.

    • Tento portál poskytuje správcům tenantů Office 365 cenné informace, které potřebují ke svým zákazníkům, kteří nemusí vědět o vlastních závislostech TLS 1.0.

    • Další informace najdete na stránce https://securescore.microsoft.com/ .

  • Aktualizace rozhraní .Net Framework, které eliminují pevně zakódování na úrovni aplikace a brání závislostem tls 1.0 zděděným rozhraním TLS 1.0.

  • Vydali jsme pokyny pro vývojáře a aktualizace softwaru, které zákazníkům pomůžou identifikovat a eliminovat 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 dalších aktualizacích tohoto dokumentu.

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

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

  1. Identifikujte všechny instance AcquireCredentialsHandle(). To pomáhá revidujícím získat blíž blízko k blokům kódu, kde může být pevně zakódovaný protokol TLS.

  2. Zkontrolujte všechny instance SecPkgContext_SupportedProtocols a SecPkgContext_ConnectionInfo struktur 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 znovu zkompilujte 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, zkontrolujte zdrojový kód a konfigurační soubory online služby pro vzory níže odpovídající hodnotám výčtu typů běžně používaných v pevném kódování 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ý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 bude používat verze PROTOKOLU TLS "Výchozí systém", které přidají protokol TLS 1.2 jako dostupný protokol A umožní skriptům používat budoucí verze PROTOKOLU TLS, když je operační systém podporuje. (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 používající verze rozhraní .NET Framework starší než 4.7 můžou mít omezení efektivního omezení podpory protokolu TLS 1.0 bez ohledu na výchozí nastavení základního operačního systému. Další informace najdete v následujícím diagramu a osvědčených postupech TLS (Transport Layer Security).

Rebuild managed applications

SystemDefaultTLSVersion má přednost před cílením na úrovni aplikace pro verze TLS. Doporučeným postupem je vždy odložit výchozí verzi protokolu TLS operačního systému. Jedná se také o jediné kryptografické agilní řešení, které vašim aplikacím umožňuje 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čuje 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í pomocí protokolu TLS 1.2 nebo novější

Podle oprav doporučených v předchozí části 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 nebude moct vyjednat protokol TLS se serverem nakonfigurovaným pro protokol TLS 1.2 nebo novější, protože maximální podporovaná verze protokolu TLS 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 můžou vyžadovat další regresní testování, protože kód výběru certifikátu přidružený k protokolu TLS 1.0 byl méně expressivní než pro protokol TLS 1.2.

    • Pokud produkt vyjedná 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émová místa.

    • Všechny služby, které interoperují se 3službami rd-party, by měly provádět další testování spolupráce s těmito 3 stranamird .

    • Všechny aplikace jiné než Windows nebo serverové operační systémy, které se používají, vyžadují šetření a 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. Prohledejte zdrojové kódy a konfigurační soubory online služeb pro pevně zakódovaný protokol TLS, jak je popsáno v tématu Hledání a oprava závislostí TLS 1.0 v kódu.

  3. Podle potřeby aktualizujte nebo rekompilujte aplikace:

    1. Spravované aplikace

      1. Znovu sestavte proti 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í. Znovu nasaďte software a proveďte nové regresní testovací spuštění.

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

Po vyřešení pevného kódování TLS a dokončení aktualizací operačního systému nebo vývojové architektury byste měli vyjádřit výslovný souhlas s vyřazením protokolu TLS 1.0, který bude potřeba koordinovat se zákazníky a partnery:

  • Pro úspěšné zavedení vyřazení protokolu TLS 1.0 je nezbytné počáteč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 operačního systému, kontroly kódu nebo regresních testovacích iniciativ popsaných v předchozích částech.

Závěr

Odebrání závislostí TLS 1.0 je složitým problémem, který je potřeba ukončit. Partneři Microsoftu a odvětví se k tomu dnes chytají, aby byl náš celý produktový zásobník ve výchozím nastavení bezpečnější, od našich komponent operačního systému a vývojových architektur až po aplikace a služby, které jsou nad nimi postavené. Když budete postupovat podle doporučení uvedených v tomto dokumentu, pomůžete vašemu podniku najít správný kurz a zjistit, jaké výzvy se mají očekávat. Pomůže vám to také, aby se vaši vlastní zákazníci mohli na přechod připravit.

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

Results of Handshake Simulation

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 Povoleno na nulu pro nežádoucí verze protokolu TLS.

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

  3. Zakažte všechny šifrovací sady pomocí algoritmů, které příslušná publikace FIPS nepovoluje. Pro Server 2016 (za předpokladu, že se projeví výchozí nastavení), znamená to zakázání rc4, PSK a šifer NULL.

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