Dnsmasq中发现的漏洞允许欺骗DNS缓存中的内容

最近公布的信息显示,代号为DNSpooq的Dnsmasq软件包存在七个漏洞。该软件包集成了缓存DNS解析器和DHCP服务器。这些漏洞可能导致伪造DNS缓存攻击或缓冲区溢出,进而使攻击者能够远程执行代码。

尽管Dnsmasq 近期已被标准 Linux 发行版弃用,不再作为默认解析器,但它仍然被 Android和 OpenWrt、DD-WRT 等专用发行版以及许多无线路由器的固件所使用。在标准发行版中,可以隐式使用 dnsmasq;例如,在使用 libvirt 时,可以通过启动它来为虚拟机提供 DNS 服务,或者通过更改 NetworkManager 配置器中的设置来启用它。

鉴于无线路由器的更新文化还有很大的改进空间,研究人员担心,已发现的问题可能会长期得不到解决,并成为针对路由器的自动化攻击的目标,攻击者可以通过这些攻击来控制路由器或将用户重定向到虚假的恶意网站。

大约有 40 家公司依赖 Dnsmasq,包括 Cisco、Comcast、Netgear、Ubiquiti、Siemens、Arista、Technicolor、Aruba、Wind River、Asus、AT&T、D-Link、Huawei、Juniper、Motorola、Synology、Xiaomi、ZTE 和 Zyxel。建议这些设备的用户不要使用内置的 DNS 查询转发服务。

Dnsmasq 中发现的第一部分漏洞与防止 DNS 缓存投毒攻击有关,该方法由 Dan Kaminsky 于 2008 年提出。

已发现的漏洞使得现有保护措施失效,并允许在缓存中伪造任意域名的 IP 地址。卡明斯基的方法利用了 DNS 查询标识字段极小的尺寸(仅 16 位)。

要找到伪造主机名所需的正确标识符,只需发送大约 7.000 个请求并模拟约 140.000 万个虚假响应即可。这种攻击本质上就是向 DNS 解析器发送大量伪造的、带有不同 DNS 事务标识符的 IP 数据包。

已发现的漏洞将预期熵值从 32 位降低到 19 位猜测要求,使得缓存投毒攻击变得相当现实。此外,dnsmasq 对 CNAME 记录的处理方式使其能够伪造 CNAME 记录字符串,从而一次性高效地欺骗多达九条 DNS 记录。

  • CVE-2020-25684: 在处理来自外部服务器的DNS响应时,缺少对请求ID以及IP地址和端口号的验证。 此行为与RFC-5452不兼容,RFC-XNUMX要求在匹配响应时使用其他请求属性。
  • CVE-2020-25686: 无法验证具有相同名称的未决请求,从而允许使用生日方法来显着减少伪造响应所需的尝试次数。 结合CVE-2020-25684漏洞,此功能可以大大降低攻击的复杂性。
  • CVE-2020-25685: 在不使用DNSSEC进行编译的情况下(SHA-32与DNSSEC配合使用),在验证响应时使用不可靠的CRC1哈希算法。 通过允许您利用具有与目标域相同的CRC32哈希值的域,此漏洞可用于大大减少尝试次数。
  • 第二组问题(CVE-2020-25681,CVE-2020-25682,CVE-2020-25683和CVE-2020-25687)是由在处理某些外部数据时导致缓冲区溢出的错误引起的。
  • 对于CVE-2020-25681和CVE-2020-25682漏洞,有可能创建可能导致系统上代码执行的漏洞利用。

最后,文中提到Dnsmasq 2.83 更新解决了这些漏洞,作为一种变通方法,建议使用命令行选项禁用 DNSSEC 和查询缓存。

来源:https://kb.cert.org


在 Google 中将其添加为首选来源