我正在尝试减轻我们对Poodle SSL 3.0 Fallback攻击的脆弱性。我们的管理员已经开始禁用TLS,而将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属性的枚举,因此它是这两个值的按位或。您可以使用以下代码行在您的环境中进行检查:Console.WriteLine(System.Net.ServicePointManager.SecurityProtocol.ToString());
在您启动应用程序中的任何连接之前
Tls
,应将其更改为just ,或者也许是Tls12
:System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls;
重要说明:由于该属性支持多个按位标志,因此我假设SslStream 在握手期间不会自动回退到其他未指定的协议。否则,支持多个标志的意义何在?
TLS 1.0和1.1 / 1.2的更新:
根据Google安全专家Adam Langley的说法,如果未正确实施TLS 1.0,则以后很容易受到POODLE的攻击,因此您应该考虑专门迁移到TLS 1.2。
.NET Framework 4.7及更高版本的更新:
正如以下Von Lemongargle教授所暗示的那样,从.NET Framework 4.7版开始,无需使用此技巧,因为默认设置将允许操作系统选择最安全的TLS协议版本。有关更多信息,请参见.NET Framework的传输层安全性(TLS)最佳做法。