BEAST是Browser Exploit Against SSL/TLS的缩写,中文常译为针对SSL/TLS的浏览器漏洞攻击。它在2011年的Ekoparty安全大会上由泰国研究人员Juliano Rizzo和Tay Monchai Duong公开演示,攻击者通过这种手段成功解密了PayPal会话中的Cookie,一时引起了整个行业的震动。要理解这个攻击为什么能成立,需要从TLS 1.0的记录层加密方式和CBC分组模式说起。

BEAST攻击的原理:CBC模式的初始向量缺陷
TLS 1.0在数据加密时大量使用CBC(Cipher Block Chaining,密码分组链接)模式。CBC的工作方式是把明文分成固定长度的分组,第一个分组与初始向量(IV)异或后加密,后续每个分组先与前一个密文分组异或再加密。这种链式结构让相同的明文在不同位置产生不同的密文,理论上增强了安全性。
问题出在初始向量的生成方式上。在TLS 1.0的设计中,每个记录的第一个分组使用的IV并不是随机的,而是直接复用上一个记录的最后一个密文分组。也就是说,攻击者在网络中监听到前一个记录的密文后,就能准确预知下一个记录的IV。按照密码学的要求,CBC模式的IV必须是不可预测的随机值,否则就会为选择明文攻击打开大门。TLS 1.1之后的版本明确要求每个记录使用显式的随机IV,正是为了修复这个缺陷。
攻击者还需要一个前提条件:能够向加密会话中注入自己选择的内容,这称为选择明文攻击。在实际场景中,攻击者通常利用浏览器同源策略的漏洞(例如Java小程序的套接字接口)或者恶意网页中的脚本,让受害者浏览器在已建立的TLS连接中发送攻击者构造的数据。结合可预测的IV,攻击者可以对密文进行逐字节猜解。
攻击的具体流程:逐字节猜解是怎么做的
假设攻击者想还原的秘密是Cookie的某个字节。攻击者的思路是构造一个猜测明文,使猜测内容与密文分组异或后产生的中间值,和真实密文分组的中间值相同。如果两次加密产生相同的密文,说明猜测正确。由于IV可预测,攻击者可以精确控制异或运算的输入。
具体做法大致如下:攻击者先在受害者连接中注入一段填充数据,让目标秘密字节恰好落在某个分组的末尾位置。然后攻击者构造自己的请求,把猜测的字节放在对应位置,观察密文是否与目标分组的密文一致。每个字节最多尝试256次就能命中,一个典型的会话Cookie大约几十个字节,在千兆网络环境下几分钟内就能完成解密。这正是当年现场演示中攻击者快速拿到PayPal Cookie的原因。
需要注意的是,这个攻击要求攻击者和受害者的请求走同一个TLS连接、使用相同的密钥,并且能够发起大量请求而不触发服务端的频率限制。这些条件虽然苛刻,但在2011年的浏览器环境下是可以满足的,因此被认为是具有实际可利用性的严重漏洞。
如何防御BEAST攻击
最彻底的解决方案是禁用TLS 1.0,全面升级到TLS 1.2或TLS 1.3。新版本要求每个记录携带显式随机IV,从协议层面消除了可预测IV的问题。目前主流浏览器和服务器都已经默认支持TLS 1.2以上版本,现代部署环境应该直接关闭对TLS 1.0和SSL 3.0的支持。以Nginx为例,可以这样配置:
# 只允许TLS 1.2和TLS 1.3 ssl_protocols TLSv1.2 TLSv1.3;
在BEAST公开后的过渡时期,业界还采用过两种临时补救措施。一是优先使用RC4流密码,因为RC4不依赖CBC模式,天然不受此攻击影响。但RC4本身后来被证明存在严重统计偏差漏洞,已经在2015年被全面弃用,如今绝对不应该再使用。二是记录切分技术,即服务端把数据拆成多个TLS记录发送,第一个记录只包含一个字节,这样攻击者无法将秘密字节对齐到可控的分组边界。浏览器厂商在客户端实现了类似的1/n-1切分方案,这两种手段在当时有效缓解了风险。
对于无法立即升级协议的老旧系统,还可以从应用层面加固:给Cookie设置HttpOnly属性防止脚本读取,缩短会话有效期,对关键操作增加二次验证。这些措施即便在传输层被攻破时,也能降低Cookie泄露造成的损失。
BEAST的历史意义与后续演进
BEAST攻击的意义不仅在于暴露了TLS 1.0的缺陷,更在于它开创了一类针对TLS CBC模式实现的分析思路。两年后出现的Lucky 13攻击、POODLE攻击以及2013年的TIME和BREACH攻击,都可以看作这条研究路线的延续,只是攻击点从初始向量转移到了填充校验和数据压缩等环节。
从BEAST的教训中可以总结出两点:一是密码学协议中看似无害的实现细节(比如IV复用)可能埋下致命隐患,协议设计必须经过充分的形式化分析;二是漏洞公开后生态系统的响应速度非常重要,TLS 1.1的随机IV方案早在2006年就已标准化,但直到攻击实际发生,各厂商才加快了部署节奏。对今天的运维人员来说,定期检查服务器支持的TLS版本和密码套件,及时淘汰过时协议,仍然是最基本也最有效的安全实践。