声明
背景
漏洞扫描工具扫出“检测到目标主机可能存在缓慢的HTTP拒绝服务攻击”
检测到目标主机可能存在缓慢的HTTP拒绝服务攻击.png
Lighttpd 配置
参数配置
示意图
HTTP缓慢攻击
原理
HTTP 慢速攻击也叫 slow http attack,是一种 DoS 攻击的方式。由于 HTTP 请求底层使用 进行会话,因此如果中间件对会话超时时间设置不合理,并且HTTP在发送请求的时候采用慢速发 HTTP 请求,就会。如果发送大量慢速的 HTTP 包就会导致拒绝服务攻击DoS
目的
消耗服务器的连接和内存资源。
如果客户端持续建立这样的连接,那么服务器上可用的连接将一点一点被占满,从而导致DoS(拒绝服务)。
分类
1. slow headers
Web应用在,Web 服务器再没接收到 2 个连续的 \r\n
时,会认为客户端没有发送完头部,而持续的等客户端发送数据。
攻击者利用这点,发起一个HTTP请求,一直不停的发送HTTP头部,消耗服务器的连接和内存资源。
2. slow body(Slow HTTP POST)
攻击者发送一个 HTTP POST 请求,将,使得 Web 服务器或代理认为客户端要发送很大的数据,服务器会保持连接准备接收数据。
但是在随后的数据发送中,(比如10-100s发一个字节),这样导致服务器端一直等待攻击者发送数据。
3. show read
客户端与服务器建立连接并发送了一个HTTP请求,客户端发送完整的请求给服务器端,然后一直保持这个连接,以。
如很长一段时间客户端不读取任何数据,通过发送Zero Window到服务器,让服务器误以为客户端很忙,直到连接快超时前才读取一个字节,以消耗服务器的连接和内存资源。
防御手段
可对每秒钟http并发连接数进行检查。
对web服务器的http头部传输的最大许可时间进行限制。
示例
- 工具 slowhttptest,具体安装步骤参考Slowhttptest安装步骤
- 测试
slowhttptest -c 400 -H -i 10 -r 200 -t GET -u 目标url -x 24 -p 3 -l 200
常用参数:
- -c 400: 总连接数
- -H: slowloris 模式,表示test type为Slow headers
- -B: 表示Slow body
- -X: 表示Slow read
- -i 10: 发送数据间的间隔10s
- -r 200: 200个连接每秒
- -t GET: 使用GET请求方式
- -u url: 目标url格式为具体的接口url
- -x 24: 发送的最大数据成都24
- -p 3: 等待3秒来确定Dos攻击是否成功
-
-l 200: 测试持续时间
测试结果为“Exit status: No open connections left",代表无此漏洞。
测试结束后connected数量较多,closed数量很少或0,说明之前建立的400个慢速攻击测试连接没有关闭,存在漏洞。
- 附上个类型攻击的结果
- slow headers
slowhttptest -c 400 -H -i 10 -r 200 -t GET -u 目标url -x 24 -p 3 -l 200
- slow body
slowhttptest -c 400 -B -i 10 -r 200 -s 20000 -t GET -u 目标url -x 24 -p 3 -l 200
- slow read
slowhttptest -c 400 -X -i 10 -r 200 -s 20000 -t GET -u 目标url -x 24 -p 3 -l 200