摘要
- Rapid Reset 先创建 HTTP/2 请求,再立即发送重置;并发名额因此归还,但代理分配、策略加载或后端任务可能已经启动。
- 持久防御不是剥夺正常客户端的取消能力,而是按整条连接计算有用工作与撤销成本,在共享队列饱和前结束滥用连接。
状态机关掉了流,机器没有撤回账单
HTTP/2 把多条请求流复用在一条传输连接上。浏览器可以并行加载页面资源,不必为每个对象重新建立 TCP 和 TLS。服务器通过 SETTINGS_MAX_CONCURRENT_STREAMS 告知对端最多同时维持多少条活动流。
并发计数只包含 open 与 half-closed 状态。客户端发送 RST_STREAM 后,目标流进入 closed,不再占用名额。这是必要功能:用户离开页面、应用超时或资源失去用途时,应当能取消一个请求而不牵连同一连接上的其他交换。
Rapid Reset 利用了协议状态与资源状态之间的时间差。攻击者发送请求 HEADERS,随即重置。状态机释放名额,同一连接无需等待响应或往返时延就能再开一条流。
接收端却可能已经建立流对象、解压请求头、加载客户策略、选择路由,甚至把任务交给上游服务。反向代理本地收到取消,并不保证后端队列中的工作同步消失。发送方只付出少量帧;基础设施承担建立、转发、通知与清理。
这不是 TLS 被破解,也不是伪造响应,更不是长期超过服务器宣告的同时并发数。攻击者反复利用“已经关闭”的名额。Google 的技术分析指出,请求速率由此摆脱了主要的往返时延约束,更接近由可用带宽决定。
三个峰值不能合成一场攻击
Google、Cloudflare 与 AWS 在 2023 年 8 月下旬发现相关攻击,并与 HTTP/2 实现者协调披露。2023 年 10 月 10 日,CVE-2023-44487 公开。
Google 报告的峰值超过每秒 3.98 亿次请求。Cloudflare 报告另一场攻击略高于每秒 2.01 亿次,僵尸网络约有两万台机器。AWS 则记录 CloudFront 在 8 月 28 至 29 日出现超过每秒 1.55 亿次请求的异常峰值。
这些数字来自不同网络、客户表面与测量系统,不能相加,也不能当作每个 HTTP/2 服务都应具备的最低容量。它们证明的是机制能以异常高效率放大应用层请求。
Google 表示最大一场攻击主要在网络边缘被挡下,没有造成中断。Cloudflare 披露初期整体约有 1% 请求受到影响,最严重事件中,受影响最大的数据中心曾短暂接近 12%。不同结果反映架构、队列与控制位置不同,并非事实冲突。
并发上限记错了对象
并发上限约束某一时刻还活着的流。Rapid Reset 制造的是高速、连续的工作。每条流短暂进入计数,随即关闭并离账,资源后果却可能滞留。
因此,单纯调低 SETTINGS_MAX_CONCURRENT_STREAMS 不能终止这种攻击。它或许压低瞬时突发,却挡不住关闭后的持续轮换。更麻烦的是,一个在本地看来保守的数字,可能与已部署客户端的行为冲突。
Cloudflare 应对时把最大并发降至 64,随后发现不少正常客户端不会等待服务器 SETTINGS,而是先假定可以发出 100 条流。多出的 36 条被服务器重置;既有保护又把大量“服务器发出的重置”视为异常,最终关闭了正常连接,导致页面完全加载失败。Cloudflare 随后恢复到 100。
这段修复插曲比“补丁成功”更有价值。安全边界不是数字越小越好,而是要在真实客户端分布下验证:既能在共享队列饱和前停止成本放大,也不会先伤害正常业务。
判断单位从请求升级为连接
Google 的建议是:不能只阻断单个请求。服务器需要判断整条连接——开流速率、取消比例、实际产生的有用响应、重复越限,以及这些行为造成的工作。一旦模式表现为滥用,就立即发送具有约束力的 GOAWAY,或直接关闭传输连接。
这重新划定取消权限。客户端有权表示“不再需要这个响应”,却无权在用取消制造无限工作后仍要求连接永久开放。机器的运营者拥有接纳工作和终止关系的最终决定权。
Cloudflare 把客户端发送的 RST_STREAM 纳入检测,改进帧处理、取消传播、队列和调度,并把防御前移到 TLS 代理。越早拒绝,越少下游层被迫承担成本。它还补强连接级日志,因为部分 502 错误发生在负责常规客户分析的业务逻辑代理之前,控制台看不到并不等于错误不存在。
Google、Cloudflare 与 AWS 无需采用同一个阈值或调度器。共同边界是:承担资源成本的一方必须在本地设限,而且要在敌意任务占满共享服务之前执行。
标准描述了关闭,却没有清偿工作
RFC 9113 定义流复用、并发、RST_STREAM 与 GOAWAY。共同状态机让不同实现互操作,也明确重置后的流不再计入并发。
但协议转换不能倒转已经发生的后端派发。2023 年一份个人 Internet-Draft 记录了这一缺口,并提出累计流额度,使取消不再立即恢复无限创建能力。它是有价值的设计证据,不是已采纳标准,也不代表 IETF 共识。
Heng Lu 的“最低初始规范”原则可在此分工:共同层准确规定帧与合法取消;未来资源决策首先留给实际承担成本的运行端。各实现用运行代码证明安全预算,成熟经验再可能进入共同规则,而不是把某家云厂商的代理拓扑当成普遍制度。
补丁清单必须回答什么
“已启用 HTTP/2”不是暴露评估,“已修 CVE”也不是连续性证明。运营者要列出所有终止点:CDN、负载均衡器、Ingress、服务网格、反向代理和应用服务器;明确第一个分配昂贵状态的组件,以及取消是否传到每个后端层。
证据清单应记录准确版本、补丁来源、连接预算、共享队列和可见指标。测试要同时包含普通页面、真实取消与敌意开流—重置序列。合格结果不是压测进程没崩,而是正常请求继续推进、滥用连接被结束、触发原因进入遥测。
无法及时更新时,关闭 HTTP/2 可以是临时止血。它必须有负责人、有限范围、到期时间和恢复证明,否则紧急措施会掩盖工作量核算从未修复。
证据边界
公开来源没有列出所有目标、实现或损失。各家峰值也不是可直接比较的基准。大型边缘网络能吸收流量,不证明裸露应用服务器也能;厂商发布版本,不证明所有下游发行包与生产集群同日更新。
证据支持的是更精确的判断:协议对象关闭,不等于它引发的工作已经回收。当形式合规变成资源滥用,接收任务的一方必须保留结束连接的权限。
来源
会员简报
档案背景详情
使用相应会员等级登录,即可解锁完整简报与来源注释。
仅限 Strategic Circle
Strategic Circle
所有读者均可浏览。加入并登录后可解锁档案简报。
加入 Strategic Circle仅限 Leadership Alliance
Leadership Alliance
符合条件的 IP 资产所有者和管理层可登录查看 Leadership Alliance 简报。
加入 Leadership Alliance