驱蚊器喵的翻译平台

Can you hear the gravity?

  1. 1. DNS 反射攻击始于 2013 年
  2. 2. NTP 攻击:就像123一样简单(NTP 的 UDP 端口号是123)
  3. 3. 解决方案
  4. 4. 进一步阅读
    1. 4.0.1. 脚注

这篇博客文章解释了基于 NTP 的 DDoS 攻击的工作原理,以及网站所有者如何帮助缓解这些攻击。


原文地址:https://blog.cloudflare.com/understanding-and-mitigating-ntp-based-ddos-attacks/
原文标题:Understanding and mitigating NTP-based DDoS attacks
原文作者:John Graham-Cumming
原文写于:2014/1/10 GMT+8 上午12:00:00

译者:驱蚊器喵#ΦωΦ
翻译水平有限,有不通顺的语句,请见谅。


在过去的几周中,您可能听说过基于 NTP 协议的攻击,这是 DDoS 军火库中的一种新工具。最近这些攻击变得流行起来,并给一些游戏网站和服务提供商带来麻烦。我们长期以来一直认为 NTP 可能会成为 DDoS 攻击的向量,因为 NTP 和 DNS 一样,是一个基于 UDP 的简单协议,它可以用于对小型请求返回大量答复。不幸的是,我们之前的预测现在成为了现实。

英国的电话报时服务

这篇博客文章解释了基于 NTP 的 DDoS 攻击的工作原理,以及网站所有者如何帮助缓解这些攻击。Cloudflare 可以保护网站免受基于 NTP 的攻击,但是最好对防火墙和 NTP 服务器进行简单的配置修改来阻止基于 NTP 的 DDoS。这样做可以使每个人的网络更加安全。

DNS 反射攻击始于 2013 年

之前我们曾写过有关基于 DNS 的反射和放大攻击的博客,基于 NTP 的攻击使用类似的技术,差别只是协议不同而已。

只有当攻击者可能够发送伪造来源 IP 地址的数据包时,反射攻击才能起作用。显然,攻击者将数据包伪装成从预期的受害者发送到互联网上某些响应迅速的服务器。由于来源 IP 地址是伪造的,因此远端服务器进行回复并将数据发送给受害者。

这样造成了两点影响:攻击的真实来源被隐藏,并且很难追踪;如果使用了很多服务器,则攻击可能是排山倒海般的数据包,这些数据包可以攻击来自世界各地的受害者。

但是,使反射攻击真正强大的原因是数据包会被放大:一个微小的伪造数据包可以造成服务器(或多个服务器)的大量答复。在这种情况下,攻击者可以从伪造的来源 IP 地址“发送”一个小数据包,使得服务器(或者多个服务器)向受害者发送大量答复。

这样的放大攻击,允许攻击者将来自少量计算机的少量带宽转换为巨大的流量负载,打击互联网上的受害者。最近以来,用于放大攻击最流行的协议是 DNS:一个小小的用于查询域名 IP 地址的 DNS 查询,将造成较大的响应回复。

对于 DNS,放大倍数(响应是请求的多少倍)为 8x。因此,攻击者可以产生比其本身可以使用的带宽大8倍的攻击。例如,攻击者控制10台带宽为1Gbps的服务器,那么可能会产生 80Gbps 的 DNS 放大攻击。

过去,我们已经看到一种使用 SNMP 进行放大的攻击:它的放大倍数高达 650 倍!幸运的是,互联网上很少有开放的 SNMP 服务器,并且 SNMP 通常需要身份验证(尽管多数安全性很脆弱)。这使得 SNMP 攻击相对较少。

今天文中要介绍的新方式是 NTP。

NTP 攻击:就像123一样简单(NTP 的 UDP 端口号是123)

NTP,即网络时间协议(Network Time Protocol),连接到互联网的计算机使用 NTP 来校准时间。例如,在我 Mac 上的时间设置中看到的地址 time.euro.apple.com ,实际上这个是由 Apple 运行的 NTP 服务器地址。

我的 Mac 默默地与这个服务器同步,使系统时间保持准确。并且,不止是 Mac 在用 NTP:台式机,服务器,甚至手机,都在互联网上广泛使用 NTP,来保持时间的同步。

