什么是 DNS 高速缓存中毒? | DNS 欺骗

攻击者可通过诱使 DNS 解析器高速缓存错误信息来使 DNS 高速缓存中毒,其结果是解析器将错误 IP 地址发送给客户端,而尝试导航到网站的用户将被定向到错误位置。

学习目标

阅读本文后,您将能够:

  • 定义 DNS 高速缓存中毒
  • 了解 DNS 高速缓存的工作方式
  • 说明攻击者如何能够使 DNS 高速缓存中毒
  • 了解 DNSSEC 如何帮助防止 DNS 中毒攻击

复制文章链接

Free DNS included with any Cloudflare plan

什么是 DNS 高速缓存中毒?

打个比方,作为一个高年级恶作剧,高中毕业班学生调换他们高中校园内的所有教室号,使得那些不知道校园布局的新生第二天迷路并出现在错误的教室中。现在想象一下,不匹配的教室号记录到校园目录中,学生不断前往错误的教室,直到有人最终注意到并更正了目录为止。

DNS 缓存中毒是向 DNS 缓存中输入错误信息的行为,以便使 DNS 查询返回错误响应并将用户定向到错误网站。DNS 高速缓存中毒也称为“DNS 欺骗”。IP 地址是 Internet 的“教室号”,其能够使网络流量到达正确位置。DNS 解析器缓存是“校园目录”,当它们存储错误信息时,流量将转向错误位置,直到缓存的信息被更正为止。(注意,这实际上并未断开真实网站与其真实 IP 地址的连接。)

因为 DNS 解析器通常无法验证其缓存中的数据,因此错误 DNS 信息会保留在缓存中,直到生存时间(TTL)到期或手动将其移除为止。许多漏洞可能使 DNS 中毒,但主要问题是 DNS 是为远远更小的 Internet 构建的,并且基于信任原则(非常类似于 BGP)。一种更安全的 DNS 协议称为 DNSSEC,其旨在解决其中的一些问题,但尚未得到广泛采用。

DNS 解析器有什么作用?

DNS 解析器为客户端提供与域名关联的 IP 地址。换句话说,它们将例如“cloudflare.com”等人类可读的网站地址转换为机器可读的 IP 地址。域名服务将域名转换为计算机可读的 IP 地址。当用户尝试导航到某个网站时,其操作系统将向 DNS 解析器发送请求。DNS 解析器使用 IP 地址进行响应,然后 Web 浏览器使用该地址开始加载此网站。

DNS 高速缓存如何工作?

DNS 解析器会将对 IP 地址查询的响应保存一定的时间。这样,解析器便可更快地响应未来查询,并且无需与典型 DNS 解析过程中涉及的许多服务器进行通信。只要与该 IP 地址关联的指定生存时间 (TTL) 允许,DNS 解析器就会将响应保存在其高速缓存中。

DNS 未缓存响应:

DNS 未缓存响应

DNS 已缓存响应:

DNS 已缓存响应

攻击者如何使 DNS 缓存中毒?

攻击者可通过假冒 DNS 域名服务器,向 DNS 解析器发出请求,然后在 DNS 解析器查询域名服务器时伪造答复,使 DNS 缓存中毒。这之所以可能,是因为 DNS 服务器使用 UDP 而非 TCP,并且当前没有对 DNS 信息的验证。

DNS 缓存中毒过程:

DNS 缓存中毒过程

中毒的 DNS 缓存:

中毒的 DNS 缓存

DNS 请求和响应使用 UDP 或用户数据报协议,而不是使用 TCP,TCP 会要求通信双方都进行“握手”来启动通信并验证设备的身份。在使用 UDP 时,不保证连接已打开,接收者已准备好接收,或者发送者就是它们所说的发送者。因此 UDP 很容易伪造 – 攻击者可通过 UDP 发送消息,并通过伪造标头数据来假装这是来自合法服务器的响应。

如果 DNS 解析器收到伪造的响应,它会不加鉴别地接受并缓存这些数据,因为无法验证这些信息是否正确且来自合法来源。DNS 是在 Internet 早期诞生的,与之相连的唯一参与者是大学和研究中心。那时没有理由预计有人会传播虚假 DNS 信息。

尽管 DNS 缓存过程中存在这些主要漏洞,但 DNS 中毒攻击并非易事。由于 DNS 解析器实际上确实查询权威性域名服务器,因此在权威性域名服务器作出真实答复前,攻击者只有几毫秒的时间来发送虚假答复。

攻击者还必须知道或猜测许多因素才能进行 DNS 欺骗攻击:

  • 目标 DNS 解析器不缓存哪些 DNS 查询,以便使解析器查询权威性域名服务器
  • DNS 解析器正在使用哪个端口* – 它们曾对每个查询都使用相同端口,但是现在它们每次都使用不同的随机端口
  • 请求 ID 号
  • 查询将转到哪个权威性域名服务器

攻击者还可通过其他某种方式访问 DNS 解析器。如果恶意方对 DNS 解析器进行操作、黑客入侵或获得其物理访问 权,他们能够更轻松地更改缓存的数据。

* 在网络连接中,端口是通信接收的虚拟点。计算机具有多个端口,每个端口都有自己的编号,并且为使计算机彼此通信,还必须为某些类型的通信指定某些端口。例如,HTTP 通信始终转到端口 80,而 HTTPS 始终使用端口 443。

DNS 欺骗和审查

多个政府有意在其国家/地区中使 DNS 缓存中毒,以便拒绝对特定网站或网络资源的访问。

DNSSEC 如何帮助防止 DNS 中毒?

DNSSEC 是 Domain Name System Security Extensions 的简称,这是一种验证 DNS 数据完整性和来源的方法。DNS 在最初设计时没有此类验证,这就是 DNS 有可能中毒的原因。

TLS/SSL 非常类似,DNSSEC 使用公钥加密(一种对信息进行数字签名的方式)来对数据进行鉴定和身份验证。DNSSEC 扩展是在 2005 年发布的,但 DNSSEC 尚未成为主流,因此 DNS 仍然容易受到攻击。