プライム・ストラテジー「KUSANAGI」開発チームの石川です。
2023年10月10日に Google 、 Cloudflare 、 Amazon より公表された脆弱性 CVE-2023-44487 HTTP/2 Rapid Reset Attack について紹介します。
HTTP/2 Rapid Reset Attack とは
まず最初に HTTP/2 について理解する必要があります。
HTTP/2 はWebサーバとWebブラウザの間でHTMLコンテンツやCSS、JavaScript、画像といったデータをやりとりするために用いられる HTTP (Hypertext Transfer Protocol) のバージョン2です。
HTTP/2 はその前身となる HTTP/1.1 (バージョン1.1) の弱点であったHTTPパイプライニングを解消するように設計されたものです。HTTPパイプライニングやHTTP/1.1、および、HTTP/3に関しては KUSANAGI 9 が対応した HTTP/3 とは を参照ください。
HTTP/2 では、1つのHTTPコネクションの中にデータを転送する複数のストリームを立てるとができます。これにより、HTTPのリクエストを複数同時に送信し、サーバ側もリクエストの順序に関係なくレスポンスを同時に返信することができます。この機能を Stream Multiplexing と呼びます。
Rapid Reset Attack は Stream Multiplexing を悪用し、多数のリクエストを投げるのに続いて即時キャンセルを送信することで、クライアント(攻撃者)の負荷を抑えつつ、サーバ側に負荷をかけます。これにより、ターゲットとなったWebサーバの本来応答すべきWebサイトへのリクエストとレスポンスの処理を上回らせることで、Webサーバがサービス応答できなくなります。
このような攻撃を DoS (Denial of Service) または DDoS (Distributed Denial of Service) 攻撃と言います。
この攻撃のポイントは HTTP/2 そのものが持つ機能を悪用しているということです。そのため、HTTP/2 に対応したサービス・ソフトウェアは全て影響を受けます。ここ数年で多くのサービス・ソフトウェアが HTTP/2 に対応していることで、かえって影響範囲が広がってしまっています。
KUSANAGIにおける対策
ここではKUSANAGIでWebサイトを運用しているケースを前提に対策を説明します。
KUSANAGI の環境でWebサイトを運用している場合は、使用しているWebサーバによって対策が異なります。
Apache HTTPD の場合
KUSANAGIでWebサーバにApache HTTPDを利用している場合は、CVE-2023-44487 HTTP/2 Rapid Reset Attack に対応したミドルウェアにアップデートしてください。
Nginx の場合
Nginxでは パフォーマンス上の理由から、デフォルトで HTTP/2 のストリームの数を最大で 128 に制限しています。また、同時にHTTPのコネクションを1000個まで保持するようにしています。このためNginxにおいては、Webサーバの処理性能を上回る速度で即時キャンセルを送信することが 難しくなっています 。
KUSANAGIではNginxのデフォルト設定から変更を行っていないため、NginxでWebサーバを運用している場合は、仮に攻撃を受けたとしてもWebサーバがダウンする可能性は低いと考えられます。
なお、KUSANAGI では更にNginxで他のDoS攻撃を防止する機能として ratelimit コマンドを用意しています。
詳細は kusanagi ratelimit で行うDoS攻撃対策解説 を参照してください。
一般的な対策
一般的な対策としては WAF (Web Application Firewall) を導入することです。
この脆弱性はGoogle、Cloudflare、Amazonが公表しているように、各クラウドプラットフォームにおいて攻撃を検知したことに端を発しています。各クラウドではそのエッジにおいて既に対策を実施していると発表しているように、WAFを入れることで同一IPアドレス等からの不必要な多重リクエストを遮断することが期待できます。
KUSANAGIの環境であっても、WAFを導入することは有用です。KUSANAGIの手前で過度のトラフィックを遮断することができるため、KUSANAGIそのものへの負荷やネットワーク転送を防止することができます。
まとめ
CVE-2023-44487 HTTP/2 Rapid Reset Attack では HTTP/2 そのものの仕様の穴を突くことにより、 HTTP/2 に対応した幅広いサービス・ソフトウェアが影響を受けるということなりました。
脆弱性は Log4j や OpenSSL のようにソフトウェアの実装上の誤りや不備を付いて行われることが多いです。この脆弱性もMicrosoft をはじめとして多くのベンダーでセキュリティ対応をリリースしています。
KUSANAGI も 更新情報 において、脆弱性に対応したミドルウェアのアップデートをリリースしていますので、アップデートを欠かさないようにしてください。