域名系统欺骗
定义
域名系统欺骗指在域名解析过程中,用虚假的域名到地址的映射替代真实映射,使客户端或递归解析服务器得到并采信错误结果的行为[1]。它既可以通过伪造应答报文实现,也可以通过篡改服务器上的记录实现:前者称为欺骗,后者在中文技术文献里常被区分为篡改或劫持,二者都会导致域名被导向错误的 IP 地址[1]。
在英文文献中,spoofing、poisoning、hijacking 等词常被混用;较严格的分法把“伪造应答、污染缓存”归入欺骗与投毒,把“直接改动注册数据或服务器配置”归入劫持[4]。中文文献中的“DNS 欺骗”一词,多数时候侧重指伪造解析应答这一技术路径[5]。
原理
域名系统的主要功能是把便于记忆的域名翻译成 IP 地址,为减少重复查询,递归服务器会把查询结果按记录的有效期(TTL)暂存在缓存中,到期后再向上游查询[2]。欺骗的核心在于抢先注入:冒充权威服务器向前述递归服务器发送伪造应答,使其把假记录写入缓存,此后在有效期内的所有查询都会返回该假记录[6]。
伪造应答要被接受,需同时满足若干条件:比真实应答更早到达;问题段与原始查询一致;报文标识符(Transaction ID)与查询匹配;源地址、目的端口与查询的目标相吻合[2]。因此,基本攻击方法是对查询标识符和源端口做暴力猜测,成功率取决于攻击者能在多长的“窗口期”内反复投递伪造报文[2]。
2008 年公布的 Kaminsky 方法提高了攻击效率:攻击者先对大量不存在的子域名发起查询,诱使递归服务器反复向上游求证,再对这些查询批量注入伪造应答[2]。伪造应答利用授权段(Authority)与附加段(Additional)携带数据,附带一条自造的权威服务器记录,从而把整个域及其子域的解析权交给攻击者控制的服务器[2]。
另一条路径是中间人式欺骗:攻击者处于客户端与解析服务器之间,或先在同一网段实施地址伪造,截获查询后再以伪造应答回覆客户端,此类做法成功与否依赖于攻击者在网络中的位置[7]。当客户端已被恶意程序改写解析配置、全部查询被送往攻击者架设的服务器时,效果与此类似,通常被称为 Pharming[4]。
发展历程
域名系统在设计之初并未考虑来源认证,早期的解析实现倾向于接受任何看起来合理的应答,缓存投毒因此在 1990 年代就已被演示[8]。1990 年 Steven Bellovin 发现 DNS 存在严重缺陷,相关报告到 1995 年才公开发表;1997 年又出现利用附加段伪造任意记录的问题,促使协议层面引入区域边界规则,同年互联网工程任务组(IETF)发布首份 DNS 安全扩展文档 RFC 2065[9]。
基于数字签名的域名系统安全扩展(DNSSEC)于 1999 年以 RFC 2535 形式形成第一版,但因密钥更换流程复杂,2001 年的评估认为其不适合部署[10]。修订后的版本于 2005 年以 RFC 4033、4034、4035 发布,同年 10 月瑞典的 .se 成为首个签署的区域[10]。
2008 年 7 月,研究者 Dan Kaminsky 公开了批量攻击缓存的方法,业界随即大规模修补解析软件,并在实践中推广源端口随机化,使攻击所需猜测次数由数万级升至十亿级以上[6]。2020 年 11 月,加州大学河滨分校与清华大学的研究者公布 SAD DNS,利用操作系统对 ICMP 报文的速率限制推断解析服务器的出站端口,重新绕开源端口随机化,漏洞编号 CVE-2020-25705[11]。该问题在 Linux 内核 5.10 及后续版本中通过为速率限制加入随机性得到修补[12]。一年后,同一团队又公布 SAD DNS 2.0,改用 ICMP 需分片、重定向等报文构造侧信道[13]。
应用
在网络安全教学中,域名系统欺骗常被用来演示协议缺陷:实验通过构造伪造应答包,在局域网内把指定域名的访问重定向到预设页面,以此说明解析环节为何需要认证机制[14]。类似的构造也用于测试解析软件和网络设备是否具备抗欺骗能力,例如检查递归服务器在接收到错误标识符应答时的处理方式[15]。
防御侧的应用同样围绕该攻击展开。解析服务运营方通过随机化查询标识符与源端口、启用 DNS Cookie、限制应答速率等手段降低被投毒的概率[11]。权威侧与递归侧的签名与验证则构成更彻底的应对方式,使未带有效签名的伪造记录无法通过校验[12]。此外,基于网络流量图结构的检测方法也被用于识别可能已被污染的解析服务器与目标地址[16]。
局限
针对缓存投毒的欺骗受缓存机制制约:递归服务器一旦缓存了某条记录,在有效期内不会再次向上游查询,攻击者只能在记录过期后寻找新的机会,早期形式的攻击效率因此很低[2]。源端口随机化推行后,攻击窗口通常只有数十毫秒,需要同时猜中标识符和端口,成功率显著下降[12]。
欺骗的效果还受攻击者位置限制。路径外的攻击者无法监听链路,只能依靠猜测和大量投递;中间人式欺骗则要求处于客户端与服务器之间,或先控制同网段的设备,公开网络之外的场景实施难度较大。有分析指出,即便在千兆网络条件下对源端口随机化的攻击也可能成功,但所需时间可达十小时量级,实际可行性有限[17]。
防御手段本身也有边界。DNSSEC 只能证明数据来源与完整性,无法阻止解析结果被用于其他目的,且其效力依赖签名与验证的普遍部署;在未部署签名的区域,伪造记录仍可能被接受[13]。DNS Cookie 等轻量措施覆盖面有限,据 BIND 维护方统计,当时约 17% 的顶级域支持 Cookie,尚不足以对未携带有效 Cookie 的通信一律不予信任[11]。缓解措施也多是针对具体实现:为 ICMP 速率限制加入随机性只消除 SAD DNS 所利用的那条侧信道,对其它方式的投毒并无普遍效果[11]。
参见
参考资料
- 从百度被攻击事件浅谈 DNS 攻击 - 跳至主要内容 跳到 Ask Learn 聊天体验 [引用日期2026-10-29]
- DNS-cache-poisoning-attack-analysis(PDF) [引用日期2026-10-29]
- A Revisit of DNS Kaminsky Cache Poisoning Attacks [引用日期2026-10-29]
- What is abuse of the DNS [引用日期2026-10-29]
- DNS欺骗 [引用日期2026-10-29]
- SAD DNS makes cache poisoning possible again [引用日期2026-10-29]
- Một số dạng tấn công DNS phổ biến [引用日期2026-10-29]
- The Need for DNSSEC [引用日期2026-10-29]
- DNSSEC – co bylo a co bude [引用日期2026-10-29]
- Historie a principy DNSSEC [引用日期2026-10-29]
- SAD DNS - Side channel attack [引用日期2026-10-29]
- sad-dns-new-dns-cache-poisoning-technique-emerges [引用日期2026-10-29]
- new-domain-name-system-vulnerability-revealed [引用日期2026-10-29]
- 基于局域网的域名系统欺骗方案的设计与实现-机电技术2012年04期-知网阅读 [引用日期2026-10-29]
- DNS Cache Poisoning Attack Reloaded: [引用日期2026-10-29]
- US11930020 [引用日期2026-10-29]
- Protecting against DNS cache poisoning attacks [引用日期2026-10-29]