Facebook 近日在博客中公布了如何防御 BREACH(通过自适应超文本压缩进行的浏览器侦测与漏出)攻击。
BREACH 攻击与企业处理 CSRF(跨站请求伪造)攻击时采用的安全措施有关,BREACH 专门针对那些拥有用户账户的网站。
在 CSRF 攻击中,攻击者会假冒用户并让用户的浏览器发送垃圾信息或者以 web 请求的方式窃取用户在网络上的账户。
而 Facebook 这样的公司则会利用 CSRF 令牌来标记真实用户或被黑账户,来防止攻击。但是在新的 BREACH 攻击面前这种方法失灵了。在一些环境中,网页获取压缩超文本的方式使得黑客能够发现用户的 CSRF 证书,即使用户与网站之间的通讯采取了加密措施也无济于事。
Facebook 目前通过在 CSRF 令牌中增加一个新的安全层来对付 BREACH 攻击,具体做法如下:
某用户一天中如果产生了三个 Facebook 会话,那么每个会话都会受到一个同样的 CSRF 令牌,如今 Facebook 的系统会为每一次用户请求发放一个新的令牌,这些新令牌通过 24 位盐化随机产生,“盐”是令牌结尾最后四个字母。这能够彻底避免令牌的重复问题。新的令牌发布后,此前的令牌还将保持几天有效期,这意味着同一时期会有多个令牌处于有效期。
据 Facebook 安全与基础架构团队介绍,在 CSRF 令牌中引入随机字母序列的做法足以挫败依赖令牌重复性的 BREACH 攻击。