低频慢速DDoS攻击之所以难防,核心在于它不靠流量峰值压垮目标,而是用极低的请求速率、极长的连接占用时间,慢慢耗尽服务器的连接表、线程池或应用层处理能力。很多防护系统对单IP的请求频率阈值设得较高,低频攻击恰好卡在阈值之下,导致规则无法触发。要识别这类攻击,必须放弃单纯看“每秒请求数”的思路,转而关注连接持续时间、单连接请求间隔、慢速读写速率以及异常会话状态迁移。
在实际流量中,低频慢速攻击通常表现为TCP连接建立后长时间不发送完整请求,或者每隔数秒才发送一个字节。例如Slowloris类工具会每隔一段时间发送一个不完整的HTTP头,保持连接不关闭;Slow Read类攻击则是在接收响应时故意把TCP窗口调小,迫使服务器以极慢速度发送数据。这些行为在日志里不会形成明显的高频特征,但会产生大量处于ESTABLISHED或CLOSE_WAIT状态的连接,且这些连接的持续时间远超正常用户。
识别方法上,建议从三个维度同时下手。第一是连接状态基线建模。对每个源IP或每个源IP段,统计其历史连接的平均持续时间、平均请求间隔、平均传输字节数。当某个源IP的连接持续时间超过基线三个标准差,或者单连接请求间隔超过基线五倍以上,即使请求总量不大,也应标记为可疑。第二是慢速传输特征检测。在中间设备或服务器内核层面,记录每个连接单位时间内的读写字节数。如果某个连接在连续多个时间窗口内,读速率低于设定下限且连接未关闭,就属于慢速读取或慢速发送。第三是会话状态异常迁移检测。正常HTTP请求从建立连接到完成请求再到关闭连接,状态迁移路径相对固定。低频慢速攻击会让人为拉长某个中间状态,比如长时间停留在“已发送部分请求头”或“已发送部分请求体”的状态。
漏洞联动防护的核心思路是:当识别出低频慢速攻击源后,不是简单封禁IP了事,而是把攻击特征同步给漏洞防护模块,判断该攻击是否在利用某个已知的应用层漏洞或配置缺陷。比如某些中间件对请求头超时时间设置过长,或者对单个连接允许的最大请求体传输时间没有限制,就会给慢速攻击留下空间。联动防护要做的,是把检测到的慢速连接特征与漏洞库中的“慢速连接类漏洞”进行匹配,然后触发对应的虚拟补丁或配置加固建议。
具体实现上,可以先在流量入口部署一个轻量级的连接状态分析模块。这个模块不解析完整应用层内容,只维护一个连接元数据表,记录每个连接的五元组、建立时间、最后活动时间、累计读写字节数、当前状态。对于每个连接,每隔固定周期计算一次读写速率。如果某个连接在连续N个周期内读速率低于阈值,且该连接对应的源IP在过去一段时间内没有正常业务行为,就将其标记为慢速攻击嫌疑。
标记之后,系统需要把嫌疑连接的信息推送给漏洞联动引擎。联动引擎根据目标端口和目标服务类型,查询该服务是否存在与慢速连接相关的已知漏洞或配置弱点。例如Apache的mod_reqtimeout配置不当、Nginx的client_body_timeout设置过长、Tomcat的connectionTimeout过大等,都可能导致慢速攻击成功。联动引擎一旦匹配到对应漏洞,就自动生成一个临时防护策略,比如对该源IP启用更严格的连接超时、限制单连接最大持续时间、或者对该源IP的请求体传输速率进行强制限制。
这里有一个关键点:不能只封IP。低频慢速攻击往往使用大量分布式肉鸡,每个肉鸡的请求速率都很低,封掉单个IP对整体攻击影响很小。更有效的做法是把识别出的攻击模式转化为速率控制策略,应用到所有源IP上。比如检测到某个目标端口正在遭受慢速读取攻击,就临时将该端口所有连接的最大空闲时间从60秒缩短到10秒,同时把单连接最小读速率下限提高到每秒100字节。这样即使攻击源IP不断变化,防护策略依然有效。
另一个容易被忽略的环节是DNS层和TLS握手阶段的慢速攻击。很多防护只关注HTTP层,但攻击者可以在TLS握手时故意拖延,或者发送不完整的ClientHello,占用服务器的TLS握手缓存。对于这类攻击,需要在TLS终止设备上监控握手超时率。如果某个源IP在短时间内多次发起TLS握手但从未完成,或者握手耗时超过正常值五倍以上,就应将其标记为慢速TLS攻击源。联动防护可以调整TLS握手超时时间,或者对未完成握手的源IP实施临时限制。
在漏洞联动方面,慢速攻击往往与中间件或应用服务器的参数配置直接相关。下面给出一个针对Nginx的慢速连接防护配置示例,可以作为漏洞联动策略的参考基线:
http {
# 限制客户端发送请求体的速率
client_body_timeout 10s;
client_header_timeout 10s;
# 限制客户端读取响应的速率
send_timeout 10s;
# 限制单个连接的最大请求数
keepalive_requests 100;
# 限制连接的最大持续时间
keepalive_timeout 30s;
# 限制请求体的最大大小
client_max_body_size 10m;
# 启用慢速连接保护
limit_conn_zone $binary_remote_addr zone=slowconn:10m;
limit_conn slowconn 5;
}
这段配置的核心是把所有与连接持续时间相关的超时都压缩到较短范围,同时限制单IP的并发连接数。但要注意,直接套用这个配置可能会误伤正常的慢速客户端,比如老旧移动设备或网络状况较差的用户。因此在实际部署时,应该把这类配置作为联动防护的“应急策略”,只有在检测到慢速攻击时才临时启用,攻击结束后恢复原值。
对于Apache Tomcat这类Java应用服务器,慢速攻击经常利用的是连接器线程池的耗尽。Tomcat默认的connectionTimeout是60秒,攻击者可以建立大量连接然后缓慢发送请求头,每个连接占用一个工作线程。联动防护可以通过JMX或管理接口动态调整连接器的maxConnections和connectionTimeout参数。当检测到慢速攻击时,把connectionTimeout从60秒降到10秒,同时把maxConnections从默认值下调到正常业务峰值的80%,这样可以快速释放被占用的线程资源。
在应用层,低频慢速攻击还有一种变体是针对数据库连接池的。攻击者通过应用接口发起一个需要长时间运行的查询,或者故意在事务中不提交,占用数据库连接。这类攻击的识别需要结合应用性能监控数据。如果某个接口的响应时间突然变长,同时数据库连接池的活跃连接数持续处于高位,且大量连接处于“执行中”状态但执行的SQL语句本身并不复杂,就可能是慢速查询攻击。联动防护可以临时限制该接口的并发调用量,或者在数据库层面对特定来源的会话设置语句超时。
从数据采集的角度看,要实现有效的低频慢速攻击识别,必须把网络层、传输层和应用层的日志统一汇总。单看某一层的日志很难发现完整攻击链。建议在服务器上部署轻量级的数据采集代理,采集TCP连接状态、TLS握手耗时、HTTP请求头接收耗时、应用处理耗时、数据库连接持有时间等指标。这些指标按源IP和目标服务聚合后,送入一个实时分析引擎。分析引擎用滑动窗口计算每个源IP的行为特征,并与历史基线做对比。
基线模型的建立不能一劳永逸。正常业务流量会随时间变化,比如白天和晚上的连接持续时间分布不同,工作日和周末的请求间隔也不同。因此基线需要按小时粒度动态更新。一个实用的做法是,对每个源IP段或每个目标服务,维护最近七天的行为特征分布,包括连接持续时间的分位数、请求间隔的分位数、读写速率的分位数。当实时观测值落在历史分布的极端区间时,触发告警。这样可以大幅降低误报率。
漏洞联动防护的另一个重要方向是与WAF规则联动。很多WAF已经具备慢速攻击检测能力,但规则往往是静态的。联动防护的意义在于,当网络层或传输层检测到慢速攻击特征时,自动通知WAF启用更严格的慢速连接规则,同时把攻击源IP的指纹信息同步给WAF。WAF根据这些信息,可以对来自该源IP的请求执行更深入的内容检查,识别是否在利用某个具体的CVE漏洞。如果匹配到CVE,就触发对应的虚拟补丁。
举例来说,假设某个Web应用存在CVE-2023-XXXX漏洞,该漏洞允许攻击者通过发送特制的慢速POST请求触发资源耗尽。网络层检测到大量慢速POST连接后,联动引擎查询漏洞库,发现该应用版本存在对应漏洞。此时联动防护会做两件事:一是在WAF层启用针对该CVE的虚拟补丁规则,阻断恶意请求体;二是在服务器层面临时缩短该应用的请求体接收超时时间。这两步同时执行,既阻断了当前攻击,又修复了被利用的漏洞条件。
在实现架构上,联动防护需要一个统一的策略决策中心。这个中心接收来自各检测模块的告警,关联漏洞库和资产信息,生成具体的防护动作,然后下发到执行点。执行点可以是WAF、负载均衡器、服务器上的agent、或者云平台的防火墙。策略决策中心要支持优先级管理,避免多个告警同时触发时产生策略冲突。例如同时检测到慢速攻击和CC攻击时,需要判断哪个威胁更紧急,优先执行对应的防护策略。
对于低频慢速攻击的溯源,传统基于IP信誉的方式效果有限,因为攻击源可能是被控制的物联网设备或家庭路由器。更有价值的做法是分析攻击流量的TLS指纹、HTTP头顺序、TCP选项等特征,形成攻击工具指纹。同一个攻击工具发起的慢速攻击,即使源IP不同,这些指纹往往高度相似。把这些指纹同步给联动防护系统,可以在攻击源IP变化时依然快速识别并阻断。
最后要强调的是,低频慢速攻击防护不能只靠单一技术手段。它需要把连接状态监控、行为基线分析、漏洞匹配、动态策略下发这几个环节串成一个闭环。检测到攻击后,策略要能自动生效并持续监控效果,如果误报率上升或正常业务受到影响,要能自动回滚。只有形成这种闭环联动机制,才能在不影响正常用户的前提下,有效压制低频慢速DDoS攻击。
