POODLE攻击(在降级旧版加密上填充Oracle)利用SSL 3.0协议(CVE-2014-3566)中的漏洞。该漏洞使攻击者可以窃听使用SSLv3加密的通信。该漏洞在SSL(安全套接字层)的后继传输层安全协议(TLS)中不再存在。

最近的 Acunetix 2020 Web应用程序漏洞报告 表明,仍有多达3.9%的Web服务器易受POODLE攻击,这意味着尽管TLS协议是在1999年引入的,它们仍支持SSL 3.0协议。甚至更多(超过30%)的服务器易受POODLE攻击。  攻击,因为它们支持TLS 1.0。

为什么Web服务器支持旧协议?这些服务器的管理员可能希望确保用户可以使用非常老的浏览器访问它们。但是,我们怀疑这类服务器更有可能使用配置非常旧的服务器软件。

攻击者可以用POODLE做什么?

POODLE漏洞使攻击者可以窃听加密的通信。这意味着攻击者可以窃取传输的机密数据(例如密码或会话cookie),然后冒充用户。这可能会带来非常严重的后果,包括失去对Web应用程序的控制(例如,如果攻击者冒充管理员)。

攻击并非易事,因为它需要三个阶段才能成功:

  1. 在第一阶段,攻击者必须成功执行 中间人攻击(MITM)。攻击者现在可以侦听客户端与服务器之间的所有通信,也可以添加到此通信中(模拟客户端或服务器)。但是,如果这是一个安全连接,则使用SSL / TLS对通信进行加密,因此攻击者无法理解所发送的内容。
  2. 在第二阶段,攻击者必须说服服务器使用旧的SSL 3.0协议。攻击者可以通过断开连接来完成此操作–在出现许多此类断开连接后,服务器将尝试使用较旧的协议,并认为客户端无法使用较新的协议,例如TLS 1.2。这称为协议降级攻击或降级舞蹈。
  3. 在第三阶段,当客户端和服务器使用SSL 3.0进行通信时,攻击者可以使用POODLE攻击对通信的选定部分进行解密并窃取机密信息。
  4. 为了确保POODLE攻击成功,攻击者还应该能够使用户浏览器欺骗运行JavaScript,例如,使用社交工程。

POODLE如何工作?

由于SSL / TLS协议的多个功能,可能会发生POODLE攻击。您可以在我们的网站上阅读有关这些协议如何工作的更多信息。 有关SSL / TLS的文章系列。现在,您只需要知道SSL / TLS即可让服务器和浏览器使用不同的算法集来加密通信-这些称为 密码套件.

POODLE漏洞会影响包括对称加密和 分组密码,例如AES或DES算法。在这种情况下,客户端和服务器首先使用非对称加密(私有密钥和公共密钥)就秘密密钥达成一致。然后,使用此密钥对称地加密所有通信。对于分组密码,数据以固定长度的块(例如8字节或16字节)进行加密。

易受POODLE攻击的密码套件也使用密码块链接(CBC模式)。这意味着每个块的值取决于上一个块的值–它是通过使用逻辑运算XOR计算得出的。同样,在开始处添加一个随机数据块–这称为初始化向量。这是必需的,以便每次加密数据时,数据看起来就不同(因此,攻击者无法根据相似性来确定数据)。

什么是MAC然后加密?

要了解POODLE,您必须首先了解MAC和MAC-then-Encrypt。

SSL / TLS协议不仅保证数据是机密的。它还保证数据不会被篡改。例如,当您尝试在网上银行的帐户之间进行转帐时,您不希望某人能够注入自己的帐号。

为了保证数据没有损坏,每个加密的数据片段都具有一个校验和– MAC(消息验证码)。只有拥有加密密钥,才能计算MAC。如果MAC错误,则表示有人篡改了该消息。

SSL 3.0协议使用MAC-then-Encrypt方法。这意味着,该算法首先计算MAC值,然后在数据末尾添加该MAC值,然后对整个数据(包括填充)进行加密。

什么是填充?

分组密码需要所有数据为分组大小的倍数。例如,如果块大小为8,则数据必须具有64、80或336个字节(8的倍数)。如果它不是8的倍数,则需要用不重要的数据填充它以达到正确的长度。

大多数Web服务器实现都使用以下填充技术:

  • 最后一块的最后一个字节必须 总是 包含填充长度。该值表示要填充的先前字节数。例如,如果填充了4个字节,则块的值为: xx-xx-xx-yy-yy-yy-yy-04 (yy 代表填充)。这是SSL要求。
  • 在大多数实现中,所有填充字节的值都与长度值相同。例如,如果填充8个字节中的4个字节,则块的值为: xx-xx-xx-04-04-04-04-04.
  • 如果数据的长度是块大小的倍数,例如336,则必须添加一个仅具有填充的额外块: 07-07-07-07-07-07-07-07。这是必需的,因为如果最后一个字节不表示填充,则该算法无法识别实际数据中的填充。

