Logjam (CVE-2015-4000)
定义
Logjam 是 2015 年公布的攻击(CVE-2015-4000),可把 TLS 降级到 512 位出口级 Diffie-Hellman,并威胁使用过小或被大量共用 DH 参数的服务器。
Logjam 由一个学术研究团队于 2015 年 5 月在论文《Imperfect Forward Secrecy: How Diffie-Hellman Fails in Practice》中公布,包含两部分。其一,服务器若仍支持出口级套件,中间人可以骗客户端接受 512 位的 DHE_EXPORT 参数,因为在 TLS 1.2 及更早版本中,服务器的签名并不覆盖所选的密码套件。其二,破解有限域 Diffie-Hellman 需要针对每个素数做一次大规模预计算,之后单个连接就能很快攻破;由于大量服务器共用少数几个素数,512 位的组已可实际破解,论文还认为 1024 位的组在国家级攻击者的能力范围之内。
为什么重要
Logjam 说明 Diffie-Hellman 的安全性取决于组的大小,而被广泛共用的小组是诱人的目标。缓解办法:禁用所有出口级套件;优先使用 ECDHE;确需有限域 DHE 时,使用不小于 2048 位的 DH 参数,例如 RFC 7919 中标准化的 ffdhe 组。浏览器随后也提高了可接受的最小 DH 长度。TLS 1.3 只协商具名组,也没有出口级密码,因此不受影响。扫描报告里的“DH 参数过弱”通常就是指这一类问题。
例子
openssl s_client -connect example.com:443 -servername example.com -tls1_2 -cipher 'EDH' </dev/null 2>/dev/null \
| grep -i 'Server Temp Key'
# Server Temp Key: DH, 2048 bits (握手失败、即完全不提供 DHE,也没问题)
ssl_dhparam /etc/nginx/ffdhe2048.pem; # 只有启用了 DHE 套件时才起作用
常见误区
- 每台服务器都必须生成自己独有的 DH 素数。 使用经过审查、不小于 2048 位的标准组(如 ffdhe2048)即可;危险在于组太小,而不在于足够大的组被共用。
- 只有提供出口级套件的服务器才受 Logjam 影响。 预计算的风险适用于任何仍在用 1024 位及以下 DH 组的服务器。
- Logjam 也影响 ECDHE。 它针对的是有限域 Diffie-Hellman,使用标准曲线的 ECDHE 正是推荐的替代方案。