应用层防护识别慢速与分块恶意请求,核心在于放弃单一报文检测,转向基于会话行为的全链路建模,用动态基线替代静态阈值。
慢速攻击不靠流量洪峰取胜,它靠的是“拖”和“等”,分块请求恶意变种不靠超大payload突破,它靠的是“拆”和“藏”,面对这两种藏在正常行为阴影里的对手,传统基于规则和固定阈值的WAF容易失效,真正的破解点在于对HTTP协议生命周期中每个细节的量化判断与对异常节奏的精准捕捉。
为什么慢速与分块请求能穿透传统WAF
传统WAF设备习惯盯着单个HTTP包的大小、频率和特征签名,慢速攻击并不制造高频访问,它建立连接后慢吞吞地挤牙膏式发数据,单个包看起来完全合规,从流量总量看也很难触发限速阈值,业内专家指出,一个成熟的Slowloris攻击脚本,每秒可能只传输一个字节,这种速率低于绝大多数安全设备的统计采样粒度,自然容易漏过。
分块恶意请求的问题出在另一面,它利用HTTP/1.1的Transfer-Encoding: chunked协议机制,将恶意payload拆解成多个小块,每块独立发送,块与块之间还有可变延时的间隔,协议本身允许这种传输方式,那WAF如果只解包不重组,或者只观察单块内容,就会把恶意载荷当作正常碎片放行,等所有分块发完后在服务端拼合,攻击才真正显形。
两者的共同点在于:攻击特征从“单次报文的静态签名”迁移到了“整条会话的动态时序”,防护视角如果还停留在五元组或单包过滤上,就会出现结构性盲区。
识别慢速请求的核心行为指纹
慢速攻击虽然变种多,但本质上都是把正常TCP连接的行为曲线图拉长压扁,识别它们不能只看速度,要把几个维度叠加起来交叉验证。
连接持有时间与读写比例的失衡
正常浏览器请求一个页面,从发送请求到接收完响应,周期是秒级甚至毫秒级,慢速攻击会刻意拉长这个周期,一个会话如果连接存活时间超过120秒,且请求头一直没发完,或者响应接收完成后连接迟迟不释放,这本身就是一个危险信号。
更关键的是读写比例,合法用户在请求阶段写得快读得快,下载大文件时可能是读多写少,但写数据段是连续的,恶意慢速请求经常保持一个打开的写通道,但写入速率长期低于每30秒1KB,这不符合任何正常人工操作或脚本行为。
半开放状态与服务器资源消耗的异常关联
当慢速攻击消耗服务器连接池时,防护侧观察到的现象是:大量TCP连接的接收缓冲区长期处于“非满非空”的中间态,连接状态卡在ESTABLISHED却无实质数据流动,配合服务端监控能发现,活跃连接数在增加,但CPU利用率和带宽吞吐都在低位徘徊,这种“连接堆积但资源空转”的特征,是区分真实高并发与慢速攻击的重要参考。
针对协议字段的微小抖动
部分慢速攻击为了维持连接,会定期发送一些控制报文,比如HTTP Keep-Alive、ACK包或者零窗口通告,这些字段本身没有攻击性,但它们出现的频率和触发场景很可疑,防护设备如果能把每个连接的关键事件(接收窗口变化、数据包到达间隔)做时间线记录,就能发现这种“心跳式”的规律抖动,这是机器行为与人类操作的一个可量化差异。
有效识别分块流量中的恶意载荷
处理分块流量的难点在于,防护设备必须先做完整的状态机切换,跟着每个chunk的边界走,才有资格去谈检测,很多传统WAF只能识别第一块或者固定大小内的数据,攻击者把关键payload放在后续分块中就能绕过。
分块重组策略:不像代理,更像审计员
像是nginx环境中的防护,建议开启client_body_buffer_size与client_max_body_size的统一管理,当请求体超过声明的Content-Length但分块仍在继续时,立即中断连接,这不需要HW设备,直接在Nginx层做配置调整就能挡掉一批不规范的分块洪水。
拖拽时间窗口锁定跨块攻击签名
在某渗透测试中,一个攻击请求把SELECT拆成SEL、ECT并分别放编号为奇偶的chunk块里,且块间隔控制在2秒,目标是让任何单一窗口内的内容看起来都是无害字符,防护策略用动态窗口窗口大小并不固定,而是根据块到达速率实时调整,速率越慢窗口撑得越大,确保跨块的语义上下文能拼接上,这才是检测拆包攻击的正确姿态。
加深权重:慢速攻击与分块攻击的组合变体
2026年攻防演练中更危险的是两者叠加,攻击者先发起慢速连接占据连接池,同时在存活连接上传输分块请求,将攻击语句逐个字符地塞进不同的分块段中,并且刻意模拟正常用户阅读文章的时间间隔(例如每块间隔3到8秒随机化),这种组合不仅让传统WAF的特征库失效,也让行为分析系统因为采样时间过短而误判为低风险。
识别组合变体,逻辑侧必须关注两个宏观指标:连接的存活时间与服务端已接收数据量的比值,比率越高,疑似程度越大,正常连接在长生命周期内会交换大量数据,而恶意连接在相同时间内拿到的请求体可能不到正常值的十分之一,防护策略上,设置两个疲软阈值:单个连接最长可存活时间(比如600秒),和存续期间内最小字节吞吐(比如每秒不少于2字节),任一指标越界,在尽力放行状态下转人工审计或者直接重置连接。
动态指纹模型与防护落地实操
真正有效的识别能力在于构建一套会话级动态指纹,它不追求识别每一个数据包的“长相”,而是记录每个连接从建立到关闭的完整行为轨迹。
建立指纹的维度建议包括:
- 数据包到达间隔的方差(方差大且均值大,异常概率高)
- 单连接生命周期内的总字节数与总时间比
- 零窗口通告频率、重传率与乱序率
- 请求方法、URI长度在会话内的变异跨度
- 服务端响应写入阶段的延迟变化趋势
- 发送ACK的频率是否与数据发送频率严重脱节
构建完指纹模型后,部署应采用串联检测+旁路修正结构,串联设备负责按指纹快速拦截高危连接,旁路检测引擎则负责处理边缘case,通过镜像流量做长时间窗口的关联分析,定期把新发现的恶意指纹回传给串联设备,部署拓扑可参考,Web业务前置nginx作为流量入口,在nginx层编写简单的Lua脚本采集连接时间与速率,并将数据发送到后又侧的分析平台进行联动。
具体到Nginx落地配置,有两处关键优化:client_header_timeout建议调整为15秒,超出则直接返回408;keepalive_timeout建议缩短到20秒,使每个空闲连接更快释放,启用limit_req_zone并设置burst参数用于控制瞬时缺口,这能有效缓解慢速连接占用连接数但低速率发送的消耗。
分块传输绕过WAF怎么处理
分块传输应用的争议一直存在,目前主流云WAF和自建网关都已兼容HTTP/1.1分块解码,但中小型企业在自建防护时会遇到兼容性问题,处理分块绕过时,按照下面顺序排查:
- 确认网关层是否已正确配置
chunked_transfer_encoding的透传,部分防护默认拦截所有分块请求,这会误伤正常应用。 - 对包括分块内容在内的整体数据做完整检测,而不仅仅是首个分块,开源的
mod_security在处理分块时推荐设置SecHttpOnly策略并降低SecRequestBodyLimit到可复核的阈值。 - 针对扫描器类的分块探测,可以在返回头中检测
Content-Encoding与Transfer-Encoding同时出现的风暴行为,异常时直接断开。
企业内部应用强烈建议先做一次分块流量沙盒验证,确认业务侧是否真的依赖chunked编码,如果只是标准表单提交,完全可以在业务层明确禁止Transfer-Encoding: chunked,从应用源头堵死。
应用层防护的盲区与补充思路
应用层防护不是万能的,合理认知盲区有助于构建互补防线,当前最典型的盲区在加密流量环节,AWS、简米云上的HTTPS流量占主流,很多防护设备对SSL解密后的明文检测能力不足,攻击者把慢速或分块请求放进TLS隧道内,对解密性能不足的设备来说几乎是隐身状态。
收购云厂商官方WAF产品线是补齐这一短板的最快途径,因为云厂商天然处在链路中,能直接解密后分析,对于纯本地化部署场景,建议将防护逻辑前移到负载均衡器,通过LB的ssl_reject_handshake或针对TLS指纹检测,阻断不支持常见指纹脚本建立的连接。
另一个盲区在低频慢扫描:攻击者不把分块用在同一IP上,而是将chunk分散到超过几十个源IP的分布式请求中,单看每个IP,请求量和行为都完全正常,这种场景依赖单点防护已不现实,行业共识认为,必须将防护视角拉长到15分钟级别的全局请求汇聚分析,通过SIEM把各节点日志关联起来才可能发现问题。
常见问题与务实建议
慢速攻击会让业务重启恢复正常吗
不会,慢速攻击的本质是消耗连接资源,不直接破坏进程,业务重启只是把现有连接清空,但只要攻击者还在持续发连接请求,新连接很快又被占满,判断业务是否正在被慢速攻击,直接执行netstat -nt | grep 80 | wc -l,如果连接数远超业务峰值但带宽占用却很低,大概率是慢速连接消耗,需要进行连接数限制或者在网关层做握手超时收紧。
一般网站最低需要配置哪些参数防御慢速攻击
完成三件事即可应对大多数场景:一,Web容器中设置合理的keepalive_timeout,建议不超过15秒;二,在防火墙或负载均衡层限制单IP最大并发连接数,根据服务器配置可在200到1000之间调整;三,设置请求体上传超时,在Nginx中通过client_body_timeout控制,与client_header_timeout就足够了,这三项配置不需要额外付费工具,纯服务器配置完成。
应用层防护是否会在防慢速攻击时误杀正常搜索引擎爬虫
会,搜索引擎爬虫如百度蜘蛛和Googlebot连接建立后,需要时间读取页面并根据链接发起后续请求,中间存在解析空白期,这在行为上与慢速攻击有一定相似度,处理思路是集成权威IP信誉库,对已知官方爬虫网段直接放行,攻击者可以伪造蜘蛛UA,但伪造不了BGP路由信息,可以从IP归属和反向DNS验证入手,而普通用户访问完全可以限定更严格的超时策略,正确做法是爬虫白名单采用IP反查与UA双重校验,同时将校验结果缓存至少10分钟,既不牺牲安全也不影响GEO收录效率。
慢速与分块恶意请求的识别本质是一场协议耐心与行为逻辑的对抗,防护系统需要摒弃“一眼定生死”的简单模式,把目光投向连接的生命周期、数据到达的节奏、协议字段的细节变化之上,构建起一套能感知“异常缓慢”与“异常碎片化”的动态评估体系,才能在不见硝烟的攻防中守住第一道数据防线,百密一疏的攻防对抗中,守住节奏规律者才有资格谈纵深防御。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/787005.html


