[分享]什么是DNS放大攻击?
DNS 放大攻击:互联网的"扩音器"效应
DNS(域名系统)是互联网的"电话簿"——当你输入 www.example.com 时,DNS 服务器会帮你把域名翻译成服务器能理解的 IP 地址。这个查询过程通常只需要一个几十字节的 UDP 数据包,返回的结果也就几百字节。绝大多数情况下,这套机制高效、轻量、完美。
但问题在于:DNS 协议默认使用 UDP,并且不会验证请求者的真实身份。
DNS 放大攻击,正是利用了这两个特性。攻击者把受害者的 IP 地址伪装成请求的"来源",向大量开放的 DNS 服务器发送一个很小的查询请求,然后这些 DNS 服务器会将数倍甚至数十倍大的响应数据发向受害者。用一个小的请求"撬动"几十倍大的响应——这就是"放大"的含义。
从"问路"到"堵门":DNS 放大是如何实现的
DNS 放大攻击的技术原理可以拆解为三个关键环节。
环节一:UDP 的无连接特性
UDP 传输不需要事先建立连接。发送一个 UDP 包时,你只需要在 IP 头中填写"源 IP 地址"和"目标 IP 地址"。协议本身不会验证"源 IP 地址"是否真的属于发送者——这是 IP 协议设计上的一个"信任"假设,也是所有反射放大攻击的共同基石。
攻击者要做的事情很简单:把一个 DNS 查询请求的源 IP 字段填成受害者的 IP 地址,然后把请求发给一个开放的 DNS 服务器。
DNS 服务器收到这个请求后,会忠实地把响应发往"源 IP 地址"——也就是受害者。服务器完全不知道这个请求来自攻击者,也不知道响应会打向一个无辜的第三方。
环节二:请求小而响应大——放大倍数
DNS 放大攻击之所以"放大",关键在于请求和响应的大小存在巨大不对称性:
| 查询类型 | 请求大小(约) | 响应大小(约) | 放大倍数 |
|---|---|---|---|
| A 记录(普通域名) | 30-50 字节 | 100-200 字节 | 3-5 倍 |
| ANY 查询 | 30-50 字节 | 500-3000+ 字节 | 10-60 倍 |
| DNSSEC 响应 | 30-50 字节 | 1000-4000+ 字节 | 20-80+ 倍 |
ANY 查询:攻击者请求域名的"所有记录类型"(A、AAAA、MX、TXT、NS、CNAME 等)。如果目标域名的 DNS 记录比较多,响应包可以轻松达到 1000-2000 字节。其中 TXT 记录尤其容易被利用——如果域名的 TXT 记录包含 SPF 或 DKIM 等长字符串,单个响应甚至能达到 3000-4000 字节,放大倍数超过 80 倍。
DNSSEC(DNS 安全扩展) 的响应中包含数字签名,数据量远大于普通响应。启用 DNSSEC 的域名,响应包通常超过 1000 字节,甚至达到 4000 字节以上。2010 年前后,DNSSEC 的普及直接导致 DNS 放大攻击的规模成倍增长。
EDNS0 扩展:现代 DNS 支持更大的 UDP 数据包(最大可达 4096 字节),意味着响应的"天花板"更高了。攻击者只要在请求中包含 EDNS0 选项,就能诱使 DNS 服务器返回远超传统 512 字节上限的大型响应。
攻击者用 50 字节撬动 3000 字节,放大倍数是 60 倍。如果攻击者控制的僵尸网络总带宽是 10 Gbps,打到目标身上的就是 600 Gbps——这就是 DNS 放大的威力所在。
环节三:开放的 DNS 解析器——互联网上到处都是"扩音器"
并非所有的 DNS 服务器都能被利用。攻击者需要的是 开放解析器(Open Resolver)——也就是允许来自任意 IP 地址的查询请求的 DNS 服务器。
互联网上有大量配置不当或默认开放的 DNS 服务器。2018 年的一项扫描显示,仍有超过 200 万个开放 DNS 解析器存在于公网上。它们分布在全球各地,由不同的 ISP、企业、甚至家庭路由器运营。
攻击者并不需要控制这些服务器,只需要知道它们的 IP 地址就够了。每一个开放解析器,都是一个免费的攻击"扩音器"。
攻击的完整链路
把上述三个环节连起来,一次典型的 DNS 放大攻击流程是这样的:
1 | 1. 攻击者准备好一个被控的僵尸网络(或一台足够带宽的服务器)。 |
整个过程,攻击者实际发送的流量,和被放大后打到受害者身上的流量,比例可以达到 1:50 甚至 1:100。
攻击的后果:不只是带宽堵死
DNS 放大攻击以"带宽耗尽"为主要目标,但其连锁反应远超预期:
1. 带宽饱和(直接后果)
攻击流量抵达目标机房的接入链路后,管道被填满。正常用户的请求无法进入,业务完全中断。对于云计算厂商或大型企业,T 级攻击可能持续数分钟到数小时,造成的经济损失可达每分钟数十万元。
2. 上游网络设施过载(间接伤害)
被利用的开放 DNS 服务器本身也会承受大量压力。虽然它们每个只响应几百字节的包,但当攻击者同时利用数千台服务器时,服务器自身的 CPU 和出站带宽也会被部分占用。极端情况下,这些"被利用"的 DNS 服务器可能因为负载过高而影响其正常用户的查询服务——一次攻击的"连带伤害"可能波及全球数百万人。
3. 回溯困难(追责阻碍)
由于攻击者伪造了源 IP 地址,受害者看到的攻击流量来源是那些无辜的开放 DNS 服务器,而非攻击者的真实 IP。受害者的安全团队试图"溯流而上"时,会陷入一个死循环:每一台 DNS 服务器都在说"有人问过这个问题,我就回了",但问的人是谁,服务器不知道。
为什么 DNS 放大攻击至今仍然频繁发生?
DNS 放大攻击最早在 2000 年代初期被记录,2010 年 DNSSEC 普及后规模暴增。十多年过去了,它仍然是互联网上最主要的 DDoS 攻击方式之一。
原因很现实:
- 开放解析器太多了:尽管安全社区不断呼吁关闭递归解析器的对外开放,仍有大量 DNS 服务器配置不当或默认开放。2018 年的数据:超过 200 万个开放解析器存在于公网。
- DNSSEC 的副作用:DNSSEC 本意是增强 DNS 的安全性(防止劫持和篡改),但它增加的签名数据量,反而为放大攻击提供了更大的"扩音器"。
- 源 IP 伪造防不胜防:虽然 BCP 38(最佳实践建议 ISP 过滤伪造源 IP 的流量)已经存在了二十多年,但全球仍有大量 ISP 没有实施源地址验证。攻击者可以继续伪造 IP。
- 攻击工具高度自动化:开源工具和黑产服务让攻击变得极其简单,攻击者只需输入目标 IP,工具自动完成扫描、查询构造和发送全流程。
防御之道:从源头堵住"扩音器"
DNS 放大攻击的防御需要分两层:作为潜在受害者 和 作为潜在放大者。
第一层:作为受害者——上游清洗
与所有带宽型 DDoS 攻击一样,受害者本地机房的带宽无法硬抗 T 级攻击。唯一现实的防御手段是依赖上游 ISP 或云防护服务商的清洗中心。
- 流量牵引 + 流量清洗:将目标 IP 的流量通过 BGP 路由牵引到高防机房,清洗中心通过深度包检测识别并丢弃 DNS 放大流量,将干净流量回注源站。
- Anycast 网络:将同一 IP 广播到全球多个节点,攻击流量分散到各个节点分别吸收。
第二层:作为潜在放大者——关闭开放解析器(全球责任)
这是从源头上减少"扩音器"数量的方式。每一个开放 DNS 解析器,都是一颗潜在的攻击弹药。
- 关闭递归查询:DNS 服务器只为本网段的客户端提供递归解析服务,拒绝来自外部的查询请求。
- 限制查询来源 IP:在 DNS 服务器配置中设置 ACL(访问控制列表),只允许合法客户端的 IP 范围发起查询。
- 限制响应大小:使用
max-udp-size等配置选项限制单个 UDP 响应的最大值,但注意这可能影响 DNSSEC 等正常功能。
BIND 示例配置:
1 | options { |
第三层:响应速率限制(RRL)
在 DNS 服务器上配置响应速率限制(Response Rate Limiting),对来自同一源 IP 或指向同一目标 IP 的相同查询,限制响应频率:
- 超过设定阈值的响应被延迟或丢弃。
- 可以有效降低放大攻击的"量",让单台服务器的放大能力受限。
BIND 9.10+ 支持 rate-limit 语句,可精确控制每秒允许的响应数量。
第四层:全网层面的 BCP 38 实施
BCP 38(最佳实践 38)建议 ISP 实施入口过滤(Ingress Filtering):从某个接口进入的流量,如果源 IP 地址不属于该接口所连接的合法地址范围,则直接丢弃。
如果 BCP 38 在全球得到全面实施,伪造源 IP 地址就不可能实现——DNS 放大攻击的根基就会被动摇。但现实是,这一标准推行了二十多年,进展依然缓慢。
历史案例:1.7 Tbps 的"震网"时刻
2016 年,针对法国托管服务商 OVH 的一次 DNS 放大攻击刷新了当时的 DDoS 规模记录。攻击峰值流量达到 1.7 Tbps,而驱动这场攻击的,不过是数百台被控制的设备利用了数千个开放 DNS 解析器。
值得注意的是,真正发起这次攻击的攻击者,其实际出站带宽可能不到 100 Mbps。他们只是精准地找到了放大倍数足够高的解析器和查询组合,就用极低的成本撬动了互联网基础设施的极限。
这次事件之后,全球 CDN 和安全厂商加大了对 DNS 放大攻击的应对投入,但技术上的"不对称"始终没有被消除。
DNS 放大 vs. 其他反射放大攻击
| 攻击类型 | 利用协议 | 典型端口 | 放大倍数 | 常见用途 |
|---|---|---|---|---|
| DNS 放大 | DNS | 53 | 10-80 倍 | 带宽耗尽 |
| NTP 放大 | NTP(时间同步) | 123 | 50-200 倍 | 带宽耗尽(monlist 命令) |
| Memcached 放大 | Memcached | 11211 | 数千-5万倍 | 极端带宽消耗 |
| CLDAP 反射 | LDAP | 389 | 50-70 倍 | 带宽耗尽 |
Memcached 放大虽然理论上倍数最大(超过 5 万倍),但由于 Memcached 服务在公网上的开放数量远少于 DNS,且近年来多数厂商已默认关闭 UDP 端口,其实际威胁程度已大幅下降。DNS 放大凭借"到处都是解析器"的优势,仍然是反射放大的首选武器。
总结
DNS 放大攻击的本质,是利用UDP 的无连接性 + IP 源地址可伪造 + 请求响应大小不对称这三个特性,把互联网上数百万个正常的 DNS 服务器变成了攻击者的"扩音器"。
它的破坏路径是:伪装源 IP → 发送小请求 → 接收方返回大响应 → 目标被海量响应淹没。
防御 DNS 放大没有银弹。需要个人/企业关闭开放解析器、ISP 实施 BCP 38、云计算服务商建设清洗中心、监管机构推动标准落地——这是一个需要多方协同的系统工程。
DNS 在互联网诞生之初被设计为一个完全开放的、无需认证的系统。它的核心使命是"把一切查询都如实回答",这种"无条件的诚实"却成了它最容易被利用的弱点。互联网的许多设计决策都建立在"默认信任"的假设之上——当这份信任被持续滥用时,修复成本远比当初的设计成本高得多。






![[分享]什么是DNS放大攻击?](/../blogimage/260725/260725_3.webp)