Warning message

This translation is outdated. For the most up-to-date information, please refer to the English version.

针对 64位块大小的 TLS 密码的 SWEET32: Birthday 攻击(CVE-2016-2183)

已更新 -

概述

Red Hat 产品安全团队在 SSL/TLS 协议里的块密码里发现一个问题,在某些配置下可能遭受碰撞攻击(collision attack)。这个漏洞被评级为 Moderate 并分配了 [CVE-2016-2183] (https://access.redhat.com/security/cve/CVE-2016-2183)。目前对于 Red Hat 产品用户,这个问题不需要任何更新或操作。更多细节请参阅下面 解决方案 章节的内容。

背景

传统的块密码的块大小为 64 位,在用于 CBC 模式下易受碰撞攻击。支持将使用 3DES 的密码组作为对称加密密码的所有版本的 SSL/TLS 协议都会受到影响(如 ECDHE-RSA-DES-CBC3-SHA)。在 Red Hat Enterprise Linux 6 和 7 附带的 OpenSSL 版本里,基于 DES 的密码组列在支持 AES-128(和 PFS 密码组一起)及 AES-256 下面。这意味着只有在服务器显性地禁用 AES-128 和 AES-256 时才会选择 DES 密码。在 Red Hat Enterprise Linux 5 附带的 OpenSSL 版本里,基于 DES 的密码组也列在 AES-256 下面,但在 AES-128 之上。此时只有服务器显性地禁用 AES-256 时才会选择 DES 密码。

块密码的安全性取决于密钥大小(k)。因此针对块密码的最佳攻击方式是复杂度为 2k 的穷尽密钥搜索攻击。然而,当使用块密码以 CBC 等模式加密大量数据时,块大小也在某种程度上决定了安全性。

当使用 CBD 加密模式时,在用相同密钥加密的数据的 2n/2 块后会导致简单的 birthday 攻击,预期会出现两个密码块间的冲突。输出里的冲突表示输入是相同的。这个数据及几个条件(在下文里讨论)可以用来抽取加密数据的明文。

攻击的可行性

  1. 首先,DES/3DES 是具有 64 位块大小的 SSL/TLS 里使用的唯一密码格式。如概述里所讨论的,包含 3DES 的密码组的优先级低于其他密码组(如 AES-128)。

  2. 要实施对 64 位块密码的攻击,至少需要在连接上捕获 32GB 数据。对于 SSL/TLS,这意味着要在单个 SSL/TLS 会话里完成(对于所有新的会话,SSL/TLS 会重新协商对称密钥)。因此,长时间存在的 HTTPS 连接易受到攻击。

  3. 在很多情况下,只恢复两个明文块间的 XOR 不足以实施攻击。然而,当满足下列条件时可能会导致攻击:

    • 重复地发送固定的机密信息;

    • 已知明文的部分内容。

  4. 学术论文里提及的概念攻击证据假定了在所有通讯中服务器和客户间都会传递验证令牌(令牌可以是用在基本验证里的凭证 cookie),然后攻击者会在被攻击的网站上运行一个恶意的 JavaScript。BEAST 类型的攻击会被用来抽取 cookie。

风险规避

  1. SSL/TLS 配置应该首选 AES 而不是 DES。Red Hat Enterprise Linux 6 和 7 附带的 OpenSSL 版本已经这样做了。
  2. 在 Red Hat Enterprise Linux 5 附带的 OpenSSL 版本里,3DES 列在 AES-256 密码之下和 AES-128 之上,因此服务器上不应该禁用基于 AES-256 的密码组。
  3. 使用 OpenSSL 的服务器不应该禁用 AES-128 和 AES-256 密码组。Red Hat Enterprise Linux 附带的 Apache 版本使用默认的密码字符串,其中 AES 优先于基于 DES/3DES 的密码组。

解决方案

  1. 这个漏洞关系到 DES/3DES 密码的设计,所以不是实施方面的漏洞。
  2. 既然在默认的密码列表配置里,有几个高于 3DES 的更强的密码组,这个漏洞没有直接影响 Red Hat Enterprise Linux 5、6 和 7 的任何密码库(OpenSSL、NSS 和 GnuTLS)。
  3. 对于 Red Hat Enterprise Linux 5,请不要禁用服务器上基于 AES-256 的密码组。对于 Red Hat Enterprise Linux 6 和 7,请不要禁用服务器上基于 AES-128 或 AES-256 的密码组。

上游的安全修复:

OpenSSL:

OpenSSL 已将其评级为 'low' 安全性问题。开发人员已在 1.0.2 分支里将 3DES 密码组从 HIGH 移至 MEDIUM 类别,以后的版本里还会在默认情况下禁用它。

NSS:

Mozilla 在对所有密码组实施数据限制。

相关的问题

上游的 OpenVPN 也易受 Sweet32 攻击,我们目前正用 CVE-2016-6329 跟踪。但 Red Hat 的 OpenVPN 实现不受此漏洞影响。

参考

https://access.redhat.com/security/cve/CVE-2016-2183
https://sweet32.info/