每隔一段时间,一个新的域名系统(DNS)会发现漏洞,使全球数十亿设备处于危险之中,DNS漏洞通常很重要。想象一下,你在浏览你的银行账户网站,但是你的DNS分析器不会返回您的银行网站IP地址,但将您重新定位到攻击者网站的地址。这个网站看起来和银行的网站完全一样,即使你看看URL专栏,你不会发现任何错误,因为你的浏览器实际上认为这是你的银行网站,以上是DNS一个缓存攻击的例子。
在这篇文章中,我将解释什么是DNS,并回顾DNS缓存攻击漏洞的历史,从过去的漏洞到近年来发现的更先进的漏洞。
我选择的这些漏洞涵盖了过去20年几乎所有的漏洞。DNS缓存攻击。
什么是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服务器是递归名服务器。所有这些递归服务器的行为都是一样的。最后,在一些递归之后,他们联系了所需领域的权威名称服务器。有些服务器具有权威名称服务器和递归名称服务器的功能,本文不会介绍。
它是怎么工作的?
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。然而,攻击者很容易猜到这个数字。
DNS缓存攻击
攻击者必须购买并配置自己的控制区域DNS服务器,接下来,攻击者将向当地网络中的分析器询问自己的域信息。本地分析器将要求转发到分层DNS直到它到达一个阶梯DNS服务器,该DNS知道攻击者控制的服务器DNS服务器。此时,原始DNS请求(攻击者从内部网络发出的请求)将到达攻击者控制的DNS服务器向攻击者揭示事务ID。
使用攻击者之前发现的事务ID,他们可以很好地理解接受虚假响应所需的事务ID。在这种情况下,攻击者可以发送多个事务ID虚假反应,以确保其中一个是正确的。然后,攻击者能做的就是DNS解析器缓存中的域发出DNS请求,并立即使用该域的事务ID发送虚假响应。
本地分析器将获得正确的事务ID响应,删除其他事务并缓存地址。从现在开始,所有将访问该领域的本地客户端都将在任何时间内定位到攻击者的网站。
本文翻译自:https://unit42.paloaltonetworks.com/dns-vulnerabilities/