我正在努力减轻我们对Poodle SSL 3.0 Fallback攻击的脆弱性.我们的管理员已经开始禁用SSL,转而使用TLS作为到我们服务器的入站连接.我们还建议我们的团队在他们的Web浏览器中禁用SSL.我现在看一下我们的.NET代码库,它通过System.Net.HttpWebRequest发起与各种服务的HTTPS连接.我相信,如果这些连接允许从TLS回退到SSL,则它们很容易受到MITM攻击.这是我到目前为止的决定.能不能请谁再判断一遍,以确认我是对的?这个漏洞是全新的,所以我还没有看到微软关于如何在.NET中缓解它的任何指导:

  1. System.Net.Security.SslStream类(支撑.NET中的安全通信)允许的协议是通过System.Net.ServicePointManager.SecurityProtocol属性 for each AppDomain全局设置的.

  2. 在.NET4.5中,该属性的默认值是Ssl3 | Tls(尽管我找不到支持该属性的文档).SecurityProtocolType是具有Flags属性的枚举,因此它是这两个值的逐位OR.您可以使用下面一行代码在您的环境中判断这一点:

    Console.WriteLine(System.Net.ServicePointManager.SecurityProtocol.ToString());

  3. 在启动应用程序中的任何连接之前,应该将其更改为Tls,或者Tls12:

    System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls;

  4. 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.

推荐答案

我们正在做同样的事情.要仅支持TLS 1.2而不支持SSL协议,可以执行以下操作:

System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

SecurityProtocolType.Tls只是Tls 1.0,而不是所有的Tls版本.

作为一个方面:如果您想判断您的站点是否不允许SSL连接,您可以在此处进行判断(我认为这不会受到上述设置的影响,我们必须编辑注册表以强制IIS对传入连接使用TLS): https://www.ssllabs.com/ssltest/index.html

要在IIS中禁用SSL 2.0和3.0,请参阅本页:https://www.sslshopper.com/article-how-to-disable-ssl-2.0-in-iis-7.html

.net相关问答推荐

在接口内部声明 IEnumerable 而在具体类中声明 IList

MongoDB GridFs with C#,如何存储图片等文件?

StreamWriter.Flush() 和 StreamWriter.Close() 有什么区别?

为什么这个多态 C# 代码会打印它的功能?

LINQ:确定两个序列是否包含完全相同的元素

XmlNode 值与内部文本

实体框架无法加载指定的元数据资源

如何使用 log4net 记录跟踪消息?

ASP.NET Core 等效于 ASP.NET MVC 5 的 HttpException

在同一解决方案中引用 2 个不同版本的 log4net

如何在 RabbitMQ 中设置重试次数?

Visual Studio 类图不显示关系

为什么发布和调试模式下的代码行为不同?

获取磁盘上文件的大小

String.Join 与 StringBuilder:哪个更快?

如何修复 .NET Windows 应用程序在启动时崩溃并出现异常代码:0xE0434352?

接口属性的 XML 序列化

具有不同身份验证标头的 HttpClient 单个实例

在 IIS 中访问 .svc 文件时出现 HTTP 404

可以从 C# 调用 C++ 代码吗?