DNS 放大攻击是什么?为什么开放递归解析器会被 DDoS 利用?
简化版
DNS 放大攻击是一种反射型 DDoS。攻击者伪造受害者 IP,向开放 DNS 解析器发送小查询,请求较大的 DNS 响应,解析器把大响应发给受害者,从而放大攻击流量。
DNS 使用 UDP 时没有连接握手,源 IP 容易伪造;如果响应远大于请求,就形成放大效果。
防护包括关闭开放递归、限制响应大小、启用 RRL、过滤伪造源地址、合理配置权威 DNS 和 DDoS 清洗。
详细版
攻击流程:
Attacker spoof victim IP -> Open Resolver
Open Resolver -> large DNS response -> Victim
攻击者发送的请求可能只有几十字节,但响应可能上千字节。
如果同时利用大量开放解析器,受害者会收到巨量 UDP 53 响应。
常被滥用的查询包括 ANY、大 TXT、DNSSEC 相关响应等。
开放递归解析器不应对全网提供递归服务,应限制只服务可信客户端。
完整版教学
1. 先解释反射和放大
反射指攻击流量不是直接从攻击者打到受害者,而是借第三方服务器反射过去。
放大指攻击者发出的小请求触发了更大的响应。
DNS 放大攻击同时具备这两个特点。
攻击者花 1 份流量,诱导 DNS 服务器向受害者发出多份流量。
2. 为什么 DNS 容易被利用
DNS 常用 UDP。
UDP 没有 TCP 三次握手。
如果网络没有做源地址校验,攻击者可以伪造源 IP。
DNS 响应又可能比请求大很多。
例如:
小查询:几十字节
大响应:上千字节
这就形成了放大条件。
3. 开放递归解析器的问题
递归解析器本应服务特定用户群。
例如运营商用户、企业内网、云 VPC。
如果它对公网任何 IP 都提供递归解析,就叫开放递归解析器。
攻击者可以借它查询各种大响应记录。
开放递归越多,攻击者可用的反射器越多。
4. 典型攻击链路
1. 攻击者构造 DNS 查询
2. 源 IP 伪造成受害者
3. 查询发给开放解析器
4. 解析器把响应发给受害者
5. 大量解析器同时响应形成 DDoS
受害者看到的是来自很多 DNS 服务器的 UDP 53 流量。
它不一定能直接看到真正攻击者。
5. 常见放大因素
| 因素 | 为什么会放大 | 例子 |
|---|---|---|
| UDP 源 IP 可伪造 | 响应发给受害者 | 反射攻击 |
| 响应比请求大 | 流量倍增 | TXT、DNSSEC |
| 开放递归多 | 反射器多 | 公网 misconfig |
| EDNS0 大响应 | UDP payload 变大 | 4096 字节响应 |
| ANY 查询 | 可能返回多类记录 | 现代常被限制 |
不同服务器配置会影响实际放大倍数。
6. 防护思路
防护要从多方入手。
- 解析器不要开放递归给全网。
- 权威 DNS 限制异常查询和大响应。
- 使用 Response Rate Limiting。
- 网络运营方做 BCP 38 源地址过滤。
- 受害侧使用 DDoS 清洗和限速。
- 监控异常 UDP 53 流量。
其中源地址过滤非常关键,它能减少伪造源 IP 的可能性。
7. 常见误区与追问
- 误区:只有递归 DNS 会被攻击。 权威 DNS 也可能被打,但开放递归更常被用作反射器。
- 误区:DNSSEC 一定不安全。 DNSSEC 增大响应体,需要配合合理响应大小和限速策略。
- 误区:关闭 UDP DNS 就能解决。 DNS 依赖 UDP,工程上要限制滥用而不是简单关闭。
- 追问:为什么攻击者要伪造源 IP? 这样 DNS 响应会被反射到受害者。
- 追问:开放递归为什么危险? 它让任何人都能借你的解析器发起反射流量。
- 追问:RRL 是什么? Response Rate Limiting,用于限制相似 DNS 响应速率。
8. 加强记忆
DNS 放大攻击记成“小请求、假地址、大响应”。
防护重点是不开开放递归、限速大响应、过滤伪造源。