跳转至

Index

针对 SSLv2/TLS 的 DROWN 攻击

描述

此漏洞表明服务器容易受到 DROWN 攻击。该攻击利用对 SSLv2 的支持,通过跨协议的 Bleichenbacher padding oracle 攻击来解密现代 TLS 连接。

DROWN(Decrypting RSA with Obsolete and Weakened encryption)发生于服务器在支持现代 TLS 的同时,也支持过时的 SSLv2 协议。即使客户端从不使用 SSLv2,攻击者也可以利用 SSLv2 脆弱的 RSA 填充(padding)实现,来解密共享相同私钥的被捕获 TLS 会话。

原理:

  1. 攻击者捕获客户端和服务器之间的数百个 TLS 连接。
  2. 使用相同的 RSA 私钥,攻击者连接到同一服务器或不同服务器上的 SSLv2 服务。
  3. 发送经过特殊构造的、带有修改后的 RSA 密文的 SSLv2 握手消息。
  4. SSLv2 服务器的响应通过 padding oracle 泄漏有关私钥的信息。
  5. 在进行大约 40,000 次探测后,攻击者可以解密其中一个被捕获的 TLS 会话。

要求:

  • 目标服务器或相关服务器使用相同的 RSA 私钥支持 SSLv2。
  • TLS 连接中使用 RSA 密钥交换(非 ECDHE/DHE)。
  • 具有捕获 TLS 流量并探测 SSLv2 服务的网络访问权限。
  • 用于加密攻击的计算资源(云端费用约 440 美元)。

示例场景: 一家银行的 HTTPS 网站正确地禁用了 SSLv2,但其同一基础设施上的 SMTP 邮件服务器使用相同的 RSA 证书并支持 SSLv2。攻击者捕获客户到该网站的 TLS 会话,然后向邮件服务器发起数千次伪造的 SSLv2 连接。脆弱的 SSLv2 padding oracle 揭示了足够的信息以解密被捕获的 HTTPS 会话,从而暴露了登录凭据和财务数据。

这种攻击利用了 20 世纪 90 年代遗留的出口级密码学限制,表明了政府强制的密码削弱如何在几十年后继续威胁现代安全。

建议

为了缓解 DROWN 攻击:

主要防御 - 完全禁用 SSLv2:

# Apache - 禁用 SSLv2
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite HIGH:!aNULL:!MD5:!SSLv2:!SSLv3
# Nginx - 禁用 SSLv2 (默认已禁用)
ssl_protocols TLSv1.2 TLSv1.3;

更新 OpenSSL:

升级到已打补丁的版本: - OpenSSL 1.0.2g 或更高版本 - OpenSSL 1.0.1s 或更高版本 - 这些版本默认禁用了 SSLv2 和出口密码套件。

检查所有使用相同私钥的服务:

关键:确保没有其他服务支持 SSLv2:

# 检查所有服务是否支持 SSLv2
nmap --script ssl-enum-ciphers -p 443,993,995,25,587,465 example.com

# 测试特定服务是否支持 SSLv2
openssl s_client -connect mail.example.com:993 -ssl2

常见易受攻击的服务: - SMTP 服务器(端口 25、587、465) - IMAP 服务器(端口 993) - POP3 服务器(端口 995) - 辅助 Web 服务器 - 负载均衡器和代理

如有必要,生成新密钥:

如果您无法确认 SSLv2 已在各处被禁用:

# 生成新的 RSA 私钥
openssl genrsa -out new-private-key.pem 2048

# 创建新的证书签名请求
openssl req -new -key new-private-key.pem -out new-csr.pem

额外保护措施:

  • 使用 ECDHE/DHE 密码套件以实现完全前向保密(Perfect Forward Secrecy)。
  • 在可能的情况下实施证书固定(certificate pinning)。
  • 监控日志以发现异常的 SSLv2 连接尝试。
  • 考虑对 SSLv2 流量进行网络层面的过滤。

关键见解: 即使您单独禁用了 SSLv2,只要有任何共享您私钥且支持 SSLv2 的服务,就会使您的所有 TLS 服务容易受到攻击。

链接

标准

  • 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
  • HIPAA_CONTROLS:
    • SECURITY252
    • SECURITY212
    • SECURITY213