关于SSL v3中最近披露的padding oracle漏洞的规范问题。其他相同或明显相似的问题也应作为该问题的副本予以关闭。



什么是POODLE漏洞?
我使用[product / browser]。我受到影响了吗?
[product]容易受到POODLE攻击吗?
我需要采取什么措施来保护我的[product]与此漏洞有关?
如何检测POODLE攻击在我的网络上?
是否存在任何已知的POODLE攻击? br />

评论

可能想将imperialviolet.org/2014/10/14/poodle.html添加到引用中。像往常一样特别清晰地阅读Langley的博客。

#1 楼

Poodle漏洞是什么?

2014年10月14日发布的“ Poodle”漏洞是对SSL 3.0协议的攻击。这是协议缺陷,而不是实现问题。 SSL 3.0的每种实现都会遭受它的困扰。请注意,我们正在谈论的是旧版SSL 3.0,而不是TLS 1.0或更高版本。 TLS版本不受影响(也不是DTLS)。

简而言之:当SSL 3.0在CBC模式下使用分组密码时,记录的加密过程将使用填充,以便数据长度为块大小的倍数。例如,假设使用带有8字节块的3DES。在记录数据(以及记录序号和一些其他标头数据)上计算MAC,并将其附加到数据上。然后附加1到8个字节,以便总长度是8的倍数。此外,如果在该步骤中添加了n个字节,则这些字节中的最后一个必须具有值n-1。这样做是为了使解密起作用。

考虑对记录的解密:应用3DES-CBC解密,然后检查最后一个字节:它应该包含0到7之间的值,并且告诉我们添加了多少其他字节用于填充。这些字节将被删除,并且至关重要的是,它们的内容将被忽略。这一点很重要:记录中的某些字节可以更改,而接收者丝毫不会在意。

贵宾犬攻击在选定明文上下文中起作用,例如之前的BEAST和CRIME 。攻击者对受到SSL保护的数据感兴趣,他可以:


在要获取的秘密值之前和之后注入自己的数据;
检查,截取并修改导线上的结果字节。

满足这种条件的最主要且唯一可行的场景是Web上下文:攻击者运行一个虚假的WiFi访问点,并注入自己的一些Javascript作为受害者浏览的网页的一部分(HTTP,而非HTTPS)。恶意Javascript使浏览器将请求发送到受害者的浏览器具有cookie的HTTPS站点(例如,银行网站)。攻击者需要该cookie。

攻击逐字节进行。攻击者的Javascript安排该请求,使得最后一个cookie字节出现在加密块(3DES的8字节块之一)的末尾,并且总请求长度意味着整个块的填充。假设最后8个cookie字节的值分别为c0,c1,...,c7。加密后,CBC的工作方式如下:



因此,如果先前的加密块是e0,e1,... e7,则输入3DES的是c0 XOR e0, c1 XOR e1,... c7 XOR e7。 ei值是攻击者已知的(这是加密结果)。

然后,攻击者从外面用包含最后一个块的副本来替换加密记录的最后一个块Cookie字节。要了解会发生什么,您必须了解CBC解密的工作原理:



因此,最后一个密文块被解密,产生一个以c7 XOR e7结尾的值。然后将该值与先前的加密块进行异或。如果结果以值7的字节结尾(以1/256的概率工作),则填充删除步骤将删除最后8个字节,并以完整的明文和MAC结尾,并且服务器将满意。否则,最后一个字节将不在0..7范围内,服务器将发出抱怨,或者最后一个字节将在0至6之间,并且服务器将删除错误的字节数,而MAC将不会匹配,服务器将抱怨。换句话说,攻击者可以观察服务器的反应,以了解CBC解密结果是否找到了7或其他。当获得7时,将立即显示最后一个cookie字节。

当获得最后一个cookie字节时,将使用前一个字节再次执行该过程,依此类推。

核心是SSL 3.0被定义为忽略填充字节(最后一个除外)。这些字节没有被MAC覆盖,并且没有任何定义的值。

TLS 1.0并不容易受到攻击,因为在TLS 1.0中,协议指定所有填充字节必须具有相同的值,并且库实施TLS验证这些字节是否具有预期值。因此,我们的攻击者无法以1/256(2-8)的概率来运气,而以1/184467440737095516516(2-64)的概率来运气,这更糟。


我使用[product] 。我受到影响了吗? Q4312079q是否容易受到Poodle攻击?

这种攻击情况要求攻击者能够注入自己的数据,并拦截加密的字节。如上所述,发生这种情况的唯一可能的上下文是Web浏览器。在那种情况下,Poodle就像BEAST和CRIME一样,是对客户端的攻击,而不是对服务器的攻击。<​​br />
如果[product]是Web浏览器,则您可能会受到影响。但这还取决于服务器。使用的协议版本是客户端和服务器之间的协商;只有在服务器同意的情况下,SSL 3.0才会发生。因此,如果服务器允许使用SSL 3.0,则可能会认为您的服务器是“易受攻击的”(从技术上讲这是不正确的,因为攻击是在Web上下文中的客户端,但是我希望SSL-security-meters可以这样工作)。

