Řešení problému TLS 1.0, 2. edice
Od Andrewa Maršála
Hlavní správce programů zabezpečení
Microsoft Corporation
Shrnutí pro vedoucí pracovníky
V tomto dokumentu jsou k dispozici nejnovější pokyny k rychlé identifikaci a odebrání závislostí protokolu TLS (Transport Layer Security) verze 1.0 v softwaru integrovaném na operačních systémech Microsoftu a s podrobnostmi o změnách produktů a nových funkcích dodaných Společností Microsoft, které chrání vaše vlastní zákazníky a online služby. Slouží jako výchozí bod pro vytvoření plánu migrace do síťového prostředí TLS 1.2+. Řešení, o která tady diskutujeme, sice můžou přenést a pomoct s odebráním použití protokolu TLS 1.0 v operačních systémech jiných než Microsoftu nebo v kryptografických knihovnách, ale nejsou součástí tohoto dokumentu.
TLS 1.0 je protokol zabezpečení, který byl poprvé definován v roce 1999 pro vytváření šifrovacích kanálů přes počítačové sítě. Microsoft podporuje tento protokol od Windows XP/Server 2003. I když už není výchozím protokolem zabezpečení používaným v moderních operačních serverech, protokol TLS 1.0 je stále podporován z důvodu zpětné kompatibility. Vyvíjející se regulační požadavky a nové chyby zabezpečení v TLS 1.0 poskytují společnostem pobídku k tomu, aby protokol TLS 1.0 úplně zakažte.
Společnost Microsoft doporučuje zákazníkům, aby se s tímto problémem vyrovnaly odebráním závislostí TLS 1.0 v jejich 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 délce doby, po kterou software podporuje TLS 1.0, se důrazně doporučuje, aby jakýkoli plán vypisování TLS 1.0 zahrnoval následující:
Analýza kódu pro vyhledání nebo opravu pevně zakódovaných instancí protokolů zabezpečení TLS 1.0 nebo starších.
Kontrola koncových bodů sítě a analýza provozu k identifikaci operačních systémů pomocí protokolů TLS 1.0 nebo starších.
Úplné regresní testování v celém zásobníku aplikací s protokolem TLS 1.0 je zakázané.
Migrace starších operačních systémů a vývojových knihoven/frameworků na verze, které jsou ve výchozím nastavení schopné vyjednat TLS 1.2.
Testování kompatibility napříč operačními systémy používanými vaší společností k identifikaci problémů s podporou TLS 1.2
Koordinace s vašimi obchodními partnery a zákazníky, abyste jim oznámili, že jste se chylili o tom, že chcete protokol TLS 1.0 odepisovat.
Principy, které klienty už nemusí být možné připojit k vašim serverům, jakmile je protokol TLS 1.0 zakázaný.
Cílem tohoto dokumentu je poskytnout doporučení, která vám pomůžou odebrat technické blokátory a zakázat tls 1.0 a zároveň zvýšit viditelnost dopadu této změny na vlastní zákazníky. Dokončení takových vyšetřování může snížit dopad další chyby zabezpečení tls 1.0 na firmy. Pro účely tohoto dokumentu obsahují odkazy na vymazávání TLS 1.0 také TLS 1.1.
Enterprise 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 kompromisů v bezpečnostních protokolech. I když tento dokument navrhuje agilní řešení pro odstranění hardcodingu TLS, širší řešení Crypto Agility jsou nad rámec tohoto dokumentu.
Implementace protokolu TLS 1.0 společnosti Microsoft v aktuálním stavu
Implementace protokolu TLS 1.0 od Microsoftu je bez známých chyb zabezpečení. Vzhledem k potenciálním budoucím útokům na downgrade protokolu a dalším chybám zabezpečení TLS 1.0, které nejsou specifické pro implementaci Microsoftu, se doporučuje, aby závislosti na všech protokolech zabezpečení starších než TLS 1.2 byly tam, kde je to možné (TLS 1.1/1.0/ SSLv3/SSLv2).
Při plánování této migrace na TLS 1.2+ by si vývojáři a správci systému měli být vědomi potenciálu hardcodingu verzí protokolu v aplikacích vyvinutých jejich zaměstnanci a partnery. Hardcoding tady znamená, že verze TLS je opravená na verzi, která je zastaralá a méně bezpečná než novější verze. Verze TLS novější než verze s pevným kódem nelze použít bez úpravy dané aplikace. Tuto třídu problému nelze vyřešit bez změn zdrojového kódu a nasazení aktualizací softwaru. Hardcoding verzí protokolu byl 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 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 TLS nebo limity podpory, které je potřeba zohlednit. Použití protokolu Windows 8/Server 2012 nebo novější znamená, že tls 1.2 bude výchozí verzí protokolu zabezpečení:
Obrázek 1: Podpora protokolu zabezpečení podle verze operačního systému
| Windows operační systém | SSLv2 | SSLv3 | TLS 1.0 | TLS 1.1 | TLS 1.2 |
|---|---|---|---|---|---|
| Windows Vista | Povoleno | Povoleno | Výchozí | Není podporováno | Není podporováno |
| 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 | Není podporováno | Zakázáno | Povoleno | Povoleno | Výchozí |
*TLS 1.1/1.2 můžete na Windows Serveru 2008 povolit prostřednictvím tohoto volitelného balíčku Windows Aktualizace.
Další informace o deprecation tls 1.0/1.1 v IE/Edge najdete v tématu Modernizace připojení TLS v Microsoft Edge a Internet Exploreru 11, Změny, které mají vliv na kompatibilitu webu, které přicházejí do Microsoft Edge, a Zakázání TLS/1.0 a TLS/1.1 v novém prohlížeči Edge.
Rychlý způsob, jak zjistit, jakou verzi TLS budou vyžadovat různé klienty při připojování k vašim online službám, je odkaz na simulaci handshake v Qualys SSL Labs. Tato simulace zahrnuje kombinace operačního systému a prohlížeče klienta napříč výrobci. Podrobný příklad, který ukazuje verze protokolu TLS vyjednané různými simulované kombinacemi operačního systému klienta a prohlížeče při připojování k www.microsoft.com, najdete v dodatku A na konci tohoto dokumentu.
Pokud ještě nejsou dokončené, doporučujeme provést inventarizace operačních systémů používaných vaším podnikem, zákazníky a partnery (posledně 2 prostřednictvím komunikace/komunikace nebo alespoň kolekce řetězců http User-Agent řetězce). Tento inventář je možné dále doplnit analýzou provozu na hraničních zařízeních podnikové sítě. V takové situaci bude analýza přenosu výnosem verzí TLS úspěšně vyjednaných zákazníky nebo partnery, kteří se připojují k vašim službám, ale samotný provoz zůstane zašifrovaný.
Technická vylepšení Microsoftu, která eliminují závislosti tls 1.0
Od vydání verze 1 tohoto dokumentu společnost Microsoft odeslala řadu aktualizací softwaru a nových funkcí na podporu vypisování TLS 1.0. Patří mezi ně:
Vlastní protokolování služby IIS ke korelaci řetězce agenta IP/user klienta, identifikátoru URI služby, verze protokolu TLS a sady šifer.
- Díky tomuto protokolování mohou správci konečně kvantifikovat vystavení zákazníkům slabému TLS.
SecureScore Office 365 – Aby správci tenantů mohli identifikovat své vlastní slabé použití TLS, byl vytvořen portál SecureScore, který tyto informace sdílí jako tls 1.0 ukončenou podporu v Office 365 v říjnu 2018.
Tento portál poskytuje Office 365 správcům tenantů cenné informace, které potřebují k tomu, aby mohli kontaktovat své vlastní zákazníky, kteří si nemusí být vědomi vlastních závislostí TLS 1.0.
Další informace https://securescore.microsoft.com/ najdete na stránce.
Aktualizace rozhraní .Net Framework, které eliminují hardcoding na úrovni aplikace a brání závislostem TLS 1.0 zděděných frameworkem.
Byly vydány pokyny pro vývojáře a aktualizace softwaru, které zákazníkům pomáhají identifikovat a odstranit závislosti .Net na slabých tls: Doporučené postupy zabezpečení TLS (Transport Layer Security) s .NET Framework
- FYI: Všechny aplikace zaměřené na .NET 4.5 nebo nižší budou pravděpodobně muset být změněny, aby podporovaly TLS 1.2.
Tls 1.2 je zpětně přeportovaný na Windows Server 2008 SP2 a XP POSReady 2009, aby zákazníkům pomohl se staršími závazky.
Na začátku roku 2019 budou učiněna další oznámení a budou oznámena v dalších aktualizacích tohoto dokumentu.
Vyhledání a oprava závislostí TLS 1.0 v kódu
U produktů používajících Windows kryptografických knihoven a bezpečnostních protokolů poskytovaných operačním systémem by následující kroky měly pomoct identifikovat jakékoli pevně zakódované použití protokolu TLS 1.0 ve vašich aplikacích:
Identifikujte všechny výskyty funkce AcquireCredentialsHandle(). To pomáhá revidující dostat se blíž k blokům kódu, kde může být TLS pevně zakódovaný.
Zkontrolujte všechny výskyty struktury SecPkgContext_SupportedProtocolsa SecPkgContext_ConnectionInfo pro pevně zakódovaný tls.
V nativním kódu nastavte libovolné nenulové přiřazení grbitEnabledProtocols na nulu. To umožňuje operačnímu systému používat výchozí verzi TLS.
Pokud je režim FIPS povolený kvůli možnému konfliktu s nastavením potřebným pro výslovné zakázání protokolu TLS 1.0/1.1 v tomto dokumentu, zakažte ho. Další informace najdete v dodatku B.
Aktualizujte a znovu zkompilujte všechny aplikace pomocí Služby WinHTTP hostované na Serveru 2012 nebo starším.
Spravované aplikace – znovu sestavit a zaměřit se na nejnovější .NET Framework verzi
Aplikace musí přidat kód pro podporu TLS 1.2 přes WinHttpSetOption.
Pokud chcete pokrýt všechny základní hodnoty, naskenujte zdrojový kód a konfigurační soubory online služby pro níže uvedené vzory odpovídající výčtu hodnot typu běžně používaných v hardcodingu TLS:
SecurityProtocolType
SSLv2, SSLv23, SSLv3, TLS1, TLS 10, TLS11
WINHTTP_FLAG_SECURE_PROTOCOL_
SP_PROT_
NSStreamSocketSecurityLevel
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 verze protokolu s pevným kódem a odložit ho na výchozí operační systém. Pokud používáte DevSkim,kliknutím sem zobrazíte pravidla týkající se výše uvedených kontrol, které můžete použít s vlastním kódem.
Aktualizace Windows PowerShell skriptů nebo souvisejících nastavení registru
Windows PowerShell používá .NET Framework 4.5, který nezahrnuje protokol TLS 1.2 jako dostupný protokol. K řešení tohoto řešení jsou dostupná dvě řešení:
1. Modify the script in question to include the following:
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12;
2. Add a system-wide registry key (e.g. via group policy) to any machine that needs to make TLS 1.2 connections from a .NET app. This will cause .NET to use the "System Default" TLS versions which adds TLS 1.2 as an available protocol AND it will allow the scripts to use future TLS Versions when the OS supports them. (e.g. 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 společně.
Opětovné sestavení nebo opětovné cílení spravovaných aplikací pomocí nejnovější verze rozhraní .Net Framework
Aplikace používající rozhraní .NET Framework verze starší než 4.7 mohou mít omezení, která efektivně zakují podporu tls 1.0 bez ohledu na výchozí nastavení operačního systému. Další informace najdete v následujícím https://docs.microsoft.com/dotnet/framework/network-programming/tls diagramu.

SystemDefaultTLSVersion má přednost před cílením na úrovni aplikace u verzí TLS. Doporučeným postupem je vždy odložit výchozí verzi TLS operačního systému. Je to taky jediné kryptoagilní řešení, které vašim aplikacím umožňuje využívat budoucí podporu TLS 1.3.
Pokud se zaměřujete na starší verze .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 používat protokoly, jako je SSL 3.0 nebo TLS 1.0. Důrazně doporučujeme upgradovat na novější verze .NET Framework, jako je .NET Framework 4.6, nebo nastavit odpovídající klíče registru pro "UseStrongCrypto".
Testování pomocí protokolu TLS 1.2+
Podle oprav doporučených v části výše by měly být produkty testovány regresí 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 při tomto regresní testování bude selhání vyjednávání 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 nevyjedná TLS se serverem nakonfigurovaným pro TLS 1.2+, protože maximální podporovaná verze TLS systému Vista je 1.0. Tento klient by měl být upgradovaný nebo vyřazený z provozu v prostředí TLS 1.2+.
Produkty používající ověřování vzájemného TLS založeného na certifikátech 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ější než kód TLS 1.2.
- Pokud produkt vyjedná mtls s certifikátem z nestandardních umístění (mimo standardní úložiště s názvem certifikátů v Windows), může se tento kód aktualizovat, aby se zajistilo správné získání certifikátu.
Mezi závislosti služeb by se měly zkontrolovat problémy.
Všechny služby, které vzájemně spolupracuje se službami třetích stran, by měly s těmito3účastníky provádět další interoperabilní testování.
Všechny Windows aplikací nebo operačních systémů serveru vyžadují prošetření / potvrzení, že mohou podporovat TLS 1.2. Toto je nejjednodušší způsob, jak to zjistit.
Jednoduchý plán pro testování těchto změn v online službě se skládá z těchto:
Proveďte kontrolu systémů produkčního prostředí, abyste identifikovali operační systémy, které nepodporují protokol TLS 1.2.
Naskenujte zdrojový kód a konfigurační soubory online služby pro protokol TLS s pevným kódem, jak je popsáno v části Vyhledání a oprava závislostítls 1.0 v kódu
Podle potřeby aktualizujte nebo zkompilujte aplikace:
Spravované aplikace
Znovu vytvořte proti nejnovější .NET Framework verzi.
Ověřte, jestli je jakékoli použití výčtu SSLProtocols nastavené na SSLProtocols.None, aby bylo možné použít výchozí nastavení operačního systému.
Aplikace WinHTTP – znovu sestavit pomocí WinHttpSetOption pro podporu TLS 1.2
Začněte testovat v předprodukci nebo pracovním prostředí se všemi protokoly zabezpečení staršími než TLS 1.2 zakázané prostřednictvím registru.
Opravte všechny zbývající výskyty hardcodingu TLS tak, jak se setkávají při testování. Znovu nasaďte software a proveďte nový regresní test.
Informování partnerů o plánech vypisování TLS 1.0
Po vyřešení hardcodingu TLS a dokončení aktualizací operačního systému a vývojového rámce bude nutné protokol TLS 1.0 odepisovat a koordinovat je se zákazníky a partnery:
Raný přístup partnera/zákazníka je zásadní pro úspěšné dokončení vypisování TLS 1.0. Minimálně by se mělo skládat z blogových příspěvků, whitepaperů nebo jiného webového obsahu.
Partneři musí vyhodnotit svou vlastní připravenost tls 1.2 prostřednictvím iniciativ operačního systému/kontroly kódu/regresních testů popsaných ve výše uvedených oddílech.
Závěr
Odebrání závislostí TLS 1.0 je složitý problém, který je možné ukončit. Partneři microsoftu a průmyslu na to dnes šly, aby zajistili, že je náš celý produkt ve výchozím nastavení bezpečnější – od komponent operačního systému a vývojových rámců až po aplikace/služby, které jsou na nich integrované. Podle doporučení uvedených v tomto dokumentu pomůžete vašemu podniku namapovat správný kurz a budete vědět, jaké výzvy je třeba očekávat. Pomůže to také vašim zákazníkům, aby se na přechod připravili.
Dodatek A: Handshake Simulation pro různé klienty, kteří se připojují k www.microsoft.com, zdvořilost SSLLabs.com

Dodatek B: Zastaralé tls 1.0/1.1 při zachování režimu FIPS
Pokud vaše síť vyžaduje režim FIPS, postupujte podle následujících pokynů, ale také chcete protokol TLS 1.0/1.1 odepisovat:Follow the steps below if your network requires FIPS Mode but you also want deprecate TLS 1.0/1.1:
Nakonfigurujte verze TLS prostřednictvím registrutak, že pro nežádoucí verze TLS nastavíte hodnotu "Povoleno" na nulu.
Zakázat křivku 25519 (jenom server 2016) prostřednictvím Zásady skupiny.
Zakažte všechny šifrovací sady pomocí algoritmů, které nejsou povolené příslušnou publikací FIPS. Pro Server 2016 (za předpokladu, že platí výchozí nastavení) to znamená zakázání šifr RC4, PSK a NULL.
Přispěvatelé/Děkujeme
Mark Cartwright
Petr Šmíd
Patrick Jungles
Michael Scovetta
Tony Rice
David LeBlanc
Mortimer Cook
Daniel Sommerfeld
Andrej Popov
Michiko Short
Justin Burke
Gov Maharaj
Brad Turner
Sean Stevenson