LOGJAM Common Prime Vulnerability
LOGJAM 常见素数漏洞 (LOGJAM Common Prime)
描述
此漏洞表明服务器使用了广泛共享的 Diffie-Hellman(DH)素数,这使得高效的预计算攻击成为可能,允许国家级攻击者被动解密大量的互联网流量。
LOGJAM-common_primes 发生于服务器使用相同的标准 DH 参数(素数),这些参数在数百万个安装实例中共享。虽然以前认为使用共享素数是安全的,但数域筛法(number field sieve algorithm)允许攻击者对每个素数进行一次昂贵的加密表预计算,然后快速破解使用该素数的任何连接。
原理:
- 攻击者识别出广泛使用的 DH 素数(例如,默认的 Apache/OpenSSL 参数)。
- 对目标素数进行昂贵的预计算(数周的计算时间)。
- 被动捕获任何使用该素数的服务器的 DH 密钥交换。
- 使用预计算的表在几分钟内破解各个连接。
- 将攻击扩展到数百万共享相同素数的服务器。
要求:
- 服务器使用常见/默认的 DH 素数(1024 位或更小)。
- 初始预计算需要大量的计算资源(1024 位约耗资 1 亿美元)。
- 能够捕获目标连接的网络流量。
- 不需要中间人(MITM)能力——这是一种纯被动攻击。
示例场景: 一家主要的云提供商在数千台服务器上使用了默认的 1024 位 DH 参数。一个国家级攻击者花费数月时间为这个特定的素数预计算加密表。完成后,他们可以被动监控互联网流量并实时解密任何到这些服务器的 TLS 连接,影响数百万用户,而没有任何主动干扰或被检测到。
破解最常见的 1024 位素数将允许对 18% 的顶级 HTTPS 域进行被动窃听,而破解两个最常见的素数将危及全球 66% 的 VPN 服务器和 26% 的 SSH 服务器。
建议
为了缓解 LOGJAM 常见素数攻击:
主要防御 - 生成唯一的 DH 参数:
# 生成唯一的 2048 位 DH 参数
openssl dhparam -out unique-dhparams.pem 2048
# Apache: 使用自定义参数
SSLOpenSSLConfCmd DHParameters /path/to/unique-dhparams.pem
# Nginx: 指定唯一参数
ssl_dhparam /path/to/unique-dhparams.pem;
避免使用默认/常见素数:
切勿使用这些已被广泛攻破的素数: - 默认的 Apache 512 位素数(数百万台服务器使用)。 - 默认的 OpenSSL 512 位素数(自 1995 年以来在 SSLeay 中存在)。 - RFC 5114 标准素数(可能受 NSA 影响)。
迁移至 ECDHE:
最佳解决方案 - 完全消除 DH 漏洞:
# Apache: 优先使用 ECDHE 而非 DHE
SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:!DHE
# Nginx: 仅使用 ECDHE 密码套件
ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:!DHE;
使用至少 2048 位的参数:
如果需要使用 DHE:
# 确保最小密钥大小
ssl_dhparam_size 2048; # Nginx
测试常见素数:
# 从服务器提取 DH 参数
openssl s_client -connect example.com:443 -cipher DHE 2>&1 | \
openssl dhparam -inform PEM -text -noout
# 与已知的易受攻击的素数进行对比
# 检查素数是否与 Apache 默认值或其他常见值匹配
额外保护措施:
- 使用完全消除有限域 DH 的 TLS 1.3。
- 实施证书固定(certificate pinning)以检测 MITM 尝试。
- 监控表明大批量流量分析的异常连接模式。
- 在选择密码套件时考虑完全前向保密(Perfect Forward Secrecy)的影响。
关键见解: 即使是强 1024 位 DH 参数,如果在许多服务器之间共享也会变得脆弱,因为预计算成本可以被摊销。唯一性与大小同样重要。
链接
标准
- SOC2_CONTROLS:
- CC_6_7
- CC_7_1
- CCPA:
- CCPA_1798_150
- GDPR:
- ART_32
- PCI_STANDARDS:
- REQ_4_1
- REQ_6_2
- REQ_11_3