ブログ

セキュリティルールゼロ: X-Forwarded-For に関する警告

ロリ・マクヴィッティ サムネイル
ロリ・マクヴィッティ
2017 年 12 月 7 日公開
dp-prog-oct-17-ihealth

プロキシは、あるシステムから別のシステムにリクエストを転送するために存在するという前提で動作します。 これらは通常、負荷分散 (スケール)、データ漏洩防止 (セキュリティ)、圧縮 (パフォーマンス) などの何らかの価値を追加します (そうでなければ、中間に位置することはありません)。

問題は、クライアントから送信されたリクエストが、変更されずにターゲットの宛先に渡されることです。

ここで事態が危うくなる可能性があります。 現在、プロキシ経由で配信されるアプリの半分以上が X-Forwarded-For を利用しています。 実際のライブアプリの 56% がこれを使用しており、これはかなり重要なデータとなります。 X-Forwarded-For は、クライアントのの IP アドレスを伝送して、相手側のアプリがその IP アドレスを認識できるようにするカスタム HTTP ヘッダーです。 そうしないと、プロキシ IP アドレスのみが表示されるため、一部のアプリが混乱することになります。

これは、多くのアプリケーションが、詐欺行為を防止し、アクセスを可能にするために、クライアントの実際の IP アドレスを知ることに依存しているためです。 最近、普段使用しているデバイス以外のデバイスから銀行、Gmail、または Xbox アカウント ( Minecraft がインストールされている場所ですよね) にログインした場合、セキュリティ警告が表示された可能性があります。 詐欺や不正使用の試みを検出する目的で、ログイン元に関する情報も追跡されるからです。

実際の IP アドレスは、一部のシステムでアクセスを許可または拒否するために、また物理的な位置を推測する手段としても使用されます。 そのため、これらの電子メールの警告には、「ブルガリアからログインしていますか?」という内容が含まれることがよくあります。

一部のシステムでは、アクセス制御を実施するために X-Forwarded-For も使用します。 たとえば、WordPress は .htaccess ファイルを使用して、IP アドレスに基づいてアクセスを許可リストに登録します。 いいえ、これは最善の解決策ではありませんが、一般的な解決策であり、少なくとも不正使用に対するアプリの保護を提供しようとしていることに対しては、評価しなければなりません。

良いアイデアかどうかに関わらず、認証または承認スキームの一部として X-Forwarded-For を使用する場合は、実際に実際のクライアント IP アドレスであることを確認するために最大限の努力を払う必要があります。 これは、全体的なセキュリティ方程式の中で最も一般的に使用される要素の 1 つであり、企業の利益と同様に消費者も保護します。

しかし、クライアントがそのヘッダーで送信する内容を盲目的に受け入れると、誰かが値を偽装し、不正アクセスを防ぐためのセキュリティ メカニズムを回避できるようになる可能性があります。 結局のところ、数行のコードを書いたり、HTTP ヘッダーを簡単に操作できる多数の Chrome プラグインの 1 つを入手したりすることで、ほぼ何でも偽装できます。

実際のIP アドレスを確実に取得する方法の 1 つは、ユーザー入力を信頼しないことです。 はい、またセキュリティルールゼロが出てきました。 ユーザー入力を決して信頼しないでください。 そして、HTTP ヘッダーは、そのように見えるかどうかにかかわらず、ユーザー入力であることがわかっています。

すでにプロキシをお持ちの場合は、問題ありません。 そうでない場合は、入手する必要があります。 そうすることで、X-Forwarded-For から正しい値を抽出して配置し、なりすまし行為を阻止できるからです。

基本的に、プロキシがリクエストにアクセスし、IP パケット内に隠されている実際の IP アドレスを見つけられるようにする必要があります。 一部のプロキシでは構成やポリシーでこれを実行できますが、他のプロキシではプログラムによる魔法が必要になります。 いずれにしても、それが X-Forwarded-For HTTP ヘッダーに入力する値であり、通常どおり続行します。 そうすることで、アクセスや承認など、決定を下すための正確な情報がアプリやダウンストリーム サービスに提供されるようになります。

ほとんどのアーキテクチャと状況では、これにより、偽装された X-Forwarded-For が不正アクセスに使用される可能性が軽減されます。 いつものように、クライアントとその正当性を正確に理解するために必要な情報が多いほど、セキュリティは向上します。 IP アドレス (X-Forwarded-For 内) を、デバイス タイプ、ユーザー エージェント、および HTTP やネットワーク プロトコルで自動的に伝送されるその他の情報と組み合わせると、情報に基づいた決定を行うためのより堅牢なコンテキストが提供されます。

安全にお過ごしください! 

 

X-Forwarded-For を処理するためのリソース: