我正在努力减轻我们对Poodle SSL 3.0 Fallback攻击的脆弱性.我们的管理员已经开始禁用SSL,转而使用TLS作为到我们服务器的入站连接.我们还建议我们的团队在他们的Web浏览器中禁用SSL.我现在看一下我们的.NET代码库,它通过System.Net.HttpWebRequest发起与各种服务的HTTPS连接.我相信,如果这些连接允许从TLS回退到SSL,则它们很容易受到MITM攻击.这是我到目前为止的决定.能不能请谁再判断一遍,以确认我是对的?这个漏洞是全新的,所以我还没有看到微软关于如何在.NET中缓解它的任何指导:
System.Net.Security.SslStream类(支撑.NET中的安全通信)允许的协议是通过System.Net.ServicePointManager.SecurityProtocol属性 for each AppDomain全局设置的.
-
在.NET4.5中,该属性的默认值是
Ssl3 | Tls
(尽管我找不到支持该属性的文档).SecurityProtocolType是具有Flags属性的枚举,因此它是这两个值的逐位OR.您可以使用下面一行代码在您的环境中判断这一点:Console.WriteLine(System.Net.ServicePointManager.SecurityProtocol.ToString());
-
在启动应用程序中的任何连接之前,应该将其更改为
Tls
,或者Tls12
:System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls;
Important:由于该属性支持多个位标志,我假设SslStream将在握手期间自动回退到其他未指定的协议.否则,支持多个标志又有什么意义呢?
Update on TLS 1.0 vs 1.1/1.2:个
根据谷歌安全专家亚当·兰利(Adam Langley)的说法,TLS 1.0 was later found to be vulnerable to POODLE if not implemented correctly岁,所以你应该考虑只使用TLS1.2.
Update for .NET Framework 4.7 and above:
正如下面的Prof Von Lemongargle所暗示的那样,从.NET Framework版本4.7开始,不需要使用此攻击,因为默认设置将允许操作系统 Select 最安全的TLS协议版本.有关详细信息,请参阅Transport Layer Security (TLS) best practices with the .NET Framework.