一、为什么 CC 攻击难检测
CC(Challenge Collapsar)攻击的核心特征,是攻击者用大量看似合法的 HTTP 请求,持续消耗应用层的计算、数据库连接和带宽资源。它不像 DDoS 那样靠流量洪峰暴露自己,而是把攻击流量伪装成正常业务流量,因此传统基于流量阈值的防护手段往往失效。
在七层视角下,检测难点可以归纳为三点:
- 请求本身是合法的:URL、参数、Header 都符合业务规范,WAF 规则难以命中。
- 单请求成本低、聚合成本高:每个请求只消耗少量资源,但成千上万的并发请求会迅速压垮后端。
- 攻击源高度分散:代理池、肉鸡、云函数让源 IP 不断变化,基于 IP 的黑名单很快失效。
二、真实用户与攻击请求的行为差异
区分两者的关键,不在于单个请求长什么样,而在于行为序列是否符合人类访问模式。可以从以下几个维度建立对比:
| 维度 | 真实用户 | CC 攻击请求 |
|---|---|---|
| 请求间隔 | 有明显停顿,符合阅读节奏 | 间隔极短且高度均匀 |
| 访问路径 | 先首页、再列表、再详情,有跳转链路 | 直接命中高消耗接口,缺少前置页面 |
| 资源加载 | 会加载 JS、CSS、图片等静态资源 | 通常只请求动态接口,不加载静态资源 |
| 会话特征 | Cookie、Token 完整,会话持续演进 | 会话缺失或复用同一凭证 |
| 参数分布 | 参数值多样,搜索词自然 | 参数高度重复或呈规律性枚举 |
| UA 与指纹 | UA、TLS 指纹、Header 顺序一致 | UA 伪造、指纹与声明不符 |
三、七层检测的核心难点
3.1 单请求无法判定
任何一个单独的请求,从语法上看都可能是正常用户发出的。检测必须依赖时间窗口内的聚合统计,这就带来窗口大小、统计粒度和误报率的权衡问题。窗口太短抓不到慢速攻击,窗口太长又会把正常高峰误判为攻击。
3.2 慢速与低频攻击的隐蔽性
攻击者会刻意控制单 IP 的请求频率,使其低于阈值,再通过大量 IP 分摊压力。这类攻击在单 IP 维度上完全正常,只有从全局维度观察才能发现异常总量。
3.3 业务高峰与攻击流量难以区分
促销、秒杀、热点事件都会带来真实的流量洪峰,其请求特征与 CC 攻击高度相似。如果阈值设置过严,会误伤正常用户;设置过松,又拦不住攻击。这是七层防护中最典型的误报与漏报矛盾。
3.4 加密与协议伪装
HTTPS 加密后,七层内容检测依赖 TLS 终止,攻击者还可以通过伪造 TLS 指纹、复用合法客户端指纹来绕过指纹识别。部分攻击甚至模拟完整浏览器行为,进一步模糊了边界。
3.5 分布式代理与 IP 信誉失效
住宅代理、云主机、移动网络让攻击 IP 看起来像普通用户出口。IP 信誉库更新滞后,黑名单命中率下降,单纯依赖 IP 维度已经不足以支撑判定。
四、可落地的检测思路
4.1 多维特征聚合
不要依赖单一指标,而是把请求频率、路径熵、参数重复度、静态资源加载率、会话完整度等特征组合成评分模型,用综合得分替代硬阈值。
4.2 人机验证与挑战机制
对可疑请求下发 JS 挑战、验证码或 Token 校验,用通过成本区分人和机器。真实用户可以低成本通过,自动化脚本则需要付出显著代价。
4.3 行为序列建模
基于会话还原访问链路,统计页面跳转的马尔可夫转移概率。真实用户的路径分布相对分散,攻击流量往往集中在少数高消耗接口上,路径熵明显偏低。
4.4 分层限流与熔断
在网关层按 IP、会话、接口、用户四个维度分别限流,并对高消耗接口设置更严格的配额。当后端响应时间上升时自动触发熔断,优先保护核心链路。
4.5 指纹与设备画像
结合 TLS 指纹、HTTP/2 指纹、浏览器环境特征构建设备画像,识别 UA 与指纹不一致、指纹高度聚集的请求簇。
五、实践中的权衡
检测策略本质上是在误杀率 和拦截率之间寻找平衡点。建议遵循以下原则:
- 先观察后拦截:新策略先以告警模式运行,积累数据后再开启拦截。
- 分级处置:低风险请求放行并记录,中风险请求挑战验证,高风险请求直接拦截。
- 保留申诉与白名单通道,避免误伤核心用户。
- 持续回放与调优:定期用历史流量回放验证策略效果,防止规则老化。
六、总结
七层 CC 攻击检测的难点,归根结底是合法请求与攻击请求在单点特征上高度重合。有效的检测方案必须从单请求判定转向行为序列分析,从单一阈值转向多维评分,从静态规则转向动态挑战,并结合业务特征持续调优,才能在保障正常用户体验的同时有效抵御攻击。