利用TCP反射放大攻击将中间件武器化
https://www.usenix.org/conference/usenixsecurity21/presentation/bockhttps://www.youtube.com/watch?v=OSfgTbjb3oghttps://geneva.cs.umd.edu/papers/usenix-weaponizing-ddos.pdfhttps://github.com/breakerspa
看到“碳基体”的微博分享了这篇文章,正好感兴趣就看了一下做了一个翻译,主要是在google机翻基础上修改的,如有不恰当指出欢迎指正。
简介
这篇文章发表于USENIX SEC 2021,并且获得了USENIX SEC 2021 杰出论文奖。
主要贡献:
- 我们发现了一种新方法,攻击者可以通过滥用中间件和审查基础设施,通过 TCP 发起反射拒绝服务 (DoS) 放大攻击。与现有的基于 UDP 的攻击相比,这些攻击可以产生更多数量级的放大。
- 这是第一次超越发送 SYN 数据包的 TCP 反射放大攻击,也是第一次基于 HTTP 的反射放大攻击。
- 我们在野外发现了多种类型的中间件错误配置,这些错误配置可能会导致攻击者在技术上无限放大:通过发送单个数据包,攻击者可以向受害者发起源源不断的数据包流。
总的来说,我们的结果表明审查基础设施对广阔的互联网构成的威胁比以前了解的更大。即使是在没有审查的民族国家中良性部署的防火墙和入侵防御系统,也可以使用我们发现的技术进行武器化。
什么是反射放大攻击?
反射放大攻击是 DoS 攻击者武器库中的强大工具。攻击者欺骗/伪造一个从受害者到开放服务器(例如,开放 DNS 解析服务器)的请求,服务器将响应发给受害者。如果响应大于欺骗/伪造的请求,服务器在 DoS 攻击中有效地放大了攻击者的带宽。
简单地说:服务器向受害者发送的响应报文比攻击者向服务器发送的伪造的报文大
武器化中间件
现今大多数 DoS 放大都是基于 UDP 的。这样做的原因是 TCP 需要 3 次握手,这使欺骗攻击变得复杂。每个 TCP 连接都以客户端发送 SYN 数据包开始,服务器以 SYN+ACK 响应,客户端以 ACK 数据包完成握手。3 次握手保护 TCP 应用程序免于成为放大器,因为如果攻击者发送带有欺骗性的源 IP 地址的 SYN 数据包,SYN+ACK 将发送给受害者,并且攻击者永远不会获得所需的 SYN+ACK 中包含的关键信息,来完成 3 次握手。在没有收到 SYN+ACK 的情况下,攻击者无法代表受害者发出有效请求。
简单地说:TCP的情况下攻击者没有办法收到服务器响应的握手第二阶段报文SYN+ACK,也就缺少了对该报文进行回应的ACK所需的信息,无法建立TCP连接
3 次握手可有效防止利用 TCP 进行流量放大。但在这项工作中,我们发现大量网络中间件不符合 TCP 标准,可以被滥用来执行攻击。特别是,我们发现许多审查中间件会响应带有大块页面的欺骗审查请求,即使没有有效的 TCP 连接或握手。这些中间件可以被武器化以进行 DoS 放大攻击。
中间件通常在设计上不符合 TCP 标准:许多中间件尝试处理非对称路由,其中中间件只能看到连接中的一个方向的数据包(例如,客户端到服务器)。但是这个特性让他们容易受到攻击:如果中间件注入的数据仅基于连接的一个方向,攻击者就可以欺骗 TCP 3 次握手的一个方向,并说服中间件存在有效连接。
简单地说:中间件并没有实现TCP的标准,很多情况下只监控单向的报文,并根据数据包进行响应,其响应数据包较大,导致存在反射放大攻击。
这留下了一些问题:触发这些中间件的最佳方式是什么,我们可以从中获得哪些放大因子?
发现可以放大的中间件
我们的目标是发现攻击者可以发送的数据包序列,以欺骗中间件注入响应,而无需完成真正的 3 次握手。
请注意,此目标不符合 TCP 标准。我们正在利用实现中的弱点,而不是 TCP 协议本身的设计。这意味着仅研究 TCP 协议是不够的,我们必须研究真正的中间件 TCP 实现。这提出了一个挑战:世界上有太多种类的中间件供我们购买,即使我们可以购买,支持民族国家审查基础设施的中间件通常也不会出售。
因此,我们使用我们的工具 Geneva 来研究在野外审查中间件。
为了找到要研究的中间件,我们使用了 CensoredPlanet 的 Quack 工具发布的公共数据。Quack 是一种扫描器,它在审查中间件的路径上查找 IP 地址。我们使用这些数据来识别位于世界各地的 184 个样本中间件,这些中间件通过注入块页面来执行 HTTP 审查。
Geneva (Genetic Evasion) 是我们设计的一种遗传算法,旨在自动发现逃避审查的新方法,但从本质上讲,Geneva 是一个数据包级网络 Fuzzer。我们修改了 Geneva 的 fitness function,以奖励它使引发的响应尽可能大,然后针对所有 184 个中间件训练 Geneva。
简单地说:奖励可以引发尽可能大的响应的情况,训练数据包级别的网络Fuzzer,Geneva
我们发现了 5 个数据包序列,这些数据包序列触发了中间件的放大响应。其中每一个都包含一个格式良好的 HTTP GET 请求,用于某些被中间件禁止的域(禁止请求):
- SYN 包(带禁止请求)
- PSH 数据包
- PSH+ACK 包
- SYN 数据包,后跟包含禁止请求的 PSH 数据包
- SYN 数据包,后跟包含禁止请求的 PSH+ACK 数据包
我们还发现了另外 5 个变种,它们进一步增加了一小部分中间件的放大率;攻击者可以将这些用于特定的中间件。有关这些修改的更多详细信息,请参阅我们的论文。
为了触发这些中间件的响应,我们需要一个被每个中间件审查或禁止的域,但大多数审查中间件使用不同的阻止列表,因此很难找到一个域来触发每个中间件的阻止页面。 我们分析了 Quack 数据集以找到触发最多中间件响应的 5 个域,这些域恰好是五个不同的类型:
- www.youporn.com(色情)
- www.roxypalace.com(赌博)
- plus.google.com(社交媒体)
- www.bittorrent.com(文件共享)
- www.survive.org.uk(性健康/教育)
我们还使用了 example.com 和 没有域 作为对照实验。
寻找放大器
我们扫描了整个 IPv4 因特网以测量有多少 IP 地址允许反射放大。 为此,我们修改了 zmap 扫描器以构建由 Geneva 识别的所有五个数据包序列。
我们总共扫描了整个 IPv4 因特网 35 次(5 个数据包序列 × 7 个测试域)。我们测量了我们得到的响应,以计算我们从每个 IP 地址得到的放大系数。
我们的 zmap 版本是开源的,可在此处获得。
结果
上图是我们发现的攻击类型。
粗箭头表示放大;红色表示触发放大的数据包。
a. 正常 TCP 反射,其中攻击者发送单个 SYN 数据包以引出 SYN+ACK。
b. 中间件反射,其中攻击者发送数据包序列以触发阻止页面或审查响应。
c. 组合目的地和中间件反射,其中攻击者可以从中间件和最终目的地引出响应。
d. 路由环路反射,其中触发数据包被困在路由环路中。
e. 受害者持续反射,其中受害者的默认响应会触发来自中间件或目的地的额外数据包。
我们发现无限放大是由** (d) 无法减少 TTL 的路由循环和 (e) 受害者持续反射引起的**。
回想一下,我们正在寻找中间件中 TCP 实现的弱点,而不是 TCP 协议本身。 此外,每个中间件都有自己的注入策略和阻止页面:这意味着这次攻击没有单一的放大系数,因为我们触发的每个中间件都不同!
相反,我们可以查看响应大小的分布,以了解攻击者可用的放大系数。
上图是我们在所有 35 次扫描中为每个 IP 地址收到的最大放大系数的图表,按 x 轴上的放大系数排序(放大倍数大的 IP 排在前)。 在 y 轴上,您可以看到 IP 地址提供的放大系数。
在此图表上,您可以看到放大系数的范围很大 - 从超过 1亿 到小于 1。
无限放大
接下来,我们将检查上图 top 的 IP 地址,我们可以看到放大系数在 100w 到 1亿 之间。这些 IP 地址是我们的超级放大器,提供了巨大的放大系数。事实上,这些放大系数可能被低估了。这些数字来自我们的扫描停止收集数据的地方,而不是 IP 地址停止向我们发送数据的地方。这里发生了什么?
这是我们发现技术上无限放大系数的地方。放大系数的计算方法是放大器接收的字节数除以发送的字节数。我们发现放大器一旦被攻击者的单个数据包序列触发,就会向受害者发送无休止的数据包流。在我们的测试中,其中一些数据包流持续了数天,通常是放大器链路可以提供的全带宽。
我们发现了这种无限放大的两个原因:路由环路和受害者的持续放大。
路由环路
当数据包在从一个 IP 地址路由到另一个 IP 地址时在穿越环路时卡住时,两个 IP 地址之间就会发生路由环路。包含审查中间件的路由循环为攻击者提供了新的好处:每次触发数据包环绕路由循环时,它们都会重新触发审查中间件。
数据包在网络中存活的跳数通常由 IP 数据包中的 TTL 字段(生存时间)调节:每次数据包从一个路由器传递到下一个路由器时,它的 TTL 值都会递减.如果 TTL 达到 0,则丢弃数据包。最大 TTL 值为 255:这意味着可以将触发序列发送到放大路由循环的攻击者可以免费获得额外的大约 250 倍的放大。
比普通路由循环更危险的是无限路由循环。如果是一条不递减 TTL 值的循环路由路径,导致数据包永远循环(或直到发生随机数据包丢弃),则会发生无限路由循环。我们发现了少量无限路由循环,它们穿越了提供无限放大的审查基础设施(特别是在中国和俄罗斯)。
受害者的持续放大
我们发现无限放大的第二个原因是受害者持续循环。当受害者收到意外的 TCP 数据包时,正确的客户端响应是使用 RST 数据包进行响应。我们发现少数放大器在处理来自受害者的任何额外数据包时会重新发送它们的块页面 - 包括 RST。 这会产生一个无限的数据包风暴:攻击者向受害者引出单个块页面,这会导致受害者发出 RST,从而导致放大器产生新的块页面,从而导致受害者发出 RST,不断循环。
由于两个原因,受害者持续放大的情况特别危险。首先,受害者的默认行为支持对自身的攻击。其次,这种攻击会导致受害者在淹没下行链路的同时淹没自己的上行链路。
这些真的是中间件吗?
是的,我们的结果表明如此。为了测试这一点,我们进行了一个 TTL 限制实验:
我们选取了前 100 万个放大器,跟踪路由到它们以确定它们相距多少跳,然后重新发送我们的探针并降低 TTL 数。这确保了我们的探测不会到达目标主机,但可能会穿过审查中间件,所以如果我们仍然看到响应,我们就知道它们是由中间件生成的。我们确认前 100 万个放大器中约有 83% 是由中间件引起的。
对民族国家的影响是什么?
我们发现世界各国的民族国家审查基础设施也可以被武器化。这些民族国家中的大多数都是弱放大器(例如,中国的防火墙仅提供大约 1.5 倍的放大),但其中一些提供更具破坏性的放大,例如沙特阿拉伯(大约 20 倍的放大)。
民族国家的真正挑战在于,它们的审查基础设施通常会处理所有进出该国的流量。 这意味着与其他放大攻击不同,受害者接收到的流量的源 IP 地址是放大器本身,中间盒后面的每个 IP 地址都可以作为流量源出现。 换句话说:放大的民族国家内的每个 IP 地址都可以是一个放大器。
攻击危害
攻击者可以无限放大会造成多少伤害? 在这种情况下,作为指标的“放大系数”开始失效。 大多数时候,当人们询问放大系数时,他们是在问攻击者可以用给定的攻击向量造成多大的伤害。如果攻击者可以在技术上引发无限放大系数,但在链路完全饱和之前仅达到 64 kbps,则攻击者可以造成的破坏量是有限的。
**一个更好的问题:攻击者可以通过这次攻击获得的最大带宽是多少?**不幸的是,这是最难从伦理学上研究的。为了测量给定放大器的最大容量,我们必须使每个网络的链路完全饱和,这可能对该网络的用户产生真正的负面影响。目前,攻击者可从这次攻击中获得的真正能力尚不清楚。
防御
防御这种攻击是困难的。 传入的大量流量来自 TCP 端口 80(正常 HTTP 流量),响应通常是格式良好的 HTTP 响应。
由于中间件会欺骗它们生成的流量的 IP 地址,这意味着攻击者可以将反射流量的源 IP 地址设置为中间件后面的任何 IP 地址。 对于某些网络,这是少量 IP 地址,但如果攻击者使用国家审查基础设施,则攻击者可以使攻击流量来自该国家/地区的任何 IP 地址。 这使得受害者很难在攻击期间丢弃来自违规 IP 地址的流量。
负责任的披露
2020 年 9 月,我们与多个国家级 CERT(计算机应急响应小组)、DDoS 缓解服务和防火墙制造商联系并共享了我们论文的高级副本。我们还与多个 DDoS 缓解服务和美国 CERT 进行了进一步的会议,以进一步讨论缓解问题,并一直与 DDoS 缓解服务保持沟通。
不幸的是,我们能做的只有这么多。完全解决这个问题将需要各国投资于可能削弱其审查基础设施的变革,我们认为这不太可能发生。
FAQ
-
谁是脆弱的?我是否需要生活在受审查的国家才能成为受害者?
不幸的是,我们发现这种攻击几乎可以针对任何人,无论您是否生活在审查制度中。
-
谁容易被武器化?
大多数民族国家审查基础设施目前都很脆弱,许多现成的商业防火墙也是如此。我们的研究旨在提供此问题的全局视图,而不是针对单个防火墙类型,因此我们尚不知道易受此攻击的活跃使用的防火墙的完整列表。
-
攻击者可以通过这种攻击获得多大的放大系数?
我们正在利用中间件对 TCP 协议的实现,这与大多数利用协议规范本身的先前攻击不同。因此,我们不能只为我们的放大因子指定一个数字:它与每个中间件都不同!
但总的来说,我们发现数十万个 IP 地址超过了 DNS 和 NTP 的放大系数,其中数百个提供的放大系数大于著名的 memcached (51,000x)。
-
您发现的最高放大系数是多少?
从技术上讲,无限。放大系数的计算方法是放大器接收的字节数除以发送的字节数。我们发现放大器一旦被攻击者的单个数据包序列触发,就会向受害者发送无休止的数据包流。在我们的测试中,其中一些数据包流持续了数天,而另一些则在其链路可以提供的全部带宽下。
然而,在这种情况下,作为度量的“放大系数”开始失效。大多数时候,当人们询问放大系数时,他们是在问攻击者可以用给定的攻击向量造成多大的伤害。如果攻击者可以引发无限放大系数,但仅以 64 kbps 的最大速度,攻击者可以造成的破坏量是有限的。
一个更好的问题:攻击者可以通过这次攻击获得的最大带宽是多少?不幸的是,这是最难从伦理学上研究的。为了测量给定放大器的最大容量,我们必须使每个网络的链路完全饱和,这可能对该网络的用户产生真正的负面影响。目前,攻击者可从这次攻击中获得的真正能力尚不清楚。
-
谁需要解决这个问题?
有两个角度可以解决这个问题:防止攻击者欺骗他们的源 IP 地址和保护中间件不被错误地注入流量。不幸的是,多年来一直在努力完全防止源 IP 地址欺骗。彻底解决这个问题将需要每个易受攻击的防火墙制造商更新他们的中间件,以及每个部署了易受攻击的中间件以升级其基础设施的组织和审查国家。
不幸的是,这个问题不太可能很快得到完全解决。
-
我应该担心吗?
大多数人可能不需要担心这种攻击,但我们一直在使用 DDoS 缓解服务,因此如果攻击在野外使用,他们可以做好准备。
-
这种攻击是否在野外被发现?
还没有,据我们所知。我们正在使用不同的 DDoS 缓解服务来监控它是否被使用。
-
这与之前的放大攻击相比如何?
我们的结果表明,这种攻击至少与现有最大的基于 UDP 的放大攻击一样危险。我们发现数百个带有中间盒的 IP 地址提供的放大系数大于 memcached (51,000x),以及数十万个提供放大系数大于 DNS 和 NTP 的 IP 地址。
-
是否负责任地披露了这次攻击?
是的,但我们的能力是有限的。 2020 年 9 月,我们与多个国家级 CERT、DDoS 缓解服务和防火墙制造商联系并共享了我们论文的副本。我们还与多个 DDoS 缓解服务和美国 CERT 会议,以进一步讨论缓解问题。
不幸的是,完全解决这个问题将需要各国投资于可能削弱审查基础设施的变革,我们认为这不太可能发生。
-
为什么你的攻击没有 logo 或花哨的名字?
如果您有任何建议,请给我们留言!
参考
Weaponizing Middleboxes for TCP Reflected Amplification
寻找可用的放大器的源码
usenix摘要
PDF
PDF
PPT
Talk
Weaponizing Censorship Infrastructure for Availability Attacks
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)