RangeAMP

前言

RangeAMP是针对CDN的DOS攻击方式之一,算是比较前沿的研究了,特此记录。

在RangeAMP中涉及到如下几个关键词:CDN,HTTP Range request,ddos,放大攻击

关键词

CDN

第一个关键词:什么是CDN?

CDN,内容分发网络。一般来说,CDN服务商会在全国各地建立CDN节点,用户访问时,就会访问距离最近的CDN节点,达到最快的访问效果。

比如一个网站选择了CDN服务商,举例阿里云。那么阿里云会将网站上的部分内容缓存到所有CDN节点上。CDN节点最重要的功能就是缓存,但是CDN节点的存储空间不会无限大,因此需要使用动态缓存算法。即:如果一个用户访问web服务器上的某个资源,而CDN节点没有这个资源。那CDN节点就会向web服务器去请求,下发给用户的同时保存这个资源在CDN节点上。

关键点在于:CDN节点的存储空间不会无限大,那么就需要用到缓存替换算法,把一些不需要用到的资源删除。不过这样一来,如果有用户去请求这个资源,需要反复从服务器请求资源,这就是攻击的必要条件。

HTTP Range Request HTTP范围请求

对于没有使用CDN的web服务器而言,客户端请求多大的资源,下载时间就是多长,如果想要节省时间的话,除了提高网速的办法就是启用多线程。
如果使用HTTP通信的话,web服务器得开启对HTTP范围请求的支持,客户端发起请求的时候可以在数据包里添加这些东西:
Range: bytes=start-end
来指定下载的内容。
而网站在接收到相应信息之后,如果不支持,那么就会忽略,返回200
如果支持:
有效的话,返回206
无效或者超出边界,返回416

DDOS

分布式拒绝服务。简单点,就是利用大量的资源去请求服务器,导致服务器停止响应。
DDOS主要分为两类:
1.资源消耗,比较典型的DOS攻击,针对tcp和udp协议的ddos都属于这一类。通过大量的请求消耗带宽,从而让服务器卡死。
服务消耗,这个是让服务端始终保持在处理高消耗型的业务的忙碌状态中,使得无法对正常业务进行响应。针对DNS、DHCP或者是HTTP服务器的大量请求都属于这类。

放大攻击

利用的是一种请求和响应流量不对称的方式来进行攻击,比如攻击者发送10k的请求,消耗掉的目标带宽就只有10k。但是如果有一台设备,攻击者发送10k的请求,却能得到1000k的应答,那么攻击者就可以利用这个设备实现放大攻击。应答请求源地址改为攻击目标,这样攻击目标就会受到放大攻击
也就是攻击者->请求设备->设备放大了1000k->请求服务器。这样服务器就消耗了1000k的带宽。

CDN和HTTP Range Request(HTTP范围请求)的结合

作者团队表示国内大厂的CDN基本都支持范围请求,而在转发上,基本为大致三个方式:
惰性:不进行任何修改直接转发
删除:直接删除Range header
扩展:将原请求的内容扩展到更大的字节范围中去。
而且大多数CDN倾向于后两种,因为客户端可能会继续请求相同资源的其他字节范围,这样优化了缓存,减少了访问延迟,并且防止了过多的回源请求。
回源请求:指CDN对源服务器的请求。
对于存在多个小范围的范围请求,或者是存在两个以上重叠范围的请求,RFC7233建议是h忽略、合并或者拒绝,然而有不少CDN忽略了这个建议。
这就导致了问题的产生。
如果CDN采用删除和扩展的策略的话,这两种策略会要求CDN从源服务器上检索比客户端请求内容更多的字节,CDN只返回,然后不考虑是否重叠,那么CDN发送的响应可能要比来自源服务器的响应大数千倍,这就导致了客户端到源服务器的流量差异。
这种流量差异会导致流量放大攻击,称为基于范围的放大攻击(RangeAMP)

攻击手法

第一种攻击路线:小字节范围攻击(SBR)
攻击者->CDN->源服务器
这个途径中,如果CDN采用了删除或者拓展策略处理范围请求,那么攻击者可以创建一个小字节的范围头发起RangeAMP攻击,这种攻击被称为小字节范围(SBR)攻击。
比如攻击者只向CDN请求了图片的一小部分,但是CDN会去像源站请求更多或者是整张图片的内容,从而产生更大的流量。然后攻击者尽可能去请求CDN缓存中不存在的内容,这样攻击者的一小部分流量,CDN会向源站请求更多的流量,这样就放大了流量。

第二种攻击路线:重叠字范围攻击(OBR)
与SBR的原理不同,OBR攻击利用了多范围请求,类似的攻击方式曾经出现过,编号是CVE-2011-3192,攻击者通过向apache服务器发送多范围请求从而耗尽目标服务器的内存资源。
理论上,一旦带上N个range请求,那么apache服务器的压力就是n倍。
攻击者->FCDN->BCDN->源服务器
当一些CDN忽略了RFC协议时,就产生了这个漏洞。如果FCDN直接将请求转发给BCDN,而此时BCDN对请求不检查是否范围重叠,那BCDN就会起到一个类似放大的作用,去请求源服务器。而攻击者可以设置一个小型TCP接口,确认自己接收很少的数据,而不受放大攻击影响。


   转载规则


《RangeAMP》 tatsumaki 采用 知识共享署名 4.0 国际许可协议 进行许可。
  目录