6

Palo Alto 对近些年 DNS 历史漏洞的整理分析(上)

 3 years ago
source link: http://netsecurity.51cto.com/art/202102/644606.htm
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

每隔一段时间,一个新的域名系统(DNS)漏洞被会被发现,从而使全球数十亿设备处于危险之中,DNS漏洞通常是至关重要的。想象一下,你正在浏览你的银行账户网站,但是你的DNS解析器不是返回你的银行网站的IP地址,而是把你重定向到一个攻击者网站的地址。而那个网站看起来和银行的网站一模一样,不仅如此,即使你看一下URL栏,你也不会发现任何错误,因为你的浏览器实际上认为这是你的银行网站,以上就是DNS缓存攻击的一个例子。

在本文中,我将解释什么是DNS,并回顾DNS缓存攻击漏洞的历史,从过去的漏洞到近年来发现的更高级的漏洞都会讲到。

我选择的这些漏洞涵盖了过去20年出现的几乎所有DNS缓存攻击。

U7jiUza.jpg!mobile

什么是DNS?

域名系统是连接到互联网(或专用网络)的计算机、服务或其他资源的分层和分散式命名系统。它将各种信息与分配给每个参与对象的域名关联起来。

简而言之,DNS是一种协议,主要用于将名称转换为IP地址。当人们浏览http://www.example.com时,www.example.com域名即被转换为实际的IP地址,例如93.184.216.34。

什么是DNS服务器?

DNS服务器,通常被称为名称服务器,是提供DNS解析的设备或程序。大多数桌面和移动操作系统内置的DNS客户端与DNS服务器交互,以便将名称转换为IP地址。

重要的是要记住,最终只有两种类型的服务器:权威名称服务器和递归名称服务器。权威名称服务器是负责域名的名称服务器——链中的最后一个。所有不是权威名称服务器的东西都是递归的。例如,路由器的DNS服务器、ISP的DNS服务器、Kubernetes集群的DNS服务器都是递归名称服务器。所有这些递归服务器的行为都是相同的。最后,经过一些递归之后,它们联系所需域的权威名称服务器,有些服务器同时具有权威名称服务器和递归名称服务器的功能,本文不会进行介绍。

它是如何工作的?

zIzqqiy.png!mobile

DNS协议的工作方式

DNS解析器是DNS层次结构中的最低节点,例如,在Kubernetes集群中。 DNS工作原理的基本思想是,当询问DNS解析器不知道的域时,首先询问DNS根服务器。根服务器是层次结构中的最高节点,其地址在解析程序中进行了硬编码。根服务器会给出相关顶级域(TLD)DNS服务器的地址列表,这些地址负责相关DNS区域(.com,.net等)。TLD服务器使用下一个层次较低的服务器的地址进行应答,依此类推,直到到达权威服务器为止。

云中的DNS

近年来,云计算迅速普及。在某些情况下,云产品实施DNS的方式可能并不直观。云中的虚拟机非常简单,DNS解析器由虚拟机的操作系统确定。如果使用Windows,则Windows具有其内置的DNS解析器。如果使用Linux,则取决于发行版。

但是,其他云产品(如Kubernetes)呢?与简单的虚拟机不同,Kubernetes在其节点上使用了自定义虚拟机,而该虚拟机没有内置的DNS解析器。

每个Kubernetes集群还包含一个特殊的容器化DNS解析器,集群中的所有应用程序都将其DNS请求转发到该容器化的DNS解析器,由它来处理它们。

过去,在Kubernetes的1.10版本之前,它曾经是kube-dns,这是用于处理,缓存和转发DNS请求的应用程序包。 kube-dns中的核心应用是dnsmasq。 dnsmasq是一种轻型,易于配置的DNS转发器,旨在为小型网络提供DNS服务。从那时起,Kubernetes转移到CoreDNS,这是用Go编写的开源DNS服务器, CoreDNS是一种快速灵活的DNS服务器。

缓存

缓存是存储数据的硬件或软件组件,因此可以更快地满足对该数据的将来请求。这是DNS服务器中一个非常重要的特性,DNS服务器使用缓存存储以前翻译的名称。

例如,如果客户端C尝试访问www.example.com,并且名称服务器将www.example.com解析为93.184.216.34,则它将在www.example.com的IP地址中保留任意时间,因此下一个与之联系以尝试解析此名称的DNS客户端将立即从缓存中得到答复。

什么是DNS缓存攻击?

DNS缓存攻击是对DNS服务器的一种攻击,其最终结果是服务器将攻击者的控制IP地址保存到非攻击者的控制域。

例如,攻击者设法诱骗DNS服务器将www.example.com IP地址保存为13.37.13.37,这是攻击者控制的邪恶IP地址,而不是实际的真实IP地址。

直到缓存的IP地址超时,所有尝试解析www.example.com的DNS客户端都将“重定向”到攻击者的网站。

过去的DNS漏洞

在过去的20年中发现了许多DNS攻击,DNS缓存攻击,也称为DNS欺骗,这是最广为人知的DNS攻击。

那么DNS缓存攻击如何工作?

如上所述,解析器需要花费一些时间来解析域的IP地址。在获得权威服务器之前,通常需要联系多台服务器,攻击者可以滥用这段时间来向解析器发送虚假地址。

在以下情况下可能会发生这种攻击,所有这些情况都会导致攻击者能够将数据包发送到解析器:

  • 解析器保留其侦听端口向Internet开放;
  • 设法控制内部网络中终端的攻击者;
  • 内部网络中的客户端,浏览攻击者控制的网站;

例如,假设攻击者攻击了内部网络中的一个终端,并且现在正试图攻击本地解析器的缓存。值得注意的是,这种攻击可以在更关键的解析器(如ISP的解析器)上以完全相同的方式实现。

客户端访问www.example.com时,解析器缓存中缺少该域,因此它启动上述过程来解析该域的地址。与此同时,攻击者向带有假IP地址的解析器发送应答包,伪造DNS服务器的应答。这是攻击的基本思路,但有一些缓解措施,这些包括事务ID和源端口随机化。

DNS使用称为事务ID(TXID)的名称来将每个响应与正确的请求进行匹配,攻击者必须提供带有正确事务ID的响应,否则DNS服务器将丢弃数据包。早在多年前,人们就发明了这种机制,但这并不是要成为一种安全功能,而仅仅是一种将响应与请求进行匹配的方法。在发现DNS漏洞之前,DNS使用升序索引作为事务ID。不过,攻击者很容易猜出这个数字。

Vvq2ayJ.png!mobile

DNS缓存攻击

攻击者必须购买域并配置自己的受控DNS服务器,接下来,攻击者会向本地网络中的解析器询问有关自己的域的信息。本地解析器会将请求转发到分层DNS阶梯,直到它到达一个DNS服务器,该DNS服务器知道攻击者控制的DNS服务器。此时,原始的DNS请求(攻击者从内部网络发出的请求)将到达攻击者控制的DNS服务器,从而向攻击者揭示事务ID。

使用攻击者先前发现的事务ID,他们可以很好地了解接受虚假响应所需的事务ID。在这种情况下,攻击者可以发送多个带有多个事务ID的虚假响应,以确保其中一个是正确的。然后,攻击者所能做的就是向不在本地DNS解析器缓存中的域发出DNS请求,并立即使用该域的事务ID发送虚假响应。

本地解析器将获得具有正确事务ID的响应,删除其他事务并缓存地址。从现在开始,在任意时间范围内,所有将访问该域的本地客户端都将被定向到攻击者的网站。

本文翻译自:https://unit42.paloaltonetworks.com/dns-vulnerabilities/


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK