Cookie ハイジャック対策
制限事項
-
クライアントブラウザで JavaScript を有効にする必要があります。
-
Cookie ハイジャック保護は、TLS バージョン 1.3 ではサポートされていません。
-
ブラウザは SSL 接続を再利用しないため、Internet Explorer (IE) ブラウザのサポートが制限されています。リクエストに対して複数のリダイレクトが送信され、最終的に IE ブラウザで「最大リダイレクトを超えました」というエラーが発生します。
Cookie ハイジャック保護の仕組み
シナリオ 1: セッション Cookie なしで最初の Web ページにアクセスするユーザー
-
ユーザは Web アプリケーションへの認証を試み、要求に ADC セッション Cookie が含まれていない状態で最初の Web ページへのアクセスを開始します。
-
要求を受信すると、アプライアンスはセッション Cookie ID を使用してアプリケーションファイアウォールセッションを作成します。
-
これにより、セッションの TLS 接続が開始されます。JavaScriptはクライアントブラウザで送信および実行されないため、アプライアンスはTLS接続を検証済みとしてマークし、チャレンジは不要です。注:攻撃者がセッション Cookie を送信せずに被害者からすべてのアプリ Cookie ID を送信しようとしても、アプライアンスは問題を検出し、要求をバックエンドサーバーに転送する前に、要求に含まれるすべてのアプリ Cookie を削除します。バックエンドサーバーは、このリクエストをアプリ Cookie なしと見なし、その設定に従って必要に応じて処理します。
-
バックエンドサーバーが応答を送信すると、アプライアンスは応答を受信し、JavaScript セッショントークンとシード Cookie とともに転送します。その後、アプライアンスはTLS接続を検証済みとしてマークします。
-
クライアントブラウザが応答を受け取ると、ブラウザは JavaScript を実行し、セッショントークンとシード Cookie を使用してモーフィングされた Cookie ID を生成します。
-
ユーザーがTLS接続を介して後続のリクエストを送信すると、アプライアンスはモーフィングされたCookie 検証をバイパスします。これは、TLS 接続がすでに検証されているためです。
シナリオ 2: セッション Cookie を使用して、新しい TLS 接続を介して連続する Web ページにアクセスするユーザー
-
ユーザーが新しい TLS 接続を介して連続ページの HTTP リクエストを送信すると、ブラウザはセッション Cookie ID とモーフィングされた Cookie ID を送信します。
-
これは新しい TLS 接続であるため、アプライアンスは TLS 接続を検出し、シードCookie によるリダイレクト応答をクライアントに要求します。
-
クライアントは、ADCからの応答を受け取ると、セッションのトークンと新しいシードCookie を使用してモーフィングされたCookie を計算します。
-
次に、クライアントは、この新しく計算されたモーフィングされたCookie をセッションIDとともに送信します。
-
ADCアプライアンス内で計算されたモーフィングされたCookie と、リクエストを介して送信されたCookie が一致すると、TLS接続は検証済みとしてマークされます。
-
計算されたモーフィングされた Cookie がクライアントのリクエストに含まれるものと異なる場合、検証は失敗します。その後、アプライアンスはチャレンジをクライアントに送り返し、適切にモーフィングされた Cookie を送信します。
シナリオ 3: 攻撃者が認証されていないユーザーになりすます
-
ユーザーがウェブアプリケーションへの認証を行うと、攻撃者はさまざまな手法を使用して Cookie を盗み、再生します。
-
これは攻撃者からの新しい TLS 接続であるため、ADC は新しいシード Cookie と共にリダイレクトチャレンジを送信します。
-
攻撃者は JavaScript を実行していないため、リダイレクトされたリクエストに対する攻撃者からの応答には、モーフィングされた Cookie は含まれていません。
-
その結果、ADC アプライアンス側でモーフィングされた Cookie 検証が失敗します。アプライアンスは再びリダイレクトチャレンジをクライアントに送信します。
-
モーフィングされた Cookie 検証の試行回数がしきい値制限を超えると、アプライアンスはステータスを Cookie Hijackking としてフラグ付けします。
-
攻撃者が被害者から盗んだアプリケーション Cookie とセッション Cookie を混在させようとすると、Cookie の一貫性チェックは失敗し、アプライアンスは設定された Cookie ハイジャックアクションを適用します。
シナリオ 4: 認証されたユーザーになりすます攻撃者
-
攻撃者は、本物のユーザーとしてウェブアプリケーションへの認証を試み、被害者の Cookie を再生してウェブセッションにアクセスすることもできます。
-
ADCアプライアンスは、このようななりすまし攻撃者も検出します。攻撃者は検証済みのTLS接続を使用して被害者のCookie を再生しますが、ADCアプライアンスはリクエスト内のセッションCookie とアプリケーションCookie が一致しているかどうかを確認します。アプライアンスは、要求内のセッションCookie を使用してアプリケーションCookie の一貫性を検証します。リクエストには攻撃者のセッション Cookie と被害者のアプリ Cookie が含まれているため、Cookie の一貫性検証は失敗します。
-
その結果、アプライアンスは設定された Cookie ハイジャックアクションを適用します。設定されたアクションが「ブロック」に設定されている場合、アプライアンスはすべてのアプリケーションCookie を削除し、要求をバックエンドサーバーに送信します。
-
バックエンドサーバーはアプリケーションCookie ないリクエストを受け取り、攻撃者に「User not login」などのエラー応答を返します。
CLIを使用してCookie ハイジャックを設定する
set appfw profile <name> [-cookieHijackingAction <action-name> <block | log | stats | none>]
set appfw profile profile1 - cookieHijackingAction Block
NetScaler GUIを使用してCookie ハイジャックを設定します
NetScaler GUIを使用して、Cookie 一貫性検証のための緩和ルールを追加します
-
[ セキュリティ]> Citrix Web App Firewall]>[プロファイル]に移動します。
-
Citrix Web App Firewall プロファイルページで 、「 詳細設定 」セクションに移動し、「 緩和ルール」をクリックします。
-
「 リラクゼーションルール 」セクションで、「 Cookie の一貫性 」を選択し、「 アクション」をクリックします。
-
Cookie の一貫性緩和ルールページで 、次のパラメータを設定します。
-
Enabled。緩和ルールを有効にするかどうかを選択します。
-
Cookie 名は正規表現ですか. Cookie 名が正規表現であるかどうかを選択します。
-
Cookie 名。Cookie の検証を免除できるCookie ーの名前を入力します。
-
正規表現エディタ。このオプションをクリックすると、正規表現の詳細が表示されます。
-
CLI を使用して Cookie ハイジャックのトラフィックと違反の統計情報を表示する
stat appfw profile profile1
| Appfw プロファイルのトラフィック統計 | レート (/s) | 合計 |
|---|---|---|
| リクエスト | 0 | 0 |
| 要求バイト数 | 0 | 0 |
| レスポンス | 0 | 0 |
| 送信バイト数 | 0 | 0 |
| 中止する | 0 | 0 |
| リダイレクト | 0 | 0 |
| 長期平均応答時間 (ミリ秒) | -- | 0 |
| 最近の平均応答時間 (ミリ秒) | -- | 0 |
| HTML/XML/JSON 違反統計 | レート (/s) | 合計 |
|---|---|---|
| 開始URL | 0 | 0 |
| URL を拒否する | 0 | 0 |
| リファラーヘッダー | 0 | 0 |
| バッファオーバーフロー | 0 | 0 |
| Cookie の整合性 | 0 | 0 |
| Cookie ハイジャック | 0 | 0 |
| CSRF フォームタグ | 0 | 0 |
| HTML クロスサイトスクリプティング | 0 | 0 |
| HTML SQL インジェクション | 0 | 0 |
| フィールド形式 | 0 | 0 |
| フィールドの一貫性 | 0 | 0 |
| クレジットカード | 0 | 0 |
| セーフオブジェクト | 0 | 0 |
| シグネチャ違反 | 0 | 0 |
| コンテンツの種類 | 0 | 0 |
| JSON サービス拒否 | 0 | 0 |
| JSON SQLインジェクション | 0 | 0 |
| JSON クロスサイトスクリプティング | 0 | 0 |
| ファイルアップロードの種類 | 0 | 0 |
| コンテンツタイプ XML ペイロードを推測 | 0 | 0 |
| HTML CMD インジェクション | 0 | 0 |
| XML 形式 | 0 | 0 |
| XML サービス拒否 (XDoS) | 0 | 0 |
| XML メッセージ検証 | 0 | 0 |
| Web サービスの相互運用性 | 0 | 0 |
| XML SQL インジェクション | 0 | 0 |
| XML クロスサイトスクリプティング | 0 | 0 |
| XML 添付ファイル | 0 | 0 |
| SOAP フォールト違反 | 0 | 0 |
| XML ジェネリック違反 | 0 | 0 |
| 違反総数 | 0 | 0 |
| HTML/XML/JSON ログ統計 | レート (/s) | 合計 |
|---|---|---|
| URL ログの開始 | 0 | 0 |
| URL ログの拒否 | 0 | 0 |
| リファラーヘッダーログ | 0 | 0 |
| バッファオーバーフローログ | 0 | 0 |
| バッファオーバーフローログ | 0 | 0 |
| Cookie 整合性ログ | 0 | 0 |
| Cookie ハイジャックのログ | 0 | 0 |
| CSRF フォームタグログ | 0 | 0 |
| HTML クロスサイトスクリプティングログ | 0 | 0 |
| HTML クロスサイトスクリプティング変換ログ | 0 | 0 |
| HTML SQL インジェクションログ | 0 | 0 |
| HTML SQL 変換ログ | 0 | 0 |
| フィールド形式ログ | 0 | 0 |
| フィールド整合性ログ | 0 | 0 |
| クレジットカード | 0 | 0 |
| クレジットカード変換ログ | 0 | 0 |
| セーフオブジェクトログ | 0 | 0 |
| シグネチャログ | 0 | 0 |
| コンテンツタイプログ | 0 | 0 |
| JSON サービス拒否ログ | 0 | 0 |
| JSON SQLインジェクションログ | 0 | 0 |
| JSON クロスサイトスクリプティングログ | 0 | 0 |
| ファイルアップロードタイプログ | 0 | 0 |
| コンテンツタイプ XML ペイロードを推測 L | 0 | 0 |
| HTML コマンドインジェクションログ | 0 | 0 |
| XML 形式ログ | 0 | 0 |
| XML サービス拒否 (XDoS) ログ | 0 | 0 |
| XML メッセージ検証ログ | 0 | 0 |
| WSI ログ | 0 | 0 |
| XML SQL インジェクションログ | 0 | 0 |
| XML クロスサイトスクリプティングログ | 0 | 0 |
| XML 添付ファイルログ | 0 | 0 |
| SOAP フォールトログ | 0 | 0 |
| XML 汎用ログ | 0 | 0 |
| ログメッセージの総数 | 0 | 0 |
| サーバーエラーレスポンス統計 | レート (/s) | 合計 |
|---|---|---|
| HTTP クライアントエラー (4xx 回答) | 0 | 0 |
| HTTP サーバーエラー (5xx) | 0 | 0 |
