作者:Andre “Dexter” Bereza / Conrado Gouvêa
SSL 协议及其后继 TLS 保护了互联网上的大部分安全通信。 14年2014月3.0日,谷歌研究人员披露了SSL XNUMX版本中的一个漏洞,该漏洞允许发起名为POODLE的攻击。
攻击
这次攻击被称为“Padding Oracle On Downgraded Legacy Encryption”,简称 POODLE。此次攻击允许通过 HTTPS 连接窃取 cookie,从而使攻击者可以像受害者一样登录网站。
POODLE 仅适用于 3.0 年发布的 SSL 1996 协议。3.0 年 TLS 1.0 发布时,SSL 1999 已经过时,最新的协议是 TLS 1.2(2008 年)。还有 TLS 1.3 的草案(可能于 2015 年发布)。 SSL 3.0 使用 RC4(流密码)加密或 CBC 模式的分组密码加密。 RC4 存在一些已知的弱点,在过去的一年里已经引发了实际的攻击。 SSL 3.0 中使用的 CBC 模式已经存在问题,并在 2013 年导致了攻击。POODLE 利用了 SSL 3.0 中使用的 CBC 的另一个缺陷,但与之前的攻击相比,这种攻击更容易执行。此外,与以往的袭击不同, 狮子狗 这是协议本身的缺陷,而不是其实现中的缺陷,因此 SSL 3.0 可以被认为是有缺陷的。问题是一些遗留系统使用该协议,因此简单地禁用它很复杂。
SSL/TLS 协议具有版本协商机制,允许服务器同时支持 SSL 3.0 和 TLS 1.2。这样,理论上,只有需要 SSL 3.0 的客户端才可以使用它。然而,许多服务器存在实现缺陷,导致版本协商机制无法正常工作,尤其是具有现代客户端连接的旧服务器。因此,许多客户端都经过了修改,以便当与 TLS 1.2 的通信失败时,它们会自动使用 SSL 3.0 重试。
这种方法的问题在于中间人(调解客户端和服务器之间的连接的攻击者)可以故意阻止第一个 TLS 1.2 连接,迫使客户端使用 SSL 3.0 再次尝试。因此,即使应该支持 TLS 3.0,攻击者也可以强制使用 SSL 1.2。这种攻击此前已为人所知,被称为“降级攻击”。
解决方案
值得注意的是 SSL 3.0 可能被认为已损坏。所以理想的做法是不再使用它。
如果客户端与老版本服务器通信时仍然需要支持SSL 3.0,那么可以通过在客户端使用SCSV(信令密码套件值)来防止“降级攻击”。
假设客户端具有高达 TLS 1.2 的多个协议版本,并且已实现 SCSV。当此客户端尝试连接旧版本的协议时,它会发送如下消息:
“我正在使用 SSL 3.0 与您通信,但实际上我支持 SSL 3.0、TLS 1.0、TLS 1.1 和 TLS 1.2”
如果服务器较旧(SSL 3.0),它会正常接受 SSL 3.0 连接。如果服务器是新的(TLS 1.2)但不支持 SCSV,它会接受 SSL 3.0 连接,但这可能是由于“降级攻击”。如果服务器是新的(TLS 1.2)并且支持 SCSV,那么它就知道客户端被攻击者强制降级,然后将阻止通信,表明发生了致命错误。
在上面的例子中我们提到了 TLS 1.2,但它可以是任何高于 SSL 3.0 的协议版本。建议使用 TLS 1.2 协议,因为它是最新的并且具有更先进的保护机制。
请注意,中间人无法抑制 SCSV。对手可以阻止通信,但无法修改消息的内容。因此 SCSV 将跟随该消息,否则该消息永远不会到达另一端。
此解决方案的问题在于仅支持 SSL 3.0的 或者没有实施 SCSV 的系统(或者对实施 SCSV 不感兴趣)。在这些情况下,没有奇迹,没有问题的解决方案,系统将变得脆弱。
总结
作为开发人员:
– 不要使用 SSL 3.0
– 在 TLS 客户端中,支持 SCSV。
– 在 TLS 服务器上,支持 SCSV。
OpenSSL 在 1.0.1j、1.0.0o 和 0.9.8zc 版本中增加了对 SCSV 的支持。
作为用户:
等待程序禁用 SSL 3.0,或手动禁用它(参见[5])
https://www.openssl.org/~bodo/ssl-poodle.pdf
https://securityblog.redhat.com/2014/10/15/poodle-a-ssl3-vulnerability-cve-2014-3566/
http://crypto.stackexchange.com/questions/19673/how-does-tls-fallback-scsv-help
https://security.stackexchange.com/questions/70719/ssl3-poodle-vulnerability
https://poodle.io/browsers.html