引言:想象一家火爆的餐厅:虽然满座,但一半顾客故意拖延用餐——每10分钟才吃一粒米。新顾客无法入座,餐厅看似“满负荷”却实际瘫痪。这就是HTTP慢速攻击的本质:用极低速度消耗服务器连接资源,导致正常用户被拒绝服务(DoS)。
一、攻击原理:HTTP协议的“漏洞利用”
核心逻辑
HTTP协议要求服务器必须完整接收请求才能处理。攻击者建立连接后:
-
不发送完整请求,而是以“挤牙膏”方式传输数据(如每10秒发送1字节); -
持续保持连接,耗尽服务器的并发连接池; -
最终服务器资源枯竭,拒绝新请求。
📌 关键点:攻击带宽成本极低!1台普通电脑即可瘫痪大型服务器。
二、四大攻击类型详解(附原理图)
1. Slow Headers(慢速头攻击)
原理:发送不完整的HTTP头部(缺失结束符rnrn
),让服务器无限等待。
rn
关键陷阱:服务器为每个连接分配内存(通常≥4KB),10000个连接即消耗40MB以上资源
2. Slow Body(慢速请求体攻击)
原理:
声明超大Content-Length
(如100MB),但每10秒只发1字节,使得该连接一直保持存活,消耗服务器的连接和内存资源。
3. Slow Read(慢速读取攻击)
原理:
HTTP客户端在接收响应时故意拖延,通过发送Zero Window
(零窗口)信号给服务端,假装网络拥堵,从而让服务器误识认为客户端很忙,直到连接快超时前才读取一个字节,以消耗服务器的连接和内存资源。
特点:服务器需持续维护连接状态,内存被榨干。
通过如下抓包数据可以看出,服务器收到了客户端的 ZeroWindow
消息(表示自己没有缓冲区接收数据了),接着服务器便持续向客户端发出 ZeroWindowProbe
包,询问客户端是否可以继续接收数据。
4. Range Attack(范围攻击)
原理:
Range Attack是一种针对WEB服务器的DoS攻击,利用Apache服务器处理HTTP Range头部字段漏洞,通过多个字节范围请求使服务器进行复杂计算和资源分配,从而导致服务器资源消耗增加甚至崩溃。
HTTP Range头部允许客户端请求特定的字节范围。例如:
GET /file.txt HTTP/1.1HOST: example.comRange: bytes=0-100,200-300,400-500,600-700,...
特点:
攻击在HTTP Range头部中指定大量重叠或无序的字节范围,从而导致服务器进行复杂的计算和资源分配。
三、防御实战:构建四重防护体系
1. Web服务器加固配置(Nginx示例)
http { # 关键防御参数 client_header_timeout 5s; # 请求头超时 client_body_timeout 5s; # 请求体超时 keepalive_timeout 10s; # 长连接超时 reset_timedout_connection on; # 自动重置超时连接 # 连接限制策略 limit_conn_zone $binary_remote_addr zone=perip:10m; limit_conn perip 50; # 单IP最大连接数}
2. 专用防护设备策略
3. 云防护方案
|
|
|
|
---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
4. 企业级防护进阶方案
深度检测算法示例:
defdetect_slow_attack(conn):if conn.duration > 300: # 超长连接if conn.bytes_sent < 512: # 发送数据极少if conn.req_rate < 10: # 请求速率极低returnTrue# 判定为攻击returnFalse
应急响应清单:
-
实时监控连接池使用率(设置>80%告警) -
自动启动IP临时黑名单(如fail2ban工具) -
切换备用防护策略(启用挑战验证机制) -
联系ISP进行流量清洗
四、自测工具:slowhttptest
slowhttptest默认提供了针对以上四种攻击的选项:
-
-H
:慢速头部攻击(Slowloris,默认模式) -
-B
:慢速主体攻击(R-U-Dead-Yet) -
-R
:范围攻击(Apache Killer) -
-X
:慢速读取攻击(Slow Read)
1. 安装工具
如果是ubuntu系统可以直接执行命令apt-get install slowhttptest
安装。工具详细参数介绍如下:
-
通用参数选项:
-
-c connections
:目标连接数(默认值:50) -
-i seconds
:后续数据发送的时间间隔(秒)(默认值:10) -
-l seconds
:测试持续时间(秒)(默认值:240) -
-r rate
:每秒建立的连接数(默认值:50) -
-s bytes
:Content-Length
头部的值(如果需要)(默认值:4096) -
-t verb
:请求中使用的 HTTP 方法,默认为慢速头部和响应使用GET
,慢速主体使用POST
-
-u URL
:目标的绝对 URL(例如:http://localhost/
) -
-x bytes
:每次随机生成的名称/值对的最大长度(默认值:32) -
-f content-type
:Content-Type
头部的值(默认值:application/x-www-form-urlencoded
) -
-m accept
:Accept
头部的值(默认值:text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
) -
报告相关参数项:
-
-g
:生成包含套接字状态变化的统计信息(默认关闭) -
-o file_prefix
:将统计输出保存到file.html
和file.csv
文件中(需要启用-g
) -
-v level
:设置详细程度级别(0-4):致命错误、信息、错误、警告、调试
2. 模拟攻击
可以采用如下四个攻击模式验证目标应用是否存在HTTP慢速攻击。
# 1.Slowloris攻击slowhttptest -c 1000 -H -g -o slow_header_report -i 100 -r 200 -t GET -u http://yoursite.com -x 20 -p 3# 2.R-U-Dead-Yet攻击slowhttptest -c 1000 -B -g -o slow_body_report -i 100 -r 200 -s 8192 -t GET -u http://yoursite.com -x 20 -p 3 # 3.Slow Read攻击slowhttptest -c 1000 -X -g -o slow_read_report -r 10000 -w 10 -y 20 -n 5 -z 30 -u http://yoursite.com -p 3 -l 400# 4.Appache Killer攻击 slowhttptest -c 1000 -R -u http://yoursite.com -t HEAD -a 10 -b 3000 -r 600
注意:测试时需确保获取了合法授权。
3. 观测指标:
-
服务是否持续可用(Service Available: Yes); -
连接是否在超时后自动释放。
五、总结:防御关键点
-
超时时间是生命线:务必低于30秒; -
监控连接状态:突发长期空闲连接即告警; -
混合防护:配置调优+流量清洗+架构优化。
🔑 核心认知:慢速攻击不是“洪水猛兽”,而是“滴水穿石”。防御的核心在于主动切断异常连接,而非被动增加资源!
参考资料:
-
CC攻击的变异品种——慢速攻击.pdf: https://url25.ctfile.com/f/1848625-1520222680-1b0fed?p=6277 (访问密码: 6277)
免责声明:本文技术方案需根据业务场景测试调整,盲目配置可能导致服务中断。本文仅供学习交流,使用工具时需遵守相关法律法规,且勿用于非法用途。
关注我,带你用“人话”读懂技术硬核! 🔥
原文始发于微信公众号(全栈安全):什么是HTTP慢速攻击?看不见的“温水煮青蛙”,如何瘫痪你的服务器?
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论