Delen via


Het TLS 1.0-probleem oplossen, tweede editie

In dit document vindt u de meest recente richtlijnen voor het snel identificeren en verwijderen van TLS-protocolversie 1.0-afhankelijkheden in software die is gebouwd op basis van Microsoft-besturingssystemen, met informatie over productwijzigingen en nieuwe functies die door Microsoft worden geleverd om uw eigen klanten en onlineservices te beschermen. 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 besproken kunnen helpen het gebruik van TLS 1.0 in niet-Microsoft-besturingssystemen of cryptobibliotheken te verwijderen, zijn ze niet het onderwerp van dit document.

TLS 1.0 is een beveiligingsprotocol dat voor het eerst in 1999 is gedefinieerd voor het tot stand brengen van versleutelingskanalen via computernetwerken. Microsoft heeft dit protocol ondersteund sinds Windows XP/Server 2003. Hoewel TLS 1.0 niet langer het standaardbeveiligingsprotocol is dat door moderne besturingssystemen wordt gebruikt, wordt het nog steeds ondersteund voor achterwaartse compatibiliteit. Veranderende wettelijke vereisten en nieuwe beveiligingsproblemen in TLS 1.0 bieden bedrijven de stimulans om TLS 1.0 volledig uit te schakelen.

Microsoft raadt klanten aan dit probleem voor te gaan door WAAR mogelijk TLS 1.0-afhankelijkheden in hun omgevingen te verwijderen en TLS 1.0 uit te schakelen op besturingssysteemniveau. Gezien de tijdsduur dat TLS 1.0 wordt ondersteund door de software-industrie, wordt het ten zeerste aanbevolen dat een TLS 1.0-afschaffingsplan het volgende omvat:

  • Codeanalyse voor het vinden/herstellen van in code vastgelegde exemplaren van TLS 1.0 of oudere beveiligingsprotocollen.

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

  • Volledige regressietests via de volledige toepassingsstack waarbij TLS 1.0 is uitgeschakeld.

  • Migratie van verouderde besturingssystemen en ontwikkelingsbibliotheken/frameworks naar versies die standaard kunnen onderhandelen over TLS 1.2.

  • Compatibiliteitstests in besturingssystemen die door uw bedrijf worden gebruikt om ondersteuningsproblemen met TLS 1.2 te identificeren.

  • Coördinatie met uw eigen zakelijke partners en klanten om hen op de hoogte te stellen van uw overstap om TLS 1.0 te verwijderen.

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

Het doel van dit document is aanbevelingen te bieden waarmee technische blokkeringen kunnen worden verwijderd om TLS 1.0 uit te schakelen, terwijl tegelijkertijd de zichtbaarheid van de gevolgen van deze wijziging voor uw eigen klanten wordt vergroot. Het voltooien van dergelijke onderzoeken kan helpen de bedrijfsimpact van het volgende beveiligingsprobleem in TLS 1.0 te verminderen. Voor de doeleinden van dit document bevatten verwijzingen naar de afschaffing van TLS 1.0 ook TLS 1.1.

Bedrijfssoftwareontwikkelaars hebben een strategische behoefte aan meer toekomstveilige en flexibele oplossingen (ook wel cryptoflexibiliteit genoemd) om toekomstige inbreuk op beveiligingsprotocollen te kunnen aanpakken. Hoewel dit document flexibele oplossingen voorstelt voor het verwijderen van TLS-hardcoding, vallen bredere cryptoflexibiliteitsoplossingen buiten het bereik van dit document.

De huidige status van de TLS 1.0-implementatie van Microsoft

De TLS 1.0-implementatie van Microsoft is vrij van bekende beveiligingsproblemen. Vanwege het potentieel voor toekomstige protocol downgradeaanvallen en andere TLS 1.0-beveiligingsproblemen die niet specifiek zijn voor de implementatie van Microsoft, wordt aanbevolen dat afhankelijkheden van alle beveiligingsprotocollen die ouder zijn dan TLS 1.2, waar mogelijk worden verwijderd (TLS 1.1/1.0/ SSLv3/SSLv2).

