转载自:https://forum.huawei.com/enterprise/zh/forum.php?mod=viewthread&tid=367981
0x01 HTTP POST Flood攻击与防御
书接上回,本篇我们来介绍HTTP POST Flood攻击和HTTP慢速攻击的原理及防御方式,先来看HTTP POST Flood攻击。攻击者利用攻击工具或者操纵僵尸主机,向目标服务器发起大量的HTTP POST报文,消耗服务器资源,使服务器无法响应正常请求,这就是HTTP POST Flood攻击。
华为Anti-DDoS解决方案防御HTTP POST Flood攻击与防御GET Flood攻击类似,常用手段也是源认证,包括重定向认证和验证码认证。
重定向认证
Anti-DDoS系统代替服务器向客户端响应307状态码(针对POST请求方法的重定向),同时向客户端的浏览器注入Cookie,客户端再次发起请求时会在HTTP报头上附加Cookie信息,Anti-DDoS设系统通过验证Cookie信息的真实性来验证客户端。
1、当连续一段时间内去往目标Web服务器的HTTP POST请求报文超过告警阈值后,Anti-DDoS系统启动源认证机制。源认证机制启动后,Anti-DDoS系统将会代替服务器与客户端建立TCP三次握手。
2、Anti-DDoS系统拦截HTTP请求,代替Web服务器回应307状态码,并在响应头部附加上由客户端IP生成的Cookie。
3、如果这个源是虚假源,或者不支持完整HTTP协议栈的攻击工具,不会重新发起请求。
4、如果这个源是真实客户端,Anti-DDoS系统生成的Cookie会写入到浏览器中,并且客户端会重新发起请求,请求头部就会带有该Cookie信息。Anti-DDoS系统收到请求后,验证Cookie是否正确,如果正确则将该客户端的源IP地址加入白名单。然后Anti-DDoS系统会回应408状态码,表示请求超时,使客户端重新发起访问。
5、后续这个客户端发出的HTTP请求报文命中白名单直接通过。
我们结合一组抓包信息来看一下交互报文的具体情况。
1、Anti-DDoS系统代替Web服务器与客户端建立TCP三次握手,然后客户端发起访问请求。
2、Anti-DDoS系统代替Web服务器回应307状态码,同时在响应头部附加上由客户端IP生成的Cookie,然后双方关闭连接。
3、真实客户端会再次与Anti-DDoS系统建立TCP三次握手,并且会重新发起请求,请求头部就会带有Cookie信息。
4、Anti-DDoS系统收到请求后,通过验证Cookie来判定该客户端为真实客户端,将其IP地址加入白名单。然后Anti-DDoS系统会回应408状态码,表示请求超时,使客户端重新发起访问。
上面介绍的307重定向认证方式能够很好地防御HTTP POST Flood攻击,但是这种方式也具有一定的局限性。其一,依赖于客户端浏览器的Cookie的机制,受安全级别限制。如果客户端的浏览器安全级别较高而无法写入Cookie,会导致认证不通过;其二,第一阶段重定向结束后,需要客户端再次手动执行提交等操作,才能重新发起POST请求。
同HTTP GET Flood的防御方式相似,HTTP POST Flood的源认证防御也支持增强方式,即验证码认证。
验证码认证
此处的验证码认证与HTTP GET Flood中的验证码机制相同,Anti-DDoS系统要求客户端输入验证码,以此来判断请求是否由真实的用户发起。其弊端也是需要人机交互输入验证码,用户体验稍差一些。具体的工作原理请参考HTTP GET Flood攻击与防御部分中的介绍,此处不再赘述。
URI动态指纹学习和URI行为监测
防御HTTP POST Flood攻击时,也可以使用URI动态指纹学习和URI行为监测防御方式,作为源认证方式的补充,满足不同场景的需求。其防御原理我们在上面的HTTP GET Flood攻击与防御部分中已经介绍过,在此也不赘述了。
了解两种Flood类攻击后,下面我们来认识另外一种针对HTTP协议的DDoS攻击:慢速攻击。与Flood类攻击靠海量的数据洪流“淹没”目标服务器不同,慢速攻击反其道而行之,通过发送很少的数据来维持连接状态,持续消耗目标服务器的资源。
0x02 HTTP慢速攻击与防御
HTTP慢速攻击是利用HTTP协议的正常交互机制,先与目标服务器建立一个连接,然后长时间保持该连接不释放。如果攻击者持续与目标服务器建立这样的连接,就会使目标服务器上的可用资源耗尽,无法提供正常服务。
HTTP慢速攻击主要包括针对HTTP请求报文头部结束符的Slow Headers攻击,以及针对POST请求报文数据长度的Slow POST攻击。
Slow Headers
我们在HTTP协议基础部分中介绍HTTP请求报文时,提到过请求头部的后面会存在一个空行(结束符),其中包括回车符和换行符,告知服务器请求头部结束,后面不再有请求头。如果服务器没有收到这个空行则会一直保持连接。
Slow Headers攻击正是利用这一点,攻击者使用GET或POST请求方法与目标服务器建立连接,然后持续发送不包含结束符的HTTP头部报文,目标服务器会一直等待请求头部中的结束符而导致连接始终被占用。如果攻击者控制大量的僵尸主机向目标服务器发起这种攻击,将会导致服务器资源耗尽,无法正常提供服务。
如下图所示,正常的HTTP报文中请求头部的后面会有结束符0x0d0a(\r\n的十六进制表示方式),而攻击报文中不包含结束符,并且攻击者会持续发送不包含结束符的HTTP头部报文,维持连接状态,消耗目标服务器的资源。
Slow Headers攻击行为的特征比较明显,华为Anti-DDoS解决方案防御Slow Headers攻击时,会对HTTP报文进行检查。如果发现某个源发出的连续多个HTTP GET/POST请求报文的报文头中都没有结束符“\r\n”,则认为发生Slow Headers攻击,将该源IP地址加入黑名单。
Slow POST
Slow POST攻击利用的是POST请求方法,攻击者向目标服务器发送POST请求报文提交数据,数据的长度设置为一个很大的数值,但是在随后的数据发送中,每次只发送很小的报文,这样就是导致目标服务器一直等待攻击者发送数据。如果攻击者控制大量的僵尸主机向目标服务器发起这种攻击,将会导致服务器资源耗尽,无法正常提供服务。
如下图所示,Slow POST攻击报文中,POST请求头部的Content-Length关键字的值设置为8192,表示数据长度为8192字节,但是攻击者后续每次只发送1个字节的报文,导致连接一直被占用,消耗了服务器的资源。
华为Anti-DDoS解决方案防御Slow POST攻击时,防御方法也是对HTTP报文进行检查。如果发现某个源发出的连续多个HTTP POST请求报文的长度设置的很大,但是实际报文的数据部分长度都很小,则认为发生Slow POST攻击,将该源IP地址加入黑名单。
至此,我们讲解了HTTP协议的基础知识,并分析了针对HTTP协议的DDoS攻击方式以及防御原理,下一篇华安将给大家带来NTP攻击事件的解密,敬请关注。