【ITニュース解説】Weekly Report: 複数のHTTP/2サーバー実装におけるストリームリセット処理の不備

作成日: 更新日:

ITニュース概要

複数のHTTP/2サーバーにおいて、通信をリセットする機能に不備があることが判明。この脆弱性を利用されると、サーバーリソースが過剰に消費され、サービス運用妨害(DoS)攻撃を受ける恐れがある。該当サーバーは更新プログラムの適用が推奨される。

ITニュース解説

インターネット通信を支える重要な技術であるHTTP/2プロトコルを実装した、複数のWebサーバーソフトウェアにおいて、サービス運用妨害(DoS)攻撃につながる深刻な脆弱性が発見された。この脆弱性は「CONTINUATION Flood」と名付けられており、WebサイトやAPIサービスなどを提供する多くのシステムに影響を及ぼす可能性があるため、システムエンジニアを目指す上でその仕組みと対策を理解しておくことは非常に重要である。 この脆弱性を理解するには、まずHTTP/2プロトコルの基本的な仕組みを知る必要がある。従来広く使われてきたHTTP/1.1は、一つの通信接続(TCPコネクション)で一度に一つのリクエストしか処理できず、Webページの表示速度に限界があった。これに対しHTTP/2は、一つのTCPコネクション上で「ストリーム」と呼ばれる仮想的な通信路を複数確立し、多数のリクエストとレスポンスを並行して送受信できる「多重化」という仕組みを取り入れた。これにより通信効率が大幅に向上し、Webページの高速表示が可能になった。HTTP/2では、やり取りされるデータはすべて「フレーム」という小さな単位に分割される。例えば、ブラウザがサーバーに要求する内容を伝えるヘッダ情報は「HEADERSフレーム」に、Webページの本文データなどは「DATAフレーム」に格納されて送受信される。 今回の脆弱性が悪用するのは、このヘッダ情報を扱う仕組みの一部である。HTTPのヘッダ情報は、Cookieやユーザーエージェント情報などを含み、非常に長くなることがある。そのためHTTP/2では、一つのHEADERSフレームに収まりきらない長いヘッダ情報を、後続の「CONTINUATIONフレーム」を複数使って分割して送信する仕様が定められている。サーバーは、最初に送られてくるHEADERSフレームと、それに続く一連のCONTINUATIONフレームをすべて受信し、それらを一つに連結して初めて完全なヘッダ情報として解釈する。この一連のフレーム群の終わりは、最後のフレームに付けられる「END_HEADERS」という特別なフラグによって示される。サーバーはこのフラグを確認することで、ヘッダ情報の受信が完了したと判断する。 「CONTINUATION Flood」攻撃は、この仕組みを巧みに悪用する。攻撃者は、まずサーバーに対して通常のHTTP/2リクエストを開始し、HEADERSフレームを送信する。しかし、このHEADERSフレームや、その後に続くCONTINUATIONフレームに、意図的に「END_HEADERS」フラグを付けない。そして、終わりの印がないまま、大量のCONTINUATIONフレームをサーバーに連続して送りつけるのである。サーバー側は、これらがすべて一つの巨大なヘッダ情報の一部であると誤認し、「END_HEADERS」フラグが現れるまで受信したフレームをメモリ上に溜め込み、連結しようと試み続ける。しかし、攻撃者は決して終わりのフラグを送らないため、サーバーのメモリは際限なく消費されていく。さらに、膨大な数のフレームを処理し、連結しようとする作業はCPUにも極めて大きな負荷をかけることになる。最終的に、サーバーはCPUとメモリのリソースを使い果たし、新しいリクエストに応答できなくなったり、最悪の場合はシステムが停止してしまったりする。これがサービス運用妨害(DoS)状態である。本来、HTTP/2には不正な通信を途中で切断するための「ストリームリセット」という機能があるが、今回の脆弱性では、このリセット処理が適切に機能しなかったり、リセット処理自体がサーバーのリソースを消費してしまったりするなど、実装上の不備が攻撃の成立を許してしまった。 この脆弱性の影響範囲は極めて広い。なぜなら、Apache HTTP ServerやNginxといった、世界中のWebサイトで圧倒的なシェアを持つ主要なWebサーバーソフトウェアの多くが影響を受けるからである。これらのサーバー上で稼働している無数のWebサイト、Webアプリケーション、APIサービスが攻撃対象となりうる。したがって、システム管理者やエンジニアは、自身が管理するシステムで利用しているソフトウェアがこの脆弱性の影響を受けるかどうかを確認し、迅速に対応する必要がある。最も重要かつ根本的な対策は、各ソフトウェアの開発元から提供されているセキュリティパッチを適用し、脆弱性が修正された最新バージョンへアップデートすることである。そのためには、自身が利用しているソフトウェアのバージョンを正確に把握し、開発元の公式発表などの信頼できる情報源を定期的に確認する習慣が不可欠となる。また、もしWAF(Web Application Firewall)のようなセキュリティ製品を導入している場合は、この攻撃パターンを検知・防御するためのシグネチャ(ルール)が提供されているかを確認し、適用することも有効な緩和策となり得る。今回の脆弱性は、インターネットの根幹を支えるプロトコルの実装におけるわずかな不備が、いかに広範囲で深刻な影響を及ぼすかを示す好例と言える。システムエンジニアは、アプリケーションだけでなく、その土台となるミドルウェアやプロトコルの仕組みを正しく理解し、常に最新のセキュリティ情報を収集して、迅速かつ的確に対応する能力が求められる。

【ITニュース解説】Weekly Report: 複数のHTTP/2サーバー実装におけるストリームリセット処理の不備