Samenvatting
Een beveiligingslek bestaat in het protocol Transport Layer Security en Secure Sockets Layer protocol TLS/SSL (), zoals geïmplementeerd in het onderdeel codering van Microsoft .NET Framework. Een aanvaller die misbruik weet te maken van dit beveiligingslek kan versleutelde TLS/SSL-verkeer te ontsleutelen.MS16-065. Deze update wijzigt de manier waarop het onderdeel .NET Framework codering verzendt en ontvangt de gecodeerde pakketten.
Om dit beveiligingslek misbruiken door zou een aanvaller eerst moeten niet-gecodeerde gegevens invoeren in het beveiligingskanaal en voer daarna een aanval man-in-the-middle (MiTM) tussen de desbetreffende client en een betrouwbare server. Deze update dicht het beveiligingslek door aanpassing van de manier waarop het onderdeel .NET codering verzendt en ontvangt de gecodeerde pakketten. Dit beveiligingslek wordt opgelost als onderdeel vanDe volgende tabel bevat koppelingen naar de standaardvermelding voor elke door een beveiligingslek in de lijst met veelvoorkomende beveiligingslekken en blootstellingen.
Beveiligingslek met betrekking tot titel |
CVE-nummer |
Openbaar gemaakt |
Misbruik |
---|---|---|---|
TLS/SSL Spoofing-beveiligingslek |
Ja |
Nee |
Beveiligingslek met betrekking tot resolutie
De wijziging in MS16-065 zorgt ervoor dat de eerste TLS record nadat het handshake te splitsen. Dit zorgt ervoor dat de SslStream, WebRequest (HttpWebRequest, FtpWebRequest), SmtpClient en HttpClient (indien op basis van het HttpWebRequest) gegevensstromen naar één byte terug voor de eerste lezen, gevolgd door de rest (n-1) bytes in opeenvolgende gelezen. Dit gedrag alleen gewijzigd voor toepassingen die gebruikmaken van TLS 1.0 + Cipher Block Chaining, maar niet bij gebruik van TLS 1.1 of TLS 1.2. Opmerking Als een vereiste is, moet u MS12-006 zodat deze update installeren. Deze wijziging kan veroorzaken sommige toepassingen die zijn gebaseerd op .NET Framework worden afgebroken. Dit artikel worden twee methoden die u gebruiken kunt voor het bijwerken van uw toepassing correct werkt nadat u MS16-065toepassen.
Beperkende factoren voor compatibiliteitsproblemen
Optie 1: Ga naar het protocol TLS 1.2
Deze optie wordt de toepassing het protocol TLS 1.2 wordt gebruikt door het register of programmatisch versie van het protocol te configureren.
-
Het register wijzigenback-up van het register kunt terugzetten in het geval zich problemen voordoen. Het .NET Framework 4.0 en de .NET Framework 4.5.x toepassingen die worden uitgevoerd op .NET Framework 4.5 en hoger kunnen activeren het standaardprotocol TLS 1.2, TLS 1.1 en TLS 1.0 door het inschakelen van de registersleutel SchUseStrongCrypto . Deze registersleutel wordt beschreven in de sectie Voorgestelde acties van het onderwerp van de Microsoft Security Advisory-2960358 op de Microsoft TechNet-website. Belangrijk Deze registerwijziging werkt alleen als de volgende voorwaarden voldaan wordt:
Belangrijk Volg de stappen in deze sectie zorgvuldig. Als u het register onjuist bewerkt, kunnen er ernstige problemen optreden. Voordat u deze wijzigt,-
Toepassingen die gebruikmaken van de ServicePointManager-API's met de waarde ServicePointManager.SecurityProtocol niet expliciet instelt. Voorbeelden van deze klassen zijn System.Net.Http.HttpClient, System.Net.FtpWebRequest, System.Net.HttpWebRequesten System.Net.Mail.SmtpClient. De ServicePointManager.SecurityProtocol instellen in code voorrang op het register.
-
Toepassingen maken gebruik van de overbelasting van de SslStream AuthenticateAsClient(String) .
-
-
Via programmacode de protocolversie configurerenSslStream AuthenticateAsClient(String, X509CertificateCollection, SslProtocols, Boolean) moeten worden gecompileerd, SslProtocols.Tls12, SslProtocols.Tls11en SslProtocols.Tls als de derde parameter opgeven. Zie het onderwerp SslStream klasse op de website van MSDN (Microsoft Developer) voor een volledige beschrijving van het gebruik van de klasse SslStream. Opmerking Het .NET Framework 4.6 en hoger gebruiken TLS 1.2, TLS 1.1 en TLS 1.0 als de standaard protocol. Dit wordt besproken in het onderwerp van de Microsoft Security Advisory-2960358 op de Microsoft TechNet-website.
Het .NET Framework 4.0 en 4.5 toepassingen die op het .NET Framework 4.5 en hoger worden uitgevoerd en die gebruikmaken van de overbelasting
Optie 2: Ingang splitsen pakketten
Deze update zorgt ervoor dat een enkele record te splitsen in meerdere records. Dus als een toepassing de volledige record verwacht beschikbaar in één aanroep lezen , dergelijke toepassingen mogelijk worden verbroken. Om ervoor te zorgen dat de toepassing goed werkt, controleert u of dat de toepassing gesplitste pakketten verwerkt door het aanroepen van Stream.Read correct uit te voeren. Kunt u de voorbeeld code beschikbaar hier als referentie voor het oplossen van de toepassing correct uitvoeren van de oproep lezen . Voor een voorbeeld van een HTTP-aanvraag die het verschil in situatie vóór (met de beperking) en na (zonder de beperking) updates, 3147461 en 3147458 zijn geïnstalleerd, raadpleegt u de sectie 'Meer informatie'. Zie het onderwerp Stream.Read, methode (Byte [], Int32, Int32) op de website van MSDN (Microsoft Developer) voor een volledig voorbeeld van de methode Stream.Read .
Tijdelijke oplossingen voor problemen met toepassingscompatibiliteit
Waarschuwing Deze oplossingen kunnen doen voor een computer of netwerk kwetsbaarder voor aanvallen door kwaadwillende gebruikers of schadelijke software, zoals virussen. We raden u niet met deze tijdelijke oplossingen, maar verschaft u deze informatie zodat u met deze tijdelijke oplossingen naar eigen goeddunken implementeren kunt. Gebruik deze tijdelijke oplossingen voor uw eigen risico.
Methode 1: Update registersleutels (beschikbaar voor alle versies van .NET Framework)
De structuur van de SCH_SEND_AUX_RECORD (globaal) uitschakelen Structuur van de SCH_SEND_AUX_RECORD voor afzonderlijke toepassingen uitschakelen
SCH_SEND_AUX_RECORD-structuur (globaal) uitschakelen
Voor alle toepassingen, voegt u de volgende registersubsleutel:
Registerlocatie: HKEY_LOCAL_MACHINE\Software\Microsoft\. NETFramework\ < versie >
DWORD-naam: SchSendAuxRecord Waardegegevens: 0 Opmerking De tijdelijke aanduiding < versie > is v4.0.30319 of v2.0.50727, afhankelijk van de versie. Voor 32-bits toepassingen die worden uitgevoerd op 64-bits computers, moet u ook de volgende subsleutel in het register toevoegen:Registerlocatie: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\. NETFramework\ < versie >
DWORD-naam: SchSendAuxRecord Waardegegevens: 0 Opmerking De tijdelijke aanduiding < versie > is v4.0.30319 of v2.0.50727, afhankelijk van de versie.Tijdelijke oplossing
Schakel tijdelijk de veilige modus die in dit artikel wordt beschreven, klikt u op de link voor het downloaden van een REG-bestand en dubbelklik op het gedownloade REG-bestand om de wijzigingen in het register.
Voor toepassingen die zijn gericht op het Microsoft.NET Framework 3.5:Het bestand ManualOptOutSchSendAuxRecord20.reg nu downloaden. Gericht op het Microsoft .NET Framework 4.0 en latere versies voor toepassingen:
Het bestand ManualOptOutSchSendAuxRecord40.reg nu downloaden. Als u wilt de veilige modus wordt beschreven in dit artikel opnieuw in te schakelen, klikt u op de link voor het downloaden van een REG-bestand en dubbelklik op het gedownloade REG-bestand om de wijzigingen in het register. Voor toepassingen die zijn gericht op Microsoft.NET Framework 3.5:
Het bestand ManualOptInSchSendAuxRecord20.reg nu downloaden. Gericht op het Microsoft .NET Framework 4.0 en latere versies voor toepassingen:
Het bestand ManualOptInSchSendAuxRecord40.reg nu downloaden. Voor meer informatie over het downloaden van Microsoft-ondersteuningsbestanden klikt u op het volgende artikelnummer om het artikel in de Microsoft Knowledge Base weer te geven:
Hoe 119591 Microsoft-ondersteuningsbestanden via online services downloadenMicrosoft heeft dit bestand op virussen gecontroleerd. Microsoft gebruikt de meest actuele software voor virusdetectie die beschikbaar was op de datum waarop het bestand werd gepost. Het bestand is opgeslagen op beveiligde servers die onbevoegde wijzigingen aan het bestand verhinderen.
Structuur van de SCH_SEND_AUX_RECORD voor afzonderlijke toepassingen uitschakelen
Voor alle toepassingen, voegt u de volgende registersubsleutel:
Registerlocatie: HKEY_LOCAL_MACHINE\Software\Microsoft\. NETFramework\ < versie > \System.Net.ServicePointManager.SchSendAuxRecord
DWORD-naam: Volledig gekwalificeerde pad naar de toepassing .exe (bijvoorbeeld C:\MyApp\MyApp.exe) Waardegegevens: 0 Opmerking De tijdelijke aanduiding < versie > is v4.0.30319 of v2.0.50727, afhankelijk van de versie. Voor 32-bits toepassingen die worden uitgevoerd op 64-bits computers, moet u ook de volgende subsleutel in het register toevoegen:Registerlocatie: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\. NETFramework\ < versie > \System.Net.ServicePointManager.SchSendAuxRecord
DWORD-naam: Volledig gekwalificeerde pad naar de toepassing .exe (bijvoorbeeld C:\MyApp\MyApp.exe) Gegevens: 0 (de enige geldige waarde is 0. Elke andere waarde wordt genegeerd.) Opmerking De tijdelijke aanduiding < versie > is v4.0.30319 of v2.0.50727, afhankelijk van de versie.Methode 2: Wijzig de configuratie op toepassingsniveau (alleen beschikbaar voor de versie van .NET Framework 4.6 en hoger)
Beginnen met het .NET Framework 4.6, kunt u de configuratie op het niveau van een toepassing via code of toepassing configuratie of het register gewijzigd.
In het .NET Framework 4.6, kunt u de schakeloptie met behulp van een van de volgende manieren instellen. Deze voorbeelden van de beveiliging uitgeschakeld.-
Via programmering
Allereerst de toepassing moet doen is de volgende code worden uitgevoerd. Dit is omdat punt servicebeheer wordt slechts één keer worden geïnitialiseerd.private const string DisableCachingName = @"TestSwitch.LocalAppContext.DisableCaching"; private const string DontEnableSchSendAuxRecordName = @"Switch.System.Net.DontEnableSchSendAuxRecord";
AppContext.SetSwitch(DisableCachingName, true); AppContext.SetSwitch(DontEnableSchSendAuxRecordName , true); -
Toepassingsconfiguratie
Als u de toepassingsconfiguratie, de volgende vermelding toevoegen:<runtime><AppContextSwitchOverrides value="Switch.System.Net.DontEnableSchSendAuxRecord=true"/>
</runtime> -
Registersleutel (global computer)
Registerlocaties: HKEY_LOCAL_MACHINE\Software\Microsoft\. NETFramework\AppContextHKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\. NETFramework\AppContext
Waarde: Switch.System.Net.DontEnableSchSendAuxRecord Type: Tekenreeks Waarde: True Opmerking Switch.System.Net.DontEnableSchSendAuxRecord = False voor alle toepassingen.
Meer informatie
Het volgende is een voorbeeld Client/Server-communicatiepatroon voordat en nadat deze update is geïnstalleerd. Deze informatie wordt verstrekt ter illustratie voor het identificeren van een breuk van de toepassing door de installatie van deze hotfix.
Zonder het beperken |
Met de oplossing |
---|---|
[Server] wachten op verbindingen (127.0.0.1:4431) [Client] Verbinding maken met localhost:4431 [Server] De client is verbonden. [Client] Verbonden. Bezig met verifiëren... [Server] De client is geverifieerd. [Client] Verzenden van de aanvraag (94 Bytes) [Client] Wacht op antwoord... [Server] 94 bytes ontvangen: <<< ophalen / HTTP/1.0 Host: contoso.com User-Agent: Toepassing testen >>> [Server] Heeft gereageerd met 476 bytes. [Client 1: 476 Bytes] Antwoord: <<<<< HTTP/1.1 200 OK … >>>>> |
[Server] wachten op verbindingen (127.0.0.1:4431) [Client] Verbinding maken met localhost:4431 [Server] De client is verbonden. [Client] Verbonden. Bezig met verifiëren... [Server] De client is geverifieerd. [Client] Verzenden van de aanvraag (94 Bytes) [Client] Wacht op antwoord... [Server] Ontvangen bytes 1: <<< G >>> [Server] Ontvangen bytes 93: <<< ET / HTTP/1.0 Host: contoso.com User-Agent: Toepassing testen >>> [Server] Heeft gereageerd met 476 bytes. [Client 1: 1 Bytes] Antwoord: <<<<< H >>>>> [Client 2: 475 Bytes] Antwoord: <<<<< HTTP/1.1 200 OK … >>>>> |