# BEAST是什么？定义、例子与常见误区

> BEAST 是 2011 年公布的攻击（CVE-2011-3389），利用 SSL 3.0 和 TLS 1.0 中 CBC 模式可预测的 IV，逐字节解密 Cookie 等秘密。

Source: https://ssl.sh/zh/glossary/beast/
Last updated: 2026-11-10

BEAST 由 Thai Duong 和 Juliano Rizzo 在 2011 年演示，把一个早已被描述过的理论弱点变成了实际攻击。在 SSL 3.0 和 [TLS 1.0](https://ssl.sh/zh/glossary/tls-1-0/) 中，每条 CBC 加密记录都把上一条记录的最后一个密文块当作自己的 IV，因此下一个 IV 是可预测的。攻击者若能向受害者的连接中注入自己选定的明文（例如借助在浏览器里运行的脚本），并能观察密文，就可以逐个字节地验证对会话 Cookie 等秘密的猜测。

## 为什么重要
[TLS 1.1](https://ssl.sh/zh/glossary/tls-1-1/) 早已通过为每条记录使用显式 IV 修复了这个问题，但 2011 年时支持它的服务器和浏览器很少。浏览器于是在客户端做了缓解，主要是 1/n-1 记录拆分，让实际使用的 IV 重新变得不可预测。当时很多服务器被建议优先使用 [RC4](https://ssl.sh/zh/glossary/rc4/) 来避开 CBC，后来 RC4 自身被攻破，并被 RFC 7465 禁用，这条建议反而成了隐患。如今 BEAST 只是禁用 TLS 1.0 的又一个理由：主流浏览器已在 2020 年移除 TLS 1.0，RFC 8996 也在 2021 年正式将其废弃。漏洞扫描报告里看到 BEAST，按关闭旧协议的思路处理即可。

## 例子
```nginx
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。

## 相关术语

- [TLS 1.0](https://ssl.sh/zh/glossary/tls-1-0/): TLS 1.0 是传输层安全协议的第一个版本，1999 年以 RFC 2246 发布，2021 年被 RFC 8996 正式废弃，主流浏览器已不再支持。
- [TLS 1.1](https://ssl.sh/zh/glossary/tls-1-1/): TLS 1.1 是 2006 年以 RFC 4346 发布的 TLS 第二个版本，主要为 CBC 加入显式 IV，2021 年与 TLS 1.0 一起被 RFC 8996 废弃。
- [RC4](https://ssl.sh/zh/glossary/rc4/): RC4 是 Ron Rivest 在 1987 年设计的流密码，曾在 SSL/TLS 中广泛使用，因密钥流存在统计偏差，2015 年被 RFC 7465 禁止用于 TLS。
- [POODLE](https://ssl.sh/zh/glossary/poodle/): POODLE 是 2014 年公布的攻击（CVE-2014-3566），利用 SSL 3.0 不校验 CBC 填充的缺陷，从加密连接中逐字节还原 Cookie 等秘密。
- [CRIME](https://ssl.sh/zh/glossary/crime/): CRIME 是 2012 年公布的攻击（CVE-2012-4929），通过观察 TLS 层压缩对密文长度的影响，从加密连接中还原 Cookie 等秘密。
- [密码套件](https://ssl.sh/zh/glossary/cipher-suite/): 密码套件是 TLS 客户端和服务器协商使用的一组命名的加密算法组合，例如 TLS_AES_128_GCM_SHA256，决定连接用什么算法保护数据。
