提到DDoS攻击,可能大家想到的是大流量高新建,如Cloudflare在2023 年第一季度 DDoS 威胁报告中指出,最大的一次攻击峰值高达每秒7100万个请求(RPS),另外观察到高达1.3Tbps的单次DDoS攻击。实际上针对HTTP服务器,有另一种DDoS攻击方法,反其道而行之,这种攻击方法称之为慢速攻击。
HTTP慢速攻击是利用HTTP正常交互流程,以极低的速度往服务器发送HTTP请求,长时间占用HTTP服务器的资源而不释放,当HTTP服务器的并发连接数达到上限时,服务器将无法接受新的请求,从而导致拒绝服务。
目前常见的HTTP慢速攻击主要分为以下三种:
Slowloris(slow headers)
攻击原理
客户端每隔一段时间如5s发送一个HTTP头部,由于没有 \r\n\r\n(0d0a0d0a)结尾,服务端认为头部没有传送完成,会一直等待客户端发送数据,连接一直被占用。当这种请求占用完服务端的所有资源后,该服务端将无法提供正常的服务。
Slow HTTP POST(Slow Body)
攻击原理
将Content-Length设置为一个较大的值(如抓包中的2000字节),然后以每隔一段时间去发送很小的内容(如抓包中每次发送一个test1234),从而和服务器保持长时间连接,当这种攻击数量大的时候,服务器就会拒绝服务,从而导致正常业务无法进行。
Slow Read attack
攻击原理
客户端发送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,则主动断开连接,要求客户端重连。
由于安全设备有阈值的设置,当攻击的速率超过设定阈值,攻击IP会被加入黑名单,此时攻击的TCP连接将无法完成。可以通过以上不同session的统计数据来确认是在HTTP攻击报文阶段被安全设备拦截还是TCP连接完全没建立成功