一说起慢速攻击,就要谈谈它的成名历史了。HTTP Post慢速DoS攻击第一次在技术社区被正式披露是2012年的OWASP大会上,由Wong Onn Chee 和 Tom Brennan共同演示了使用这一技术攻击的威力。
这个攻击的基本原理如下:对任何一个开放了HTTP访问的服务器HTTP服务器,先建立了一个连接,指定一个比较大的content-length,然后以非常低的速度发包,比如1-10s发一个字节,然后维持住这个连接不断开。如果客户端持续建立这样的连接,那么服务器上可用的连接将一点一点被占满,从而导致拒绝服务。
和CC攻击一样,只要Web服务器开放了Web服务,那么它就可以是一个靶子,HTTP协议在接收到request之前是不对请求内容作校验的,所以即使你的Web应用没有可用的form表单,这个攻击一样有效。
在客户端以单线程方式建立较大数量的无用连接,并保持持续发包的代价非常的低廉。实际试验中一台普通PC可以建立的连接在3000个以上。这对一台普通的Web server,将是致命的打击。更不用说结合肉鸡群做分布式DoS了。
鉴于此攻击简单的利用程度、拒绝服务的后果、带有逃逸特性的攻击方式,这类攻击一炮而红,成为众多攻击者的研究和利用对象。
2)慢速攻击的分类Apache服务器现在使用较多的有三种简单防护方式。
mod_reqtimeout:Apache2.2.15后,该模块已经被默认包含,用户可配置从一个客户端接收HTTP头部和HTTPbody的超时时间和最小速率。如果一个客户端不能在配置时间内发送完头部或body数据,服务器会返回一个408REQUEST TIME OUT错误。配置文件如下:
< IfModule mod_reqtimeout.c >RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500
< /IfModule >
mod_qos:Apache的一个服务质量控制模块,用户可配置各种不同粒度的HTTP请求阈值,配置文件如下:
< IfModule mod_qos.c >
/# handle connections from up to 100000 different IPsQS_ClientEntries 100000
/# allow only 50 connections per IPQS_SrvMaxConnPerIP 50
/# limit maximum number of active TCP connections limited to 256MaxClients 256
/# disables keep-alive when 180 (70%) TCP connections are occupiedQS_SrvMaxConnClose 180
/# minimum request/response speed (deny slow clients blocking the server, keeping connections open without requesting anythingQS_SrvMinDataRate 1501200
< /IfModule >
mod_security:一个开源的WAF模块,有专门针对慢速攻击防护的规则,配置如下:
SecRule RESPONSE_STATUS “@streq 408” “phase:5,t:none,nolog,pass, setvar:ip.slow_dos_counter=+1, expirevar:ip.slow_dos_counter=60, id:’1234123456′”
SecRule IP:SLOW_DOS_COUNTER “@gt 5” “phase:1,t:none,log,drop,
msg:’Client Connection Dropped due to high number of slow DoS alerts’, id:’1234123457′”
传统的流量清洗设备针对CC攻击,主要通过阈值的方式来进行防护,某一个客户在一定的周期内,请求访问量过大,超过了阈值,清洗设备通过返回验证码或者JS代码的方式。这种防护方式的依据是,攻击者们使用肉鸡上的DDoS工具模拟大量http request,这种工具一般不会解析服务端返回数据,更不会解析JS之类的代码。因此当清洗设备截获到HTTP请求时,返回一段特殊java script代码,正常用户的浏览器会处理并正常跳转不影响使用,而攻击程序会攻击到空处。
而对于慢速攻击来说,通过返回验证码或者JS代码的方式依然能达到部分效果。但是根据慢速攻击的特征,可以辅助以下几种防护方式:
1、周期内统计报文数量。一个TCP连接,HTTP请求的报文中,报文过多或者报文过少都是有问题的,如果一个周期内报文数量非常少,那么它就可能是慢速攻击;如果一个周期内报文数量非常多,那么它就可能是一个CC攻击。
2、限制HTTP请求头的最大许可时间。超过最大许可时间,如果数据还没有传输完成,那么它就有可能是一个慢速攻击。