1. 什么是CC攻击?
CC攻击(Challenge Collapsar)是一种针对Web应用层的分布式拒绝服务攻击(DDoS)。与传统的DDoS攻击不同,CC攻击不需要消耗大量带宽,而是通过模拟大量正常用户请求,耗尽服务器资源(如CPU、内存、数据库连接等),导致服务不可用。
注意:CC攻击名称中的"Collapsar"并非指黑洞,而是源自早期某款防火墙产品名称,后来成为这类攻击的代称。
我处理过不少CC攻击案例,发现这类攻击有几个显著特点:
- 攻击流量看起来像正常请求,难以通过简单阈值过滤
- 主要针对动态页面(如登录接口、搜索功能)
- 攻击者通常使用代理服务器或僵尸网络发起请求
- 单次请求消耗服务器资源较大(如数据库查询)
2. 基础检测方法
2.1 请求频率分析
这是最直观的检测方式。通过统计单个IP在单位时间内的请求次数,设置合理阈值进行拦截。实际操作中建议:
bash复制# 使用iptables限制单IP连接数
iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 50 -j DROP
# 使用Nginx限制请求频率
limit_req_zone $binary_remote_addr zone=one:10m rate=30r/m;
关键点:
- 阈值设置需要基准测试(我通常先用正常业务峰值乘以3作为初始值)
- 需要区分静态资源和动态接口(静态资源阈值可以更高)
- 要设置白名单避免误封(如CDN节点IP)
2.2 用户行为分析
真实用户和攻击机器人的行为模式有明显差异:
| 行为特征 | 正常用户 | CC攻击机器人 |
|---|---|---|
| 访问路径 | 有规律跳转 | 固定URL重复请求 |
| 停留时间 | 随机分布 | 精确固定间隔 |
| 鼠标移动 | 有轨迹变化 | 无或固定模式 |
| JS支持 | 完整执行 | 可能缺失 |
我在某电商项目实现的检测逻辑:
python复制def check_behavior(request):
if request.headers.get('X-Mouse-Move') is None: # 前端埋点缺失
risk_score += 20
if len(set(request.session['page_sequence'])) < 3: # 页面跳转单一
risk_score += 30
return risk_score > 50
3. 高级检测技术
3.1 TLS指纹识别
不同客户端程序的TLS握手特征存在差异。通过分析Client Hello报文可以识别异常客户端:
python复制import dpkt
def check_tls_fingerprint(packet):
if packet[0] == 0x16: # TLS Handshake
hello = dpkt.ssl.TLSRecord(packet).data
if hello.version == 0x0303: # TLS 1.2
ciphers = hello.ciphers
# 检测非常用密码套件
if 0x00FF in ciphers: # 僵尸网络常用
return True
return False
实测数据:
- 某金融案例中识别出60%的CC流量使用特定密码套件组合
- 误判率约2%(需结合其他特征二次验证)
3.2 人机验证策略
分阶段验证方案效果最好:
-
初级验证(对所有请求):
- Cookie标记(如__cfduid)
- HTTP头校验(Accept-Language等)
-
中级验证(可疑请求):
- 轻量级JS挑战(如鼠标轨迹分析)
- 5秒页面延迟(消耗攻击者资源)
-
严格验证(高危IP):
- 图形验证码
- 短信验证(重要操作前)
经验:不要一开始就用验证码,会影响真实用户体验。我通常设置触发条件为:同一IP 30秒内请求超过50次才启用中级验证。
4. 日志分析与关联检测
4.1 关键日志字段
必须记录的日志字段:
code复制$time_local $remote_addr $request_time
$http_user_agent $http_referer
$status $body_bytes_sent
$server_protocol $request
$http_x_forwarded_for
分析技巧:
- 关注$request_time > 3秒的请求(可能是故意拖慢服务)
- 统计$status == 404的比例(攻击者常请求不存在URL)
- $http_user_agent异常值检测(如缺失UA或固定字符串)
4.2 实时分析方案
推荐ELK栈实现:
yaml复制# Logstash过滤规则
filter {
if [type] == "nginx-access" {
grok {
match => { "message" => "%{NGINXACCESS}" }
}
metrics {
meter => "events_%{remote_addr}"
add_tag => "metric"
flush_interval => 30
}
}
}
# Elasticsearch聚合查询
GET nginx-*/_search
{
"aggs": {
"ip_stats": {
"terms": { "field": "remote_addr" },
"aggs": {
"req_rate": { "avg": { "script": "doc['request_time'].value" } }
}
}
}
}
5. 防御系统实战配置
5.1 Nginx层防护
nginx复制http {
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=100r/s;
limit_conn_zone $binary_remote_addr zone=addr:10m;
server {
location /api/ {
limit_req zone=api_limit burst=200 nodelay;
limit_conn addr 20;
# 动态黑名单
include /etc/nginx/blockips.conf;
# 验证Referer
valid_referers none blocked server_names;
if ($invalid_referer) { return 403; }
}
}
}
更新黑名单脚本:
bash复制#!/bin/bash
# 自动封禁高频IP
tail -n 10000 /var/log/nginx/access.log |
awk '{print $1}' |
sort | uniq -c |
sort -nr |
awk '{if($1>500) print "deny " $2 ";"}' > /tmp/blockips.conf
mv /tmp/blockips.conf /etc/nginx/blockips.conf
nginx -s reload
5.2 云防护方案配置
以阿里云为例的关键配置项:
-
DDoS防护:
- 开启CC安全防护
- 设置HTTP请求数阈值(建议2000/分钟)
- 启用精准访问控制
-
WAF规则:
- 启用CC防护规则组
- 设置人机识别策略
- 配置自定义规则(如拦截特定User-Agent)
-
CDN配置:
- 开启IP访问限频
- 设置热点URL保护
- 启用浏览器完整性检查
6. 应急响应流程
当检测到CC攻击时,建议按以下步骤处理:
-
确认攻击(5分钟内):
- 检查服务器负载(uptime)
- 确认带宽是否饱和(iftop)
- 分析访问日志(awk '{print $1}' | sort | uniq -c)
-
临时处置(10分钟内):
- 启用备用IP
- 切换至防护模式(如Cloudflare Under Attack模式)
- 添加基础防护规则(如限制单个URL访问频率)
-
深入分析(1小时内):
- 提取攻击特征(常见URL、User-Agent等)
- 识别攻击源(通过TCPDUMP抓包)
- 评估业务影响(不可用API列表)
-
长期防护(24小时内):
- 优化防护规则阈值
- 部署分布式防护节点
- 建立攻击特征库
7. 常见误判与规避
在我经历的案例中,这些误判最值得注意:
-
CDN节点被封:
- 现象:部分地区用户无法访问
- 解决:将CDNIP段加入白名单
- 建议:使用X-Forwarded-For获取真实IP
-
API客户端被拦截:
- 现象:移动APP请求失败
- 解决:添加专用User-Agent标识
- 建议:为每个客户端分配唯一Token
-
搜索引擎爬虫受限:
- 现象:收录量下降
- 解决:识别主流爬虫IP段
- 建议:通过robots.txt控制爬取频率
8. 防护效果评估指标
建立量化评估体系:
| 指标名称 | 计算公式 | 达标值 |
|---|---|---|
| 拦截准确率 | 正确拦截数/(正确拦截数+误拦截数) | ≥98% |
| 攻击发现时延 | 攻击开始到触发告警的时间 | ≤3分钟 |
| 系统恢复时间 | 从处置到服务正常的时间 | ≤15分钟 |
| 资源消耗比 | 防护系统CPU占用/总CPU | ≤20% |
我在实际项目中会每周生成防护报告,重点关注:
- 拦截请求TOP10 IP
- 误拦截案例分析
- 防护规则命中率变化趋势
- 新出现的攻击特征
9. 进阶防护思路
对于高价值业务系统,建议考虑:
-
机器学习模型:
- 使用LSTM分析请求时序特征
- 基于聚类算法识别异常流量
- 实时评分系统(每个请求风险分)
-
区块链溯源:
- 将攻击日志上链存证
- 建立跨企业的攻击IP共享机制
- 智能合约自动更新防护规则
-
边缘计算防护:
- 在CDN边缘节点执行检测
- 就近拦截攻击流量
- 减少回源压力
10. 个人实战经验
最后分享几个血泪教训:
-
不要过度依赖单一防护:
某次我仅配置了Nginx限速,攻击者改为低速持续请求,导致服务缓慢但不可用。后来改为分层防护才解决。 -
定期测试防护规则:
曾遇到防护规则把自家CEO IP封了,现在每月都会用真实业务流量测试规则。 -
保持攻击特征库更新:
去年某新型CC工具出现时,我们因为特征库过期差点中招,现在建立了每日自动更新机制。 -
业务级防护比网络级更重要:
在API网关层实现基于业务逻辑的防护(如单账号操作频率限制)效果远好于IP级防护。 -
做好容量规划:
预留30%以上的处理能力冗余,这样即使遇到攻击也能保持基本服务。