威胁报告:mDNS 反射式 DDoS 攻击

作者:Wilber Mejia

概览

在 2015 年第三季度将近尾声之际,Akamai SIRT 开始观察借力于支持多播域名系统 (mDNS) 的设备的 DDoS 攻击的有限使用。此外,在 2015 年 3 月,还披露了 mDNS 成为反射式和放大式 DDoS 攻击中所用向量的可能性。

此报告详述了 mDNS 反射式攻击向量的概念和技术,以及相应抵御方式。此攻击向量可通过利用在互联网上公开 mDNS(预计位于 5353 端口)的源设备发起攻击。

截至 2016 年 10 月,Akamai 已检测到并成功抵御了 7 次 mDNS DDoS 攻击,攻击目标分别为游戏和软件与科技行业垂直市场。迄今为止,此项攻击的持续时间仍存有疑问,具体取决于在实际攻击中观察到的特征。

攻击时间表

自 2015 年 9 月首次观察到 mDNS 攻击向量以来,这一攻击向量得到了偶尔、零星的使用。如下方时间表所示,初始攻击与下次攻击之间大约有 5 个月的时间差,这可能是对攻击脚本执行初始测试的结果。直至 2016 年 3 月末、4 月初,该攻击向量才开始显现出更为一致的使用。但使用 mDNS 作为单一向量进行攻击时,破坏力不如现有其他反射式攻击向量大。

mDNS attack timeline

重点攻击属性

在以下部分中,我们重点强调了 2016 年发生的一次攻击。在迄今为止抵御的 7 次攻击中,没有任何两次攻击针对的是相同目标。

  • 峰值带宽:2.9 千兆/秒 (Gbps)
  • 每秒数据包峰值:每秒 465200 个数据包
  • 攻击向量:mDNS
  • 源端口:5353 (mDNS)
  • 目标端口:随机

mdns Highlighted Attack Attributes

最后一次发现的 mDNS 攻击事件发生于 2016 年 10 月 27 日。这是一次多向量 DDoS 攻击,包含 SYN 泛洪攻击、UDP 泛洪攻击、UDP 碎片攻击、DNS 泛洪攻击和 mDNS 泛洪攻击,峰值达到 41 Gbps。

  • 事件开始时间:2016 年 10 月 27 日 06:01:00(UTC 时间)
  • 峰值带宽:41 Gbps
  • 每秒数据包峰值:每秒 6000000 个数据包
  • 攻击向量:SYN 泛洪攻击、UDP 泛洪攻击、UDP 碎片攻击、DNS 泛洪攻击、mDNS 泛洪攻击
  • 源端口:随机
  • 目标端口:随机

mdns flood
mdns SVN flood

攻击和 mDNS 概述

多播 DNS (mDNS) 是 2013 年作为 RFC6762 发布的一项标准协议提案。mDNS 促进了设备与服务的发现,而且无需用户交互或者仅需最低限度的用户交互,极为适合小型网络。因此,mDNS 也可作为零配置网络 (zeroconf) 的理想组件。mDNS 的结构与常规 DNS 数据包相同,这或许也是它被迅速用作 DDoS 攻击向量的理由之一。

当然,该协议的简单性也让设备一经插入,就要准备好迎接一些风险。Chad Seaman 发现了 mDNS 上的一个漏洞 (Vu#550620),即 mDNS 会允许响应源自本地网络以外的查询。随后,这些响应将允许其披露有关受影响设备的信息,例如其软件和服务,以及其他潜在的敏感信息,例如主机名、内部网络配置设置、型号等等。这种反馈可能会允许恶意攻击者利用通过接入互联网的接口答复单播查询的 mDNS 主机,参与分布式服务拒绝 (DDoS) 反射式/放大式攻击。可在此处找到有关该漏洞的更多信息。

利用类似的概念,恶意攻击者创建的 mDNS 攻击脚本会发送专门的单播查询,促使 mDNS 设备作出响应。根据 RFC6763 中的定义,服务枚举查询对于返回网络上公布的所有服务类型极为有用。攻击脚本会生成 46 字节的载荷查询(如下张图所示),向存在漏洞的主机发送针对“_services._dns-sd._udp.local”的 DNS 查询;目的在于将所有已知服务返回给请求方设备。这些公布的服务还可单独查询,提供不同的响应大小,从而为攻击者创造了更多机会。但这种战术需要更精密的攻击工具,只有这样才能轻松在 DDoS 攻击中利用这些额外的响应载荷。

mdns attack

迄今为止,在 DDoS 攻击中观察到的 mDNS 响应载荷大小仍然有限。最大的载荷包含 428 字节的数据,比单个 NTP monlist 数据响应数据包要少 12 个字节。但所观察到的典型 mDNS 响应大小约为 100-200 字节。考虑到请求载荷仅有 46 字节,载荷响应为 200 字节,这意味着该向量的放大倍数通常约为 4.35 倍。

攻击脚本使用方式和签名示例

为 mDNS 创建的攻击脚本是目前可用于 UDP 反射式和放大式攻击的诸多脚本的修改版本。其使用方式也与其他脚本相似:只需提供目标 IP、目标端口、互联网上的 mDNS 设备列表、线程、数据包截断率,以及攻击运行时间即可。随后,脚本会假冒目标 IP,通过 tcpdump 发送可在下张图中看到的 46 字节恶意查询。

mdns sample script usage
mdns sample script usage

在我们的实验室测试中,这些查询发送至具有一个 mDNS 侦听器的 Linux 服务器设置。下张图展示了基本响应。

mdns basic response

2016 年 11 月4 日,Shadowserver 基金会完成了一次 mDNS (5353/UDP) 扫描,有 526,245 个唯一 IP 响应了 mDNS 查询。下图展示了根据最新扫描发现,可以访问 mDNS 的前 20 个国家/地区和 ASN。

mDNS Source Distribution Countries
mDNS Source Distribution ASNs

抵御

这是设计用于在本地网络内使用的协议之一。因此,应该没有任何理由通过互联网公开 mDNS 设备。如有必要,良好的做法应该是筛选任何传入的查询,仅允许已知来源。进而可以利用 Snort 等 IDS,检测这些查询,进一步防止您的设备被用于 DDoS 攻击。Snort 检测规则示例如下。

mdns mitigation

结论

迄今为止,mDNS 攻击向量的使用仍然有限。与 SSDP 相似,此攻击向量最有可能借力于家庭网络中的设备。早期攻击的破坏力不足,但在我们的抵御平台上每天均会观察到对 mDNS 端口 5353 的扫描。一旦枚举出更多设备,就有可能发动更大规模的攻击。此外,与 SSDP 相似,基于这种协议的不必要公开,随着 ISP 为家庭用户引入此端口的筛选功能,预计 mDNS 未来可能不会继续作为一种 DDoS 攻击向量。遗憾的是,尽管已经使用多年,SSDP 仍然每天都在被攻击者利用,仍然有能力造成严重的 DDoS 攻击。因此,在应用任何重要的主动筛选功能之前,mDNS 攻击的破坏力可能会增加。

参考资料