提到DDoS攻击,可能大家想到的是大流量高新建,如Cloudflare在2023 年第一季度 DDoS 威胁报告中指出,最大的一次攻击峰值高达每秒7100万个请求(RPS),另外观察到高达1.3Tbps的单次DDoS攻击。实际上针对HTTP服务器,有另一种DDoS攻击方法,反其道而行之,这种攻击方法称之为慢速攻击。
HTTP慢速攻击是利用HTTP正常交互流程,以极低的速度往服务器发送HTTP请求,长时间占用HTTP服务器的资源而不释放,当HTTP服务器的并发连接数达到上限时,服务器将无法接受新的请求,从而导致拒绝服务。
目前常见的HTTP慢速攻击主要分为以下三种:
Slowloris(slow headers)
攻击原理
我们抓取一个正常的HTTP Get请求报文:
可以看到每一行都是以 \r\n 结尾,\r\n代表一行报文的结束也被称为空行(CRLF);整个命令的结尾会有\r\n\r\n(0d0a0d0a),当服务端收到含有 \r\n\r\n(0d0a0d0a)的报文时,就知道客户端发送结束,服务端要开始处理了。Slowloris攻击就是利用了这个机制,如下图,客户端每隔一段时间如5s发送一个HTTP头部,由于没有 \r\n\r\n(0d0a0d0a)结尾,服务端认为头部没有传送完成,会一直等待客户端发送数据,连接一直被占用。当这种请求占用完服务端的所有资源后,该服务端将无法提供正常的服务。
Slow HTTP POST(Slow Body)
攻击原理
下面是一个正常的HTTP POST报文
可以看到Content-Length字段是个比较小的值。服务器确认后,客户端将发送相关数据。Slow HTTP POST攻击过程则如下图所示,将Content-Length设置为一个较大的值(如抓包中的2000字节),然后以每隔一段时间去发送很小的内容(如抓包中每次发送一个test1234),从而和服务器保持长时间连接,当这种攻击数量大的时候,服务器就会拒绝服务,从而导致正常业务无法进行。
Slow Read attack
攻击原理
下面是正常的HTTP Get大文件的交互过程
客户端发送Get请求,同时设置windows size为65535,可以看到当Get命令被服务器接收后,服务器开始发送数据,windows size同样也为65535。以下列Slow Read Attack的抓包为例,将windows size被刻意设置为很小的值,如512,然后依次递减,这样就会造成服务器需要很长时间发送客户端所需数据,从而达到长时间占用服务器资源的目的。
防御方法
设定阈值,当某个地址的每秒并发连接数超过阈值时,即触发HTTP报文检查,如果检测到该IP连续发送的多个请求报文均没有\r\n\r\n(0d0a0d0a)结束标识,则认定为攻击,将该IP加入黑名单,同时断开该IP的所有连接。同时针对HTTP头部传输时间进行限制,比如头部传输时间超过10s,则主动断开连接,要求客户端重连。
如何使用ALPS实现慢速攻击
信而泰基于PCT架构的新一代基于B/S架构的测试软件ALPS( Application Layer Protocol Simulator ),支持包括数据、语音、视频各种类型的真实的应用层流量仿真,除了应用层流量,也支持漏洞攻击、恶意代码、DDoS等攻击的仿真,对于上述的慢速攻击,目前也已支持,同时支持设置各项配置参数:
SlowLoris(Slow HTTP Get)
可自行设定每隔多久发送一个HTTP头部,头部分多少次发送
Slow Body(Slow HTTP POST)
可自行设定HTTP发送间隔,以及自行定义Content Length长度、每次发送的payload内容。
Slow Read(Slow Read Attack)
可自行设置HTTP发送间隔,step为两个windows update报文中windows size减小的值,见Slow Read attack攻击原理部分的截图二
统计分析
信而泰ALPS L4-7测试平台支持慢速攻击的相关统计,其中包含session的统计项主要统计连接的帧数和帧速,包含throughput的统计项为攻击吞吐量相关。
Attack Client - Session和Attack Server -Session 主要统计TCP报文的收发情况;
Attack Client - HTTP xxx Attack Session 主要统计HTTP攻击报文的收发情况。
由于安全设备有阈值的设置,当攻击的速率超过设定阈值,攻击IP会被加入黑名单,此时攻击的TCP连接将无法完成。可以通过以上不同session的统计数据来确认是在HTTP攻击报文阶段被安全设备拦截还是TCP连接完全没建立成功
文章评论(0条评论)
登录后参与讨论