BREACH - 针对 HTTP 的新攻击。可以做什么?
虽然文章没有详细说明,但我们可以推断出一些事情:
攻击使用与CRIME相同的一般原则的压缩:攻击者可以使目标系统压缩一系列字符,其中包括秘密值(攻击者试图猜测)和攻击者可以选择的一些字符。那是一种选择明文攻击。压缩长度将取决于攻击者的字符串是否“看起来像”秘密。压缩后的长度通过 SSL 加密泄露,因为加密隐藏的是内容,而不是长度。
这篇文章特别提到了“任何 [...]体内的秘密”。所以我们谈论的是 HTTP 级别的压缩,而不是 SSL 级别的压缩。HTTP 压缩仅适用于请求正文,而不适用于标头。所以header 中的秘密,特别是 cookie 值,是安全的。
既然有“探测请求”,那么攻击就需要客户端浏览器中有一些恶意代码;攻击者还必须观察网络上的加密字节,并协调这两个元素。这与 CRIME 和 BEAST 的设置相同。
目前尚不清楚(仅从文章来看,这就是我现在要讨论的全部内容)压缩体是来自客户端还是来自服务器。“探测请求”当然是由客户端(代表攻击者)发送的,但来自服务器的响应可能包括请求中发送的部分内容,因此“选择明文攻击”可以双向工作。
无论如何,“BREACH”看起来像是一种攻击方法,需要适应目标站点的具体情况。从这个意义上说,它一点也不新鲜。压缩泄漏信息已经是“众所周知的”,而且没有理由相信 HTTP 级别的压缩可以神奇地免疫。哎呀,去年就在这里讨论过。然而,有些人加倍努力展示工作示范是一件好事因为否则缺陷将永远无法修复。例如,针对 CBC 的 padding oracle 攻击已经在 2002 年被描述甚至原型化,但是在 2010 年针对 ASP 的实际演示让微软相信危险是真实的。2011 年的 BEAST(自 2002 年以来也知道 CBC 模式需要不可预测的 IV)和 2012 年的 CRIME 也是如此;BREACH 更像是“CRIME II”:再一层的教学法打击不信的人。
不幸的是,很多人会误以为这是对 SSL 的攻击,但事实并非如此。真的,它与 SSL 无关。这是一种通过低带宽数据通道强制信息泄漏的攻击,数据长度SSL 从未覆盖过,也从未声称覆盖过。
一行执行摘要是您不得压缩。
BREACH 与 CRIME 一样,是一种与压缩相关的攻击。关闭压缩会使攻击变得不可能。
添加
请注意,在这种情况下,您似乎关闭了不同的压缩配置;而 CRIME 利用 TLS 层压缩,BREACH 利用 HTTP 层压缩。
我只是想到了一种将“每个请求随机化秘密”、“长度隐藏”和“速率限制请求”添加到 CSRF 缓解措施的方法。
- 考虑您不希望攻击者代表用户发布哪些表单。这些是您可以保护免受 CSRF 影响的表单。
- 对于每个页面视图,生成一个随机长度的随机盐。将此盐作为隐藏输入发送。随机长度应该有助于增加长度的噪音,即使您的前端负载平衡器去除注释或以其他方式缩小您的 HTML。
- 计算 salt、会话 ID 和服务器端密钥的哈希值,并将此 CSRF 密钥作为另一个隐藏输入发送。
- 可选择将 salt 或 CSRF 键记录到表中。这允许将特定用户帐户或 IP 地址的速率限制为每小时哈希数,并限制特定盐的重放。
- 处理表单时,以与前面步骤相同的方式计算哈希,使用表单中的盐,并确保它与 CSRF 密钥匹配。
该攻击通过从有效负载大小推断信息来进行。人工填充服务的 HTTPS 页面(例如,随机大小的评论字符串)可能会降低其有效性。