HTTPリクエスト・スマグリングとその防止策
Risk Factors
Likelihood
Complexity
Business Impact
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など)のすべてに対応する復号機能をセキュリティ・ツールが備えていることが重要です。