HTTPリクエスト・スマグリングとその防止策

Risk Factors

Likelihood

Complexity

Business Impact

HTTPリクエスト・スマグリング

HTTPリクエスト

・スマグリングとは 多くの場合、Webサイトでは、ロード・バランサ、コンテンツ・デリバリ・ネットワーク(CDN)、またはリバース・プロキシを使用して、単一接続上で受信したHTTP要求を管理しています。HTTPリクエスト・スマグリングは、複数の送信元からの要求を処理する方法がフロントエンド・サーバ(プロキシ)とバックエンド・サーバで異なる場合に、その不一致を悪用するWebアプリケーション攻撃です。この攻撃によって、攻撃者はセキュリティ制御の回避やサイト管理ページへのアクセス権取得が可能になるほか、クロスサイト・スクリプティング(XSS)などの他の攻撃技法を使用できるようになります。HTTPリクエスト・スマグリングはHTTP Desync攻撃と呼ばれることもあります。以下に、この攻撃の仕組みについて簡単に説明します。サーバでは、HTTP要求を処理するときに、Content-LengthヘッダまたはTransfer-Encodingヘッダを参照してHTTPコンテンツの長さ(先頭と末尾)を判断します。この2つのヘッダが両方とも同じ要求に存在する場合、競合する情報が得られることがあります。このような競合を防ぐために、サーバではどちらかのヘッダを無視します。ところが、無視するヘッダが、フロントエンドのプロキシ・サーバとバックエンド・サーバとで異なることがあります。HTTPリクエスト・スマグリング攻撃では、1つのHTTP接続で、この両方のヘッダを記した要求の後に、チェーン状に記述した複数の受信HTTP要求が続きます。これにより、フロントエンド・サーバとバックエンド・サーバで、このチェーンにある各要求の先頭と末尾を判断する方法に問題が発生します。悪意のあるHTTP要求の末尾が誤って計算され、悪意のあるコンテンツがいずれかのサーバで処理されないままとなり、チェーンの中で次の受信要求の先頭に追加されます。


HTTPリクエスト

・スマグリングに対する防御 一定のIT最適化(バックエンド・サーバ接続の再利用など)によって、システムがHTTPリクエスト・スマグリングに脆弱な状態に保持されることがあります。このような再利用を無効化することで、各要求が強制的に別々の接続に送信されます。これにより、HTTP Desync攻撃のリスクを低減します。バックエンド・サーバでHTTP/2を使用することで、無許可の要求を軽減することもできます。あいまいさの防止に、このプロトコルが効果的であるからです。最後に、多くのWebアプリケーション・ファイアウォールを使用することで、HTTP要求のトラフィックにある不一致が特定されて阻止され、スマグリングの可能性がある要求を軽減できます。残念ながら、ファイアウォールがスマグリングのメカニズムとしても機能することがあります。HTTPリクエスト・スマグリング攻撃の検知は復号を使用することで強化できます。一般的に、HTTPリクエスト・スマグリング攻撃では、HTTPを通じて公開されているサービスが標的となります。このような理由から、広く使用されている暗号化産業用プロトコル(TLSなど)のすべてに対応する復号機能をセキュリティ・ツールが備えていることが重要です。


HTTPリクエスト・スマグリングの歴史

HTTPリクエスト・スマグリングは、2005年にセキュリティ・ソフトウェア・プロバイダのWatchfireが発表した文書で初めて報告されました。2020年には、このWatchfire文書の原著者の1人であるArmit Klein氏を含むSafeBreachの研究者が、プロキシ・サーバとバックエンド・サーバの両方にある同一の脆弱性を悪用する攻撃の新たな亜種を発見しました。この新たに発見された亜種に既知の概念実証エクスプロイトはありませんが、そのエクスプロイトの結果はビジネスにとって深刻であると見なされており、ソフトウェア・ベンダ数社がパッチを公開しています。