Bij het plannen van deze migratie naar TLS 1.2+ moeten ontwikkelaars en systeembeheerders rekening houden met het potentieel voor hardcodering van protocolversies in toepassingen die zijn ontwikkeld door hun werknemers en partners. Hardcoding betekent hier dat de TLS-versie is vastgezet op een versie die verouderd en minder veilig is dan nieuwere versies. TLS-versies die hoger zijn dan de in code vastgelegde versie, kunnen niet worden gebruikt zonder het betreffende programma te wijzigen. Deze klasse van probleem kan niet worden opgelost zonder broncodewijzigingen en implementatie van software-updates. Hardcodering van protocolversies was in het verleden gebruikelijk voor test- en ondersteuningsdoeleinden, aangezien veel verschillende browsers en besturingssystemen verschillende niveaus van TLS-ondersteuning hadden.

Ondersteunde versies van TLS in Windows

Veel besturingssystemen hebben verouderde TLS-versiestandaarden of ondersteuningsdrempels waarvoor rekening moet worden gehouden.

Afbeelding 1: Ondersteuning van beveiligingsprotocollen per OS-versie

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 VOOR meer informatie over afschaffing van TLS 1.0/1.1 in IE/Edge TLS-verbindingen moderniseren in Microsoft Edge en Internet Explorer 11, wijzigingen die van invloed zijn op sitecompatibiliteit naar Microsoft Edge en tls/1.0 en TLS/1.1 uitschakelen in de nieuwe Edge-browser

Een snelle manier om te bepalen welke TLS-versie wordt aangevraagd door verschillende clients wanneer u verbinding maakt met uw onlineservices, is door te verwijzen naar de Handshake-simulatie bij Qualys SSL Labs. Deze simulatie heeft betrekking op combinaties van clientbesturingssystemen/browsers voor alle fabrikanten. Zie bijlage A aan het einde van dit document voor een gedetailleerd voorbeeld met de tls-protocolversies die zijn onderhandeld door verschillende combinaties van gesimuleerd client-besturingssysteem/browser bij het maken van verbinding met www.microsoft.com.

Als dit nog niet is voltooid, wordt het ten zeerste aanbevolen om een inventarisatie uit te voeren van besturingssystemen die worden gebruikt door uw onderneming, klanten en partners (de laatste twee via bereik/communicatie of ten minste HTTP User-Agent tekenreeksverzameling). Deze inventaris kan verder worden aangevuld door verkeersanalyse aan de rand van uw bedrijfsnetwerk. In een dergelijke situatie levert een verkeersanalyse de TLS-versies op die zijn onderhandeld door klanten/partners die verbinding maken met uw services, maar het verkeer zelf blijft versleuteld.

Technische verbeteringen van Microsoft om TLS 1.0-afhankelijkheden te elimineren

Sinds de v1-versie van dit document heeft Microsoft een aantal software-updates en nieuwe functies verzonden ter ondersteuning van afschaffing van TLS 1.0. Deze omvatten:

  • Aangepaste IIS-logboekregistratie om client-IP-/gebruikersagenttekenreeks, service-URI, TLS-protocolversie en coderingssuite te correleren.

    • Met deze logboekregistratie kunnen beheerders eindelijk de blootstelling van hun klanten aan zwakke TLS kwantificeren.
  • SecureScore - Om beheerders van Office 365-tenants te helpen bij het identificeren van hun eigen zwakke TLS-gebruik, is de SecureScore-portal gebouwd om deze informatie te delen, aangezien de ondersteuning van TLS 1.0 werd beëindigd in Office 365 in oktober 2018.

    • Deze portal biedt Office 365-tenantbeheerders de waardevolle informatie die ze nodig hebben om contact op te leggen met hun eigen klanten die zich mogelijk niet bewust zijn van hun eigen TLS 1.0-afhankelijkheden.

    • Ga naar https://securescore.microsoft.com/ voor meer informatie.

  • .Net Framework-updates om hardcodering op app-niveau te elimineren en framework-overgenomen TLS 1.0-afhankelijkheden te 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.
  • TLS 1.2 is teruggezet naar Windows Server 2008 SP2 en XP POSReady 2009 om klanten te helpen met verouderde verplichtingen.

  • Begin 2019 worden er meer aankondigingen gedaan en in volgende updates van dit document gecommuniceerd.

