Het TLS 1.0-probleem oplossen, 2e editie

Dit document bevat richtlijnen voor het snel identificeren en verwijderen van afhankelijkheden van het TLS-protocol versie 1.0 (Transport Layer Security) in software die op Microsoft-besturingssystemen is gebouwd. Ook krijgt u meer informatie over productwijzigingen en nieuwe functies die door Microsoft zijn geleverd voor het beveiligen van uw eigen klanten en onlineservices. Het is bedoeld om te worden gebruikt als uitgangspunt voor het bouwen van een migratieplan naar een TLS 1.2+-netwerkomgeving. Hoewel de oplossingen die hier worden beschreven, behulpzaam kunnen zijn om het gebruik van TLS 1.0 in niet-Microsoft-besturingssystemen of cryptobibliotheken te verwijderen, is dit document hierop niet speciaal gericht.

TLS 1.0 is een beveiligingsprotocol dat in 1999 voor het eerst is gedefinieerd voor het tot stand brengen van versleutelingskanalen via computernetwerken. Microsoft heeft dit protocol ondersteund sinds Windows XP/Server 2003. Hoewel het niet langer het standaardbeveiligingsprotocol is dat in moderne besturingssystemen wordt gebruikt, wordt TLS 1.0 nog steeds ondersteund voor compatibiliteit met eerdere versies. Veranderende regelgeving en nieuwe beveiligingsproblemen in TLS 1.0 hebben bedrijven doen besluiten om TLS 1.0 volledig uit te schakelen.

Microsoft raadt klanten aan om dit probleem voor te zijn door TLS 1.0-afhankelijkheden in hun omgevingen te verwijderen en waar mogelijk TLS 1.0 op het niveau van het besturingssysteem uit te schakelen. Gezien de tijd dat TLS 1.0 al door de software-industrie wordt ondersteund, wordt het ten zeerste aangeraden de volgende zaken uit te voeren om TLS 1.0 af te schaffen:

  • Codeanalyse voor het zoeken/herstellen van hardcoded instanties van TLS 1.0 of oudere beveiligingsprotocollen.

  • Scannen van netwerkeindpunten en verkeersanalyse om besturingssystemen te identificeren die gebruikmaken van TLS 1.0 of oudere protocollen.

  • Volledige regressietests voor uw hele toepassingsstack waarbij TLS 1.0 is uitgeschakeld.

  • Migratie van verouderde besturingssystemen en ontwikkelingsbibliotheken/-frameworks naar versies die standaard met TLS 1.2 kunnen omgaan.

  • Compatibiliteitstests voor alle besturingssystemen die in uw bedrijf worden gebruikt om eventuele TLS 1.2-ondersteuningsproblemen te identificeren.

  • Coördinatie met uw eigen zakelijke partners en klanten om hen te informeren over uw plan om TLS 1.0 af te schaffen.

  • Uitzoeken welke clients mogelijk geen verbinding meer kunnen maken met uw servers als TLS 1.0 is uitgeschakeld.

Het doel van dit document is om aanbevelingen te bieden voor het verwijderen van technische blokkeringen voor het uitschakelen van TLS 1.0, terwijl de zichtbaarheid van de impact van deze wijzigingen voor uw eigen klanten wordt vergroot. Het voltooien van deze onderzoeken kan helpen de impact van het volgende beveiligingsprobleem in TLS 1.0 te verminderen. Voor dit document geldt dat verwijzingen met betrekking tot het afschaffen van TLS 1.0 ook van toepassing zijn op TLS 1.1.

Ontwikkelaars van zakelijke software hebben een strategische belang om meer veilige en flexibele oplossingen te gebruiken om problemen met het beveiligingsprotocol ook in de toekomst het hoofd te kunnen bieden. Hoewel in dit document flexibele oplossingen worden voorgesteld voor het elimineren van TLS-hardcoding, vallen bredere flexibele oplossingen buiten het bereik van dit document.

De huidige status van de TLS 1.0-implementatie van microsoft

De TLS 1.0-implementatie van Microsoft bevat geen bekende beveiligingsproblemen. Als gevolg mogelijke protocol-downgrade-aanvallen in de toekomst en andere TLS 1.0-beveiligingsproblemen die niet specifiek zijn voor de implementatie van Microsoft, wordt aanbevolen dat afhankelijkheden op alle beveiligingsprotocollen die ouder zijn dan TLS 1.2, waar mogelijk worden verwijderd (TLS 1.1/1.0/SSLv3/SSLv2).

