2023年10月10日、Cloudflare、Google、AWS はほぼ同時に、数週間インターネットを悩ませていた攻撃手法を公開した:HTTP/2 Rapid Reset(CVE-2023-44487)。この攻撃はボットネットの「人海戦術」に頼らず、HTTP/2 プロトコル自体の設計特性を悪用し、アプリケーション層(L7)のフラッドをピーク 毎秒 3 億 9,800 万リクエスト(RPS)まで引き上げた。本稿では、プロトコル・データ・防御の 3 層から、この「L7 DDoS 戦場を塗り替えた」事件を完全に解説する。

1. 少ない戦力で勝つ仕組み

HTTP/2 の目玉機能の一つが多重化(multiplexing):1 本の TCP 接続で多数の「ストリーム」を同時に開ける。Rapid Reset はストリームのライフサイクル、特に RST_STREAM フレームを悪用する。

攻撃手口は極めて単純だ。各ストリームでリクエスト(HEADERS フレーム)を送り、即座に RST_STREAM を送ってキャンセルし、次を開く。「リクエスト→キャンセル→リクエスト→キャンセル」を高速で繰り返す。リクエストはキャンセルされるが、サーバーはすでにメモリ割り当て、HPACK 展開、ルーティング、ストリーム初期化を行っており、そのコストは後でしか回収しない。

これは計算非対称性の戦いである。攻撃者は 1 ラウンドにつき約 20〜30 バイト(9 バイトの HEADERS + 13 バイトの RST_STREAM)しか払わないが、サーバーは 1 ラウンドにつき数千バイトの CPU とメモリ処理を負う。最小の帯域で、まずサーバーの CPU が尽きる。

Cloudflare の数字が示唆的だ。わずか 2 万ノードのボットネットが、各ノード毎秒約 1 万回のループで 2 億 RPS を生成した。これを、数十万〜数百万台のデバイスを必要とする従来の IoT ボットネット(多くは数百万 RPS どまり)と比べよ。Rapid Reset はノードあたりの攻撃力を桁違いに高めた。

2. 実測規模:3 巨人の計測値

  • Google:ピーク 毎秒 3 億 9,800 万リクエスト——インターネット史上最大攻撃の 7 倍以上。
  • Cloudflare:ピーク 毎秒 2 億 100 万リクエスト——2023 年 2 月の 7,100 万 RPS 記録の 3 倍。
  • AWS:2 日間で 10 件超の攻撃、最大 毎秒 1 億 5,500 万リクエスト。

決定的なのは、これが事実上すべての HTTP/2 実装に存在する設計欠陥を突いている点だ。Nginx、Apache HTTP Server、Apache Tomcat、Microsoft IIS、HAProxy、Envoy、gRPC、Node.js、Go net/http、.NET Kestrel のすべてにパッチが必要だった。2023 年 10 月 10 日の協調開示は「インターネット史上最大級の同期パッチイベント」と呼ばれ、CISA は AA23-283A を発出した。

3. なぜ従来の防御がここで効かないか

  1. ログが攻撃を見えない:RST_STREAM はサーバーが応答を返す前にリクエストをキャンセルするため、アクセスログはこれらの「未完」リクエストを記録しないことが多い。サーバーが蹂躙されている間、ログはきれいに見える。
  2. 完了ベースのレート制限が発動しない:典型的なレート制限は完了したリクエストを数える。Rapid Reset は完了前にキャンセルされるため、上限に達しない。
  3. ボリューム緩和は無力:これはボリューム攻撃ではない。ボトルネックは帯域ではなく CPU だ。「回線を太くする」は無意味。

4. 2024 年の長い尾:エッジは修正、内部は放置

多くの人はパッチで終わりだと思った。しかし 2024 年前半も金融・フィンテック企業への標的型攻撃が続き、個別の銀行や決済事業者で 毎秒 5,000 万〜1 億リクエストのピークが API ゲートウェイ障害、取引タイムアウト、モバイルバンキング停止を引き起こした。根本原因は、組織がエッジのリバースプロキシにはパッチを当てたが、内部ロードバランサーやレガシーミドルウェアに未修正の HTTP/2 実装を放置したこと——脆弱性の「長い尾」は開示後数月も悪用可能だった。

5. エンジニア向け防御チェックリスト

  • リクエスト数ではなくフレーム単位の指標を監視:決定的な信号は RST_STREAM と完了応答の比率だ。通常、RST_STREAM はストリームクローズの 1% 未満のはずで、急増は強力な攻撃指標。
  • エッジで接続あたりのストリーム上限と RST レート制限を適用。
  • すべての HTTP/2 コンポーネントをアップグレード:Nginx 1.25.3 以降、Apache 2.4.58 以降、Node.js 18.18.2/20.8.1 以降、Go 1.21.3 以降、HAProxy 2.8.4 以降など。
  • L7 では振る舞い分析が静的ルールに勝る:「高キャンセル率・低完了率」の異常をベースラインに対して検知し、IP を無差別にブロックしない。

結論

Rapid Reset は L7 DDoS のパラダイムシフトを象徴する。攻撃者はもはや帯域優位に頼らず、プロトコル設計の欠陥を突いて計算非対称性を得る——小兵力で大効果を出す。公開インターネットで HTTP を提供するあらゆる組織にとって、これは警鐘だ:「通常のプロトコル動作」と思っているものが、他人の武器になるかもしれない。防御側の真の答えは、プロトコルエッジでフレーム単位の識別と自律的緩和を行うアーキテクチャである。