XML クロスサイトスクリプティングチェック
XML クロスサイトスクリプティングチェックは、XML ペイロードで発生する可能性のあるクロスサイトスクリプティング攻撃に対するユーザーリクエストを調べます。クロスサイトスクリプティング攻撃の可能性が見つかると、リクエストをブロックします。
保護された Web サービス上のスクリプトが悪用されて Web サービスのセキュリティが侵害されるのを防ぐため、XML クロスサイトスクリプティングチェックは、スクリプトが置かれているサーバー以外のサーバー上のコンテンツにアクセスしたり変更したりしてはならないという同じオリジンルールに違反するスクリプトをブロックします。同一生成元ルールに違反するスクリプトはクロスサイトスクリプトと呼ばれ、スクリプトを使用して別のサーバー上のコンテンツにアクセスしたり変更したりすることをクロスサイトスクリプティングと呼びます。クロスサイトスクリプティングがセキュリティ上の問題である理由は、クロスサイトスクリプティングを許可する Web サーバーが、その Web サーバー上ではなく、攻撃者が所有および制御している別の Web サーバー上のスクリプトで攻撃される可能性があるためです。
Web App Firewall には、XML クロスサイトスクリプティング保護を実装するためのさまざまなアクションオプションが用意されています。 ブロック、 ログ、 統計の各アクションを設定することができます 。
Web App Firewall XML クロスサイトスクリプティングチェックは、受信したリクエストのペイロードに対して実行され、攻撃文字列が複数行に分散していても識別されます。このチェックでは、 **要素と属性値に含まれるクロスサイトスクリプティング攻撃文字列を探します** 。特定の条件下では、セキュリティチェックの検査をバイパスするための緩和措置を適用できます。ログと統計は、必要な緩和策を特定するのに役立ちます。
XML ペイロードの CDATA セクションは、スクリプトが CDATA セクションの外部では実行できないため、ハッカーにとって魅力的な領域となる可能性があります。CDATA セクションは、コンテンツ全体を文字データとして扱う場合に使用されます。HTML マークアップタグの区切り文字 <、 **、 **/ を使用しても、パーサーはコードを HTML 要素として解釈しません。次の例は、クロスサイトスクリプティング攻撃文字列を含む CDATA セクションを示しています。
<![CDATA[rn
<script language="Javascript" type="text/javascript">alert ("Got you")</script>rn
]]>
<!--NeedCopy-->
アクションオプション
XML クロスサイトスクリプティングチェックがリクエスト内のクロスサイトスクリプティング攻撃を検出すると、アクションが適用されます。アプリケーションの XML クロスサイトスクリプティング保護を最適化するには、次のオプションを使用できます。
- ブロック—リクエストでクロスサイトスクリプティングタグが検出されると、ブロックアクションがトリガーされます。
- ログ:XML クロスサイトスクリプティングチェックによって実行されたアクションを示すログメッセージを生成します。ブロックを無効にすると、クロスサイトスクリプティング違反が検出された場所 (ELEMENT、ATTRIBUTE) ごとに個別のログメッセージが生成されます。ただし、要求がブロックされると、1 つのメッセージだけが生成されます。ログを監視して、正当な要求に対する応答がブロックされているかどうかを判断できます。ログメッセージの数が大幅に増加すると、攻撃を開始しようとしたことを示している可能性があります。
- 統計情報— 違反やログに関する統計を収集します。stats カウンタの予期しない急増は、アプリケーションが攻撃を受けていることを示している可能性があります。正当なリクエストがブロックされる場合、新しい緩和ルールを構成する必要があるか、既存の緩和ルールを変更する必要があるかを確認するために、構成を再確認しなければならない場合があります。
リラクゼーションルール
アプリケーションで XML ペイロード内の特定の ELEMENT または ATTRIBUTE のクロスサイトスクリプティングチェックをバイパスする必要がある場合は、緩和ルールを設定できます。XML クロスサイトスクリプティングチェック緩和ルールには次のパラメータがあります。
-
名前—リテラル文字列または正規表現を使用して、要素または属性の名前を設定できます。次の式では、文字列 name_ で始まり、その後に大文字または小文字、または数字からなる文字列、つまり 2 文字以上で 15 文字以下のすべての要素が除外されます。
^name_[0-9A-Za-z]{2,15}$
注
大文字と小文字は区別されます。重複したエントリは許可されませんが、名前の大文字と場所の違いを使用して、類似のエントリを作成できます。たとえば、次の緩和ルールはそれぞれ異なります。
XMLcross-site scripting: ABC IsRegex: NOTREGEX
Location: ATTRIBUTE State: ENABLED
XMLcross-site scripting: ABC IsRegex: NOTREGEX
Location: ELEMENT State: ENABLED
XMLcross-site scripting: abc IsRegex: NOTREGEX
Location: ELEMENT State: ENABLED
XMLcross-site scripting: abc IsRegex: NOTREGEX
Location: ATTRIBUTE State: ENABLED
- 場所— XML ペイロード内のクロスサイトスクリプティングチェック例外の場所を指定できます。デフォルトでは ELEMENT オプションが選択されています。 属性に変更できます。
- コメント:これはオプションのフィールドです。この緩和ルールの目的を説明するには、最大255文字の文字列を使用できます。
警告
正規表現は強力です。特に PCRE 形式の正規表現に慣れていない場合は、作成した正規表現をすべて再確認してください。例外として追加したい名前とまったく同じ名前を定義し、それ以外は何も定義していないことを確認してください。正規表現を不注意に使用すると、意図していなかった Web コンテンツへのアクセスをブロックしたり、XML クロスサイトスクリプティングチェックでブロックされたはずの攻撃を許可したりするなど、望ましくない結果が生じる可能性があります。
コマンドラインを使用して XML クロスサイトスクリプティングチェックを設定する
コマンドラインを使用して XML クロスサイトスクリプティングチェックアクションとその他のパラメータを設定するには
コマンドラインインターフェイスを使用する場合は、次のコマンドを入力して XML クロスサイトスクリプティングチェックを設定できます。
> set appfw profile <name> -XMLcross-site scriptingAction (([block] [log] [stats]) | [none])
コマンドラインを使用して XML クロスサイトスクリプティングチェック緩和ルールを設定するには
緩和ルールを追加して、特定の場所でのクロスサイトスクリプティングスクリプト攻撃インスペクションのインスペクションをバイパスできます。以下のように bind または unbind コマンドを使用して、緩和ルールバインディングを追加または削除します。
> bind appfw profile <name> -XMLcross-site scripting <string> [isRegex (REGEX | NOTREGEX)] [-location ( ELEMENT | ATTRIBUTE )] –comment <string> [-state ( ENABLED | DISABLED )]
> unbind appfw profile <name> -XMLcross-site scripting <String>
例:
> bind appfw profile test_pr -XMLcross-site scripting ABC
上記のコマンドを実行すると、次の緩和ルールが設定されます。ルールが有効になり、名前はリテラル (NOTREGEX) として扱われ、ELEMENT がデフォルトの場所として選択されます。
1) XMLcross-site scripting: ABC IsRegex: NOTREGEX
Location: ELEMENT State: ENABLED
`> unbind appfw profile test_pr -XMLcross-site scripting abc`
ERROR: No such XMLcross-site scripting check
`> unbind appfw profile test_pr -XMLcross-site scripting ABC`
Done
<!--NeedCopy-->
GUI を使用して XML クロスサイトスクリプティングチェックを設定する
GUI では、アプリケーションに関連するプロファイルのペインで XML クロスサイトスクリプティングチェックを設定できます。
GUI を使用して XML クロスサイトスクリプティングチェックを設定または変更するには
- Web App Firewall > プロファイルに移動し、ターゲットプロファイルを強調表示して、「 編集」をクリックします。
- [詳細設定] ペインで、[ セキュリティチェック] をクリックします。
セキュリティー検査テーブルには、すべてのセキュリティー検査に対して現在構成されているアクション設定が表示されます。設定には次の 2 つのオプションがあります。
a) XMLクロスサイトスクリプティングチェックのブロック、ログ、統計アクションを有効または無効にするだけの場合は、表のチェックボックスをオンまたはオフにして、「 OK」をクリックし、「保存して閉じる」をクリックしてセキュリティチェックペインを閉じます。
b) XML クロスサイトスクリプティングをダブルクリックするか、行を選択して「 アクション設定」をクリックすると、アクションオプションが表示されます。アクション設定のいずれかを変更したら、「 OK」 をクリックして変更を保存し、「セキュリティチェック」テーブルに戻ります。
必要に応じて、他のセキュリティー検査の設定に進むことができます。[ OK] をクリックして[セキュリティチェック]セクションで行った変更をすべて保存し、[ 保存して閉じる ]をクリックして[セキュリティチェック]ウィンドウを閉じます。
GUI を使用して XML クロスサイトスクリプティング緩和ルールを設定するには
- Web App Firewall > プロファイルに移動し、ターゲットプロファイルを強調表示して、「 編集」をクリックします。
- [ 詳細設定 ] ウィンドウで、[ 緩和規則] をクリックします。
- 「緩和規則」テーブルで、「XML クロスサイトスクリプティング」エントリをダブルクリックするか、エントリを選択して「編集」をクリックします。
- XML クロスサイトスクリプティング緩和規則ダイアログボックスで、緩和規則の追加**、 **編集、 削除、 有効化、 または無効化の操作を実行します 。
ビジュアライザーを使用して XML クロスサイトスクリプティング緩和ルールを管理するには
すべての緩和ルールをまとめて表示するには、「緩和ルール」テーブルの「XML クロスサイトスクリプティング」行を強調表示して、「ビジュアライザー」をクリックします。デプロイされたリラクゼーションのビジュアライザーには、[ 新しいルールを追加 ] または [既存のルールを編集] のオプションがあります。ノードを選択し、緩和ビジュアライザの対応するボタンをクリックして、ルールのグループ を有効 または 無効に することもできます。
GUI を使用してクロスサイトスクリプティングパターンを表示またはカスタマイズするには
GUI を使用して、クロスサイトスクリプティングが許可される属性または許可されたタグのデフォルトリストを表示またはカスタマイズできます。クロスサイトスクリプティング拒否パターンのデフォルトリストを表示またはカスタマイズすることもできます。
デフォルトのリストは、「 Web App Firewall 」>「署名」>「 **デフォルト署名**」で指定されます。シグネチャオブジェクトをプロファイルにバインドしない場合、Default Signatures オブジェクトに指定されているデフォルトのクロスサイトスクリプティング許可リストと拒否リストがプロファイルによってクロスサイトスクリプティングセキュリティチェック処理に使用されます。デフォルトのシグネチャオブジェクトで指定された Tags、Attributes、Patterns は読み取り専用です。編集や修正はできません。これらを変更または変更する場合は、Default Signatures オブジェクトのコピーを作成して、ユーザー定義署名オブジェクトを作成します。新しいユーザー定義署名オブジェクトの許可リストまたは拒否リストを変更し、カスタマイズされた許可リストと拒否リストを使用したいトラフィックを処理しているプロファイルでこの署名オブジェクトを使用します。
署名の詳細については、を参照してください。 http://support.citrix.com/proddocs/topic/ns-security-10-map/appfw-signatures-con.html
デフォルトのクロスサイトスクリプティングパターンを表示するには:
- 「Web App Firewall」>「署名」に移動し、「 ***デフォルト署名」を選択し、「編集」をクリックします。次に、[ **SQL/クロスサイトスクリプティングパターンの管理] をクリックします。
「 SQL/クロスサイトスクリプティングパスの管理」テーブルには、クロスサイトスクリプティングに関する次の3つの行が表示されます 。
xss/allowed/attribute
xss/allowed/tag
xss/denied/pattern
<!--NeedCopy-->
行を選択して「要素の管理」をクリックすると、Web App Firewall のクロスサイトスクリプティングチェックで使用される対応するクロスサイトスクリプティング要素 (タグ、属性、パターン) が表示されます。
クロスサイトスクリプティング要素をカスタマイズするには:ユーザー定義の署名オブジェクトを編集して、許可されるタグ、許可される属性、拒否パターンをカスタマイズできます。新しいエントリを追加したり、既存のエントリを削除したりできます。
- [Web App Firewall] > [ **署名 ] に移動し、ターゲットユーザー定義の署名をハイライト表示して、[ **編集] をクリックします。[ SQL/クロスサイトスクリプティングパターンの管理] をクリックして、[SQL/クロスサイトスクリプティングパスの管理 ] テーブルを表示します。
- ターゲットのクロスサイトスクリプティング行を選択します。
a)「 要素の管理」をクリックして、 対応するクロスサイトスクリプティング要素を追加、 編集 、 または削除します 。
b) 選択した行を削除するには 、「削除」をクリックします。
警告
デフォルトのクロスサイトスクリプティング要素を削除または変更したり、クロスサイトスクリプティングパスを削除して行全体を削除したりする場合は、十分に注意してください。シグネチャ、HTML クロスサイトスクリプティングセキュリティチェック、XML クロスサイトスクリプティングセキュリティチェックは、これらの Elements を利用して攻撃を検出し、アプリケーションを保護します。クロスサイトスクリプティングエレメントをカスタマイズすると、編集中に必要なパターンが削除されると、アプリケーションがクロスサイトスクリプティング攻撃に対して脆弱になる可能性があります。
XML クロスサイトスクリプティングチェックでのログ機能の使用
ログアクションを有効にすると、XML クロスサイトスクリプティングのセキュリティチェック違反が AppFW_XML_Cross-Site Script 違反として監査ログに記録されます。Web App Firewall は、ネイティブログ形式と CEF ログ形式の両方をサポートしています。ログをリモート syslog サーバに送信することもできます。
コマンドラインを使用してログメッセージにアクセスするには
シェルに切り替えて、/var/log/ フォルダー内の ns.logs を末尾に移動して、XML クロスサイトスクリプティング違反に関するログメッセージにアクセスします。
> \*\*Shell\*\*
> \*\*tail -f /var/log/ns.log | grep APPFW_XML_cross-site scripting\*\*
<!--NeedCopy-->
<blocked>
アクションを示すネイティブログ形式の XML クロスサイトスクリプティングセキュリティチェック違反ログメッセージの例
Oct 7 01:44:34 <local0.warn> 10.217.31.98 10/07/2015:01:44:34 GMT ns 0-PPE-1 : default APPFW APPFW_XML_cross-site scripting 1154 0 : 10.217.253.69 3466-PPE1 - owa_profile http://10.217.31.101/FFC/login.html Cross-site script check failed for field script="Bad tag: script" <\*\*blocked\*\*>
<!--NeedCopy-->
<not blocked>
アクションを示す CEF ログ形式の XML クロスサイトスクリプティングセキュリティチェック違反ログメッセージの例
Oct 7 01:46:52 <local0.warn> 10.217.31.98 CEF:0|Citrix|NetScaler|NS11.0|APPFW|APPFW_XML_cross-site scripting|4|src=10.217.30.17 geolocation=Unknown spt=33141 method=GET request=http://10.217.31.101/FFC/login.html msg=Cross-site script check failed for field script="Bad tag: script" cn1=1607 cn2=3538 cs1=owa_profile cs2=PPE0 cs4=ERROR cs5=2015 act=\*\*not blocked\*\*
<!--NeedCopy-->
GUI を使用してログメッセージにアクセスするには
GUI には、ログメッセージを分析するための便利なツール (Syslog Viewer) が含まれています。Syslog ビューアにアクセスするには、複数のオプションがあります。
-
Web App Firewall > プロファイルに移動し、ターゲットプロファイルを選択して、 セキュリティチェックをクリックします。 「XML クロスサイトスクリプティング」行を強調表示して、「ログ」をクリックします。プロファイルの XML クロスサイトスクリプティングチェックから直接ログにアクセスすると、GUI はログメッセージをフィルタリングし、これらのセキュリティチェック違反に関連するログのみを表示します。
-
「 NetScaler 」>「 システム 」>「 監査 」の順に選択して、Syslogビューアにアクセスすることもできます。「監査メッセージ」セクションで、「 Syslogメッセージ 」リンクをクリックすると、Syslogビューアが表示されます。 Syslogビューアには、他のセキュリティチェック違反ログを含むすべてのログメッセージが表示されます。これは、要求処理中に複数のセキュリティチェック違反がトリガーされる可能性がある場合のデバッグに役立ちます。
-
[ Web App Firewall ] > [ ポリシー ] > [ 監査] に移動します。「 監査メッセージ 」セクションで、「 Syslogメッセージ 」リンクをクリックすると、Syslogビューアが表示されます。Syslogビューアには、他のセキュリティチェック違反ログを含むすべてのログメッセージが表示されます。
XML ベースの Syslog Viewer には、関心のあるログメッセージのみを選択するためのさまざまなフィルターオプションが用意されています。 XML クロスサイトスクリプティングチェックのログメッセージを選択するには、モジュールのドロップダウンオプションで **APPFW を選択してフィルタリングします。**[Event Type] リストには、選択内容をさらに絞り込むための豊富なオプションが用意されています。たとえば、 AppFW_XML_Cross-Site scripting チェックボックスを選択して「 **適用 」ボタンをクリックすると、XML クロスサイトスクリプティングのセキュリティチェック違反に関するログメッセージのみが** Syslog Viewer に表示されます。
特定のログメッセージの行にカーソルを置くと、[ モジュール]、[ イベントタイプ]、[ イベント ID]、[ クライアント IP ] などの複数のオプションがログメッセージの下に表示されます。これらのオプションを選択すると、ログメッセージ内の対応する情報を強調表示できます。
XML クロスサイトスクリプティング違反の統計
stats アクションを有効にすると、Web App Firewall がこのセキュリティチェックに対して何らかのアクションを実行すると、XML クロスサイトスクリプティングチェックのカウンタが増加します。統計は、トラフィック、違反、およびログのレートと合計数について収集されます。ログカウンタの増分サイズは、構成された設定によって異なります。たとえば、ブロックアクションが有効な場合、XML クロスサイトスクリプティング違反が 3 つあるページのリクエストでは、最初の違反が検出されるとすぐにページがブロックされるため、stats カウンタが 1 つ増えます。ただし、ブロックが無効になっている場合、同じリクエストを処理すると、違反ごとに個別のログメッセージが生成されるため、違反とログの統計カウンタが 3 つ増えます。
XML クロスサイトスクリプティングの統計情報を表示するには、コマンドラインを使用して
コマンドプロンプトで入力します。
> **sh appfw stats**
特定のプロファイルの統計情報を表示するには、以下のコマンドを使用します。
> **stat appfw profile** <profile name>
GUI を使用して XML クロスサイトスクリプティング統計を表示するには
- [ システム ] > [ セキュリティ ] > [ Web App Firewall] に移動します。
- 右側のペインで、[統計 リンク] にアクセスします。
- スクロールバーを使用して、XML クロスサイトスクリプティング違反とログに関する統計を表示します。統計テーブルはリアルタイムデータを提供し、7秒ごとに更新されます。