Als u deze migratie naar TLS 1.2+ wilt plannen, moeten ontwikkelaars en systeembeheerders op de hoogte zijn van de kans op hardcoding van protocolversies in toepassingen die door hun werknemers en partners zijn ontwikkeld. Hardcoding betekent in dit geval dat de TLS-versie wordt vastgesteld op een versie die verouderd is en minder veilig dan nieuwere versies. TLS-versies die nieuwer zijn dan de hardcoded versie, kunnen niet worden gebruikt zonder het betreffende programma te wijzigen. Dit type probleem kan niet worden opgelost zonder code wijzigingen in de broncode en implementatie van software-updates. Hardcoding van protocolversies was in het verleden gebruikelijk voor test- en ondersteuningsdoeleinden, omdat veel verschillende browsers en besturingssystemen verschillende niveaus van TLS-ondersteuning kenden.

Ondersteunde versies van TLS in Windows

Veel besturingssystemen hebben verouderde standaardinstellingen voor TLS-versies of bieden ondersteuning voor plafonds waaraan moet worden voldaan.

Afbeelding 1: Security Protocol Support by OS Version

Windows-besturingssysteem SSLv2 SSLv3 TLS 1.0 TLS 1.1 TLS 1.2 TLS 1.3
Windows Vista Ingeschakeld Ingeschakeld Ingeschakeld Niet ondersteund Niet ondersteund Niet ondersteund
Windows Server 2008 Ingeschakeld Ingeschakeld Ingeschakeld Uitgeschakeld* Uitgeschakeld* Niet ondersteund
Windows 7 (WS2008 R2) Ingeschakeld Ingeschakeld Ingeschakeld Uitgeschakeld* Uitgeschakeld* Niet ondersteund
Windows 8 (WS2012) Disabled Ingeschakeld Ingeschakeld Ingeschakeld Ingeschakeld Niet ondersteund
Windows 8.1 (WS2012 R2) Disabled Ingeschakeld Ingeschakeld Ingeschakeld Ingeschakeld Niet ondersteund
Windows 10 Disabled Ingeschakeld Ingeschakeld Ingeschakeld Ingeschakeld Niet ondersteund
Windows 11 Disabled Ingeschakeld Ingeschakeld Ingeschakeld Ingeschakeld Ingeschakeld
Windows Server 2016 Niet ondersteund Disabled Ingeschakeld Ingeschakeld Ingeschakeld Niet ondersteund
Windows Server 2016 Niet ondersteund Disabled Ingeschakeld Ingeschakeld Ingeschakeld Niet ondersteund
Windows Server 2019 Niet ondersteund Disabled Ingeschakeld Ingeschakeld Ingeschakeld Niet ondersteund
Windows Server 2019 GS-editie Niet ondersteund Disabled Disabled Disabled Ingeschakeld Niet ondersteund
Windows Server 2022 Niet ondersteund Disabled Disabled Disabled Ingeschakeld Ingeschakeld

Windows Server 2019 GS-editie is compatibel met Microsoft SDL, TLS 1.2 alleen met een beperkte set coderingssuites.

Windows Server 2022-editie is compatibel met Microsoft SDL, TLS 1.2 en TLS 1.3 alleen met een beperkte set coderingssuites.

TLS 1.1/1.2 kan worden ingeschakeld op Windows Server 2008 via dit optionele Windows Update-pakket.

Zie Modernizing TLS connections in Microsoft Edge and Internet Explorer 11 (TLS-verbindingen moderniseren in Microsoft Edge en Internet Explorer 11), Site compatibility-impacting changes coming to Microsoft Edge (Aanstaande wijzigingen met impact op de compatiblititeit van sites in Microsoft Edge) en Disabling TLS/1.0 and TLS/1.1 in the new Edge Browser (TLS/1.0 en TLS/1.1 uitschakelen in de nieuwe Edge-browser) voor meer informatie over het afschaffen van TLS 1.0/1.1 in IE/Edge

Een snelle manier om te bepalen welke TLS-versie door verschillende clients wordt vereist bij het verbinding maken met uw onlineservices, is door de handshake-simulatie op Qualys SSL Labs te raadplegen. Deze simulatie is van toepassing op combinaties van clientbesturingssystemen en browsers van alle fabrikanten. Zie Bijlage A aan het einde van dit document voor een gedetailleerd voorbeeld van de TLS-protocolversies die door verschillende combinaties van gesimuleerde clientbesturingssystemen en browsers worden afgehandeld bij het maken van verbinding met www.microsoft.com.

