2019年SINESAFE安全联合研究中心发现了一种新型的网络攻击方式,并将其命名为RangeAmp。
首先是两个概念,可以直接跳过:
CDN(主要指HTTP协议的CDN):
CDN的全称是内容传输网络。CDN是基于现有网络的智能虚拟网络。它依靠部署在世界各地的边缘服务器,通过中心平台的负载平衡、内容分发、调度等功能模块,允许用户就近获取所需内容,从而减少网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要包括内容存储和分发技术。
目前主要形式是反向代理,CloudFlare和AWSCloudFront也很多;产品;阿里巴巴云和腾讯云的CDN产品;云WAF也基本上有CDN功能。
让我们分别讨论CDN缓存:
当服务访问CDN并且浏览器本地缓存的资源到期时,浏览器不直接向源服务器请求资源,而是向CDN边缘节点请求资源。CDN边缘节点缓存用户数据。如果CDN中的缓存到期,CDN边缘节点将向源服务器发送要求,以获取最新资源。
在一些CDN缓存中,通过添加请求参数和更改请求头,可以将缓存资源视为未缓存的,然后CDN可以返回源站阅读。
HTTP范围要求(HTTP范围要求):
HTTP协议范围的请求允许服务器只向客户端发送部分HTTP信息。范围要求在传输大型媒体文件或与文件下载断点续传功能一起使用时非常有用。
所以Range请求的主要目的是:大文件块下载,断点续传,多线程下载。
您可以使用HEAD请求(GET可以,但会返回响应内容)来确认请求资源是否支持,如下图所示,包括支持以字节为单位的接受范围:
若不包含接受范围标头,或接受范围值为无(不排除其它值,但目前只有字节且无),则不得使用。
在需要使用范围时,您需要在HTTP请求头中添加一个范围头。有两种形式的范围标题:
单一范围:
范围:字节=0-1023。
带上述请求头的请求返回0-1023字节,服务器将返回206PartialContent的状态t的响应,响应内容为1024字节。
多个范围用于要求多个数据块(范围可以重叠,后者ORB技术用重叠范围攻击)
范围:字节=0-50,100-150。
对于具有多范围请求的请求,服务器将返回206部分内容状态代码,并在上传类似文件时使用多个部分作为响应(内容类型为多个部分/字节),然后使用边界划分多个内容。
整体思维。
在本文中,在处理范围请求时,CDN有三种反馈策略(详见原论文中的表一/表二):
惰性类型:不做任何改动,直接转发带范围头的请求。
删除类型:直接删除范围标题,然后转发。
扩展类型:将范围标题扩展到相对较大的范围。
其中,删除型和扩展型是为了提高缓存命中率而优化CDN缓存,尽可能多地要求Range请求的资源(文件),因此客户端在向CDN请求后续块时无需向源站请求数据。