HTTP范围放大攻击中的放大效应是通过滥用HTTP协议中的Range头字段来实现的。
HTTP Range请求的正常用途
HTTP Range头字段允许客户端请求特定字节范围的资源片段。这种功能主要用于以下场景:
- 断点续传:客户端可以在下载中断后只请求未完成部分,从而避免重新下载整个文件。
- 按需获取:客户端可以根据需要仅请求文件的特定部分,例如视频流中的一段。
http
GET /demo.mp4 HTTP/1.1
Host: www.target.com
Range: bytes=0-499
服务器会返回这500个字节,而不是整个文件,从而节省带宽。
攻击者方式
攻击者发送如下数据包:
http
GET /demo.mp4 HTTP/1.1
Host: www.target.com
Range: bytes=0-499,0-499,...
这里,攻击者请求了同一文件的多个重复片段(每次500字节,共n次)。服务器将生成n个500字节的片段并将它们组合成一个响应。最终的效果就是攻击者可以通过发送一个较小的请求包,可使得服务器生成一个超大的响应包。在实际的攻击中,攻击者会利用分布式拒绝服务攻击(DDoS)的方式,控制大量僵尸主机发送此种数据包,可导致源服务器的服务崩溃、CDN节点被打垮等。