Sammanfattning
Informationsläckor finns i Transport Layer Security-protokollet och protokollet SSL (Secure Sockets Layer) (TLS/SSL), som implementeras i krypteringskomponenten i Microsoft.NET Framework. En angripare som lyckas utnyttja det här säkerhetsproblemet kan dekryptera krypterade TLS/SSL-trafik.Microsoft-säkerhetsbulletinen MS16-065. Den här uppdateringen ändrar sättet att komponenten.NET Framework-skickar och tar emot krypterade nätverkspaket.
Om du vill utnyttja säkerhetsproblemet först angriparen att injicera icke-krypterad data i säkerhet kanalen och sedan utföra en man-in-the-middle-attack (MiTM) mellan riktade klient och en server som legitima. Den här uppdateringen åtgärdar problemet genom att ändra sättet att komponenten .NET skickar och tar emot krypterade paket. Detta problem har åtgärdats som en del avFöljande tabell innehåller länkar till vanliga posten för varje säkerhetsproblem i listan vanliga sårbarheter och exponeringar.
Säkerhetsproblem titel |
CVE-nummer |
Allmänt lämnas |
Utnyttja |
---|---|---|---|
Förfalskning av TLS/SSL |
Ja |
Nej. |
Lösning av problem
Ändringen infördes i Microsoft-säkerhetsbulletinen MS16-065 medför den första posten i TLS efter handskakningen ska delas. Detta medför att SslStream, WebRequest (i HttpWebRequest, FtpWebRequest), SmtpClient och HttpClient (där utifrån i HttpWebRequest) strömmar för att returnera en enda byte för den första Läs följt av resten (n-1) byte i efterföljande läsningar. Den här förändringen sker endast för program som använder TLS 1.0 + Cipher Block Chaining, men inte när de använder TLS 1.1 eller 1.2 TLS. Obs! En förutsättning måste du installera Microsoft-säkerhetsbulletin MS12-006 om du vill aktivera den här uppdateringen. Denna ändring kan orsaka att vissa program som bygger på.NET Framework att bryta. Den här artikeln beskrivs två metoder som du kan använda för att uppdatera ditt program ska fungera korrekt när du har installerat Microsoft Security Bulletin MS16-065.
Mildrande åtgärder för kompatibilitetsproblem
Alternativ 1: Växla till protokollet TLS 1.2
Det här alternativet gör programmet använder TLS 1.2-protokollet genom att ändra registret eller programmässigt konfigurera versionen av protokollet.
-
Ändra registretSäkerhetskopiera registret för återställning om problem uppstår. .NET Framework 4.0 och 4.5.x.NET Framework-program som körs på.NET Framework 4.5 och senare versioner kan växla standardprotokoll TLS 1.2 TLS 1.1 och TLS 1.0 genom att aktivera registernyckeln SchUseStrongCrypto . Den här registernyckeln diskuteras under den Föreslagna åtgärder i Microsoft Security Advisory 2960358 -avsnittet på webbplatsen Microsoft TechNet. Viktigt Denna ändring i registret fungerar endast om följande villkor är uppfyllda:
Viktigt Följ noga anvisningarna i detta avsnitt. Om du ändrar registret på felaktigt sätt kan det uppstå allvarliga problem. Innan du ändrar den,-
Program som använder ServicePointManager-baserade API: er är inte anger värdet ServicePointManager.SecurityProtocol uttryckligen. Exempel på sådana klasser är System.Net.Http.HttpClient, System.Net.FtpWebRequest, System.Net.HttpWebRequestoch System.Net.Mail.SmtpClient. Ställa in ServicePointManager.SecurityProtocol i koden har företräde framför i registret.
-
Program använder SslStream AuthenticateAsClient(String) överbelastning.
-
-
Konfigurera Protokollversionen programmässigtSslStream AuthenticateAsClient(String, X509CertificateCollection, SslProtocols, Boolean) överbelastning måste kompileras, ange SslProtocols.Tls12, SslProtocols.Tls11och SslProtocols.Tls som den tredje parametern. En fullständig beskrivning av hur du använder klassen SslStream finns i avsnittet SslStream klass på webbplatsen MSDN (Microsoft Developer). Obs! .NET Framework 4.6 och senare versioner använder TLS 1.2 TLS 1.1 och TLS 1.0 som standard protokoll. Detta diskuteras i Microsoft Security Advisory 2960358 avsnitt på webbplatsen Microsoft TechNet.
.NET Framework 4.0 och 4.5 program som körs på.NET Framework 4.5 och senare versioner och som använder
Alternativ 2: Hantera delade paket
Den här uppdateringen medför att en post ska delas upp i flera poster. Om ett program förväntas ska vara tillgänglig i ett enda anrop Läs hela posten, avbryts därför sådana program. För att säkerställa att programmet fungerar korrekt, kontrollera att programmet hanterar delade paket genom att utföra Stream.Read samtal på rätt sätt. Du kan använda till exempel koden tillgänglig här som en referens för hur du åtgärdar programmet korrekt utföra Läs samtalet. För ett exempel http-begäran som visar skillnaden i funktion innan (med minskning) och efter (utan begränsning) installerades uppdateringar 3147461 och 3147458 , finns i avsnittet "Mer Information". Ett komplett exempel på metoden Stream.Read i avsnittet Stream.Read metod (Byte [], Int32, Int32) på webbplatsen MSDN (Microsoft Developer).
Lösningar på kompatibilitetsproblem med program
Varning Lösningarna kan göra datorn eller nätverket mer sårbara för angrepp från angripare eller skadliga program som virus. Vi rekommenderar inte att lösningarna men lämnar information så att du kan implementera lösningarna så önskar. Använd dessa lösningar på egen risk.
Metod 1: Uppdatera registernycklar (tillgänglig för alla versioner av.NET Framework)
Inaktivera SCH_SEND_AUX_RECORD struktur (globalt) Inaktivera SCH_SEND_AUX_RECORD struktur för enskilda program
Inaktivera SCH_SEND_AUX_RECORD struktur (globalt)
För alla program, lägger du till följande registerundernyckel:
Plats i registret: HKEY_LOCAL_MACHINE\Software\Microsoft\. NETFramework\ < versionsnummer >
DWORD-namn: SchSendAuxRecord Värde data: 0 Obs! Platshållaren < versionsnummer > är v4.0.30319 eller v2.0.50727, beroende på vilken version. För 32-bitars program som körs på 64-bitarsdatorer har även lägga till följande registerundernyckel:Plats i registret: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\. NETFramework\ < versionsnummer >
DWORD-namn: SchSendAuxRecord Värde data: 0 Obs! Platshållaren < versionsnummer > är v4.0.30319 eller v2.0.50727, beroende på vilken version.Temporär lösning
Tillfälligt inaktivera skyddat läge som beskrivs i denna artikel, klicka på länken om du vill hämta en REG-fil och dubbelklickar på hämtade REG-filen du vill ändra registret.
Målobjekt för Microsoft.NET Framework 3.5 för program:Hämta filen ManualOptOutSchSendAuxRecord20.reg nu. Målobjekt för Microsoft.NET Framework 4.0 och senare versioner för program:
Hämta filen ManualOptOutSchSendAuxRecord40.reg nu. Om du vill aktivera skyddat läge som beskrivs i denna artikel, klicka på länken om du vill hämta en REG-fil och dubbelklickar på hämtade REG-filen du vill ändra registret. För tillämpningar för Microsoft.NET Framework 3.5:
Hämta filen ManualOptInSchSendAuxRecord20.reg nu. Målobjekt för Microsoft.NET Framework 4.0 och senare versioner för program:
Hämta filen ManualOptInSchSendAuxRecord40.reg nu. För mer information om hur du hämtar supportfiler från Microsoft klickar du på följande artikelnummer och läser artikeln i Microsoft Knowledge Base:
119591 hämta Microsoft-supportfiler från onlinetjänsterMicrosoft har genomsökt denna fil efter virus. Microsoft använde det mest aktuella antivirusprogram som var tillgängligt när filen lades upp. Filen är sparad på servrar med utökad säkerhet som hjälper till att förhindra otillåtna ändringar av den.
Inaktivera SCH_SEND_AUX_RECORD struktur för enskilda program
För alla program, lägger du till följande registerundernyckel:
Plats i registret: HKEY_LOCAL_MACHINE\Software\Microsoft\. NETFramework\ < versionsnummer > \System.Net.ServicePointManager.SchSendAuxRecord
DWORD-namn: Fullständig sökväg för programmet .exe (till exempel C:\MyApp\MyApp.exe) Värde data: 0 Obs! Platshållaren < versionsnummer > är v4.0.30319 eller v2.0.50727, beroende på vilken version. För 32-bitars program som körs på 64-bitarsdatorer har även lägga till följande registerundernyckel:Plats i registret: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\. NETFramework\ < versionsnummer > \System.Net.ServicePointManager.SchSendAuxRecord
DWORD-namn: Fullständig sökväg för programmet .exe (till exempel C:\MyApp\MyApp.exe) Värdedata: 0 (det enda giltiga värdet är 0. Alla andra värden ignoreras.) Obs! Platshållaren < versionsnummer > är v4.0.30319 eller v2.0.50727, beroende på vilken version.Metod 2: Ändra konfigurationen på programnivå (tillgänglig endast för.NET Framework version 4.6 och senare versioner)
Du kan ändra konfiguration på en programnivå via kod eller programmet konfiguration eller registret ändringar börjar med.NET Framework 4.6.
I.NET Framework 4.6, kan du ange växeln genom att använda någon av följande metoder. Dessa exempel inaktivera säkerhetsfunktionen.-
Programmässigt
Det första du bör göra programmet körs följande kod. Detta beror på att punkt tjänsthanteraren ska initieras endast en gång.private const string DisableCachingName = @"TestSwitch.LocalAppContext.DisableCaching"; private const string DontEnableSchSendAuxRecordName = @"Switch.System.Net.DontEnableSchSendAuxRecord";
AppContext.SetSwitch(DisableCachingName, true); AppContext.SetSwitch(DontEnableSchSendAuxRecordName , true); -
Programkonfiguration
Ändra programkonfigurationen genom att lägga till följande post:<runtime><AppContextSwitchOverrides value="Switch.System.Net.DontEnableSchSendAuxRecord=true"/>
</runtime> -
Registernyckel (global dator)
Platser i registret: HKEY_LOCAL_MACHINE\Software\Microsoft\. NETFramework\AppContextHKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\. NETFramework\AppContext
Värde: Switch.System.Net.DontEnableSchSendAuxRecord Typ: Sträng Värde: SANT Obs! Switch.System.Net.DontEnableSchSendAuxRecord = False för alla program.
Mer Information
Följande är ett exempel klient/Server-kommunikation mönster före och efter att uppdateringen har installerats. Den här informationen för bild för att identifiera alla program brott på installationen av den här korrigeringsfilen.
Utan minskning |
Med minskning |
---|---|
[Server] väntar anslutningar (127.0.0.1:4431) [Client] Anslutning till localhost:4431 [Server] Klienten är ansluten. [Client] Ansluten. Autentisering sker... [Server] Klienten är autentiserad. [Client] Skicka en begäran (94 byte) [Client] Väntar på svar... [Server] Mottagna 94 byte: <<< få / HTTP/1.0 Host: contoso.com User-Agent: Testa programmet >>> [Server] Svarade med 476 byte. [Client 1: 476 byte] Svar: <<<<< HTTP/1.1 200 OK … >>>>> |
[Server] väntar anslutningar (127.0.0.1:4431) [Client] Anslutning till localhost:4431 [Server] Klienten är ansluten. [Client] Ansluten. Autentisering sker... [Server] Klienten är autentiserad. [Client] Skicka en begäran (94 byte) [Client] Väntar på svar... [Server] Mottagna byte 1: <<< G >>> [Server] Mottagna byte 93: <<< ET / HTTP/1.0 Host: contoso.com User-Agent: Testa programmet >>> [Server] Svarade med 476 byte. [Client 1: 1 byte] Svar: <<<<< H >>>>> [Client 2: 475 byte] Svar: <<<<< ANSL/1.1 200 OK … >>>>> |