2021 年 8 月,来自马里兰大学和科罗拉多大学博尔德分校的研究人员发表了一篇 获奖论文,详细介绍了一种潜在的 DDoS 攻击向量 ,该向量利用 TCP 协议中间盒中的缺陷并可以被滥用来发起大规模的分布式拒绝服务(DDoS) 攻击。
2022 年 3 月,Akamai 安全运营指挥中心的安全研究人员 检测并分析了一系列 TCP 反射攻击,峰值为 11Gbps,每秒 150 万个数据包 (Mpps)。在检查了攻击中使用的 TCP 数据包后,他们意识到攻击者正在利用上述论文中概述的技术,他们将其称为TCP 中间盒反射攻击。在这种攻击中,攻击者滥用易受攻击的防火墙和内容过滤系统来反射和放大到受害者机器的 TCP 流量,从而创建强大的 DDoS 攻击。
此后,Akamai 观察到 针对银行、旅游、游戏、媒体和网络托管行业的多个中间盒攻击活动。
Akamai Blog | TCP Middlebox Reflection: Coming to a DDoS Near You https://t.co/utiGzKiQt5
— Larry W. Cashdollar (@_larry0) March 1, 2022在这篇文章中,我将回顾攻击向量,并举例说明它是如何工作的,以及当前防御它的最佳实践是什么。
首先,了解基础知识很重要,因此,让我们回顾一下 TCP 三次握手如何建立可靠连接以及中间盒是什么——如果您对两者都熟悉,请跳到“攻击者如何在这些攻击中滥用中间盒” ' 部分。
TCP 三向握手包括三个步骤:
客户端向服务器发送初始连接请求。这称为同步 (SYN)。
然后,服务器可以选择允许连接并分配资源(例如,网络端口)并以同步确认 (SYN+ACK) 进行响应。
客户端使用确认 (ACK) 数据包完成握手。通常紧随其后的是对 HTML 页面等内容的请求。
让我们考虑以下用于浏览网页的数据包捕获:
我们可以看到,在建立可靠连接之前,客户端会发送一个 SYN 包——通常合法的 SYN 包长度为零字节(图 2)。
相关的 SYN+ACK 和 ACK 数据包长度也是零字节(图 3):
图 3a - TCP 三向握手 SYN+ACK 数据包。
图 3b - TCP 三向握手 ACK 数据包。
在完成一次有效的三次握手后,立即数据包可能有一个 PSH+ACK 标志(图 4)来请求内容(在下面的情况下,一个 HTTP 页面),并且这个数据包长度通常大于零字节。
三向握手保护 TCP 应用程序不被放大,因为如果攻击者发送带有欺骗源 IP 地址的 SYN 数据包,SYN+ACK 将发送给受害者,攻击者永远不会了解 SYN+ACK 中包含的关键信息,这是完成三次握手所必需的。在没有收到 SYN+ACK 的情况下,攻击者无法代表受害者发出有效请求。
中间盒(根据 RFC 3234)是一种计算机网络设备,用于转换、检查、过滤和操作流量以用于数据包转发以外的目的。防火墙、NAT 设备、负载平衡器和深度数据包检测 (DPI) 设备是 中间盒的常见示例。
中间盒通常具有过滤功能,通常用于识别禁止的关键字或域。如果有任何连接被识别为被禁止的请求,中间盒将响应阻止页面或直接关闭连接。中间盒系统被企业内容过滤系统用于民族国家审查员。
在某些情况下,中间盒以非 TCP 兼容模式部署,例如在非对称路由环境中,中间盒只能看到连接中数据包的一个方向(从客户端到服务器的数据包)。
攻击者可以通过 TCP 三向握手数据包的一侧向不兼容 TCP 的中间盒发送欺骗源地址来利用此设置。这将导致中间盒向欺骗地址(受害者)发送放大的响应,从而导致毁灭性的 DDoS 攻击(图 5)。请注意,这是实现的弱点,而不是 TCP 协议本身的设计。
到目前为止研究人员已经发现了五个数据包序列,这些数据包序列可以引发中间盒的放大响应。其中每一个都包含一个格式良好的 HTTP GET 请求,该请求针对某些域被中间盒禁止,例如带有针对禁止资源的 HTTP GET 有效负载请求的 SYN 数据包。
在图 6 中,我们可以看到单个 SYN 将禁止的 Web 请求 (HTTP GET) 有效负载传送到易受攻击的中间盒。我们知道这一点是因为 TCP 有效负载是 44 字节。这 44 个字节从易受攻击的中间盒触发了 3,426 个字节的响应,这几乎是 77% 的放大系数。
易受攻击的中间盒也可能使用其他类型的反射数据包进行响应,例如 200 OK、302 Moved、400 Bad Request、403 Forbidden、404 Not Found 和 503 Service Unavailable。在图 7 中,中间盒使用 HTTP 400 错误请求代码进行响应,并将放大的响应发送给受害者。
正如我们所了解的,利用 TCP 中间盒反射涉及发送自定义数据包,这些数据包在 TCP 数据包中推送有效负载,这些数据包通常不包含有效负载(例如,普通的 TCP SYN 数据包)。简单地运行“nmap”扫描或尝试使用 telnet 或 netcat 连接到具有目标端口的设备无法验证设备对攻击的敏感性。
首次详细介绍攻击的研究人员描述了两种检测潜在易受攻击的中间盒的方法。这些用于扫描 IPv4 地址:
序号为 s 的 SYN 数据包,后跟一个序号为 s+1 的 PSH + ACK,其中包含对禁止资源的 HTTP GET 有效负载请求。
带有对禁止资源的 HTTP GET 有效负载请求的 SYN 数据包。在这种情况下,禁止资源是中间框配置为阻止的 URL。
研究人员还提供了一个 开源工具 来帮助您做到这一点。
使用这些扫描方法,Shadowserver 研究人员发现超过 1880 万个 IP 容易受到 Middlebox TCP Reflection DDoS 攻击,这些攻击也可以用来发起基于 TCP 的 DDoS Reflection 攻击。您可以通过订阅 Shadowserver 的“ Vulnerable DDoS Middlebox Report ”来检查您的任何 IP 是否在此列表中。
这种反射放大攻击如此成功的主要原因之一是攻击者可以通过欺骗源 IP 地址来强制反射器响应目标。如果欺骗是不可能的,这种类型的攻击向量可能会得到缓解。
Spoofer 项目 表明,大量 IPv4 自治系统 (AS) 允许或部分允许欺骗。因此,我们应该考虑使用反欺骗系统或模块来阻止欺骗数据包离开网络。
通常使用 SYN 包来发起 TCP 握手;它们不用于数据传输(回忆图 2)。这意味着应该怀疑长度大于零字节的 SYN 泛洪。Akamai 建议可以使用防火墙访问控制列表 (ACL) 来阻止已知的不正确模式。例如,像这样的规则:
deny tcp any eq 80 host x.x.x.x match-all +syn -ack packet-length gt 100
此规则将丢弃来自端口 80 且数据包长度大于 100 的任何 SYN 数据包。简而言之,应检测并阻止任何具有超过一定大小的 SYN 标志的数据包。
请注意,仅仅减轻对端口 80 的查询是不够的,因为中间盒会检测并响应任何端口上的流量。使用适当的 TCP 兼容模式重新配置中间盒可以解决此问题。
一些安全供应商已经为此问题开发了支持和补丁。我们应该定期检查相关的供应商安全公告以获取此类补丁和指南。
本文翻译自:https://blog.apnic.net/2022/10/18/a-new-ddos-attack-vector-tcp-middlebox-reflection/
更多文章内容参考:
https://geneva.cs.umd.edu/papers/usenix-weaponizing-ddos.pdf
https://www.akamai.com/blog/security/tcp-middlebox-reflection
https://t.co/utiGzKiQt5
https://blog.apnic.net/2022/10/18/a-new-ddos-attack-vector-tcp-middlebox-reflection/#How-do-attackers-abuse-middleboxes-in-these-attacks
https://en.wikipedia.org/wiki/Middlebox