发生此漏洞的条件:支持SSL 3.0,并且选择了基于CBC的密码套件(RC4加密没有填充,因此不容易受到该特定攻击-但RC4具有当然还有其他问题。)

解决方法:


在客户端中禁用SSL 3.0支持。
在服务器中禁用SSL 3.0支持。
使用SSL 3.0(在客户端或服务器中)时,禁用对基于CBC的密码套件的支持。
实施新的SSL / TLS扩展以检测某些活动的攻击者何时断开连接以迫使客户端和服务器使用SSL 3.0,即使双方都知道TLS 1.0或更高版本。客户端和服务器都必须实现它。

这四个解决方案中的任何一个都可以避免此漏洞。此漏洞吗?

和以往一样。您的供应商发布了安全修复程序;安装它们。安装补丁。所有补丁。去做。对于贵宾犬和所有其他漏洞。您负担不起不安装它们,那不是新的。您应该已经这样做了。如果您不安装补丁,那么Níðhöggr会吞噬您的脾脏。


如何检测网络上的Poodle攻击?

您不会!由于最可能的攻击设置涉及攻击者诱骗受害者而不是您自己的网络上的受害者。

尽管在服务器端,您可能希望对因解密错误而失败的大量请求做出反应。并非所有服务器软件都将记录此类情况的事件,但这应该在任何体面的IDS系统的可能性范围内。


是否存在任何已知的Poodle攻击?

据我所知。实际上,当您控制受害者的所有外部I / O时,仅通过诱人的草皮诱骗受害者的银行站点,仍然相当容易。加密攻击虽然很巧妙,但是比利用用户的可欺骗性无底洞要付出更多的努力。

评论


“如果您不安装修补程序,那么Níðhöggr会吞噬您的脾脏。”我认为这应该是新的Backtrack / Kali座右铭。不用说,+ 1不仅可以发表怪异的论文,而且还可以使之…………好吧,我们说“容易记住”。

– KnightOfNi
14-10-15在2:05



“密码攻击很简单,但是比利用用户的可欺骗性无底洞要付出更多的努力。”我觉得我有时会引用这个。.+1

–user2813274
2014年10月15日,2:10

通过poodlebleed.com检查服务器上是否启用了SSL 3.0

–卢克·雷曼(Luke Rehmann)
14-10-15在6:38

@ThomasPornin,是什么促使您认真地写出如此惊人而详细的答案?

–马修·彼得斯(Matthew Peters)
2014年10月15日14:47

@MatthewPeters:我喜欢写。有读者时,写作更有意义。

–托马斯·波宁(Thomas Pornin)
2014-10-15 14:48

#2 楼

要禁用SSL v3.0支持:

在客户端中:

Mozilla Firefox




安装名为“ SSL版本控制”的Mozilla附加组件




在导航栏中键入about:config,然后按[Enter]

接受警告并继续
搜索tls

security.tls.version.min的值从0更改为10 = SSL 3.0; 1 = TLS 1.0)



使用以下命令行标志运行Chrome:--ssl-version-min=tls1


Internet Explorer


转到设置-> Internet选项->高级选项卡->取消选中“安全性”下的“ SSLv3”

在Web服务器中:

Apache v2


将以下行添加到SSL配置文件,或编辑现有行以读取:SSLProtocol All -SSLv2 -SSLv3

sudo apache2ctl restart重新启动Web服务器


Zeus Web服务器

%ZEUSHOME是安装位置,通常/usr/local/zeus


升级到Zeus Web Server 4.3r5
将以下行添加到%ZEUSHOME%/web/global.cfgtuning!ssl3_allow_rehandshake never

sudo %ZEUSHOME%/restart-zeus重新启动Web服务器


参考文献:


“对SSLv3的POODLE攻击”,ImperialViolet,ImperialViolet-对SSLv3的POODLE攻击
“ SSLv3 POODLE漏洞正式发布”, InfoSec Handlers Diary Blog,> Internet Storm Center-Internet安全性| SANS ISC


评论


如果使用Opera 12.17或更早版本,则可以按 + 转到高级选项卡,然后在左侧菜单上单击安全性。您会发现一个按钮,指示安全协议...。单击它,取消选中“启用SSL 3”,然后单击“确定”。现在您已受到保护!

–伊斯梅尔·米格尔(Ismael Miguel)
14-10-15在17:28

另请参阅:poodle.io

–gsingh2011
14-10-16在0:47

Chrome浏览器使用的互联网选项与IE不同吗?

– Nzall
14-10-16在11:34

#3 楼

