针对于HTTPS的攻击,多存在于中间人攻击的环境,攻击者要先能监听用户和网站之间的流量。
HTTP/TLS一般都启用了压缩算法,通过改变请求正文,对比被压缩后的密文长度,可以破解出某些信息。
HTTP压缩采用了Deflate算法。该算法可以将重复出现的字符串以一个实例的形式存储在HTML文件之中,并以此来缩小数据流所占的空间。当代码需要使用这一字符串时,系统会自动用一个指针来进行索引,这样就可以最大程度地节省空间了。一般而言,如果一个数据流中存在大量的重复字符串,那么这也就意味着在经过了压缩处理之后,可以显著地减少数据所占的空间。值得注意的是,Deflate算法是同时使用了LZ77算法与哈夫曼编码(Huffman Coding)的一个无损数据压缩算法。
CRIME攻击
CRIME通过在受害者的浏览器中运行JavaScript代码并同时监听HTTPS传输数据,能够解密会话Cookie,主要针对TLS压缩。
Javascript代码尝试一位一位的暴力破解Cookie的值。中间人组件能够观察到每次破解请求和响应的密文,寻找不同,一旦发现了一个,他会和执行破解的Javascript通信并继续破解下一位。
比如,攻击者可以构造出这样的请求
在secret=后面加上各种字符进行推测,当匹配到X的时候,密文因为被压缩会变的更短,就得到了第一位的X。依次往下推,就可以得到完整的cookie。
BREACH攻击
BREACH攻击是CRIME攻击的升级版,攻击方法和CRIME相同,不同的是BREACH利用的不是SSL/TLS压缩,而是HTTP压缩。所以要抵御BREACH攻击必须禁用HTTP压缩。
攻击防范
从上面可以看出,CRIME/BREACH攻击的条件都相对苛刻,而HEIST攻击则大大降低了其门槛,很容易被恶意广告利用。
HEIST攻击目前涉及到了浏览器, HTTP, SSL/TLS,TCP等多个层。
在浏览器层,目前修改Fetch API似乎是不太可能的,大概能做的只有禁用第三方cookie了,这样没办法攻击到一些需要登录或授权才能访问的资源。但对于依赖广告收入的谷歌来说,也不太会去触碰广告商的命根。
在HTTP层,浏览器可以禁止非法的请求(分析Origin或者referer,但可以绕过),server端可以通过关闭SSL/TLS压缩和HTTP压缩来避免CRIME/BREACH攻击,但是就无法享受到压缩带来的好处了。
在网络层,一种做法是将TCP拥塞窗口随机化,另一种做法也是类似,就是对返回的数据进行随机padding,但是也都是不太可能做的。