Skip to content
Vol. 1 · Ed. 2026
CyberGlossary
Entry № 374

DNS 缓存投毒

审核人Cybersecurity entrepreneur & security researcher

DNS 缓存投毒 是什么?

DNS 缓存投毒一种将伪造记录插入 DNS 解析器缓存的攻击,使后续查询在 TTL 过期前始终返回攻击者选定的地址。


DNS 缓存投毒以递归解析器为目标,诱使其接受一条伪造的应答,随后将其存储并对外提供。要让伪造应答被采信,它必须与查询名称匹配、到达正确的 UDP 端口,并携带正确的 16 位事务 ID(TXID)——因此经典攻击归结为在真正的权威应答到达之前猜中或抢先命中这些字段。

Dan Kaminsky 在 2008 年披露的漏洞(CVE-2008-1447)使这一攻击变得切实可行:通过强制查询随机子域名并对 16 位 TXID 发起海量猜测,攻击者无需等待缓存的否定应答即可持续重试,从而投毒父域的 NS 记录。应急修复方案是源端口随机化,将猜测空间从 16 位扩展到约 32 位。2020 年,加州大学河滨分校与清华大学的研究人员公布了 SAD DNSCVE-2020-25705):Linux 全局 ICMP 速率限制计数器中的一个侧信道,可让链路外攻击者推断出开放的临时源端口,从而抵消上述收益。Linux 通过随机化 ICMP 速率限制计数器(内核 5.10+)修复了该问题。

flowchart TD
  A[攻击者触发对 random.bank.com 的查询] --> R[递归解析器]
  R -->|"UDP 查询,随机 TXID + 源端口"| NS[真实权威 NS]
  A -.->|"泛洪伪造应答:猜测 TXID + 端口"| R
  R --> M{伪造应答是否在真实应答之前<br/>匹配名称 + 端口 + TXID?}
  M -->|是| P[被投毒的记录缓存整个 TTL]
  M -->|否| L[合法应答被缓存]
  P --> V[解析器的所有客户端被重定向到攻击者 IP]

防御措施:DNSSEC(RFC 4033–4035)对记录进行加密签名,使伪造应答无法通过验证;0x20 大小写随机化查询名称最小化增加熵;而加密传输(DoH/DoT)则彻底消除了明文 UDP 攻击面。短而保守的 TTL 可在投毒确实发生时限制其影响范围。

示例

  1. 01

    2008 年的 Kaminsky 攻击(CVE-2008-1447),利用了主流解析器中端口可预测的缺陷。

  2. 02

    SAD DNS(CVE-2020-25705),通过 ICMP 速率限制侧信道使缓存投毒重新可行。

常见问题

DNS 缓存投毒 是什么?

一种将伪造记录插入 DNS 解析器缓存的攻击,使后续查询在 TTL 过期前始终返回攻击者选定的地址。 它属于网络安全的 攻击与威胁 分类。

DNS 缓存投毒 是什么意思?

一种将伪造记录插入 DNS 解析器缓存的攻击,使后续查询在 TTL 过期前始终返回攻击者选定的地址。

如何防御 DNS 缓存投毒?

针对 DNS 缓存投毒 的防御通常结合技术控制与运营实践,详见上方完整定义。

DNS 缓存投毒 还有哪些其他名称?

常见的别称包括: 缓存投毒, DNS 欺骗(缓存)。

相关术语

另见