恶狗吐槽
最近刚入职一个新的安服工作,闲了几天上面给安排下来第一个正经活,对一个省内站点进行一次慢速攻击测试 之前没接触过 慢速攻击,理解错了意思,就当是低频率发起请求的漏洞挖掘搞了
慢速攻击
简介
一种Dos攻击方式 诱因:TCP超时时间设置的不合理 利用方式:攻击者可以再发送HTTP请求时采用缓慢发送的方式,导致占用一个HTTP链接会话 危害:导致服务器的连接资源和内存资源被大量消耗,进而构成Dos攻击
常见的慢速攻击手段
1.slow headers
原理:web服务器再处理HTTP请求前要接收完所有HTTP头部,如果服务器没有收到两个连续的\r\n时,会认为客户端没有发送完头部(HTTP协议规定,HTTP头和HTTP Body间要有两个\r\n)而持续等待客户端发送数据 攻击手法:发起一个HTTP请求,并且一直不停的发送HTTP头部,消耗服务器的内存资源
2.slow Body
攻击手法:构建异常的数据包,将HTTP头中的Content-Length字段设置未一个很大的值,使web服务器认为客户端要发送很大的数据包,但是攻击者在发送数据的过程中,每次只发送很小的报文,导致服务端一直在等待客户端发送数据
3.slow read
攻击者发送HTTP请求,但当服务器将响应包发回攻击者时,攻击者以慢速读取响应数据,直到快超时才读取很小的数据
利用工具
slowhttptest 项目地址:https://github.com/shekyan/slowhttptest
-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: 测试持续时间
# 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
测试结果为“Exit status: No open connections left",代表无此漏洞。
nginx防护
1.keepalive_timeout
该参数指定了TCP链接的最多保持时间, 在客户端和服务器建立TCP连接后,如果开启keepalive机制,那么客户端和服务器就可以一直发送HTTP数据包,而不必频繁的建立或拆除TCP连接,如果客户端长时间不发送HTTP数据包,那么服务器就会发送FIN TCP数据包,关闭TCP连接。
2.client_body_timeout
该参数是客户端与服务器建立连接后发送request body的超时时间,如果客户端在该参数设置的时间内没有发送任何内容,Nginx服务器将返回408
3.client_header_timeout
该参数是客户端向服务器发送一个完整的request header的超时时间,如果客户端在该时间内没有发送完一个完整的request header,Nginx将返回408
4.send_timeout
该参数为服务端向客户端传输数据的超时时间,如果设置了该参数,那么服务器就必须在规定的时间内向客户端传输完所有数据
5.client_body_buffer_size
该参数可以设置请求主体缓冲区大小,如果主体超过该参数规定的大小,则完整主体或主体的一部分会被写入临时文件 ( 该设置仅在Nginx启动内存缓冲区时生效 )
6.client_max_body_size
该参数可以设置Nginx可以处理的最大的请求主体大小,如果客户端的请求超过该参数规定的大小,那么Nginx将会回复413
7.client_body_in_single_buffer
该参数如果设置为on,那么就会使得Nginx将完整的请求主体存储在单个缓冲区中,并且会优化读取request body中变量时涉及到的I/O操作。该值默认情况下为off。







