0Pricing
Cyber Security Academy · 课时

DNS 欺骗与缓存投毒

伪造 DNS 响应。

DNS 欺骗与缓存投毒 是 CoddyKit 上的免费 Cyber Security Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cyber Security Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cyber Security Academy 课程共包含 4 节课。

伪造 DNS 响应

DNS 欺骗是提供伪造 DNS 响应,使受害者将某个名称解析为攻击者控制的 IP 地址。缓存投毒是其中一种特定形式:伪造的响应被递归解析器接受并存储,从而感染使用该解析器的每个客户端。

其目标通常是重定向流量:将用户发送到钓鱼页面、恶意软件投放站点或中间人代理。

竞争条件

解析器发送查询后,攻击者会尝试在合法权威服务器响应之前注入伪造的回复。如果伪造回复先到达且匹配预期字段,就会赢得竞争并被缓存。

这就是为什么在攻击和防御中,延迟、数据包顺序以及解析器的出站端口都如此重要。

攻击者必须猜中的匹配字段

要让伪造的 UDP 响应被接受,攻击者必须匹配:

  • 源 IP(权威服务器)。
  • 目标端口(解析器的出站端口)。
  • 查询名称和类型。
  • 16 位的事务 ID(TXID)。

如果没有保护措施,唯一真正的秘密就是 TXID,因此每个数据包的成功概率大约为 1/65,536。

Kaminsky 攻击

丹·卡明斯基在 2008 年披露的研究表明,缓存投毒比人们原先想象的容易得多。攻击者不再针对每条记录进行一次竞争,而是查询大量不存在的子域名(aaa.bank.com、aab.bank.com……),并洪泛发送包含整个域的恶意 NS 或胶水记录的伪造响应。

每次尝试都是一次全新的竞争,查询未命中也不会产生缓存惩罚,因此攻击者可以不断尝试,直到猜中并污染整个区域。

for sub in $(seq 1 10000); do
  dig $sub.bank.com @victim-resolver &
done
# Attacker floods forged NS answers in parallel

源端口随机化

Kaminsky 攻击之后最主要的缓解措施是源端口随机化。解析器不再使用固定的出站端口,而是为每次查询选择一个随机的临时端口。

这样一来,攻击者必须同时猜中 TXID(16 位)和源端口(约 16 位),将搜索空间扩大到约 2^32。这使盲目的路径外投毒变得不切实际,不过在熵不足的实现中仍非绝对不可能。

路径上与路径外的攻击者

路径外攻击者看不到查询,只能盲目猜测 TXID 和端口。路径上攻击者(恶意 Wi-Fi、遭入侵的路由器、ISP)可以直接读取查询,并轻易构造匹配的响应。

路径中的欺骗会完全绕过端口随机化,因此要获得强有力的安全保证,需要加密传输和 DNSSEC 验证,而不能仅靠提高熵。

恶意 DHCP 与解析器劫持

攻击者并不总是伪造数据包。恶意 DHCP 服务器可以向客户端下发恶意 DNS 解析器地址,使每次查询都由攻击者回答。恶意软件也会重写 /etc/resolv.conf 或路由器设置。

DNSChanger 恶意软件等历史威胁曾在多年间悄然将受害者的 DNS 重定向至欺诈性服务器。请验证您的设备群实际使用了哪些解析器。

cat /etc/resolv.conf
# nameserver should match your trusted internal resolver

权威范围检查

解析器会执行权威范围规则:响应只能为其负责的区域内的名称提供记录。针对 bank.com 的响应不能偷偷带入 unrelated.com 的记录。

这会将 Kaminsky 风格的注入限制在被查询的域内,并防止单个被投毒的响应污染无关区域。请验证您的解析器执行了严格的权威范围过滤。

检测投毒

正在进行或已经成功的投毒可能表现为:

  • 针对随机、不存在的子域名的查询量激增。
  • 针对同一 TXID 出现重复或顺序异常的 DNS 响应。
  • 解析出的 IP 突然指向意外的自治系统编号或地理位置。
  • 解析器响应与可信的带外查询结果不一致。

分层防御

单一控制措施并不足够。请结合使用:

  • 源端口 + TXID 随机化,提高路径外攻击的成本。
  • DNSSEC 验证,让伪造响应无法通过签名检查。
  • DoT/DoH,阻止路径上的攻击者查看和篡改流量。
  • 0x20 编码(查询名称中的随机大小写),增加额外熵。
  • 监控 NXDOMAIN 洪泛和响应异常。

实际运行情况

实际上,在今天已经完成补丁更新的解析器上,盲目的路径外缓存投毒很少见,但它仍可能通过旁路重新出现(例如 UDP 分片,以及类似 SAD DNS 的基于 ICMP 的端口推断攻击)。请及时为解析器安装补丁,并优先使用支持验证且经过加密的解析器。

请记住:影响最大的 DNS 入侵通常不是巧妙的投毒竞争,而是注册商账户被盗。两端都要保护。

快速检查

检查您对卡明斯基技术的理解。

回顾

DNS 欺骗会伪造应答;缓存投毒会使伪造应答持续存在于解析器中。是否接受应答取决于源 IP、端口、查询名称和 TXID 是否匹配。源端口随机化和可信范围检查提高了对非路径攻击者的防护门槛,但路径上的攻击者和侧信道仍然存在。

深度防御(熵、DNSSEC 验证、加密传输和监控)至关重要。接下来我们将了解攻击者如何滥用 DNS 移动数据:隧道和外泄。

常见问题解答

「DNS 欺骗与缓存投毒」课时是免费的吗?

是的 — 「DNS 欺骗与缓存投毒」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cyber Security Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cyber Security Academy 课程共包含 4 节课。

「DNS 欺骗与缓存投毒」这节课中我会学到什么?

伪造 DNS 响应。 你通过在浏览器中直接运行的动手代码来练习 Cyber Security Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Cyber Security Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Cyber Security Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「DNS 欺骗与缓存投毒」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Cyber Security Academy 课中编写并运行代码吗?

能。每节 Cyber Security Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. DNS 的工作原理及其风险
  2. DNS 欺骗与缓存投毒
  3. DNS 隧道与数据外泄
  4. DNSSEC 与 DNS 筛选
← 返回 Cyber Security Academy