Webキャッシュポイゾニング

Webキャッシュポイゾニングの概要



Webキャッシュポイゾニング(WCP)は、ウェブキャッシュの機能を悪用し、不正なHTTPレスポンスをキャッシュサーバーに保存させる攻撃手法です。この攻撃方法は、特にコンテンツデリバリネットワーク(CDN)、リバースプロキシ、アプリケーションアクセラレータといったキャッシュ技術の脆弱性を突くものです。WCPには、CDNを対象にした「CDNキャッシュポイゾニング」が含まれます。

仕組みと原理



キャッシュは、リクエストに対する応答時間を短縮し、バックエンドサーバーの負荷を軽減するために利用されます。その基本的な原則は、「同じリクエストには同じレスポンスを返す」というものです。キャッシュサーバーはリクエスト情報を基にキャッシュキーを生成し、そのキーが一致するリクエストに対して保存されたレスポンスを返します。

攻撃者は、キャッシュキーには含まれないが、バックエンドでの処理に影響を与える「非キー化入力」を見つけ出します。これに悪意のある内容を含むリクエストを送信することで、生成された有害なレスポンスをキャッシュに保存させ、その後、正規ユーザーがアクセスするたびにそのレスポンスが配信されることになります。このポイゾニングは、キャッシュサーバーとバックエンドサーバーの判断基準が異なることを利用しています。

攻撃手法



キャッシュキーと非キー化入力の概念



キャッシュシステムでは、リクエストの一意な識別にキャッシュキーが用いられますが、User-AgentやRefererといったヘッダーは通常、キャッシュキーに含まれません。攻撃者はまず、こうした非キー化入力を特定し、それに悪意のあるペイロードを注入します。その後、特定のタイミングを狙って有害なレスポンスをキャッシュサーバーに保存させることで、全ての正規ユーザーに悪影響を及ぼすことが可能になるのです。

具体的な手法の例は以下の通りです。

  • - X-Forwarded-Host インジェクション: バックエンドがこのヘッダーを使用する場合、攻撃者は自身のドメインを使ってスクリプトを生成させ、XSS(クロスサイトスクリプティング)を発動させます。
  • - X-Forwarded-ProtoによるDoS: 攻撃者が無限リダイレクトループを引き起こすためにHTTPヘッダーを利用することもあります。
  • - Fat GET: GETリクエストのボディに含まれるパラメータがバックエンドで処理される場合、キャッシュがこの部分を無視する点を突き、有害なレスポンスをキャッシュさせます。

キャッシュ汚染型サービス拒否攻撃(CPDoS)



CPDoSは、キャッシュを無効なコンテンツで上書きし、サービスを停止させる手法です。この攻撃手法は、主にCDNをターゲットにしており、少ないトラフィックで広範囲の影響を与えることが可能です。

防御策



Webキャッシュポイゾニングに対抗するためには、多層的な防御が必要です。具体的には、各種キャッシュの設定を見直し、HTTPリクエストにおける危険なヘッダーを弾く、またキャッシュキーの要素を厳密に制御することが求められます。さらに、アプリケーション層でも適切なヘッダー管理を行い、リクエストの分類を強化することが有効です。報告によると、今もなお多くのドメインがポイゾニングに脆弱であることが指摘されています。

導入すべき対策



特定の対策としては、NginxやVarnish Configuration Languageを使用して、キャッシュキーの生成およびリクエストヘッダーの正規化を行うことが重要です。これにより、攻撃者による悪用のリスクを大幅に低減できます。また、適切なCDNプロバイダーを選択し、導入することで、さらなる防御強化が期待できるでしょう。

注意が必要な点



WebキャッシュポイゾニングとWebキャッシュ欺瞞(WCD)は混同されがちですが、それぞれ目的が異なります。WCPは不特定のユーザーに悪意のあるコンテンツを配信するのに対し、WCDは特定の対象を誘導して機密情報を取得することを目的としています。

このような攻撃手法についての理解を深め、適切な防御策を講じることが、セキュリティの強化につながります。

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。