低频持续性CC攻击,也叫慢速CC攻击或低速率分布式拒绝服务攻击,它不像传统CC攻击那样用海量请求瞬间冲垮服务器,而是用少量但持续不断的恶意请求,像“滴水穿石”一样缓慢消耗服务器的连接、CPU和内存资源。攻击者会模拟正常用户,以很低的频率(例如每分钟几次或几十次)发起请求,目标常是消耗资源的动态页面、API接口或登录验证。由于单个IP的请求频率很低,传统基于阈值的频率统计防御(如一分钟内超过100次请求就封禁)会完全失效,防火墙和WAF很容易将其误判为正常流量而放行,导致服务器在不知不觉中资源被耗尽,服务响应变慢甚至瘫痪。检测和清除这类攻击的核心思路必须转变:从“识别高频异常”转向“识别长期资源占用行为”和“会话行为异常分析”。
一、 低频持续性CC攻击的工作原理与典型特征
要有效检测,必须先透彻理解其攻击模型。攻击者通常会控制一个僵尸网络,每个僵尸机分配一个任务:以极低的频率(如每30秒一次)向目标URL发起一个完整的HTTP请求。这个请求可能是访问一个计算复杂的搜索页面、提交一个需要数据库查询的表单、或反复尝试登录。每次请求都会建立完整的TCP连接,完成HTTP会话,消耗服务器的连接池、后端处理线程和数据库资源。
其典型特征包括:
(1) 请求频率低:单个IP的请求间隔远大于常规防御规则设定的时间窗口,完美规避基于QPS的检测。
(2) 会话完整性:攻击请求会模拟正常浏览器,完成TCP三次握手、HTTP请求/响应、乃至四次挥手,不像SYN Flood那样只有握手。
(3) 目标针对性:往往集中攻击少数几个消耗资源的特定端点,而不是网站的静态资源。
(4) 长期持续性:攻击可能持续数小时甚至数天,单个IP的总请求量会累积到一个惊人的数字,但平均到每分钟却很低。
二、 核心检测策略:从单一维度到多维度行为分析
既然频率阈值失效,我们就需要建立更立体的检测模型。以下是几种行之有效的核心策略:
1. 长周期请求总量与会话时长分析
这是最直接的检测方法。设置一个较长的时间窗口(例如1小时、6小时或24小时),统计每个IP在此窗口内向敏感端点(如登录接口、搜索API、订单提交)发起的请求总量。虽然其每分钟请求数正常,但一小时内对同一个登录页发起120次请求,这绝对是非正常用户行为。同时,监测TCP会话的平均保持时间,低频攻击为了最大化资源占用,可能会故意保持连接更长时间(慢速HTTP攻击的一种变体)。
# 伪代码示例:基于Redis记录长周期请求计数
ip = request.remote_addr
key = f"cc_slow:total:{ip}:{current_date_hour}" # 按小时统计
current_count = redis.incr(key)
redis.expire(key, 3600*2) # 键保留2小时
if current_count > THRESHOLD_TOTAL_PER_HOUR: # 例如阈值设为100
trigger_alarm(ip)2. 资源消耗比例监控
低频CC攻击的最终目的是耗尽资源。因此,直接监控服务器关键资源的使用情况并与访问者关联是更本质的方法。例如:监控每个IP消耗的服务器CPU时间、占用的数据库连接时长、或引起的后端响应时间延迟。当发现某个IP的请求,其平均响应时间远高于网站正常水平,或它持续占用数据库连接,即使请求量不大,也高度可疑。这需要应用层监控和服务器监控工具的深度集成。
3. 行为序列与意图分析
正常用户访问网站有逻辑序列:浏览首页 -> 查看产品列表 -> 阅读产品详情 -> 可能加入购物车。而攻击机器人行为模式单一且重复。可以通过机器学习或规则引擎,分析用户会话的行为序列。例如,一个IP在短时间内反复执行“访问登录页 -> 提交登录表单(失败) -> 访问登录页”的循环,而没有其他任何页面浏览,这明显是低频的暴力破解或资源消耗攻击。
4. 低速率慢速攻击专项检测
针对故意放慢请求速度的攻击变种,如Slowloris或Slow POST,需要检测协议层异常。例如,监控HTTP请求头接收的间隔时间、POST body的传输速率。如果发现一个连接以极低的速度发送数据,长期占用一个工作线程,则可直接判定为攻击。这通常在TCP/IP层或Web服务器前端(如Nginx)配置中实现。
# Nginx 配置示例:防范慢速连接
http {
client_header_timeout 10s; # 客户端发送请求头超时时间
client_body_timeout 10s; # 客户端发送请求体超时时间
keepalive_timeout 30s; # 保持连接超时时间
# 限制客户端传输body的速率
client_body_in_single_buffer on;
client_max_body_size 100k;
}三、 清除与防御的综合实施方案
检测到攻击后,需要一套自动化和人工结合的处理流程来清除影响并加固防御。
1. 实时处置与流量清洗
一旦通过上述多维分析模型确认恶意IP,应立即采取处置措施:
(a)实时封禁:在防火墙、负载均衡器或WAF上将IP加入黑名单,阻断其后续所有请求。
(b)质询挑战:对于不能完全确定的疑似IP,可以引入人机验证,如JavaScript挑战、动态令牌或简单的验证码。低频攻击的机器人通常无法通过这类需要客户端执行的复杂挑战。
(c)流量导向:将疑似攻击的IP流量引导至一个专用的“蜜罐”或隔离环境,观察其行为,同时保护真实业务服务器。
2. 架构层加固与资源隔离
从根本上看,提高服务器的“抗消耗”能力是关键。
(a)连接池与超时优化:合理配置Web服务器和后端应用服务器的连接池大小、线程池大小,并设置严格的超时时间。避免一个慢请求长期占用一个宝贵的工作线程。
(b)资源限流与配额:对关键API和动态页面,不仅做瞬时QPS限流,更要增加基于IP的长周期配额。例如,规定一个IP一天内对某个接口只能请求1000次。
(c)动静分离与缓存:将静态资源彻底分离到CDN,对消耗资源的动态查询结果进行适当的缓存,即使遭到攻击,也能大部分命中缓存,减轻后端压力。
(d)微服务与弹性伸缩:采用微服务架构,将易受攻击的功能隔离成独立服务。结合云平台的弹性伸缩能力,在检测到资源消耗上升时自动扩容,虽然成本会增加,但能保证业务不中断。
3. 持续监控与策略迭代
防御是一个持续的过程。需要建立一个安全运营中心看板,持续监控“长周期请求TOP IP”、“异常响应时间请求来源”、“失败登录尝试分布”等关键指标。将检测到的攻击模式固化为新的安全规则,并不断调整模型参数。同时,定期进行渗透测试和攻防演练,模拟低频CC攻击,检验现有防御体系的有效性。
四、 总结:构建动态纵深防御体系
应对低频持续性CC攻击,没有一劳永逸的银弹。它要求我们从传统的边界防护思维,转向基于行为和资源的智能防护。有效的防御体系应该是纵深的:在网络边界,利用WAF和防火墙实施基础频率过滤和IP信誉检查;在应用层,部署具备长周期分析和行为序列分析能力的专业安全软件或自定义监控脚本;在架构层,通过优化代码、引入缓存、设置配额和实现弹性伸缩来提升应用自身的韧性;在运营层,建立持续的监控、分析和响应闭环。将技术手段与运营流程结合,才能在这场“低调而持久”的消耗战中牢牢掌握主动权,确保网站和服务器的稳定运行。
