跳转至

Insecure TLS Renegotiation (CVE-2009-3555)

不安全的 TLS 重新协商 (CVE-2009-3555)

描述

此漏洞表明服务器不支持 RFC 5746 中定义的安全重新协商,使其在 TLS 握手重新协商期间容易受到明文注入攻击。

TLS 重新协商允许在活动会话期间更改连接参数。最初的 TLS 规范未能通过密码学手段将重新协商的握手绑定到现有连接上,这造成了一个安全缺陷,使攻击者能够将数据注入到加密的会话中。

工作原理:

  1. 攻击者与目标服务器建立 TLS 连接并注入恶意请求。
  2. 合法客户端尝试连接到同一服务器。
  3. 攻击者将客户端的握手作为其现有会话的“重新协商”进行拼接。
  4. 服务器在经过身份验证的客户端上下文中处理攻击者的初始数据。

要求:

  • 服务器在没有 RFC 5746 的情况下支持 TLS 重新协商。
  • 处于中间人(Man-in-the-middle)的网络位置。
  • 不区分身份验证前后数据的应用程序协议。

Example Scenario: 公共 WiFi 上的攻击者拦截银行连接,建立 TLS 会话,并发送未经授权的转账请求。当受害者进行身份验证时,服务器会将恶意的转账作为来自经过身份验证的用户的合法请求进行处理。

这会影响 HTTPS、SMTP over TLS 以及其他受 TLS 保护的协议,可能导致未经授权的交易、数据窃取和账户被入侵。

建议

要缓解不安全的 TLS 重新协商漏洞,请实施以下策略:

Primary Mitigation - Enable RFC 5746 Support:

升级您的 TLS 实现以支持 RFC 5746(TLS Renegotiation Indication Extension)。现代版本的 OpenSSL、GnuTLS 和其他 TLS 库默认包含此功能。

# Nginx 配置 (OpenSSL 1.0.1+ 自动支持 RFC 5746)
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
# Apache 配置 (使用 OpenSSL 1.0.1+ 的 mod_ssl 支持 RFC 5746)
SSLProtocol -all +TLSv1.2 +TLSv1.3
SSLHonorCipherOrder on

Alternative Mitigations:

  1. Disable Renegotiation Entirely - 如果您的应用程序不需要重新协商,请将其完全禁用:
# Nginx - 在最近的版本中默认禁用重新协商
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
# 使用 mod_ssl 的 Apache
SSLInsecureRenegotiation off
  1. Upgrade to TLS 1.3 - TLS 1.3 重新设计了重新协商机制,使其在本质上是安全的:
# 测试服务器配置
openssl s_client -connect example.com:443 -tls1_3

Testing and Verification:

# 测试对 RFC 5746 的支持
openssl s_client -connect example.com:443 -reconnect

# 检查安全重新协商指示
nmap --script ssl-enum-ciphers -p 443 example.com

Java Applications:

对于 Java 应用程序,请确保您使用的 JVM 支持 RFC 5746:

# 要求安全重新协商的 Java 系统属性
-Djdk.tls.allowLegacyResumption=false
-Djdk.tls.allowLegacyMasterSecret=false

Monitoring for Attacks:

在您的 TLS 日志中监控可疑的重新协商模式:

# 针对异常重新协商活动的示例日志分析
grep -i "renegotiation\|handshake" /var/log/nginx/error.log

通过实施对 RFC 5746 的支持或完全禁用重新协商,您可以在保持安全 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