收到一份来自联通安全部门的漏洞报告,发现我们备案的的某个ip的80存在缓慢的http连接漏洞存在,可被利用导致web应用拒绝服务。
什么是slowhttp攻击,他的原理是什么呢?
慢速HTTP拒绝服务攻击经过不断的演变和发展,主要有三种攻击类型,分别是Slow headers、Slow body、Slow read。以Slow headers为例,Web应用在处理HTTP请求之前都要先接收完所有的HTTP头部,因为HTTP头部中包含了一些Web应用可能用到的重要的信息。攻击者利用这点,发起一个HTTP请求,一直不停的发送HTTP头部,消耗服务器的连接和内存资源。抓包数据可见,攻击客户端与服务器建立TCP连接后,每40秒才向服务器发送一个HTTP头部,而Web服务器再没接收到2个连续的\r\n时,会认为客户端没有发送完头部,而持续的等等客户端发送数据。如果恶意攻击者客户端持续建立这样的连接,那么服务器上可用的连接将一点一点被占满,从而导致拒绝服务。这种攻击类型称为慢速HTTP拒绝服务攻击。
知道了诱因,那么对症下药即可:1设置服务器超时连接时间,不能太长。2每个源IP最大连接数。 下药之前,我们先来复现一下这个漏洞,同时各位也可以简单测试一下自己的web服务器有没有抗这类DOS的能力。
gihub上面有这个测试工具,下载安装即可https://github.com/shekyan/slowhttptest.git
执行命令 slowhttptest -c 18000 -H -g -o my_header_stats -i 10 -r 500 -t GET -u 要测试的域名或者ip -x 24 -p 3
确实打不开目标网站了,同时抓包分析。可以看到确实占用了大量的连接,而且每个连接数据包都很小。
这个漏洞IP对应的web服务器是我们自己的测试服务器,web代理服务器为apache。就可以用qos.so的这个模块来控制访问。 单IP最大连接数400,超时时间3S。 因为测试环境自己用iptables做的简单防火墙功能,没有硬件防火墙。
如果你有AF那么更简单了,在策略里面选择并发连接数限制,根据需求设置合适的即可。
最后再次测试,发现连接都被关闭了,slowhttp防御成功。
|