不幸的是,基于 UDP 的简单 NTP 协议容易受到放大攻击,因为它会对欺骗性了来源 IP 地址的数据包请求进行回复,并且其中至少有一个内置命令会向简短请求发送大量回复。这使之成为理想的 DDoS 工具。

NTP 包含一个称为 monlist 的命令(有时也称为 MON_GETLIST ),将其发送到 NTP 服务器用于监视。命令结果最多返回与 NTP 服务器交互的最近的 600 台计算机的地址。这个命令的响应比发送的请求大得多,非常适合用于放大攻击。

为了了解具体的大小,我使用了 ntpdc 命令将 monlist 发送到互联网上随机选择的开放 NTP 服务器。这是Wireshark 捕获的请求和响应数据包。

在终端中输入以下命令

1
ntpdc –c monlist 1xx.xxx.xxx.xx9

将 MON_GETLIST 命令发送到 IP 地址为 1xx.xxx.xxx.xx9 的服务器。请求数据包长度为 234 个字节(图中的 Length 列)。响应被拆分为 10 个数据包,共计 4,460 字节。放大倍数为 19 倍,并且由于响应是在许多数据包中发送的,因此使用此方法进行攻击将消耗大量带宽并具有较高的数据包速率。

这台 NTP 服务器只有 55 个地址可以告诉我。每个响应数据包包含 6 个地址(末尾有一个短数据包),因此,我们可以推算,一个繁忙的服务器(最多响应 600 个地址)将发送 100 个数据包,数据包长度总共 48k 以上,而我们的请求仅仅是 234 个字节。那将是 206 倍的放大倍数!

一个攻击者,装备了有着公网上开放 NTP 服务器得列表,可以使用 NTP 轻松发起 DDoS 攻击。NTP 服务器并不难找到。像 Metasploit 和 NMAP 之类的通用工具附带有能够识别长期支持 monlist 的 NTP 服务器模块。还有一个 Open NTP Project,目的在于突出显示公网上开放的 NTP 服务器,并对其进行修复。

解决方案

如果您运行的是正常的 NTP 程序来设置服务器上的时间,并且想要了解如何对其进行配置,以便保护您的计算机,那么建议使用 Team Cymru 提供的 Secure NTP Template(NTP配置模版) 。配置模版上显示了如何在 Cisco 的 IOS 系统,Juniper 的 JUNOS 系统上配置,或者在 Linux 系统上使用 iptables 来保护 NTP 客户端的安全。

如果您正在运行的 ntpd 服务器需要在公网上开放,那么至少要将 ntpd 升级到 4.2.7p26 版本(查看CVE-2013-5211了解更多详细信息)。该漏洞在 ntpd 的 bug 数据库(详见问题1532)中被分类为错误。

如果您正在运行的 ntpd 服务器,仍然需要 monlist 之类的命令,那么你可以使用 mrulist 命令(参考问题1531)来代替 monlist, mrulist 请求中需要发送一个随机数(用于证明命令中 UDP 数据包中的来源 IP 地址)。

这些软件更改都不是最近的,ntpd v4.2.7p26 版本于2010年3月24日发布,因此升级到此版本不需要使用最新的边缘代码(译者注:并非不稳定版本)。

如果您正在运行网络(或者你是服务提供商),那么 BCP-38 的实施至关重要。BCP-38 的实施(及其相关的 BCP-84)将消除各种伪造来源 IP 的攻击(DNS,NTP,SNMP 等)。

进一步阅读

如果您对反射和放大攻击的背景感兴趣,请查看我2013年10月的演讲 “如何发动和防御 DDoS”。

来自 jgrahamc幻灯片:如何发动和防御 DDoS

脚注

这篇博客文章开头的黑白照片展示了英国原始的电话报时服务,以及电话报时人Jane Cain。同步时钟和手表的一种常用方法是打电话给电话报时服务,以此来获取准确的时间。

像我这样的极客会感到很有趣,用于时间同步的 NTP 协议,用于通信的 UDP 端口是123,英国电话报时服务的电话号码也是123。即使是今天,在英国拨打 123 也能为你提供电话报时服务。

本文作者 : meow
This blog is under a CC BY-NC-SA 4.0 Unported License
本文链接 : https://translation.meow.page/post/understanding-and-mitigating-ntp-based-ddos-attacks/

本文最后更新于 天前,文中所描述的信息可能已发生改变