Zusammenfassung
Es besteht eine Sicherheitsanfälligkeit für die Offenlegung von Informationen in dem in der Verschlüsselungskomponente von Microsoft .NET Framework implementierten TLS/SSL-Protokoll (Transport Layer Security, Secure Sockets Layer). Ein Angreifer, der diese Sicherheitsanfälligkeit erfolgreich ausnutzt, kann den verschlüsselten TLS-SSL-Datenverkehr entschlüsseln.
Um die Sicherheitsanfälligkeit ausnutzen zu können, müsste der Angreifer zunächst unverschlüsselte Daten in den sicheren Kanal einschleusen und dann einen Man-in-the-Middle-Angriff zwischen dem Zielclient und einem legitimen Server ausführen. Dieses Update behebt die Sicherheitsanfälligkeit, indem die Art und Weise geändert wird, wie die .NET-Verschlüsselungskomponente verschlüsselte Netzwerkpakete sendet und empfängt.
Diese Sicherheitsanfälligkeit wird im Rahmen von Microsoft-Sicherheitsbulletin MS16-065 behoben. Dieses Update ändert die Art und Weise, wie die .NET-Verschlüsselungskomponente verschlüsselte Netzwerkpakete sendet und empfängt.
Die folgende Tabelle enthält Links zum Standardeintrag für jede Sicherheitsanfälligkeit in der Liste allgemeiner Sicherheitsanfälligkeiten:
Titel der Sicherheitsanfälligkeit |
CVE-Nummer |
Öffentlich gemeldet |
Ausgenutzt |
---|---|---|---|
TLS/SSL-Sicherheitsanfälligkeit durch Spoofing |
Ja |
Nein |
Behebung der Anfälligkeit
Die in Microsoft-Sicherheitsbulletin MS16-065 eingeführte Änderung bewirkt, dass der erste TLS-Datensatz nach dem Handshake aufgeteilt wird. Dadurch geben die Streams SslStream, WebRequest (HttpWebRequest, FtpWebRequest), SmtpClient und HttpClient (sofern auf HttpWebRequest basierend) ein einzelnes Byte für den ersten Lesevorgang zurück und unmittelbar danach in nachfolgenden Lesevorgängen die restlichen (n-1) Bytes. Diese Verhaltensänderung betrifft nur Anwendungen, die TLS 1.0 und CBC (Cipher Block Chaining) und nicht TLS 1.1 oder TLS 1.2. verwenden.
Hinweis Als Voraussetzung für dieses Update müssen Sie Microsoft-Sicherheitsbulletin MS12-006 installieren.
Diese Änderung kann dazu führen, dass manche auf .NET Framework basierende Anwendungen nicht mehr funktionieren. In diesem Artikel werden zwei Methoden beschrieben, mit denen Sie Ihre Anwendung aktualisieren können, damit sie nach der Installation von Microsoft-Sicherheitsbulletin MS16-065 ordnungsgemäß funktioniert.
Gegenmaßnahmen bei Kompatibilitätsproblemen
Option 1: Wechseln zum TLS 1.2-Protokoll
Beim Einsatz dieser Option wird die Anwendung durch Ändern der Registrierung oder programmgesteuertes Konfigurieren der Protokollversion gezwungen, das Protokoll TLS 1.2 zu verwenden.
-
Ändern der Registrierung
Wichtig
Führen Sie die in diesem Abschnitt beschriebenen Schritte sorgfältig aus. Durch eine fehlerhafte Bearbeitung der Registrierung können schwerwiegende Probleme verursacht werden. Bevor Sie Änderungen vornehmen, sichern Sie die Registrierung, um sie wiederherstellen zu können, falls Probleme auftreten.
Bei den .NET Framework 4.0- und .NET Framework 4.5.x-Anwendungen, die unter .NET Framework 4.5 und höheren Versionen ausgeführt werden, kann das Standardprotokoll durch die Aktivierung des Registrierungsschlüssels SchUseStrongCrypto auf TLS 1.2, TLS 1.1 und TLS 1.0 festgelegt werden. Dieser Registrierungsschlüssel wird im Abschnitt Empfohlene Maßnahmen der Microsoft-Sicherheitsempfehlung 2960358 auf der Microsoft TechNet-Website besprochen.
Wichtig Diese Registrierungsänderung funktioniert nur, wenn die folgenden Bedingungen erfüllt sind:-
Anwendungen, die ServicePointManager-basierte APIs verwenden, legen den Wert ServicePointManager.SecurityProtocolnicht explizit fest. Beispiele für solche Klassen sind System.Net.Http.HttpClient, System.Net.FtpWebRequest, System.Net.HttpWebRequest und System.Net.Mail.SmtpClient. Die Festlegung von ServicePointManager.SecurityProtocol im Code hat Vorrang gegenüber der Registrierung.
-
Die Anwendungen verwenden die SslStream.AuthenticateAsClient(String)-Überladung.
-
-
Programmgesteuertes Konfigurieren der Protokollversion
Die .NET Framework 4.0- und 4.5-Anwendungen, die unter .NET Framework 4.5 und höheren Versionen ausgeführt werden und die SslStream.AuthenticateAsClient(String, X509CertificateCollection, SslProtocols, Boolean)-Überladung verwenden, müssen SslProtocols.Tls12, SslProtocols.Tls11 und SslProtocols.Tls als dritten Parameter angeben. Eine umfassende Beschreibung der Verwendung der SslStream-Klasse finden Sie im Thema SslStream-Klasse auf der Microsoft Developer (MSDN)-Website.
Hinweis In .NET Framework 4.6 und höheren Versionen werden TLS 1.2, TLS 1.1 und TLS 1.0 als Standardprotokolle verwendet. Dies wird in der Microsoft-Sicherheitsempfehlung 2960358 auf der Microsoft TechNet-Website erläutert.
Option 2: Verarbeiten geteilter Pakete
Dieses Update bewirkt, dass ein Datensatz in mehrere Datensätze aufgeteilt wird. Dies kann zu Anwendungsfehlern führen, wenn eine Anwendung erwartet, dass der gesamte Datensatz in einem Read-Aufruf vorliegt. Um ein ordnungsgemäßes Anwendungsverhalten sicherzustellen, prüfen Sie, ob die Anwendung aufgeteilte Pakete verarbeitet. Dazu muss der Stream.Read-Aufruf richtig ausgeführt werden. Sie können sich an dem hier verfügbaren Beispielcode orientieren, wenn Sie die Anwendung korrigieren müssen, damit der Read-Aufruf ordnungsgemäß ausgeführt wird.
Eine HTTP-Beispielanforderung, welche die Änderung des Verhaltens vor (mit Gegenmaßnahme) und nach (ohne Gegenmaßnahme) der Installation der Updates 3147461 und 3147458 zeigt, finden Sie im Abschnitt „Weitere Informationen“.
Ein komplettes Beispiel der Stream.Read-Methode finden Sie im Thema Stream.Read Method (Byte[], Int32, Int32) auf der Microsoft Developer (MSDN)-Website.
Problemumgehungen für Anwendungskompatibilitätsprobleme
Warnung Durch diese Problemumgehungen wird ein Computer oder Netzwerk möglicherweise anfälliger für Angriffe böswilliger Benutzer oder Schadsoftware, wie etwa Viren. Diese Problemumgehungen werden von Microsoft nicht empfohlen, sie werden jedoch hier aufgeführt, damit Sie sie nach eigenem Ermessen anwenden können. Die Verwendung dieser Problemumgehungen erfolgt auf eigene Verantwortung.
Methode 1: Aktualisieren von Registrierungsschlüsseln (bei allen Versionen von .NET Framework verfügbar)
Deaktivieren der Struktur SCH_SEND_AUX_RECORD (global)
Deaktivieren der Struktur SCH_SEND_AUX_RECORD für einzelne Anwendungen
Deaktivieren der Struktur SCH_SEND_AUX_RECORD (global)
Fügen Sie für alle Anwendungen den folgenden Registrierungsunterschlüssel hinzu:
Registrierungspfad:HKEY_LOCAL_MACHINE\Software\Microsoft\.NETFramework\<version_number>
DWORD-Name: SchSendAuxRecord
Wert: 0
Hinweis Abhängig von der verwendeten Version steht der Platzhalter <version_number> für v4.0.30319 oder v2.0.50727.
Für 32-Bit-Anwendungen, die auf 64-Bit-Computern ausgeführt werden, fügen Sie außerdem den folgenden Registrierungsunterschlüssel hinzu:
Registrierungspfad:HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\.NETFramework\<version_number>
DWORD-Name: SchSendAuxRecord
Wert: 0
Hinweis Abhängig von der verwendeten Version steht der Platzhalter <version_number> für v4.0.30319 oder v2.0.50727.
Problemumgehung
Um den in diesem Artikel beschriebenen Sicherheitsmodus zeitweilig zu deaktivieren, klicken Sie auf den entsprechenden Link zum Herunterladen der REG-Datei, und anschließend doppelklicken Sie auf die heruntergeladene Datei, um die Registrierungsänderungen vorzunehmen.
Anwendungen für Microsoft .NET Framework 3.5:
Die Datei „ManualOptOutSchSendAuxRecord20.reg“ jetzt herunterladen.
Anwendungen für Microsoft .NET Framework 4.0 und höhere Versionen:
Die Datei „ManualOptOutSchSendAuxRecord40.reg“ jetzt herunterladen.
Um den in diesem Artikel beschriebenen Sicherheitsmodus erneut zu aktivieren, klicken Sie auf den entsprechenden Link zum Herunterladen der REG-Datei, und anschließend doppelklicken Sie auf die heruntergeladene Datei, um die Registrierungsänderungen vorzunehmen.
Anwendungen für Microsoft .NET Framework 3.5:
Die Datei „ManualOptInSchSendAuxRecord20.reg“ jetzt herunterladen.
Anwendungen für Microsoft .NET Framework 4.0 und höhere Versionen:
Die Datei „ManualOptInSchSendAuxRecord40.reg“ jetzt herunterladen.
Weitere Informationen zum Herunterladen von Microsoft Support-Dateien finden Sie im folgenden Artikel der Microsoft Knowledge Base:
119591 So erhalten Sie Microsoft Support-Dateien im Internet Microsoft hat diese Datei auf Viren überprüft. Dazu wurde die neueste Software zur Virenerkennung verwendet, die zum Zeitpunkt der Bereitstellung verfügbar war. Die Datei befindet sich auf Servern mit verstärkter Sicherheit. Auf diese Weise werden nicht autorisierte Änderungen an der Datei weitestgehend verhindert.
Deaktivieren der Struktur SCH_SEND_AUX_RECORD für einzelne Anwendungen
Fügen Sie für alle Anwendungen den folgenden Registrierungsunterschlüssel hinzu:
Registrierungspfad:HKEY_LOCAL_MACHINE\Software\Microsoft\.NETFramework\<version_number>\System.Net.ServicePointManager.SchSendAuxRecord
DWORD-Name: Vollqualifizierter Pfad der EXE-Datei der Anwendung (z. B. C:\MeineApp\MeineApp.exe)
Wert: 0
Hinweis Abhängig von der verwendeten Version steht der Platzhalter <version_number> für v4.0.30319 oder v2.0.50727.
Für 32-Bit-Anwendungen, die auf 64-Bit-Computern ausgeführt werden, fügen Sie außerdem den folgenden Registrierungsunterschlüssel hinzu:
Registrierungspfad:HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\.NETFramework\<version_number>\System.Net.ServicePointManager.SchSendAuxRecord
DWORD-Name: Vollqualifizierter Pfad der EXE-Datei der Anwendung (z. B. C:\MeineApp\MeineApp.exe)
Wert: 0 (Gültig ist nur der Wert 0. Alle anderen Werte werden ignoriert.)
Hinweis Abhängig von der verwendeten Version steht der Platzhalter <version_number> für v4.0.30319 oder v2.0.50727.
Methode 2: Ändern der Konfiguration auf der Anwendungsebene (nur bei .NET Framework Version 4.6 und höheren Versionen verfügbar)
Ab .NET Framework 4.6 können Sie die Konfiguration auf Anwendungsebene durch Code oder die Anwendungskonfiguration oder Registrierungsänderungen ändern.
In .NET Framework 4.6 können Sie die Konfigurationsoption mit einer der folgenden Methoden festlegen. In diesen Beispielen wird das Sicherheitsfeature deaktiviert.
-
Programmgesteuert
Zunächst sollte die Anwendung den folgenden Code ausführen, weil der Dienststellen-Manager nur einmal initialisiert wird.private const string DisableCachingName = @"TestSwitch.LocalAppContext.DisableCaching";
private const string DontEnableSchSendAuxRecordName = @"Switch.System.Net.DontEnableSchSendAuxRecord";
AppContext.SetSwitch(DisableCachingName, true);
AppContext.SetSwitch(DontEnableSchSendAuxRecordName , true); -
Anwendungskonfiguration
Um die Anwendungskonfiguration zu ändern, fügen Sie den folgenden Eintrag hinzu:<runtime>
<AppContextSwitchOverrides value="Switch.System.Net.DontEnableSchSendAuxRecord=true"/>
</runtime> -
Registrierungsschlüssel (Computer global)
Registrierungspfade:HKEY_LOCAL_MACHINE\Software\Microsoft\.NETFramework\AppContextHKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\AppContext
Wert: Switch.System.Net.DontEnableSchSendAuxRecord
Typ: String
Wert: True
Hinweis Für alle Anwendungen gilt: Switch.System.Net.DontEnableSchSendAuxRecord = False.
Weitere Informationen
Es folgt ein Beispiel für ein Client-/Server-Kommunikationsmuster vor und nach der Installation dieses Updates. Die hier bereitgestellten Informationen sollen es erleichtern, durch die Installation dieses Updates verursachte Anwendungsfehler zu erkennen.
Ohne Gegenmaßnahme |
Mit Gegenmaßnahme |
---|---|
[Server] Auf Verbindungen warten (127.0.0.1:4431) |
[Server] Auf Verbindungen warten (127.0.0.1:4431) |