我已经发布了有关如何在某些最常见的Bowsers和服务器平台中禁用SSLv3的博客(https://scotthelme.co.uk/sslv3-goes-to-the-dogs-poodle-kills-off-protocol/ )。这至少应该有助于回答有关如何充分缓解POODLE(无论是客户端还是服务器)的问题。

下面是关键细节。

如何保护服务器

POODLE的最简单,最可靠的解决方案是禁用服务器上的SSLv3支持。这确实带来了一些警告。对于网络流量,有一些旧系统无法与SSLv3以外的任何其他设备连接。例如,使用不带SP3的IE6和Windows XP安装的系统将不再能够与任何使用SSLv3的站点进行通信。根据CloudFlare发布的数据,他们已经在整个客户群中完全禁用了SSLv3,由于98.88%的Windows XP用户使用TLSv1.0或更高版本,他们的网络流量将受到很小的影响。 /> Apache

要在Apache服务器上禁用SSLv3,可以在SSL配置部分和所有启用SSL的虚拟主机中使用以下命令对其进行配置:

SSLProtocol All -SSLv2 -SSLv3


这将为您提供对TLSv1.0,TLSv1.1和TLSv1.2的支持,但明确删除了对SSLv2和SSLv3的支持。检查配置,然后重新启动Apache。

apachectl configtest

sudo service apache2 restart


NginX

在NginX上禁用SSLv3支持也很容易。

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;


与上面的Apache配置类似,您将获得TLSv1.0 +支持,并且没有SSL。您可以检查配置并重新启动。

sudo nginx -t

sudo service nginx restart



这需要一些注册表调整和服务器重新启动,但还不是全部那么不好。 Microsoft提供了带有所需信息的支持文章,但是您所需要做的就是修改/创建注册表DWORD值。

HKey_Local_Machine \ System \ CurrentControlSet \ Control \ SecurityProviders \ SCHANNEL \ Protocols

在内部协议中,您很可能已经具有SSL 2.0密钥,因此,如果需要,请在其旁边创建SSL 3.0。在该服务器下,创建一个服务器密钥,并在其中创建一个名为Enabled且值为0的DWORD值。完成后,重新引导服务器,以使更改生效。检查服务器

Qualys SSL Test是测试与SSL设置有关的任何事情的最简单且可能是使用最广泛的方法。只需导航到该站点,输入要测试的网站的域,然后单击提交即可开始测试。



测试完成后,您将获得有关结果的摘要,以及页面下方的大量详细信息。具体来说,您要在“配置”部分中查看受支持的协议。



您想在这里看到的是您不支持SSL协议。您应该禁用SSLv2.0已有很长时间了,现在我们也刚刚删除了SSLv3.0。支持TLSv1.0或更高版本足以支持绝大部分的互联网用户,而不会给任何人带来不必要的风险。

如何保护您的浏览器

也可以通过在浏览器中禁用SSLv3支持来保护自己免受POODLE的侵害。这意味着即使服务器确实提供SSLv3支持,即使在协议降级攻击期间,您的浏览器也将永远不会使用它。

Firefox

Firefox用户可以键入about:config放入其地址栏中,然后将security.tls.version.min放入搜索框。这将显示需要从0更改为1的设置。现有设置允许Firefox在可用时和需要时使用SSLv3。通过更改设置,您将强制Firefox仅使用TLSv1.0或更高版本,而TLSv1.0或更高版本不会受到POODLE的攻击。<​​br />


Chrome

Chrome用户在GUI中没有选择禁用SSLv3的选项,因为混淆了SSLv3或TLSv1是更好的还是具有较高数值的情况,因此Google删除了SSLv3。相反,您可以添加命令行标志--ssl-version-min = tls1以强制使用TLS并阻止使用SSL协议的任何连接。在Windows中,右键单击Chrome快捷方式,单击“属性”,然后添加命令行标志,如下图所示。



如果在Mac上使用Google Chrome, Linux,Chrome OS或Android,您可以在此处按照以下说明进行操作。

Internet Explorer

安装Internet Explorer也非常容易。转到“设置”,“ Internet选项”,然后单击“高级”选项卡。向下滚动,直到看到“使用SSL 3.0”复选框,然后取消选中它。



如何检查浏览器

如果要检查您的浏览器更改肯定删除了SSLv3.0支持,您可以使用几个站点。如果您在浏览器中启用了SSLv3的情况下访问https://zmap.io/sslv3/,则会在我尚未禁用SSLv3的Chrome浏览器中看到警告消息,提示我即将到达此处。为了再次检查该站点是否按预期工作,我在Internet Explorer中禁用了SSLv3支持,并在那里也打开了该站点。在这里您可以看到不同之处。



您还可以在Zmap旁边尝试https://www.poodletest.com/。

评论


从Firefox 34开始,security.tls.version.min现在默认为1

–休·杰夫纳(Hugh Jeffner)
2014-12-15 14:25

#4 楼

如果您不想将您的网站名称透露给其他网站,也可以使用...进行测试。

openssl s_client -ssl3 -host <your host name> -port 443

如果没有连接,那么您还可以。

但是还要确保您的openssl在您的网站上正常运行...

openssl s_client -host <your host name> -port 443

禁用sslv3也会禁用IE6和Windows XP SP2及更低版本。
IE6并不多,但Windows XP仍然很多。

评论


有人可能会说,仍然坚持使用XP的人们已经拥有了XP,特别是如果他们不愿意安装SP3。 SP3之前的XP已经淘汰了几年了。如果用于浏览Web,则可能已经充满了恶意软件。对于IE 6.0,它可以使用TLS 1.0,只是默认情况下未启用(可以在“ Internet选项”菜单中激活)。

–托马斯·波宁(Thomas Pornin)
14-10-19在0:51