新的 SAD DNS 攻击将虚假数据插入 DNS 缓存

加州大学河滨分校的一组研究人员发布了 SAD DNS 攻击的新变体 (CVE-2021-20322),尽管去年添加了阻止 CVE-2020-25705 漏洞的保护措施,但该攻击仍然有效。 新方法与去年的漏洞大致相似,不同之处仅在于使用不同类型的 ICMP 数据包来检查活动 UDP 端口。 所提出的攻击允许将虚构数据替换到 DNS 服务器缓存中,这可用于替换缓存中任意域的 IP 地址,并将对该域的请求重定向到攻击者的服务器。

所提出的方法仅适用于 Linux 网络堆栈,因为它与 Linux 中 ICMP 数据包处理机制的特殊性有关,它充当数据泄漏的来源,简化了服务器用于发送数据包的 UDP 端口号的确定。外部请求。 5.15 月底,Linux 内核采用了阻止信息泄漏的更改(该修复包含在内核 XNUMX 和内核 LTS 分支的 XNUMX 月更新中)。 该修复归结为在网络缓存中改用 SipHash 哈希算法,而不是 Jenkins 哈希。 可以在以下页面上评估发行版中修复漏洞的状态:Debian、RHEL、Fedora、SUSE、Ubuntu。

据发现该问题的研究人员称,网络上大约 38% 的开放解析器容易受到攻击,其中包括 OpenDNS 和 Quad9 (9.9.9.9) 等流行的 DNS 服务。 对于服务器软件,可以在Linux服务器上使用BIND、Unbound、dnsmasq等软件包进行攻击。 在 Windows 和 BSD 系统上运行的 DNS 服务器上不会出现该问题。 为了成功地进行攻击,必须使用IP欺骗,即要求攻击者的 ISP 不阻止具有虚假源 IP 地址的数据包。

提醒一下,SAD DNS 攻击绕过了 DNS 服务器添加的保护措施,以阻止 Dan Kaminsky 在 2008 年提出的经典 DNS 缓存中毒方法。 Kaminsky 的方法操纵了 DNS 查询 ID 字段的微小尺寸,该字段只有 16 位。 要选择主机名欺骗所需的正确 DNS 事务标识符,发送大约 7000 个请求并模拟大约 140 万个虚构响应就足够了。 该攻击归结为向 DNS 解析器发送大量具有虚构 IP 绑定和不同 DNS 事务标识符的数据包。 为了防止缓存第一个响应,每个虚拟响应都包含稍作修改的域名(1.example.com、2.example.com、3.example.com 等)。

为了防止此类攻击,DNS 服务器制造商对发送解析请求的源网络端口数量进行了随机分配,以弥补标识符大小不够大的问题。 在实现发送虚假响应的保护之后,除了选择16位标识符之外,还需要从64个端口中选择一个,这将选择的选项数量增加到2^32。

SAD DNS 方法可以让您从根本上简化网络端口号的确定,并将攻击减少到经典的 Kaminsky 方法。 攻击者可以利用处理 ICMP 响应数据包时泄露的网络端口活动信息来检测对未使用和活动 UDP 端口的访问。 该方法允许我们将搜索选项的数量减少 4 个数量级 - 2^16+2^16 而不是 2^32(131_072 而不是 4_294_967_296)。 允许您快速确定活动 UDP 端口的信息泄漏是由处理带有分段请求(ICMP 需要分段标记)或重定向(ICMP 重定向标记)的 ICMP 数据包的代码中的缺陷引起的。 发送此类数据包会更改网络堆栈中缓存的状态,从而可以根据服务器的响应确定哪个 UDP 端口处于活动状态,哪个端口处于活动状态。

攻击场景:当 DNS 解析器尝试解析域名时,它会向服务该域的 DNS 服务器发送 UDP 查询。 当解析器等待响应时,攻击者可以快速确定用于发送请求的源端口号并向其发送虚假响应,使用 IP 地址欺骗冒充为域提供服务的 DNS 服务器。 DNS 解析器将缓存伪造响应中发送的数据,并在一段时间内返回攻击者替换的 IP 地址,以替换该域名的所有其他 DNS 请求。

来源: opennet.ru

添加评论