慢速攻击把连接保持时间拉长到极限,核心手法就是利用TCP长连接与Keep-Alive机制,用极低速率发送不完整HTTP数据包,让服务器始终认为连接处于“活跃”状态,直到并发连接槽被全部占满。
这种攻击方式不靠流量,不靠数据量,而是靠“耐心”和“时间”,它攻击的并非带宽,而是服务器最大的短板并发连接数上限,行业内常说的Slowloris、Slow POST、Slow Read,本质上都是围绕“慢”字做文章,目的只有一个:把每一个TCP连接都变成僵尸连接,赖在服务器上不走。
慢速攻击怎么让连接悬挂在服务器端
一个正常的HTTP请求,从建立连接到关闭连接,通常在几十毫秒到几秒内完成,慢速攻击恰恰相反,它故意篡改这个正常流程,把请求拆成碎片,一片一片地“挤牙膏”式发送。
请求头“半遮半掩”是Slowloris攻击的拿手好戏
Slowloris攻击方式下,攻击者建立TCP连接后,发送一个包含GET / HTTP/1.1和一堆自定义头字段(如User-Agent、Accept等)的请求头,按理说,请求头必须以rnrn结束,服务器才能判断请求头已经完整接收,慢速攻击就卡在这个节骨眼上不发送结束符,只发送请求头的一部分,比如每30-60秒才补发一个字节的数据。
服务器那边一看:连接还在,数据还没传完,不能关闭,于是每个连接都被这样“吊着”,占用着一个线程或内存块,攻击者多开几千条这样的连接,服务器就只剩下“等待”的份了。
Keep-Alive从网站加速器变成了攻击帮凶
HTTP/1.1默认开启Keep-Alive,让一个TCP连接可以复用多次请求,减少TCP三次握手的开销,慢速攻击正好借力打力,攻击者在Keep-Alive连接上,持续发送Connection: keep-alive头,服务器就会默认这个连接还有后续请求,不会因为空闲而主动断开。
行业共识认为,在默认Keep-Alive超时(通常为60-300秒)的设置下,攻击者只需维持发送间隔低于超时时间,就能无限期霸占连接,就算服务器设置了超时自动断开,攻击者也可以调低发送间隔,始终抢在超时前“续命”。
Slow POST与Slow Read:把延时战术用到极致
Slow POST攻击则把“慢”发挥在请求体上,攻击者发送完整的请求头,内容头指明Content-Length: 1000,然后以每50秒10字节的速度发送POST数据体,服务器傻乎乎地等满1000字节才处理,这段时间里连接就被硬生生占住。
Slow Read攻击则是反向操作服务器要发送一个较大的响应体给客户端,攻击者只接收一小部分数据,还不断缩小TCP接收窗口,迫使服务器在发送缓冲区堆积数据,最终耗尽内存。
| 攻击类型 | 针对环节 | 拉长连接的核心手段 |
|---|---|---|
| Slowloris | 请求头 | 不发送结束符,定期补发字节 |
| Slow POST | 请求体 | 声明大Content-Length但极慢传输 |
| Slow Read | 响应阶段 | 缩小接收窗口,阻塞服务器发送 |
slowhttptest使用教程:实测连接保持时间参数怎么调
在安全圈里,做慢速攻击验证用得最多的免费工具是slowhttptest,这个工具长居于Kali Linux,也是很多安全团队做渗透测试的首选。
Slowhttptest的核心参数拆解
要拉长连接保持时间,工具参数里有几个关键点必须搞清楚:
-H:选择Slowloris模式,攻击请求头-B:选择Slow POST模式,攻击请求体-R:选择Slow Read模式,攻击响应阶段-c:目标并发连接数,建多少条慢连接-i:每个连接发送数据的间隔秒数,这是决定连接“存活时长”的核心参数-r:每秒新建连接的速率-l:攻击持续时间,单位秒-s:每次发送的数据包大小(字节)-k:每连接复用Keep-Alive的次数,设为数值大一些能更长地赖住连接
实测中,把-i设为10秒,-s设为1字节,Keep-Alive次数设为上限值,这样每个连接都能在低带宽消耗下长时间悬挂。
实测命令与连接保持时间的极限拉扯
验证1000个并发连接如何占用目标服务器30分钟,实际操作为:
slowhttptest -H -c 1000 -r 50 -l 1800 -i 10 -s 512 -t GET -u http://目标地址 -x 24 -p 3 -n 5 -k 3
这个命令中,-l 1800指定攻击持续30分钟,-i 10每10秒发一次数据,服务器端只要超时阈值大于10秒,连接就不会断开。要拉到极限时长,就不断拉大-l值,同时拉长-i间隔试探服务器超时底线,你可以在目标服务器上设置不同的keepalive_timeout,用工具逐步测试,找到“即将断开但还没断开”的临界点,从而掌握防御方的超时配置。
慢速攻击的连接保持时间并没有绝对上限,它完全取决于服务器的超时设定与攻击频率之间的博弈,理论上,如果服务器没有设置超时上限,攻击连接就可以无限期保留,直到机器宕机。
自建实验环境复现攻击链路
在Linux服务器上用Apache或Nginx搭一个测试环境,通过netstat -an | grep :80 | grep ESTABLISHED | wc -l
观察连接数变化,就能直观看到:
- 正常情况下,连接数量波动不大
- 攻击开始后,连接数逐步攀升,趋于稳定后占满`
- 当连接数触顶时,正常的访客连接无法建立,表现为网站“假死”
慢速攻击防御方法:服务器端如何提前斩断“僵尸连接”
防御慢速攻击的关键,不在于识别攻击流量因为攻击流量看起来跟正常请求无异而在于加强服务器的超时管理和连接回收机制。
Web服务器层:调低超时与请求头限制
Nginx层面,可调整的参数集中在http或server配置块中:
client_header_timeout 10s;
client_body_timeout 10s;
keepalive_timeout 15s;
keepalive_requests 100;
large_client_header_buffers 4 8k;
client_header_timeout:接收请求头的超时时间,调低可让“只发半个头”的慢连接快速超时client_body_timeout:接收请求体的超时时间,针对Slow POSTkeepalive_timeout:空闲连接保持时间,压缩到15秒以内能明显抑制僵尸连接keepalive_requests:限制单个Keep-Alive连接上的最大请求数large_client_header_buffers:防止超长请求头占用大量缓冲
Apache层面,mod_reqtimeout模块是天然克星:
RequestReadTimeout header=20-40,MinRate=500 body=30,MinRate=500
这段配置让Apache在20秒内没收到一个完整请求头,或者请求体速率低于500字节/秒,就主动断开连接。
连接数限制:用“单IP配额”锁定异常源头
所有的慢速攻击都是靠数量堆出来的,限制单个IP的最大并发连接数,能在攻击发生早期就掐住火苗。
Nginx中按IP做并发限流:
limit_conn_zone $binary_remote_addr zone=perip:10m;
server {
limit_conn perip 50;
}
这样一来,一个IP最多只能同时建立50条连接,攻击者即使伪造大量IP,也要借助僵尸网络,消耗自己的资源来对抗。
应用层防护:WAF设备与CDN的“连接卸载”机制
把流量清洗放到云端,让WAF或CDN先吞下所有连接,源站只对可信节点开放访问,攻击打过来时,CDN节点承载慢速连接,回源流量不会拥堵。
常规WAF的慢速攻击防护规则通常覆盖:
- 单源IP的连接速率异常检测
- HTTP头部的超时异常检测
- Content-Length与真实发送字节数的差值监控
- 低速率长连接会话数量统计
百度高防慢速攻击防护价格差异:按量计费与包年包月怎么选
对于中小站点,攻击规模一般在几百到几千并发连接,选择云WAF的按量付费模式更划算,业务量较大或有合规需求的站点,签订包年防护套餐更省心。
百度智能云的高防IP产品,慢速攻击防护一般包含在DDoS高防的“CC防护”模块中,价格按防护能力分档。防御50Gbps以下规模的攻击与防御100Gbps以上时,月费可能相差数倍,实际采购中,更多取决于业务所在区域和具体防护规格,建议先拿样本流量做防护测试再决定采购方案。
慢速攻击为什么会占满全部连接资源而不自爆
有人可能会问:这些连接占着不干活,服务器怎么会不主动清理?真相在于服务器设计初期优先保证“不误杀正常用户”,导致安全机制不敢激进处理慢请求。
并发连接池的“水槽效应”
每台服务器能同时处理的并发连接数,受制于操作系统的文件描述符限制、内存池大小以及Web服务的线程模型,一个连接即使不传输数据,也要占用一个文件描述符和一部分内存,慢速攻击把这些资源一个个占完,新来的正常请求就只能排队等待连接释放。
超时检测的“两难困境”
超时设得太短,容易误杀手机弱网用户、网络拥塞地区的真实访客;设得太长,又给慢速攻击钻了空子,大多数服务器的默认超时阈值相对保守,给了攻击者可乘之机。
慢速攻击不只是web服务器的专属担忧
除Web服务器外,数据库连接池、反向代理、邮件服务器同样存在类似问题,只要服务依赖“等待客户端数据”这种长连接模式,就天然存在被慢速攻击击穿的风险,把安全巡检的范围扩大到所有对外服务的端口,是防御工作中比较容易遗漏但非常重要的部分。
慢速攻击连接保持时间常见问题
慢速攻击影响服务器CPU吗?为什么服务器CPU总是跑不满
慢速攻击几乎不消耗服务器CPU资源,因为攻击不涉及复杂计算或大量数据处理,它消耗的是连接资源、文件描述符和内存,攻击发生时CPU占用通常正常,但网站已经无法访问,这是慢速攻击区别于其他DDoS攻击的典型特征。
如果服务器用HTTPS协议,慢速攻击还能生效吗
能,HTTPS虽然加密了内容,但TCP连接管理和HTTP请求的解析逻辑没有变化,攻击者照样可以建立TLS连接后慢慢发送数据,TLS握手本身反而增加了连接占用的资源开销,让攻击效果更明显。
设置多短的keepalive_timeout才算安全
如果业务以短请求为主,建议将keepalive_timeout设为5-10秒;如果业务中包含较多长轮询或WebSocket场景,需要单独为这些路径设置更长的超时,而普通静态资源请求路径保持短超时即可,核心原则是:在满足正常业务的前提下,越短越安全。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/636421.html