Als dat nog niet is gebeurd, wordt het ten zeerste aanbevolen om een inventarisatie uit te voeren van de besturingssystemen die in door bedrijf, klanten en partners worden gebruikt (de laatste twee door middel van contact/communicatie of ten minste HTTP-gebruikersagenttekenreeksverzameling). Deze inventarisatie kan verder worden aangevuld met verkeersanalyse op de rand van het bedrijfsnetwerk. In een dergelijke situatie levert verkeersanalyse de TLS-versies die worden gebruikt door klanten/partners die verbinding maken met uw services, maar het verkeer zelf blijft versleuteld.

De technische verbeteringen van Microsoft voor het elimineren van TLS 1.0-afhankelijkheden

Sinds de release van versie v1 van dit document heeft Microsoft een aantal software-updates en nieuwe functies geleverd om het afschaffen van TLS 1.0 te ondersteunen. Deze omvatten:

  • IIS custom logging (aangepaste IIS-logboekregistratie) voor het correleren van de client-IP-/gebruikersagenttekenreeks, service-URI, TLS-protocolversie en suite met coderingsmethoden.

    • Met deze logboekregistratie kunnen beheerders uiteindelijk de blootstelling van hun klanten aan een zwakke TLS kwantificeren.
  • SecureScore: teneinde Office 365-tenantbeheerders te helpen hun eigen gebruik van zwakke TLS te identificeren, is de SecureScore-portal gebouwd om deze informatie te delen omdat TLS 1.0 in oktober 2018 ondersteuning in Office 365 heeft gestaakt.

    • Deze portal biedt Office 365-tenantbeheerders de waardevolle informatie die ze nodig hebben om hun eigen klanten te kunnen bereiken die mogelijk niet op de hoogte zijn van hun eigen TLS 1.0-afhankelijkheden.

    • Zie https://securescore.microsoft.com/ voor meer informatie.

  • .NET Framework-updates om hardcoding op app-niveau te elimineren en door Framework overgenomen TLS 1.0-afhankelijkheden voorkomen.

  • Richtlijnen voor ontwikkelaars en software-updates zijn uitgebracht om klanten te helpen .Net-afhankelijkheden op zwakke TLS te identificeren en te elimineren: Best practices voor Transport Layer Security (TLS) met .NET Framework

    • Ter informatie: Alle apps die zijn gericht op .NET 4.5 of lager, moeten waarschijnlijk worden gewijzigd om TLS 1.2 te ondersteunen.
  • Voor TLS 1.2 wordt een back-port uitgevoerd naar Windows Server 2008 SP2 en XP POSReady 2009 om klanten te helpen met verouderde verplichtingen.

  • Begin 2019 zijn meer aankondigingen gedaan en in latere updates van dit document gecommuniceerd.

TLS 1.0-afhankelijkheden in code zoeken en herstellen

Voor producten die gebruikmaken van door Windows-besturingssysteem voorziene cryptobibliotheken en beveiligingsprotocollen, moeten de volgende stappen worden uitgevoerd om het gebruik van hardcoded TLS 1.0 in uw toepassingen te identificeren:

  1. Identificeren van alle instanties van AcquireCredentialsHandle. Hierdoor kunnen revisoren dichter in de buurt komen van codeblokken waar TLS kan zijn gehardcoded.

  2. Bekijk eventuele exemplaren van de SecPkgContext_SupportedProtocols- en SecPkgContext_Verbinding maken ionInfo-structuren voor in code vastgelegde TLS.

  3. In systeemeigen code instellen van eventuele niet-nultoewijzingen van grbitEnabledProtocols- op nul. Hierdoor kan het besturingssysteem de TLS-standaardversie gebruiken.

  4. FIPS-modus uitschakelen indien deze is ingeschakeld vanwege het mogelijke conflict met instellingen die vereist zijn voor het expliciet uitschakelen van TLS 1.0/1.1 in dit document. Zie Bijlage B voor meer informatie.

  5. Toepassingen bijwerken en opnieuw compileren met WinHTTP die op Windows Server 2012 of ouder worden gehost.

    1. Beheerde apps: herbouwen en opnieuw richten op de nieuwste .NET Framework-versie

    2. In de toepassingen moet code worden toegevoegd ter ondersteuning van TLS 1.2 via WinHttpSetOption

  6. Om alle bases te dekken, moeten de broncode- en onlineserviceconfiguratiebestanden worden gescand op de onderstaande patronen die corresponderen met de opgesomde typewaarden die gewoonlijk in TLS-hardcoding worden gebruikt:

    1. SecurityProtocolType

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

    3. WINHTTP_FLAG_SECURE_PROTOCOL_

    4. SP_PROT_

    5. NSStreamSocketSecurityLevel

    6. PROTOCOL_SSL of PROTOCOL_TLS

