DNS缓存中毒,2008年的互联网攻击,死而复生

2020-11-12 22:44:09

2008年,研究人员丹·卡明斯基(Dan Kaminsky)揭露了有史以来最严重的互联网安全威胁之一:域名系统的弱点,使得攻击者有可能将用户集体发送到冒牌网站,而不是谷歌、美国银行(Bank Of America)或其他任何人的真正网站。在整个行业的协调下,世界各地数以千计的DNS提供商安装了一个修复程序,避免了这种世界末日的情景。

现在,卡明斯基的DNS缓存中毒攻击又回来了。周三,研究人员提出了一种新技术,可以再次导致DNS解析器返回恶意欺骗的IP地址,而不是合法对应于域名的网站。

运营1.1.1.1域名服务的内容交付网络Cloudflare的研究主管尼克·沙利文(Nick Sullivan)表示:“这是一个相当大的进步,类似于卡明斯基对一些解析器的攻击,这取决于(它们)实际运行的方式。”“这是自卡明斯基的攻击以来,我们看到的最有效的DNS缓存中毒攻击之一。如果你真的运行了DNS解析器,你应该认真对待这件事。“。

当人们发送电子邮件、浏览网站或在互联网上做任何其他事情时,他们的设备需要一种方法来将域名转换为用于定位其他服务器的数字IP地址服务器。设备首先要查看的是DNS解析器,它是一台或一组服务器,通常属于用户所连接的ISP、公司或大型组织。

如果该ISP或组织的另一个用户最近与同一个域进行了交互,则解析程序将缓存相应的IP地址并返回结果。如果不是,解析器将查询该特定域的专用授权服务器。然后,权威服务器将返回响应,解析器将该响应提供给用户,并临时存储在其高速缓存中,以供在不久的将来可能需要它的任何其他用户使用。

整个过程是未经验证的,这意味着权威服务器不使用密码或其他凭证来证明它实际上是权威的。也可以使用UDP数据包进行DNS查找,该数据包只在一个方向上发送。其结果是,UDP数据包通常很容易被欺骗,这意味着有人可以让UDP流量看起来像来自其他地方,而不是它真正的发源地。

当Internet架构师最初设计DNS时,他们意识到有人可能会冒充权威服务器并使用DNS向解析器返回恶意结果。为了防止这种可能性,架构师设计了查找事务编号。解析器将这些16位数字附加到发送到权威服务器的每个请求。只有包含相同ID的响应才会被解析器接受。

卡明斯基意识到的是,可能的交易ID只有65536个。攻击者可以利用此限制进行攻击,方法是向具有微小变化的域(例如,1.google.com、2.google.com等)向DNS解析器发送恶意IP,并为每个响应包含不同的事务ID。最终,攻击者将复制正确的数字,恶意IP将被反馈给所有依赖解析器的用户。这种攻击被称为DNS缓存中毒,因为它污染了解析器的查找存储。

通过指数增加接受响应所需的熵值,DNS生态系统解决了这个问题。以前,查找和响应仅通过端口53传输,而新系统将使用的端口号查找请求随机化。要让DNS解析器接受IP地址,响应还必须包含相同的端口号。结合一个交易号,熵被测量到数十亿,这使得攻击者在数学上不可能找到正确的组合。

周三,清华大学(Tsinghua University)和加州大学河滨分校(University of California,Riverside)的研究人员提出了一项技术,再次使缓存中毒成为可能。他们的方法利用侧通道来标识查找请求中使用的端口号。一旦攻击者知道了号码,他们再次有很高的机会成功猜测交易ID。

在这种情况下,侧信道是ICMP的速率限制,ICMP是Internet控制消息协议的缩写。为了节省带宽和计算资源,服务器将只响应来自其他服务器的一定数量的请求。在那之后,服务器将不会提供任何响应。直到最近,Linux一直将这一限制设置为每秒1,000个。

为了利用这一侧通道,新的欺骗技术会向DNS解析器发送大量被欺骗的响应,使它们看起来像是来自它们想要模拟的域的名称服务器。每个响应都通过不同的端口发送。

当攻击者通过错误的端口发送响应时,服务器将发送该端口无法访问的响应,从而将全局速率限制减少1。当攻击者通过正确的端口发送请求时,服务器根本不会响应,这不会更改速率限制计数器。如果攻击者在一秒内探测到1000个带有欺骗响应的不同端口,并且所有端口都被关闭,则整个速率限制将完全耗尽。另一方面,如果1000个端口中有一个是开放的,则限制将被排出到999个。

随后,攻击者可以使用自己的非欺骗IP地址来测量剩余的速率限制。如果服务器用一条ICMP消息响应,攻击者就知道之前探测的1000个端口中的一个必须打开,并可以进一步缩小到确切的端口号。

加州大学河滨分校(UC Riverside)教授钱志云告诉我:“我们试图间接推断,解析器已经向权威服务器发送了ICMP无法到达的消息。”“我们怎么知道呢?因为解析器在一秒钟内只能发送固定数量的此类ICMP报文,这意味着攻击者也可以尝试向自己索要此类ICMP报文。

研究人员的论文《DNS缓存中毒攻击重新加载:侧通道的革命》对这次攻击提供了更为详细和技术性的描述。

研究人员私下将他们的发现提供给了域名服务提供商和软件开发商。作为回应,Linux内核开发人员引入了一项更改,使速率限制在每秒500到2000之间随机波动。钱学森教授说,这项修复措施阻止了这项新技术的工作。CloudFlare推出了自己的修复程序。在某些情况下,其DNS服务将回退到更难欺骗的TCP。

这项研究是在2020年美国计算机与通信安全协会会议上公布的,由于新冠肺炎疫情的流行,该会议今年通过视频举行。研究人员在这里提供了更多信息,加州大学河滨分校的新闻稿在这里。