Ich versuche, unsere Anfälligkeit für den Poodle SSL 3.0 Fallback- Angriff zu verringern . Unsere Administratoren haben bereits damit begonnen, SSL zugunsten von TLS für eingehende Verbindungen zu unseren Servern zu deaktivieren. Außerdem haben wir unserem Team empfohlen, SSL in den Webbrowsern zu deaktivieren. Ich betrachte jetzt unsere .NET-Codebasis, die HTTPS-Verbindungen mit verschiedenen Diensten über System.Net.HttpWebRequest initiiert . Ich glaube, dass diese Verbindungen für einen MITM-Angriff anfällig sein könnten, wenn sie einen Fallback von TLS auf SSL ermöglichen. Folgendes habe ich bisher festgestellt. Könnte jemand dies bitte noch einmal überprüfen, um zu überprüfen, ob ich Recht habe? Diese Sicherheitsanfälligkeit ist brandneu, daher habe ich noch keine Anleitung von Microsoft zur Minderung in .NET erhalten:
Die zulässigen Protokolle für die System.Net.Security.SslStream-Klasse, die die sichere Kommunikation in .NET unterstützt, werden für jede AppDomain global über die System.Net.ServicePointManager.SecurityProtocol- Eigenschaft festgelegt.
Der Standardwert dieser Eigenschaft in .NET 4.5 ist
Ssl3 | Tls
(obwohl ich keine Dokumentation zum Sichern finden kann). SecurityProtocolType ist eine Aufzählung mit dem Flags-Attribut, daher ist es ein bitweises ODER dieser beiden Werte. Sie können dies in Ihrer Umgebung mit folgender Codezeile überprüfen:Console.WriteLine (System.Net.ServicePointManager.SecurityProtocol.ToString ());
Dies sollte nur geändert werden
Tls
, oder vielleichtTls12
, bevor Sie irgendwelche Verbindungen in Ihrer Anwendung initiieren:System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls;
Wichtig: Da die Eigenschaft mehrere bitweise Flags unterstützt, gehe ich davon aus, dass der SslStream beim Handshake nicht automatisch auf andere nicht angegebene Protokolle zurückgreift . Was wäre sonst der Grund, mehrere Flags zu unterstützen?
Update auf TLS 1.0 vs 1.1 / 1.2:
Laut dem Google-Sicherheitsexperten Adam Langley wurde TLS 1.0 später als anfällig für POODLE eingestuft, wenn es nicht korrekt implementiert wurde. Daher sollten Sie in Betracht ziehen, ausschließlich auf TLS 1.2 umzusteigen .
Update für .NET Framework 4.7 und höher:
Wie von Prof. Von Lemongargle weiter unten angedeutet, muss dieser Hack ab Version 4.7 von .NET Framework nicht mehr verwendet werden, da das Betriebssystem mit der Standardeinstellung die sicherste TLS-Protokollversion auswählen kann. Siehe Transport Layer Security (TLS) Best Practices mit dem .NET Framework für weitere Informationen.