BEAST (Browser Exploit Against SSL/TLS)
定义
BEAST 是 2011 年公布的攻击(CVE-2011-3389),利用 SSL 3.0 和 TLS 1.0 中 CBC 模式可预测的 IV,逐字节解密 Cookie 等秘密。
BEAST 由 Thai Duong 和 Juliano Rizzo 在 2011 年演示,把一个早已被描述过的理论弱点变成了实际攻击。在 SSL 3.0 和 TLS 1.0 中,每条 CBC 加密记录都把上一条记录的最后一个密文块当作自己的 IV,因此下一个 IV 是可预测的。攻击者若能向受害者的连接中注入自己选定的明文(例如借助在浏览器里运行的脚本),并能观察密文,就可以逐个字节地验证对会话 Cookie 等秘密的猜测。
为什么重要
TLS 1.1 早已通过为每条记录使用显式 IV 修复了这个问题,但 2011 年时支持它的服务器和浏览器很少。浏览器于是在客户端做了缓解,主要是 1/n-1 记录拆分,让实际使用的 IV 重新变得不可预测。当时很多服务器被建议优先使用 RC4 来避开 CBC,后来 RC4 自身被攻破,并被 RFC 7465 禁用,这条建议反而成了隐患。如今 BEAST 只是禁用 TLS 1.0 的又一个理由:主流浏览器已在 2020 年移除 TLS 1.0,RFC 8996 也在 2021 年正式将其废弃。漏洞扫描报告里看到 BEAST,按关闭旧协议的思路处理即可。
例子
ssl_protocols TLSv1.2 TLSv1.3; # 不开 SSL 3.0 和 TLS 1.0,就不受 BEAST 影响
服务器如果仍在 TLS 1.0 上启用 CBC 套件,扫描工具可能会报出 BEAST。
常见误区
- 修 BEAST 的办法是优先使用 RC4。 那是 2011 年的权宜之计,RC4 现已被禁止使用,应直接禁用 TLS 1.0。
- BEAST 能攻破所有 CBC 套件。 它依赖可预测的 IV,而 TLS 1.1 和 1.2 没有这个问题;CBC 在这些版本中另有弱点,但不是 BEAST。
- 服务器要打补丁才能防 BEAST。 缓解措施在客户端;服务器侧要做的只是关闭 SSL 3.0 和 TLS 1.0。