请注意,SSL不会检查填充字节(填充长度除外),只要最后一个字节在 00 and 07,该块将被接受。例如, xx-xx-xx-12-34-56-78-04 块将被接受。

什么是填充Oracle?

当攻击者知道或可以猜测为什么拒绝发送到服务器的数据时,就会发生填充预言:是因为填充不正确还是MAC错误。

想象一下以下情况:

  1. 攻击者从浏览器接收数据,并且知道该数据包含密码。攻击者知道这是HTTP POST请求,并且确切知道密码在此请求中的位置。
  2. 攻击者修改加密的数据并将其发送到服务器。
  3. 服务器响应攻击者说数据错误。但是,它可以响应两种错误:它可以告诉攻击者填充错误或MAC错误。这使POODLE攻击成为可能。

填充oracle也用于其他攻击。某些协议不会直接响应,但是例如,可能首先检查填充,然后再检查MAC。在这种情况下,如果攻击者得到快速响应,则是填充错误,但是如果响应时间稍长,则是MAC错误。

POODLE攻击的解剖

为了执行典型的POODLE攻击并窃取Web会话cookie,攻击者将执行以下操作:

  1. 攻击者诱骗受害者的浏览器运行可让攻击者执行攻击的JavaScript代码。
  2. 攻击者的JavaScript代码诱骗用户浏览器向服务器发送多个合法请求。这些请求包括会话cookie。
  3. JavaScript代码修改连接URL(添加额外的字符),以使发送到服务器的数据长度是块大小的倍数(例如8)。这意味着最后一块将仅包含填充(请参见上面的说明)。
  4. 攻击者知道哪些数据块包含会话cookie。例如,数据可能具有10个块,并且攻击者知道第三和第四块包含会话cookie值。
  5. 攻击者将整个第三个块复制到最后一个块,然后多次发送到服务器,从而每次更改连接URL中的内容,以使MAC不同。
  6. 在最多256次之后,该消息将被接受。这意味着解密后,第三个块的最后一个字节将是数字 07,表示正确的填充。
  7. 现在,攻击者知道解密后的最后一个字节,他们可以使用XOR操作将其与先前的块合并,以获取第三个块的实际最后一个字节。
  8. 然后,攻击者可以将连接URL延长一个字节,并重复上述步骤以获取下一部分cookie。然后再次重复第四个数据块。
  9. 如果cookie的长度为16,则攻击者将在不超过4096个请求后知道cookie,这最多需要几分钟。

如何知道您的Web服务器是否容易受POODLE攻击

要知道您的Web服务器是否容易受到POODLE的攻击,您只需要知道它是否支持SSL 3.0。您可以使用Acunetix来确定您的Web服务器是否支持SSL 3.0。您也可以手动执行此操作,但是使用Acunetix,您还可以找到Web漏洞等等。

TLS协议还有一些较旧的实现,这些实现容易受到POODLE的攻击。但是,所有现代TLS实施都是安全的。

请注意,尽管POODLE是网络漏洞,但它也会影响Web服务器和Web浏览器。 

如何修复POODLE漏洞

为了保护您的服务器免受POODLE和BEAST的侵害,请将其配置为仅支持TLS 1.2,而不支持较旧的协议。现在,所有旧的SSL和TLS版本均已正式弃用,并且所有现代浏览器(例如Chrome,Firefox和Internet Explorer)都支持TLS 1.2。

Apache Web服务器

编辑 SSL协议 directive in the ssl.conf 文件,通常位于 /etc/httpd/conf.d/ssl.conf。 例如,如果您有:

SSL协议 all

更改为:

SSL协议 TLSv1.2

然后,重新启动 httpd.

NGINX

编辑 ssl_protocols directive in the nginx.conf 文件。例如,如果您有:

ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;

更改为:

ssl_protocols TLSv1.2;

然后,重新启动nginx。

微软IIS

要在Microsoft IIS中禁用TLS 1.0,您必须 编辑注册表设置 在Microsoft Windows中。

  1. 打开注册表编辑器
  2. 找到问题的关键 HKLM SYSTEM \ CurrentControlSet \ Control \ SecurityProviders \ SCHANNEL \ Protocols \TLS 1.0\服务器
  3. 更改DWORD值 已启用 entry to 0.
  4. 创建一个 默认禁用 条目并将DWORD值更改为1。

对所有版本的SSL和TLS 1.1重复上述步骤。

资源://www.acunetix.com/blog/web-security-zone/what-is-poodle-attack/