【发布时间】:2014-12-10 23:08:13
【问题描述】:
我正在尝试减轻我们对Poodle SSL 3.0 Fallback 攻击的脆弱性。我们的管理员已经开始禁用 SSL 以支持 TLS 用于与我们服务器的入站连接。我们还建议我们的团队在他们的网络浏览器中禁用 SSL。我现在正在查看我们的 .NET 代码库,它通过 System.Net.HttpWebRequest 启动与各种服务的 HTTPS 连接。我相信如果这些连接允许从 TLS 回退到 SSL,它们可能容易受到 MITM 攻击。这是我到目前为止所确定的。有人可以仔细检查一下以确认我是对的吗?这个漏洞是全新的,所以我还没有看到 Microsoft 提供的关于如何在 .NET 中缓解它的任何指导:
System.Net.Security.SslStream 类的允许协议支持 .NET 中的安全通信,通过 System.Net.ServicePointManager.SecurityProtocol 为每个 AppDomain 全局设置财产。
-
.NET 4.5 中此属性的默认值为
Ssl3 | Tls(虽然我找不到支持它的文档。)SecurityProtocolType 是一个带有 Flags 属性的枚举,所以它是按位的 OR em> 这两个值。您可以使用这行代码在您的环境中进行检查:Console.WriteLine(System.Net.ServicePointManager.SecurityProtocol.ToString());
-
在您在应用中启动任何连接之前,应将其更改为
Tls,或者可能是Tls12:System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls;
重要提示:由于该属性支持多个按位标志,我假设 SslStream 在握手期间不会自动回退到其他未指定的协议。否则,支持多个标志有什么意义?
TLS 1.0 与 1.1/1.2 的更新:
根据 Google 安全专家 Adam LangleyTLS 1.0 was later found to be vulnerable to POODLE if not implemented correctly 的说法,因此您应该考虑完全迁移到 TLS 1.2。
.NET Framework 4.7 及更高版本更新:
正如下面Prof Von Lemongargle 所提到的,从 .NET Framework 4.7 版开始,无需使用此 hack,因为默认设置将允许操作系统选择最安全的 TLS 协议版本。请参阅Transport Layer Security (TLS) best practices with the .NET Framework 了解更多信息。
【问题讨论】:
-
关于以上第 2 点:见 referencesource.microsoft.com/#System/net/System/Net/… SslProtocols " Default = Ssl3 | Tls"
-
@Dai Bok 现在默认是SystemDefault选项docs.microsoft.com/en-us/dotnet/api/…
-
@MarwaAhmad 如果是这种情况,我的链接中的源代码参考不反映默认值 (48 | 192) 。如果设置为 none ( 0 ) ,它应该恢复为系统默认值。这对我来说很臭,我可能会在进行更改之前对其进行测试,因为它可能会导致配置错误...并关闭错误 .net 框架上的协议...