我听说有一个名为Logjam的“新”TLS 漏洞,它有什么作用以及如何防止它?
什么是 Logjam,我该如何预防?
TL;博士
SSL/TLS 客户端和服务器同意使用一些弱加密。好吧,事实证明弱加密很弱。
详细
当执行 SSL/TLS 协议时,客户端发送支持的密码套件列表,服务器选择一个。在初始握手结束时,一些Finished
消息被交换,并使用新协商的加密算法加密/保护,这些消息的内容是所有前面消息的哈希。
这个想法是主动攻击者(中间人攻击)可以尝试操纵客户端发送的密码套件列表以删除所有“强”加密套件,只保留客户端和服务器都支持的最弱的密码套件。但是,这会破坏Finished
消息。因此,这些消息旨在(以及其他角色)检测此类降级攻击。
理论上,没问题;除非客户端和服务器都支持一个非常弱的密码套件,以至于 MitM 攻击者可以立即破解它,解开整个加密层,并Finished
实时修复消息。这就是这里发生的事情。
更详细
当使用“DHE”密码套件(如“Diffie-Hellman Ephemeral”)时,服务器发送“DH 参数”(模数和生成器),客户端和服务器将使用该参数执行Diffie-Hellman 密钥交换。此外,服务器使用其私钥(通常是 RSA 密钥,因为实际上每个人都使用 RSA)对该消息进行签名。客户端验证该签名(公钥是服务器证书中的那个),然后继续使用 DH 参数来完成密钥交换。
恰巧在上个世纪,美国对加密货币出口有一些相当严格的规定,这催生了“出口密码套件”,即与这些规定兼容的弱加密货币。许多 SSL 服务器仍然支持这些“导出密码套件”。特别是,一些使用 DHE 并要求 DH 模数不超过 512 位的密码套件。此外,服务器中的大多数 SSL 都使用相同的模数,因为使用 SSL 库提供的模数比生成自己的模数更容易。重复使用与其他人相同的模数并不是什么大问题。DH 可以容忍这一点。然而,这意味着如果攻击者投入大量计算来破坏一个使用给定模数p的 DH 实例,同一个攻击者可以重用几乎所有的工作来破坏使用相同模数p的其他实例。
所以攻击是这样运行的:
- 攻击者处于中间人位置;他可以实时修改数据流,
- 攻击者更改客户端发送的密码套件列表以指定使用导出 DHE 密码套件,
- 服务器遵守并发送一个 512 位模数p,
- 客户端仍然被说服它正在执行非导出 DHE,但是 DH 模数是 DH 模数,因此客户端接受来自服务器的弱/导出模数就好了,
- 攻击者使用他对该值p的预计算来实时破坏 DH 并修复
Finished
消息。
Logjam 文章作者将此称为“协议缺陷”,因为包含导出 DH 参数的消息未标记为“用于导出”,因此与包含非导出 DH 参数ServerKeyExchange
的消息无法区分(除了模数长度)ServerKeyExchange
. 但是,我想说真正的缺陷并不存在。真正的问题是客户端和服务器接受使用 512 位 DH 模数,即使他们都知道它很弱。
你该怎么办 ?
好吧,和往常一样:从您的软件供应商处安装补丁。事实上,这应该是不言而喻的。
在客户端,微软已经对 Internet Explorer 进行了修补,以拒绝使用太小的模数。Mozilla 以插件的形式对 Firefox 进行了修复,现在可以在这里找到。预计其他浏览器供应商(Opera、Chrome...)也将很快跟进。
在服务器端,您可以明确禁用对“导出”密码套件的支持,并生成您自己的 DH 参数。有关详细信息,请参阅该页面。请注意,IIS
它对所有这些都免疫,因为显然它从不支持具有 DSS 服务器证书以外的任何东西的 DHE 密码套件,并且没有人使用 DSS 服务器证书。
请注意,ECDHE密码套件(其中“EC”表示“椭圆曲线”)在这里没有风险,因为:
- 没有“出口”ECDHE 密码套件(ECDHE 密码套件是在美国大幅取消出口法规后定义的)。
- 客户通常只支持一些特定的曲线(通常只支持其中两条,P-256 和 P-384),而且都没有足够弱到被打破(不是现在,也不是在可预见的将来)。
那么国家安全局呢?
Logjam 研究人员讨论了一些“具有民族国家资源的攻击者”如何突破 1024 位 DH。这是一个很大的延伸。以我的经验,民族国家确实拥有大量资源并且擅长使用它,但这与成功破解硬加密货币不同。
不过,如果您担心 1024 位 DH“太弱”,请选择 2048 位(无论如何这是推荐的)或 ECDHE。
或者简单地接受拥有压倒性资源的人确实拥有压倒性的资源并且不会被简单的模数大小打败。那些可以花费数十亿美元破解机器的人也可以用数百美元贿赂您的孩子,让他们检查您的计算机文件和钱包。
Logjam 不应该被称为“新”漏洞——它是针对出口级 DH 而不是出口级 RSA 的 FREAK 的重新散列。
实际利用依赖于以下缺陷:
- TLS 协议很容易被攻击者降级其密钥交换协议。
- 服务器仍支持出口级 Diffie-Hellman(例如 512 位密钥)
- 出于性能原因,许多实现硬编码一个共同的素数。可以滥用这种细微差别,以便为使用该素数的任何服务器提前预计算部分攻击。
该攻击本质上允许攻击者预先计算一组已知目标素数的数据,该目标素数已知被 TLS 服务在其 DH 实现中使用。对于 512 位 DH,已知这需要大约一周的时间。完成此操作后,攻击者可以在每次交换大约 1-2 分钟内破坏与该服务的 DH 密钥交换。一旦交换被破坏,攻击者就可以访问会话密钥,从而允许他们解密所有流量。
可以通过以下方式解决此问题:
- 禁用出口级密码。
- 使用椭圆曲线 DH (ECDHE) 而不是有限域 DH。由于预计算的优势较小,这使得攻击在实践中更加困难。
- 为较大的素数(例如 2048 位)生成一个唯一的 DH 组,并使用它来代替默认的广泛共享组。
附带说明一下,这个漏洞的一个有趣因素是它与 NSA 在 TLS 和 IKE (VPN) 流量解密领域报告的能力相匹配。在大规模流量捕获和解密的情况下,预计算攻击变得特别有效和有效,因为大量可用数据可能与已知的共享素数相关联。
更多详细信息:
Logjam 是一种密码降级攻击,中间人可以欺骗端点使用弱密码。弱密码将允许中间人轻松解密截获的流量。
与所有其他密码降级攻击一样,防止它的最佳方法是首先禁用弱密码。如果弱密码不可用,即使成功的密码降级也会导致强加密。
为了防止出现 Logjam,您可以遵循TLS 部署 Diffie-Hellman 指南的建议,这将帮助您配置服务器(Apache HTTP Server、nginx、IIS、Lighttpd、Tomcat、Postfix、Sendmail、Dovecot、HAProxy、OpenSSH、Amazon Elastic豆茎):
- 测试您的服务器是否安全
- 生成强大而独特的 Diffie-Hellman 组
- 部署 ECDHE 密码套件
- 禁用导出密码套件
Mozilla SSL Configuration Generator也是一个很好的配置工具。