BEAST Attack on TLS 1.0/SSL 3.0
针对 TLS 1.0/SSL 3.0 的 BEAST 攻击
描述
此漏洞表明服务器容易受到 BEAST 攻击,该攻击利用 TLS 1.0 和 SSL 3.0 CBC 模式加密中可预测的初始化向量,通过基于块的明文边界攻击来恢复明文数据。
BEAST (Browser Exploit Against SSL/TLS) 发生在 TLS 1.0 或 SSL 3.0 实现将最后一个密文块用作下一个记录的初始化向量时,这使得加密变得可预测。攻击者可以通过基于 JavaScript 的选择明文注入来利用此漏洞,一次一个字节地猜测机密信息。
工作原理:
- 攻击者在网络流量上建立中间人(man-in-the-middle)位置
- 恶意 JavaScript 注入具有受控块边界的选择明文
- 可预测的初始化向量允许验证猜测的字节
- 逐步提取敏感数据,如会话 Cookie 和 CSRF 令牌
要求:
- 具有 CBC 密码套件的 TLS 1.0 或 SSL 3.0
- 中间人(man-in-the-middle)网络访问权限
- 受害者浏览器中的 JavaScript 执行能力
- 对目标应用程序的同源(same-origin)请求
示例场景: 某 Web 应用程序使用带有 AES-CBC 加密的 TLS 1.0。同一网络上的攻击者注入 JavaScript,发起数千次精心构造的 HTTPS 请求,利用可预测的 IV 一次一个字节地猜测会话 Cookie 值。提取的会话 Cookie 允许完全的账户冒充。
该攻击证明了旧版 TLS 实现中的根本弱点,会导致会话劫持、绕过身份验证以及潜在的违反合规性规定的行为。
建议
为了缓解 BEAST 攻击:
主要防御 - 升级 TLS 版本:
# Nginx 配置 - 禁用 TLS 1.0
ssl_protocols TLSv1.2 TLSv1.3;
# Apache 配置 - 禁用 TLS 1.0/SSL 3.0
SSLProtocol -all +TLSv1.2 +TLSv1.3
如果需要 TLS 1.0 的替代缓解措施:
- 使用记录拆分(Record Splitting):启用空片段插入(OpenSSL 默认设置)
- 首选非 CBC 密码:暂时使用流密码或 AEAD 模式
- 启用 1/n-1 记录拆分:用于旧版支持的基于浏览器的对策
测试命令:
# 测试对 TLS 1.0 的支持
openssl s_client -connect example.com:443 -tls1
# 检查密码套件
nmap --script ssl-enum-ciphers -p 443 example.com
通过升级到 TLS 1.2+ 或实施记录拆分对策,组织可以有效消除 BEAST 攻击媒介,同时在必要时保持向后兼容性。
链接
标准
- 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