CVE-2023-44487: HTTP/2 Rapid Reset (DDoS) 漏洞分析
0x00 漏洞背景与详情
- 漏洞名称:HTTP/2 Rapid Reset(HTTP/2 快速重置攻击)
- CVE 编号:CVE-2023-44487
- 影响协议:HTTP/2
- 危险等级:高危 (CVSS 7.5)
- 影响组件:几乎所有支持 HTTP/2 的主流 Web 服务软件,包括 NGINX (1.10.0+)、Apache HTTP Server (2.4.17+)、Envoy、Go
net/http、Node.js、.NET (Kestrel) 等。
CVE-2023-44487 是由 Google、Cloudflare 和 Amazon 于 2023 年 10 月共同披露的一种针对 HTTP/2 协议实现的 7 层分布式拒绝服务(DDoS)攻击。该漏洞利用了 HTTP/2 协议中流取消机制的逻辑缺陷,允许攻击者以极低的带宽成本发起前所未有规模的并发攻击。
0x01 漏洞原理分析
HTTP/2 协议为了提高传输效率,引入了**多路复用(Multiplexing)**机制,允许在单个 TCP 连接上并发处理多个请求(流)。为了防止资源耗尽,服务器会通过 SETTINGS_MAX_CONCURRENT_STREAMS 参数限制同时打开的流数量。
漏洞逻辑:
- 发起请求:客户端发送大量的
HEADERS帧(发起请求),消耗服务端的流配额。 - 快速重置:客户端立即针对刚才发起的流发送
RST_STREAM帧(取消请求)。 - 缺陷所在:在许多 HTTP/2 的服务端实现中,流在被取消后会立即释放“最大并发流限制”的计数器,允许客户端继续在同一连接上发送新请求。但服务器在处理
HEADERS帧(如解压 HPACK 头部、建立内部对象、触发日志逻辑等)时实际上已经消耗了 CPU 和内存。 - 攻击效果:攻击者可以在不触发服务器并发流限制的情况下,在单个 TCP 连接上以极高的速率无缝循环发送“请求-重置”指令。这会导致服务端迅速耗尽计算资源,从而造成拒绝服务。
0x02 漏洞 POC 与高级攻击变种
实战攻击脚本核心逻辑 (PoC Implementation)
攻击脚本通常使用 Go 或 C++ 编写,因为它们能直接操作原始 HTTP/2 帧。核心逻辑是在一个循环内不断递增 Stream ID 并发送“请求-重置”组合。
变种攻击方式与防御绕过 (Attack Variants)
除了最基础的“立即重置”,攻击者演化出了多种高级变种以应对初步的防御及 WAF 拦截:
- 延时重置 (Delayed Reset):
不立即发送
RST_STREAM,而是等待几毫秒或在收到服务端部分响应后再重置。这能迫使服务端将请求推入更深层的业务逻辑(如数据库查询、后端转发),造成更严重的后端资源枯竭,同时绕过某些仅基于极速重置检测的安全策略。 - HPACK 压力增强:
在
HEADERS帧中使用大量动态索引表条目或构造极其复杂的头部。即使流被重置,服务端在解压 HPACK 头时的 CPU 开销也已经产生且无法挽回。 - 混合帧干扰 (Frame Interleaving):
在大量的
HEADERS和RST_STREAM序列中,穿插插入PING帧、SETTINGS帧或WINDOW_UPDATE帧。这种方式旨在干扰 WAF 或安全设备的特征匹配和序列预测算法。 - 并发连接扇出 (Connection Rotation): 结合传统的僵尸网络(Botnet),在数千个并发 TCP 连接上同时执行 Rapid Reset,或者在单连接达到限制前主动断开重连,将 RPS(每秒请求数)推向亿级规模。
真实利用案例
- 2023 年 8-10 月的大规模攻击:
漏洞被披露前,在野已经发生了史上最大规模的 DDoS 攻击:
- Google 观测到了峰值达到 3.98 亿次请求/秒 (RPS) 的攻击,比之前记录大七倍。
- Cloudflare 拦截了超过 2.01 亿 RPS 的攻击。
- AWS 遭受了超过 1.55 亿 RPS 的攻击。
0x03 应急排查与日志痕迹分析建议
1. 监控特征分析
- 资源异常飙升:Web 服务器进程(如 nginx worker)的 CPU 占用率极高甚至打满,但服务器整体入站带宽相对较小(因为 HEADERS 和 RST_STREAM 帧的数据量很小)。
- 请求/重置比例失衡:在抓包(PCAP)分析中,可以观察到特定 TCP 连接上的
RST_STREAM帧数量与HEADERS帧数量几乎达到 1:1 的完美对称。
2. 日志痕迹排查
- Web 访问日志:由于流被快速重置,后端的完整响应通常未生成,因此普通的访问日志可能记录不全,或者出现大量的客户端中断状态码(如 Nginx 的 499 状态码)。
- 高级 HTTP/2 监控:
如果部署了高级可观测性系统(如 Envoy/Istio 监控),应重点观察单连接上的
RST_STREAM发送速率,并检查流的生命周期时长是否呈现极端异常的短时间。
0x04 修复与缓解建议
- 及时更新补丁(最核心): 各主流 Web 服务器厂商已发布了包含缓解逻辑的补丁。必须第一时间升级 NGINX、Apache、Tomcat 等中间件版本(例如 NGINX 更新引入了对快速重置攻击的平滑限制机制)。
- 限制单连接请求数:
在 NGINX 中,可以通过调整
keepalive_requests或专门针对 HTTP/2 的http2_max_requests参数,强制 TCP 连接在达到一定请求数后关闭,增加攻击者重建连接的成本。 - 调整并发限制:
适当调低
SETTINGS_MAX_CONCURRENT_STREAMS,虽然不能完全阻止此类攻击,但可以减缓单连接下的资源消耗速度。 - WAF 与流量清洗:
依赖云厂商(如 Cloudflare、AWS、阿里云等)的 7 层清洗策略,识别并封禁在单个连接上呈现异常高频
RST_STREAM行为的恶意 IP。