CC 攻击和 DDoS 攻击区别:作用层、流量特征与防护手段
CC 攻击是 DDoS 的一种,属于应用层(七层)攻击:用大量看起来正常的 HTTP 请求耗尽网站的处理能力。日常说的 DDoS 多指四层及以下的流量型攻击,靠带宽堵死链路。前者带宽很小、请求真实、清洗设备看不出异常,只能靠 WAF、限速和人机验证。
CC 攻击和 DDoS 攻击区别的核心在于打在哪一层:DDoS 是分布式拒绝服务攻击的统称,平时说的“DDoS”多指网络层和传输层的流量型攻击,用 UDP 泛洪、反射放大、SYN 泛洪把带宽或连接表灌满;CC 攻击是 DDoS 里的应用层分支,用真实的 HTTP 请求把网站的 CPU、数据库和进程池耗光。一个靠“大”,一个靠“多”,防护手段完全不同。
一张表看 CC 与 DDoS 的区别
| 对比项 | 流量型 DDoS(四层及以下) | CC 攻击(七层) |
|---|---|---|
| OSI 层次 | 网络层、传输层 | 应用层 |
| 常见形式 | UDP 泛洪、ICMP 泛洪、NTP/DNS/memcached 反射放大、SYN 泛洪、ACK 泛洪 | HTTP/HTTPS 泛洪、慢速请求(Slowloris)、针对搜索、登录、下单等接口的高频请求 |
| 流量大小 | 大,Gbps 到 Tbps 级 | 小,常常只有几 Mbps 到几十 Mbps |
| 是否需要完成 TCP 握手 | 不需要,一个包就是一次攻击 | 需要,必须建立连接后发出完整请求 |
| 源 IP 能否伪造 | 可以,UDP 和 SYN 泛洪几乎都伪造 | 不能,源 IP 真实,来自僵尸网络、代理池或拨号 IP |
| 消耗的资源 | 上联带宽、路由器与防火墙的包处理能力、连接表 | Web 进程、CPU、数据库连接、后端 API |
| 服务器上的表现 | 入向带宽打满,ping 丢包,所有服务同时不通 | 带宽正常,网站 502/504 或极慢,其他端口(如 SSH)仍然正常 |
| 流量清洗能不能解决 | 能,这正是清洗设备的设计目标 | 基本不能,每个请求在网络层都是合法的 |
| 主要防护手段 | 机房清洗、黑洞路由、高防 IP、带宽冗余 | WAF、按 IP 和接口限速、人机验证、缓存、业务侧改造 |
| 谁来处理 | 机房、上游运营商、高防服务商 | 应用和运维团队为主,七层高防或 CDN 为辅 |
CC 攻击属于 DDoS 吗
属于。DDoS 按作用层可以分成三类:
- 网络层攻击:ICMP 泛洪、UDP 泛洪、各类反射放大,目标是把链路带宽塞满;
- 传输层攻击:SYN 泛洪、ACK 泛洪、连接耗尽,目标是把服务器或防火墙的连接表塞满;
- 应用层攻击:HTTP 泛洪、慢速攻击、DNS 查询泛洪,目标是把应用的处理能力耗光。
CC 就是应用层攻击里针对 Web 的那一种。之所以在国内被单独拎出来讲,是因为它的流量特征和防护思路与前两类差别太大,很多人买了“抗 DDoS”的服务却发现挡不住它。
四层攻击和七层攻击的流量差多少
用一个假设的算例感受一下量级差异。
SYN 泛洪:一个 SYN 包在线路上大约 60 字节,10 Gbps 的攻击流量相当于每秒约 2000 万个包。这个规模下,普通服务器的网卡和内核在包到达应用之前就已经处理不过来,机房清洗设备要做的就是识别这种协议特征并丢弃。
CC 攻击:一个 HTTP 请求连头部算上大约 500 字节。假设攻击者控制 2000 个代理 IP,每个 IP 每秒只发 1 个请求,合计 2000 QPS,流量只有 2000 × 500 × 8 ≈ 8 Mbps,在任何监控图上都不起眼。但如果被请求的是一个要查数据库的动态页面,每次处理耗时 50 ms,一个 CPU 核每秒只能处理 20 个请求,8 核服务器满打满算 160 QPS,2000 QPS 就是它处理能力的十几倍,网站在几秒内就会开始排队、超时。
这就是“是否需要真实 TCP 连接”这一行的意义:CC 要完成握手、发出合法请求,代价是源 IP 不能伪造,规模上不去;换来的是每个请求都能落到后端最贵的那段逻辑上。
为什么买了高防带宽还是被 CC 打挂
这是最常见的疑问,原因有三个:
- 清洗设备靠流量特征识别攻击。它看的是协议是否异常、速率是否突变、源分布是否集中。CC 请求是完整的 TCP 握手加合法的 HTTP 报文,与真实用户的请求在网络层没有区别,清洗设备放行是正确的行为。
- 高防带宽只是“管道大”。300 Gbps 的防护带宽说明链路灌不满,但后端还是那台 8 核服务器,处理能力没有变。
- 四层高防看不到 HTTP 内容。用端口转发方式接入的高防 IP 只做 TCP 层转发;HTTPS 站点如果没有把证书放到高防上做七层接入,防护方连 URL 都看不见,更谈不上按请求特征过滤。
所以防 CC 的前提是让防护设备能读到请求内容:要么在高防或 CDN 上做七层接入并上传证书,要么在自己的网关或 Nginx 前部署 WAF。
防护手段对比:清洗 vs WAF 与人机验证
| 手段 | 针对 | 原理 | 局限 |
|---|---|---|---|
| 流量清洗、黑洞路由 | 流量型 DDoS | 在机房或上游按协议特征丢弃异常流量,超阈值时丢弃整个 IP 的流量 | 对合法 HTTP 请求无效 |
| 高防 IP(四层转发) | 流量型 DDoS | 把流量引到清洗中心再回源 | 看不到 HTTP 内容,防不了 CC |
| 高防 CDN、七层高防 | CC 与流量型 | 在边缘节点终结 TLS,按 URL、频率、指纹过滤,静态内容直接命中缓存 | 需要上传证书,动态请求仍要回源 |
| WAF | CC | 规则匹配、按 IP/URL 的频率控制、UA 与 Referer 校验、浏览器指纹 | 规则太严会误伤正常用户 |
| 人机验证 | CC | 对可疑来源下发 JavaScript 挑战或验证码,脚本无法通过 | 影响用户体验,API 类接口不能用 |
| 服务器限速 | CC | Nginx 按 IP 限制请求速率与并发 | 对分布极广的代理池效果有限 |
| 业务侧改造 | CC | 登录、搜索、短信等接口加验证码或签名,热点页面缓存化 | 需要开发投入 |
实际部署一般是组合:外面挂七层高防或 CDN 吸掉大头,Nginx 上对高消耗接口单独限速,业务上把最容易被打的接口改成异步或加验证。
怎么判断自己遇到的是哪一种
先看带宽,再看日志。带宽打满是流量型,带宽正常而网站不可用就往 CC 方向查。Nginx 访问日志能直接给出答案:
# 最近 20 万行请求里,请求量前 20 的来源 IP
tail -n 200000 /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -20
# 被请求次数前 20 的 URL:CC 通常集中打少数几个动态页面
tail -n 200000 /var/log/nginx/access.log | awk '{print $7}' | sort | uniq -c | sort -rn | head -20
# 每秒请求数的变化:找出攻击开始的时间点
tail -n 200000 /var/log/nginx/access.log | awk '{print substr($4,2,20)}' | uniq -c | sort -rn | head
典型的 CC 特征是:大量 IP 请求同一个或少数几个动态 URL、User-Agent 为空或高度一致、没有加载页面配套的 CSS 和图片、请求间隔机械地均匀。确认之后,可以先对被打的接口单独限速并拦掉明显异常的请求:
http {
# User-Agent 为空的请求直接标记
map $http_user_agent $bad_ua {
default 0;
"" 1;
}
limit_req_zone $binary_remote_addr zone=login:10m rate=2r/s;
server {
if ($bad_ua) { return 444; }
# 只对高消耗接口限速,静态资源不受影响
location = /api/login {
limit_req zone=login burst=5 nodelay;
proxy_pass http://backend; # backend 为你已定义的 upstream
}
}
}
return 444 是 Nginx 特有的写法,直接关闭连接、不返回任何响应,比返回 403 更省资源。
在机房管理系统里能做什么
CC 攻击主要由业务方处理,机房侧能做的是让信息透明、让影响可控。Toplink DCIM 的客户自助端可以查看服务器的流量使用和被攻击事件记录,客户看到入向带宽平稳而网站不可用,就能直接朝应用层排查,而不是先怀疑机房线路;如果被打的服务器反过来向外喷出异常流量,带宽自动限速会按平均带宽自动把端口限到设定速率,避免波及同一交换机上的其他客户。
常见问题
CC 攻击这个名字是怎么来的?
通常的说法是 CC 为 Challenge Collapsar 的缩写:Collapsar(黑洞)是早年国内一款抗 DDoS 产品的名字,有人写了专门绕过它的 HTTP 请求工具并取名“挑战黑洞”,后来这类应用层攻击就都被叫作 CC。这是业内流传的非正式来历,不是标准定义。
HTTPS 网站是不是不怕 CC?
不是,反而更吃亏。每个 HTTPS 请求都要做 TLS 握手,服务器的 CPU 消耗比明文 HTTP 高得多;而且四层高防看不到加密内容,只有在高防或 CDN 上部署证书做七层接入,才能识别和过滤请求。
CC 攻击的源 IP 能封吗?
能封,但效果有限。CC 请求必须完成 TCP 握手,源 IP 是真实的,可以按 IP 限速或封禁;问题是攻击者手里通常有成千上万个代理或拨号 IP,封的速度赶不上换的速度,所以要靠人机验证把机器和人区分开。