TLS 1.0-afhankelijkheden zoeken en herstellen in code

Voor producten die gebruikmaken van de door het Windows-besturingssysteem geleverde cryptografiebibliotheken en beveiligingsprotocollen, moeten de volgende stappen helpen bij het identificeren van eventuele in code vastgelegde TLS 1.0-gebruik in uw toepassingen:

  1. Identificeer alle exemplaren van AcquireCredentialsHandle(). Dit helpt revisoren dichter bij codeblokken te komen waar TLS mogelijk is vastgelegd.

  2. Bekijk alle exemplaren van de SecPkgContext_SupportedProtocols en SecPkgContext_ConnectionInfo structuren voor in code vastgelegde TLS.

  3. Stel in systeemeigen code alle niet-nul toewijzingen van grbitEnabledProtocols in op nul. Hierdoor kan het besturingssysteem de standaard TLS-versie gebruiken.

  4. Schakel de FIPS-modus uit als deze is ingeschakeld vanwege het potentieel voor conflict met instellingen die zijn vereist voor het expliciet uitschakelen van TLS 1.0/1.1 in dit document. Zie bijlage B voor meer informatie.

  5. Werk toepassingen bij en compileer deze opnieuw met WinHTTP die worden gehost op Server 2012 of ouder.

    1. Beheerde apps: herbouwen en opnieuw bepalen op basis van de nieuwste .NET Framework-versie

    2. Toepassingen moeten code toevoegen om TLS 1.2 te ondersteunen via WinHttpSetOption

  6. Als u alle bases wilt behandelen, scant u broncode en onlineserviceconfiguratiebestanden voor de onderstaande patronen die overeenkomen met geïnventareerde typewaarden die vaak worden gebruikt in TLS-hardcoding:

    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 vastgelegde protocolversieselectie te verwijderen en uit te stellen op de standaardinstelling van het besturingssysteem. Als u DevSkim gebruikt, klikt u hier om regels te zien die betrekking hebben op de bovenstaande controles die u met uw eigen code kunt gebruiken.

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

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

    [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12;
    
  2. Voeg een systeembrede registersleutel (bijvoorbeeld via groepsbeleid) toe aan elke computer die TLS 1.2-verbindingen vanuit een .NET-app moet maken. Dit zorgt ervoor dat .NET gebruikmaakt van de TLS-versies 'Systeemstandaard' die TLS 1.2 als een beschikbaar protocol toevoegt. Hierdoor kunnen de scripts toekomstige TLS-versies 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 samen hoeven te worden geïmplementeerd.

Beheerde toepassingen opnieuw bouwen/opnieuw samenstellen met behulp van de nieuwste .Net Framework-versie

Toepassingen die gebruikmaken van .NET Framework-versies vóór 4.7, hebben mogelijk beperkingen waardoor ondersteuning voor TLS 1.0 wordt beperkt, ongeacht de onderliggende standaardinstellingen voor het besturingssysteem. Raadpleeg het onderstaande diagram en de Transport Layer Security (TLS)-best practices met het .NET Framework voor meer informatie.

Beheerde toepassingen opnieuw bouwen

SystemDefaultTLSVersion heeft voorrang boven het app-niveau waarmee specifieke TLS-versies worden gericht. De aanbevolen werkwijze is om altijd de standaard TLS-versie van het besturingssysteem te gebruiken. Het is ook de enige crypto agile oplossing waarmee uw apps kunnen profiteren van toekomstige TLS 1.3-ondersteuning.

Als u zich richt op oudere versies van .NET Framework, zoals 4.5.2 of 3.5, gebruikt uw toepassing standaard de oudere en niet aanbevolen protocollen zoals SSL 3.0 of TLS 1.0. Het wordt ten zeerste aanbevolen om een upgrade uit te voeren naar nieuwere versies van .NET Framework, zoals .NET Framework 4.6 of de juiste registersleutels in te stellen voor UseStrongCrypto.

Testen met TLS 1.2+

Na de oplossingen die in de bovenstaande sectie worden aanbevolen, moeten producten worden getest op regressiefouten en compatibiliteit met andere besturingssystemen in uw onderneming.

  • Het meest voorkomende probleem in deze regressietest is een TLS-onderhandelingsfout vanwege een clientverbindingspoging van een besturingssysteem of browser die TLS 1.2 niet ondersteunt.

    • Een Vista-client onderhandelt bijvoorbeeld niet over TLS met een server die is geconfigureerd voor TLS 1.2+ omdat de maximale ondersteunde TLS-versie van Vista 1.0 is. Deze client moet worden bijgewerkt of buiten gebruik gesteld in een TLS 1.2+-omgeving.
  • Voor producten die gebruikmaken van wederzijdse TLS-verificatie op basis van certificaten, is mogelijk extra regressietests vereist omdat de certificaatselectiecode die is gekoppeld aan TLS 1.0 minder expressief was dan die voor TLS 1.2.

    • Als een product onderhandelt over MTLS met een certificaat van een niet-standaardlocatie (buiten de standaardcertificaatarchieven in Windows), moet die code mogelijk worden bijgewerkt om ervoor te zorgen dat het certificaat correct wordt verkregen.
  • Service-interafhankelijkheden moeten worden gecontroleerd op problemen.

    • Alle diensten die samenwerken met diensten van derde partijen, moeten aanvullende interoperabiliteitstests uitvoeren met die derden.

    • Voor niet-Windows-toepassingen of serverbesturingssystemen die in gebruik zijn, is onderzoek/bevestiging vereist dat ze TLS 1.2 ondersteunen. Scannen is de eenvoudigste manier om dit te bepalen.

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

  1. Voer een scan uit van productieomgevingssystemen om besturingssystemen te identificeren die TLS 1.2 niet ondersteunen.

  2. Scan broncode- en onlineserviceconfiguratiebestanden voor in code vastgelegde TLS, zoals beschreven in 'TLS 1.0-afhankelijkheden zoeken en herstellen in code'

  3. Toepassingen bijwerken/opnieuw compileren zoals vereist:

    1. Beheerde apps

      1. Bouw opnieuw op basis van de nieuwste .NET Framework-versie.

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

    2. WinHTTP-apps : herbouwen met WinHttpSetOption ter ondersteuning van TLS 1.2

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

  5. Corrigeer eventuele resterende gevallen van TLS-hardcoding zoals ze worden aangetroffen tijdens het testen. Implementeer de software opnieuw en voer een nieuwe regressietest uit.

Partners op de hoogte stellen van uw TLS 1.0-afschaffingsplannen

Nadat TLS-hardcoding is aangepakt en updates voor het besturingssysteem en ontwikkelingsframework zijn voltooid, moet u, als u ervoor kiest om TLS 1.0 af te schaffen, dit coördineren met klanten en partners.

  • Vroege partner-/klantactiviteiten zijn essentieel voor een succesvolle afschaffing van TLS 1.0. Dit moet minimaal bestaan uit blogberichten, whitepapers of andere webinhoud.

  • Partners moeten elk hun eigen TLS 1.2-gereedheid evalueren via het besturingssysteem/codescan-/regressietestinitiatieven die in bovenstaande secties worden beschreven.

Conclusion

Het verwijderen van TLS 1.0-afhankelijkheden is een ingewikkeld probleem om end-to-end uit te voeren. Microsoft- en branchepartners nemen hier vandaag actie op om ervoor te zorgen dat onze volledige productstack standaard veiliger is, van onze onderdelen van het besturingssysteem en de ontwikkelingsframeworks tot de toepassingen/services die erop zijn gebouwd. Door de aanbevelingen in dit document te volgen, kunt u de juiste koers in uw onderneming in kaart brengen en weten welke uitdagingen u kunt verwachten. Het helpt uw eigen klanten ook meer voorbereid te worden op de overgang.

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

Resultaten van de handshakesimulatie

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

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

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

  2. Schakel Curve 25519 (alleen Server 2016) uit via Groepsbeleid.

  3. Schakel coderingssuites uit met behulp van algoritmen die niet zijn toegestaan door de relevante FIPS-publicatie. Voor Server 2016 (ervan uitgaande dat de standaardinstellingen van kracht zijn) betekent dit het uitschakelen van RC4-, PSK- en NULL-coderingen.

Inzenders/dankzij

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