“Rapid Reset” DDoS 攻击袭击 HTTP/2 Web 服务器
HTTP/2 协议中被称为“Rapid Reset”的漏洞导致近几个月来网络服务器遭受创纪录的 DDoS 攻击。谷歌、AWS 和 Cloudflare 今天联合披露了这些攻击和漏洞,但指出每个现代网络服务器仍然容易受到这种攻击技术的影响。网络服务器供应商和项目还宣布了缓解措施和补丁计划。
谷歌表示,攻击峰值达到每秒 3.98 亿次请求(rps),比 2023 年 2 月创下的先前纪录高出五倍多,两分钟内的网络流量超过了维基百科整个 9 月份的流量。Cloudflare 表示,攻击峰值略高于每秒 2.01 亿次请求。
谷歌、AWS 和 Cloudflare 表示,他们能够限制攻击造成的损害。Cloudflare 表示:“虽然最初我们看到客户流量受到了一些影响——在最初的攻击浪潮中影响了大约 1% 的请求——但今天我们已经能够改进我们的缓解方法,以阻止任何 Cloudflare 客户的攻击,而不会影响我们的系统。”
仅使用 20,000 台机器的僵尸网络就能发起攻击。Cloudflare 在关于该漏洞 ( CVE-2023-44487 ) 的技术博客文章中表示:“如今的僵尸网络由数十万或数百万台机器组成。”“考虑到整个网络通常每秒只有 10 亿到 30 亿个请求,使用这种方法可以将整个网络的请求集中在少数目标上,这并不令人难以置信。”
同样令人不安的是这种脆弱性的普遍程度。
“所有现代网络服务器”均受影响
Cloudflare 指出,由于此次攻击利用了 HTTP/2 协议的根本弱点,“我们认为任何实施 HTTP/2 的供应商都可能受到攻击。这包括每个现代 Web 服务器。”
“我们与 Google 和 AWS 一起向网络服务器供应商披露了攻击方法,我们希望他们会实施补丁。与此同时,最好的防御方法是在任何面向网络的网络或 API 服务器前使用 Cloudflare 等DDoS 缓解服务。”
包括 Apache Tomcat、微软和其他一些公司在内的 Web 服务器供应商和开源项目都发布了应对该漏洞的指南;在CVE 列表中可以找到越来越多的公告。
例如,NGINX 建议进行一些配置更改,以最大限度地减少攻击面:
- keepalive_requests应保持默认设置,即 1000 个请求
- http2_max_concurrent_streams应保持默认设置 128 个流
- limit_conn强制限制单个客户端允许的连接数,应添加“通过合理的设置平衡应用程序性能和安全性”
- limit_req强制限制单个客户端在给定时间内处理的请求数量,并且还应平衡应用程序的性能和安全性。
NGINX 表示,它将于明天发布一个补丁,对一个事件循环中可以引入的新流的数量进行限制。该限制将设置为使用 http2_max_concurrent_streams 指令配置的值的两倍。NGINX 表示:“即使从未达到最大阈值,也会应用该限制,例如在发送请求后立即重置流(如本次攻击的情况)。”
HTTP/2“快速重置”攻击的工作原理
技术博客文章中指出,“HTTP/2 的主要设计目标是效率,不幸的是,使 HTTP/2 对合法客户端更高效的功能也可以用于使 DDoS 攻击更高效。”
本质上,快速重置攻击通过滥用 HTTP/2 的一项名为“流取消”的功能来实现,即反复发送请求然后立即取消它们。
Google 指出,HTTP/2 协议允许客户端通过发送 RST_STREAM 帧向服务器指示应取消上一个流。该协议不需要客户端和服务器协调取消,客户端可以单方面这样做。客户端还可以假设当服务器收到 RST_STREAM 帧时,取消将立即生效,然后再处理来自该 TCP 连接的任何其他数据。
:“这种攻击被称为快速重置,因为它依赖于端点在发送请求帧后立即发送 RST_STREAM 帧的能力,这使得另一个端点开始工作,然后快速重置请求。”“请求被取消,但 HTTP/2 连接保持打开状态。”
基于此功能构建的 HTTP/2 快速重置攻击很简单,谷歌表示:
“客户端会像在标准 HTTP/2 攻击中一样一次打开大量流,但客户端不会等待服务器或代理对每个请求流的响应,而是立即取消每个请求。立即重置流的能力允许每个连接拥有无限数量的请求。通过明确取消请求,攻击者永远不会超过并发打开流数量的限制。正在进行的请求数量不再取决于往返时间 (RTT),而仅取决于可用的网络带宽。”
在典型的 HTTP/2 服务器实现中,服务器“仍必须为取消的请求做大量工作,例如分配新的流数据结构、解析查询和执行标头解压缩以及将 URL 映射到资源,”谷歌表示。
对于反向代理实现,“在处理 RST_STREAM 帧之前,请求可能会被代理到后端服务器。另一方面,客户端几乎不为发送请求付出任何代价。这在服务器和客户端之间造成了可利用的成本不对称。攻击者获得的另一个优势是,在创建请求后立即明确取消请求意味着反向代理服务器不会对任何请求发送响应。”
缓解措施可以采取多种形式,但主要集中在跟踪连接统计数据以及使用信号和业务逻辑来确定每个连接的实用性,谷歌表示。“例如,如果一个连接有超过 100 个请求,并且超过 50% 的请求被取消,那么它可能是一个缓解响应的候选者。响应的规模和类型取决于每个平台的风险,但响应范围可以从前面讨论过的强制 GOAWAY 帧到立即关闭 TCP 连接。
“为了减轻这种攻击的非取消变体的影响,我们建议 HTTP/2 服务器应关闭超出并发流限制的连接。这可以立即执行,也可以在少数重复攻击之后执行。”