Amazon、Cloudflare、Google、Microsoftの各社は、8月と9月に記録した、史上最大のDDoSレイヤー7攻撃と呼ばれるものを軽減することに成功したと発表した。この攻撃は、HTTP2プロトコルの脆弱性を利用した「ハイパーボリューメトリック」な分散型サービス拒否攻撃で、各社は「HTTP/2 Rapid Reset」と名付けている。
Amazon、Cloudflare、Google、Microsoftそして他の大手クラウド・プロバイダーは、ここ数カ月でこれらの攻撃を受けている。Google Cloudは、HTTP/2 Rapid Reset攻撃の結果として、記録的な3億9800万RPSを報告している。
Cloudflareは、今回緩和された攻撃の規模は、2023年2月に同社が記録したもの(7,100万rps)の3倍であり、20,000台のマシンで構成される比較的小規模なボットネットを使用して達成されたことを憂慮しているとコメントしている。
8月下旬以降、Cloudflareは1,000万rpsを超えるHTTP/2 Rapid Reset DDoS攻撃を1,000件以上検出・緩和しており、184件がこれまでの7,100万rpsの記録を更新している。
Cloudflareは、さらなる脅威がこの新しい攻撃手法とともにより大規模なボットネットを採用することで、HTTP/2 Rapid Reset攻撃はさらに大きな記録を更新し続けると確信している。
「今日、数十万台から数百万台のマシンで構成されるボットネットが存在します。ウェブ全体が通常1秒間に10億から30億のリクエストしか見ていないことを考えると、この方法を使用することで、ウェブ全体のリクエストを少数のターゲットに集中させることができるということは考えられないことではありません」と、Cloudflareはブログで述べている。
HTTP/2 Rapid Resetの詳細
この新しい攻撃は、HTTP/2プロトコルの弱点を悪用する、CVE-2023-44487として追跡されているゼロデイ脆弱性を悪用する。
この方法は、HTTP/2プロトコルの機能であるストリーム・マルチプレキシングに依存しており、1つのTCPコネクションで複数のHTTPリクエストをサーバーに送信することができる。サーバーはリクエストのストリームを収集し、処理し、応答する。そのため、ブラウザがページを開くと、そのページ上のすべてのコンテンツに対して、1つのコネクションを通じて連続的に個別のリクエストを発行することができる。これは、HTTP/1.xの従来のアプローチよりも効率的であるはずで、通常、サーバーから何かをフェッチするために複数の並列TCPコネクションを確立する時間とリソースを必要とする。HTTP/2はそれをすべて1つのコネクションで行う。
このプロトコルのストリーミング機能の特徴は、リクエストを送信してすぐにそのリクエストをキャンセルできることだ。クライアントがリクエストを行い、それをキャンセルすると、サーバーはHTTP/2コネクションを開いたままリクエストの処理をあきらめる。これは、複数のTCPコネクションを開いたり閉じたりする手間を省くことができ、例えば、ページ上の画像を取得し、ウィンドウがすでにスクロールして過ぎてしまった場合、表示されていない画像をキャンセルするのに便利だ。
通常のHTTP/2ベースのDDoS攻撃は、攻撃者がこれらのストリームを可能な限り多く開き、サーバーやプロキシからの各リクエストに対する応答を待ってから、別のリクエストを乱発し、これを何度も繰り返すことになる。サーバーが1つのTCPコネクションで許可するストリーム数は限られているので、一度に100ストリームしか受け入れないかもしれない。ここで重要なのは、攻撃者は100ほどのレスポンスが返ってくるのを待ってから、次のリクエストを送るということだ。
HPPP/2 Rapid Reset攻撃はこの制限を回避し、さらに多くのリクエストをサーバーに殺到させる。これは、ストリームでリクエストを送信した後、ストリームを素早くリセッ トし、そのリクエストをキャンセルし、コネクションを開いたままにするという単純 なものである。サーバーはこれらのリクエストの処理を開始し、後で停止する。各リクエストはキャンセルされたので、許容されるストリームの最大数にはカウントされない。あなたはただ、リクエストを発射し続け、そのストリームを素早くリセットし続け、これを何度でも繰り返す。
Googleはここで、攻撃者が、サーバーが許可するストリームの最大数を決して超えないようにしながら、大量のリクエストを確実に飛行させ続ける方法を説明している。ネットワークの帯域幅が、ラウンドトリップタイム(RTT)の代わりに、リクエスト可能数を決定する要因となる。
GoogleのエンジニアJuho SnellmanとDaniele Iamartinoは、「クライアントは標準的なHTTP/2攻撃のように一度に大量のストリームを開きますが、サーバーやプロキシからの各リクエストストリームに対する応答を待つのではなく、クライアントは各リクエストを即座にキャンセルします」と述べている。
「このプロトコルでは、クライアントとサーバーがキャンセルを調整する必要はありません。クライアントは、サーバーがRST_STREAMフレームを受信した時点で、そのTCPコネクションからの他のデータが処理される前に、キャンセルが即座に有効になると仮定することもできます」と、Googleは説明する。
これらのキャンセルされたリクエストは、サーバーに不必要な作業を大量に要求し、何も送り返すことなく処理するために時間とコストがかかる一方、クライアント(この場合は攻撃者)はリクエストを送信するために「ほとんどコストをかけずに」行う事が出来る。
基本的に、このプロセスによって攻撃者はサーバーにかつてないほど多くのリクエストを殺到させることができ、軽減が難しい大規模なDDoS攻撃につながる。
簡単に言うと、この攻撃方法はHTTP/2のストリームキャンセル機能を悪用し、リクエストを継続的に送信・キャンセルすることで、ターゲットとなるサーバー/アプリケーションを圧倒し、DoS状態を引き起こす。
プロバイダーは緩和策を開発
Cloudflareは、HTTP/2プロキシやロードバランサは、素早く送信されるリセットリクエストの長い文字列の影響を特に受けやすいと説明している。
同社のネットワークは、TLSプロキシとその上流の相手との間のポイントで圧倒されていたため、悪いリクエストがブロックポイントに到達する前に被害が発生した。
実際の影響としては、これらの攻撃によりCloudflareのクライアントの間で502エラー報告が増加した。
Cloudflareは、「IP Jail」と呼ばれるハイパーボリューメトリック攻撃を処理するために設計されたシステムを使用して、最終的にこれらの攻撃を軽減したと述べている。
このシステムは、問題のあるIPを「刑務所」に入れ、Cloudflareのどのドメインでも一定期間HTTP/2を使用できないようにするもので、刑務所に入っているIPを共有する正規ユーザーにはわずかなパフォーマンス低下で影響が及ぶ。
Amazonによると、これらの攻撃は数十件に及んだが、その影響の詳細は明らかにされず、顧客サービスの可用性は維持されたと強調している。
3社とも、HTTP/2 Rapid Reset攻撃に対抗するクライアントにとって最善のアプローチは、利用可能なすべてのHTTPフラッド対策ツールを使用し、多面的な緩和策でDDoS耐性を強化することであると結論づけている。
残念ながら、この手口はHTTP/2プロトコルを悪用するため、攻撃者がこのDDoS手口を使用するのを完全に阻止する一般的な修正策はないのが現状だ。
その代わりに、ソフトウェアでプロトコルを利用するソフトウェア開発者は、HTTP/2 Rapid Reset攻撃を軽減するためにレート制御を実装している。
Cloudflareは別の投稿で、ゼロデイがより多くの脅威行為者に知られ、「猫とネズミ」のゲームが始まる前に、セキュリティベンダーや関係者が脅威に対応する時間を確保するため、1ヶ月以上ゼロデイを秘密にしておく必要があったと説明している。
「できるだけ多くのセキュリティ・ベンダーに対応する機会を与えるため、今日まで情報を制限していました。しかし、ある時点で、このようなゼロデイ脅威を公にすることが責任あることになります。今日がその日です」とCloudflareは説明している。
Sources
- Amazon: How AWS protects customers from DDoS events
- Cloudflare:
- Google:
- Microsoft: Microsoft Response to Distributed Denial of Service (DDoS) Attacks against HTTP/2
コメントを残す