什么是 NTP 放大攻击?
NTP 放大攻击是一种基于反射的容量耗尽分布式拒绝服务(DDoS)攻击。在这种攻击中,攻击者利用一种网络时间协议 (NTP) 服务器功能,发送放大的 UDP 流量,使目标网络或服务器不堪重负,导致正常流量无法到达目标及其周围基础设施。
NTP 放大攻击的工作原理
所有放大攻击都利用攻击者和目标 Web 资源之间的带宽消耗差异。当消耗差异经过多次请求而被放大时,所产生的流量可导致网络基础设施中断。通过发送小型请求来导致大规模响应,恶意用户就能达到四两拨千斤的效果。当通过某个僵尸网络中的每个机器人发出类似请求来使这种放大效果倍增时,攻击者既能躲避检测,又能收获攻击流量大增的好处。
DNS 洪水攻击不同于 DNS 放大攻击。与 DNS 洪水攻击不同,DNS 放大攻击反射并放大不安全 DNS 服务器的流量,以便隐藏攻击的源头并提高攻击的有效性。DNS 放大攻击使用连接带宽较小的设备向不安全的 DNS 服务器发送无数请求。这些设备对非常大的 DNS 记录发出小型请求,但在发出请求时,攻击者伪造返回地址为目标受害者。这种放大效果让攻击者能借助有限的攻击资源来破坏较大的目标。
NTP 放大攻击与 DNS 放大攻击非常相似,就好比是一个心怀恶意的青少年打电话给一家餐厅说“我要菜单上的东西每样来一份,请给我回电话并告诉我整个订单的信息”。当餐厅询问回叫号码时,他却给出目标受害者的电话号码。然后,目标会收到来自餐厅的呼叫,接到他们未请求的大量信息。
网络时间协议(NTP)旨在允许连接到互联网的设备同步其内部时钟,在互联网架构中发挥重要作用。通过利用某些 NTP 服务器启用的 monlist 命令,攻击者能够成倍放大其初始请求流量,导致大型响应。这个命令在一些较老的设备上默认启用,返回发送到 NTP 服务器的请求中的最后 600 个源 IP 地址。针对服务器内存中 600 个地址的 monlist 请求将比初始请求大 206 倍。这意味着,攻击者使用 1 GB 互联网流量就能发动一次超过 200 GB 的攻击——所产生的攻击流量大幅增加。
NTP 放大攻击可分为四个步骤:
- 攻击者使用僵尸网络将带有伪造 IP 地址的 UDP 包发送到启用了 monlist 命令的 NTP 服务器。每个包的伪造 IP 地址都指向受害者的真实 IP 地址。
- 每个 UDP 数据包使用其 monlist 命令向 NTP 服务器发出请求,导致较大的响应。
- 然后,服务器用结果数据响应欺骗性的地址。
- 目标的 IP 地址接收响应,其周边的网络基础设施被大量流量淹没,从而导致拒绝服务。
由于攻击流量看似来自有效服务器的正常流量,因此很难在不阻止实际 NTP 服务器进行正常活动的情况下防护这种攻击流量。由于 UDP 数据包不需要握手,因此 NTP 服务器将向目标服务器发送较大的响应,而无需验证请求是否真实。这些条件,加上在默认情况下会发送较大响应的内置命令,使 NTP 服务器成为 DDoS 放大攻击的高效反射来源。
如何防护 NTP 放大攻击?
对于运行网站或服务的个人或公司来说,缓解选择并不多。这是因为,尽管个人或公司的服务器可能是攻击目标,但其并非容量耗尽攻击影响最大的地方。鉴于攻击所产生的大量流量,服务器周围的基础设施感受到影响。互联网服务提供商(ISP)或其他上游基础设施提供商可能无法处理传入流量而不堪重负。因此,ISP 可能会将向受害者 IP 地址发送的所有流量传送到一个黑洞路由,以保护自己并将目标站点下线。除了象 Cloudflare DDoS 防护这样的异地保护服务外,缓解策略大多是预防性的互联网基础设施解决方案。
禁用 monlist – 减少支持 monlist 命令的 NTP 服务器的数量。
修补 monlist 漏洞的一个简单解决方案是禁用该命令。默认情况下,4.2.7 版本之前的所有 NTP 软件都容易受到攻击。将 NTP 服务器升级到 4.2.7 或更高版本,该命令即被禁用,即可修补漏洞。如果无法升级,则服务器的管理员可遵循 US-CERT 的说明进行必要的更改。
源 IP 验证- – 阻止欺骗性数据包离开网络。
由于攻击者僵尸网络发送的 UDP 请求必须有一个伪造为受害者 IP 地址的源 IP 地址,对于基于 UDP 的放大攻击,降低其有效性的一个关键是互联网服务提供商(ISP)拒绝带有伪造 IP 地址的所有内部流量。如果一个从网络内部发送的数据包带有一个看起来像来自网络外部的源地址,那么它就有可能是伪造数据包并可被丢弃。Cloudflare 强烈建议所有提供商实施入口过滤,并不时联系无意中参与了 DDoS 攻击(违反 BCP38 标准)的 ISP,帮助其了解自己的漏洞。
禁用 NTP 服务器上的 monlist 并在当前允许 IP 欺骗的网络上实施入口过滤,这是阻止此类攻击到达其目标网络的有效方法。