Home Blogs リセット、リーク、DDoS、隠れたCVEの物語
Applications

リセット、リーク、DDoS、隠れたCVEの物語

About The Author

Outline

原文は2023年9月29日に公開されました| 2023年10月10日に更新されました

下記によって:デーブAndrews、Marcus Hildum、Sergio Ruiz

アップデート:HTTP/2 Rapid Reset Attack–CVE-2023-44487

以下の短い最初のブログに続いて、EdgioはCVE-2023-44487–HTTP/2 Rapid Reset Attackの定義と責任ある開示について業界の仲間と関わりまし  た。

根本的な問題はHTTP/2サーバーの多くの実装に影響を及ぼし、Edgioが以前に認識していたよりも攻撃の影響ははるかに広くなっています。 Edgioは、パブリック向けインフラストラクチャを実行しているすべてのお客様に、パッチが適用されたバージョンのサーバーが利用可能になったらすぐにアップグレードするか、HTTP/2を一時的に無効にするようにアドバイスしています。

Edgioは、HTTP/2終了を実行し、HTTP/1.1をお客様のインフラストラクチャにプロキシすることで、お客様へのリスクを軽減することもできます。 このプロセスを開始するには、弊社までお問い合わせ ください。

2023年8月28日午後6時43分(太平洋標準時)、Edgioのエンジニアは、エッジサーバーのメモリ使用率の上昇、複数の大規模なWebプロパティへのリクエスト率、エッジで生成されるログの量を確認しました。

このトラフィックは、すぐに攻撃として識別されましたが、これは、レイヤの7ロードバランサのログでのみ観測できるため、斬新なものでした。 Edgioは、カスタムHTTPキャッシングおよびプロキシエンジンであるSailfishを、レイヤー7ロードバランサ(「フロントエンド」と呼びます)とキャッシュおよびプロキシレイヤー(「バックエンド」)の両方として実行します。 これにより、両方のレイヤで共通の計測とロギングが可能になり、比較が簡単になります。

フロントエンドのログを調べたところ、攻撃を示す興味深い動作がいくつか確認されました。

  1. 単一クライアントのリクエスト数は通常よりもはるかに多く、攻撃中に単一ソケット上の20,000リクエストのインスタンスが検出されました。
  2. クライアントに送信されたバイトはありませんでした。
  3. 開始から終了までの合計要求時間は、1から2ミリ秒の間であり、すべてバックエンドへの新しいプロキシ接続の開始に費やされました。
  4. 動作を示すすべての接続はHTTP/2接続でした。

これらの最初の観察に基づいて、攻撃者はHTTP/2のRST_STREAMフレームを使用して要求を放棄し、同じソケットで新しい要求を非常に迅速に開始していると推測しました。

この後、私たちは3つの異なるワークストリームに取り組みを分割しました。

  1. 根本的な原因を証明する可能性のある、私たちが使用しているHTTP/2ライブラリnghttp2に影響を与える潜在的な問題を調査します。
  2. Sailfish変数を構築して、この動作の基本を明らかにし、緩和を可能にします。
  3. 新しい指標、ダッシュボード、アラートを構築して、このタイプの攻撃をより迅速に特定します。

1.使者… でも本当にnghttp2は

小さな検索の後、この号のEnvoy、Edgioがエッジで利用していないサービスプロキシ、および対応するCVEを見つけまし た。 diffの詳細を確認すると、この問題はEnvoyだけでなく、実際に使用しているnghttp2にもあることに気づきました。

nghttp2のプルリクエストポイントタグのリリースは 公開直後にリリースされ、根本的な問題に対処しています。 nghttp2に対して割り当てられた特定のCVEがないため、使用している主要ソフトウェアの脆弱性を追跡する自動CVEスキャンシステムを使用していましたが、当初はこの問題を見逃していました。

私たちはすぐにこの依存関係をアップグレードして展開するプロセスを開始しましたが、数週間前に完了しました。

2.リセット率の要求

並行して、パフォーマンスや信頼性の問題を防ぐために即座に行動を起こすことができるように、セイルフィッシュ自体の中で攻撃行動をプログラムで特定する作業を行いました。 Sailfish内に設定変数(h2_remote_reset_percent)を実装することにしました 。これは、クライアントによってリセットされた特定の接続上のリクエストの割合を追跡するものです。

さらに、単一の接続での要求カウントの既存の変数と組み合わせて、要求しきい値を超え、設定された割合を超える要求をリセットしたクライアントへの接続を即座に閉じるルールを作成できました。 この構成を通常の運用フェールセーフでラップしたため、特定の場所または顧客に対して無効にできます。

擬似コードでは、次のようになります。

				
					if request_count > 1000 and
  h2_remote_reset_percent > 99 and
  pop ~ ".*" and
  customer_id not in () then

  connection.silent_close();

fi
				
			

お客様のトラフィックへの意図しない影響を回避するために慎重な検証を行った後、新しいルールが導入され、Edgioのエンジニアは今後も異常がないか監視を続けました。

3.計数と比率

この種の攻撃がいつ発生しているかをより迅速に特定するために、ロケーション全体でクライアントから受信したHTTP/2 RST_STREAMフレームの数に基づいて、新しいダッシュボードとアラートを構成しました。 これは、メモリの可用性とヘルスチェックの単一ビューと相まって、この特定のタイプの攻撃による潜在的な劣化の兆候を明確に示しています。

ただし、フロントエンドのみに影響を与える可能性のある他の攻撃タイプについては引き続き懸念していました。 このより一般的な懸念を可視化するために、特定の場所のフロントエンドとバックエンドの間のトランザクションレートの比率の追跡を開始しました。 この比較の基礎となるデータは、非常に長い間、私たちのモニタリングの中核を成してきました。

通常の動作を見ると、フロントエンドに到着する各リクエストが1つのバックエンドリクエストに変換されるため、予想される比率である1の周りに強いバンディングが見られます。 また、0.5と0.25に近いバンディングも目に見えます。これは、主に休止状態のテスト場所で発生します。パージやヘルスチェックなどのシステムでは、バックエンドによって処理される内部トランザクションが増加します。

ただし、最初の攻撃では、この比率に対する効果がはっきりと確認できます。

現在のアラートは、比率が一定の値を超えたときにトリガーされるように設定されており、Edgioサポートエンジニアが優先順位を付けて緩和手順を開始するインシデントを作成します。

概要

これは興味深い新しい攻撃タイプで、広く利用されているライブラリの比較的最近公開された脆弱性を利用しました。 幸いにも、Edgioのチームは、運用意識の向上、攻撃の特定の根本原因の緩和、およびこのクラスの攻撃に対する汎用的で調整可能な汎用的な緩和策の導入に迅速に取り組みました。

もちろん、フィンガープリントを介して悪意のある人物を特定する新しい方法や、この作業をセキュリティ製品スイートに統合して、より永続的なブロックとレート制限を可能にするなど、このような改善に常に取り組んでいます。

Edgioでの退屈な瞬間はありません。

受賞歴のあるEdgioのWeb Application and API Protection(WAAP)ソリューションの一部であるフルスペクトラムDDoS Protectionの詳細については、こちらの専門家にお問い合わせください。