攻击者可通过诱使 DNS 解析器高速缓存错误信息来使 DNS 高速缓存中毒,其结果是解析器将错误 IP 地址发送给客户端,而尝试导航到网站的用户将被定向到错误位置。
阅读本文后,您将能够:
复制文章链接
DNS 缓存投毒是指向 DNS 缓存中输入错误信息的行为,以便使 DNS 查询返回错误响应并将用户定向到错误网站。DNS 缓存投毒也称为“DNS 欺骗”。IP 地址是互联网的“电话号码”,它能够使网络流量到达正确的位置。DNS 解析器缓存类似于“通讯录”,其中会列出所有电话号码以及它们存储错误信息的时间,在缓存的信息得到更正之前,流量将会传输到错误的位置。(请注意,这实际上并未断开真实网站与相应的真实 IP 地址之间的连接。)
因为 DNS 解析器通常无法验证其缓存中的数据,因此错误 DNS 信息会保留在缓存中,直到生存时间(TTL)到期或手动将其移除为止。许多漏洞可能使 DNS 中毒,但主要问题是 DNS 是为远远更小的 Internet 构建的,并且基于信任原则(非常类似于 BGP)。一种更安全的 DNS 协议称为 DNSSEC,其旨在解决其中的一些问题,但尚未得到广泛采用。
DNS 解析器为客户端提供与域名关联的 IP 地址。换句话说,它们将例如“proxy.igniterra.cc”等人类可读的网站地址转换为机器可读的 IP 地址。域名服务将域名转换为计算机可读的 IP 地址。当用户尝试导航到某个网站时,其操作系统将向 DNS 解析器发送请求。DNS 解析器使用 IP 地址进行响应,然后 Web 浏览器使用该地址开始加载此网站。
DNS 解析器会将对 IP 地址查询的响应保存一定的时间。这样,解析器便可更快地响应未来查询,并且无需与典型 DNS 解析过程中涉及的许多服务器进行通信。只要与该 IP 地址关联的指定生存时间 (TTL) 允许,DNS 解析器就会将响应保存在其高速缓存中。
DNS 未缓存响应:
DNS 已缓存响应:
攻击者可通过假冒 DNS 域名服务器,向 DNS 解析器发出请求,然后在 DNS 解析器查询域名服务器时伪造答复,使 DNS 缓存中毒。这之所以可能,是因为 DNS 服务器使用 UDP 而非 TCP,并且当前没有对 DNS 信息的验证。
DNS 缓存中毒过程:
中毒的 DNS 缓存:
DNS 请求和响应使用 User Datagram Protocol (UDP),而不是使用 TCP,TCP 会要求通信双方都进行“握手”来启动通信。使用 UDP 时,无法保证连接已打开或收件人的设备已准备就绪。因此,UDP 很容易被伪造,也就是说,攻击者可以通过 UDP 发送信息,并通过伪造标头数据来假装这是来自合法服务器的响应。
如果 DNS 解析器收到伪造的响应,它会不加鉴别地接受并缓存这些数据,因为无法验证这些信息是否正确且来自合法来源。DNS 是在 Internet 早期诞生的,与之相连的唯一参与者是大学和研究中心。那时没有理由预计有人会传播虚假 DNS 信息。
尽管 DNS 缓存过程中存在这些主要漏洞,但 DNS 中毒攻击并非易事。由于 DNS 解析器实际上确实查询权威性域名服务器,因此在权威性域名服务器作出真实答复前,攻击者只有几毫秒的时间来发送虚假答复。
攻击者还必须知道或猜测许多因素才能进行 DNS 欺骗攻击:
攻击者还可通过其他某种方式访问 DNS 解析器。如果恶意方对 DNS 解析器进行操作、黑客入侵或获得其物理访问 权,他们能够更轻松地更改缓存的数据。
*在网络连接中,端口是指通信接收的虚拟点。计算机拥有多个端口,每个端口有自己的编号。并且端口用于计算机之间的通信,还必须指定某些端口用于进行某些类型的通信。例如,HTTP 通信始终使用端口 80,HTTPS 通信始终使用端口 443。
多个政府有意在其国家/地区中使 DNS 缓存中毒,以便拒绝对特定网站或网络资源的访问。
DNSSEC 是 Domain Name System Security Extensions 的简称,这是一种验证 DNS 数据完整性和来源的方法。DNS 在最初设计时没有此类验证,这就是 DNS 有可能中毒的原因。
与 TLS/SSL 非常类似,DNSSEC 使用公钥加密(对信息进行数字签名的方式)来核实和验证数据。DNSSEC 扩展发布于 2005 年,但 DNSSEC 尚未成为主流,这使得 DNS 仍然容易受到攻击。