De aanbevolen oplossing in alle bovenstaande gevallen is om de selectie van de hardcoded protocolversie te verwijderen en de standaardinstelling van het besturingssysteem te respecteren. Als u gebruikmaakt van DevSkim, klikt u hier voor regels die de bovenstaande controles betreffen en die u voor uw eigen code kunt gebruiken.

Windows PowerShell maakt gebruik van .NET Framework 4.5, dat geen TLS 1.2 als beschikbaar protocol bevat. Er zijn twee oplossingen beschikbaar om dit probleem te omzeilen:

  1. Wijzig het betreffende script om het volgende op te nemen:

    [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12;
    
  2. Voeg een systeemomvattende registersleutel (bijvoorbeeld via groepsbeleid) toe aan elke computer waarmee TLS 1.2-verbindingen moeten worden gemaakt vanaf een .NET-app. Dit zorgt ervoor dat .NET de 'systeemstandaard'-TLS-versies gebruikt, waarmee TLS 1.2 als een beschikbaar protocol wordt toegevoegd en dat de scripts toekomstige TLS-versies kunnen gebruiken wanneer het besturingssysteem deze ondersteunt. (bijvoorbeeld 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

Oplossingen (1) en (2) sluiten elkaar wederzijds uit, wat betekent dat ze niet gezamenlijk moeten worden geïmplementeerd.

Beheerde toepassingen herbouwen/opnieuw richten met behulp van de nieuwste .NET Framework-versie

Toepassingen die gebruikmaken van .NET Framework-versies voorafgaand aan 4.7, kunnen beperkingen hebben die de ondersteuning van TLS 1.0 effectief beperken, ongeacht de onderliggende standaardinstellingen van het besturingssysteem. Raadpleeg de onderstaande diagram- en TLS-best practices (Transport Layer Security) met .NET Framework voor meer informatie.

Beheerde toepassingen opnieuw bouwen

SystemDefaultTLSVersion heeft voorrang boven targeting op app-niveau van TLS-versies. De aanbevolen best practice is om altijd de TLS-standaardversie van het besturingssysteem te respecteren. Het is ook de enige crypto-flexibele oplossing waarmee uw apps profiteren van toekomstige TLS 1.3-ondersteuning.

Als u werkt met oudere versies van .NET Framework, zoals 4.5.2 of 3.5, dan gebruikt uw toepassing standaard de oudere en niet de aanbevelen protocollen, bijvoorbeeld SSL 3.0 of TLS 1.0. Het is ten zeerste aanbevolen dat u een upgrade uitvoert naar nieuwere versies van .NET Framework, bijvoorbeeld .NET Framework 4.6, of de juiste registersleutels instelt voor 'UseStrongCrypto'.

Testen met TLS 1.2+

Volgens de oplossingen die in de bovenstaande sectie worden aanbevolen, moeten regressietests worden uitgevoerd op fouten in de protocolafhandeling en compatibiliteit met andere besturingssystemen in uw onderneming.

  • Het meest voorkomende probleem in deze regressietests is een TLS-afhandelingsfout vanwege een poging verbinding te maken met een client vanaf een besturingssysteem of browser die geen ondersteuning biedt voor TLS 1.2.

    • Zo zal een Vista-client geen TLS afhandelen met een server die is geconfigureerd voor TLS 1.2+, omdat TLS 1.0 de maximaal ondersteunde versie voor Vista is. Deze client moet worden bijgewerkt of buiten gebruik worden gesteld in een TLS 1.2+-omgeving.
  • Voor producten met wederzijdse TLS-verificatie op basis van certificaten zijn mogelijk extra regressietests vereist omdat de cerificaatselectiecode dat aan TLS 1.0 is gekoppeld minder duidelijk is die voor TLS 1.2.

    • Als een product MTLS afhandelt met een certificaat van een niet-standaardlocatie (buiten de certificaatarchieven met standaardnamen in Windows), moet die code mogelijk worden bijgewerkt om ervoor te zorgen dat het certificaat correct wordt opgehaald.
  • Service-afhankelijkheden moeten worden gecontroleerd op problemen.

    • Services die samenwerken met externe services, moeten aanvullende interoperabiliteitstests uitvoeren met die partijen.

    • Voor niet-Windows-toepassingen of besturingssystemen van servers die in gebruik zijn, moet worden onderzocht of bevestigd dat ze TLS 1.2 kunnen ondersteunen. Dit kan het makkelijkst door middel van scannen worden gedaan.

Een eenvoudige blauwdruk voor het testen van deze wijzigingen in een onlineservice bestaat uit:

  1. Het uitvoeren van een scan op productieomgevingssystemen om besturingssystemen te identificeren die TLS 1.2 niet ondersteunen.

  2. Controle van de broncode- en onlineserviceconfiguratiebestanden voor op hardcoded TLS, zoals beschreven in 'TLS 1.0-afhankelijkheden in code zoeken en corrigeren'

  3. Toepassingen bijwerken/opnieuw compileren (zoals vereist):

    1. Beheerde apps

      1. Herbouwen op basis van de nieuwste versie van .NET Framework.

      2. Controleren of gebruik van de SSLProtocols-inventarisatie is ingesteld op SSLProtocols.None om de standaardinstellingen van het besturingssysteem te gebruiken.

    2. WinHTTP-apps: herbouwen met WinHttpSetOption om TLS 1.2 te ondersteunen

  4. Beginnen met testen in een preproductie-of faseringsomgeving waarbij alle beveiligingsprotocollen die ouder zijn dan TLS 1.2 zijn uitgeschakeld via het register.

  5. Herstellen van alle resterende instanties van TLS-hardcoding als deze tijdens het testen worden aangetroffen. Opnieuw implementeren van de software en uitvoeren van een nieuwe regressietest.

Partners informeren over de schema's voor het afschaffen van TLS 1.0

Nadat TLS-hardcoding is aangepakt en updates van het besturingssysteem/ontwikkelingsframework zijn voltooid, mocht u ervoor kiezen om TLS 1.0 af te schaffen, dient u dit met uw klanten en partners af te spreken:

  • Het is essentieel uw klanten en partners vroegtijdig te betrekken bij het afschaffen van TLS 1.0. Hiervoor zult u ten minste gebruik moeten maken van blogposts, whitepapers of andere webinhoud.

  • Partners moeten elk hun eigen TLS 1.2-gereedheid evalueren door middel van controles van besturingssystemen/scannen van code/regressietests die in de bovenstaande secties zijn beschreven.

Conclusie

Het verwijderen van TLS 1.0-afhankelijkheden is een ingewikkeld probleem om volledig te kunnen aansturen. Microsoft en partners in de branche nemen op dit moment maatregelen om ervoor te zorgen dat onze hele productenstack standaard veiliger zal zijn, van de onderdelen van het besturingssysteem en ontwikkelingsframeworks tot de toepassingen en services die erop zijn gebouwd. Als de aanbevelingen die in dit document worden gedaan, worden opgevolgd, kan uw bedrijf de juiste koers uitstippelen en weten welke uitdagingen het kan verwachten. Daarnaast zullen ook uw klanten beter voorbereid zijn op de overstap.

Bijlage A: Handshake Simulatie voor verschillende clients die verbinding maken met www.microsoft.com, met dank aan SSLLabs.com

Resultaten van de handshake-simulatie

Bijlage B: TLS 1.0/1.1 wordt afgeschaft terwijl de FIPS-modus behouden blijft

Volg de onderstaande stappen als uw netwerk de FIPS-modus vereist, maar u ook TLS 1.0/1.1 wilt afschaffen:

  1. TLS-versies configureren via het register door 'Ingeschakeld' op nul in te stellen voor de ongewenste TLS-versies.

  2. Curve 25519 (alleen Server 2016) uitschakelen via groepsbeleid.

  3. Alle suites uitschakelen die coderingsmethoden bevatten met algoritmen die niet zijn toegestaan door de bijbehorende FIPS-publicatie. Voor Server 2016 betekent dit (ervan uitgaande dat de standaardinstellingen van kracht zijn) het uitschakelen van RC4, PSK en NULL-coderingen.

Een bijdrage van/Met dank aan

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