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 クロスサイトスクリプティング保護を最適化するには、次のオプションを使用できます。
- ブロック:クロスサイトスクリプティングタグがリクエストで検出された場合、ブロックアクションがトリガーされます。
- [Log]:XML クロスサイトスクリプティングチェックで実行されたアクションを示すログメッセージを生成します。ブロックが無効になっている場合、クロスサイトスクリプティング違反が検出された場所(ELEMENT、ATTRIBUTE)ごとに個別のログメッセージが生成されます。ただし、要求がブロックされると、1 つのメッセージだけが生成されます。ログを監視して、正当な要求に対する応答がブロックされているかどうかを判断できます。ログメッセージの数が大幅に増加すると、攻撃を開始しようとした可能性があります。
- [Stats]:違反とログに関する統計情報を収集します。stats カウンタの予期しない急増は、アプリケーションが攻撃を受けていることを示している可能性があります。正当な要求がブロックされている場合は、設定を再度参照して、新しい緩和ルールを設定するか、既存の緩和ルールを変更する必要があるかを確認する必要があります。
リラクゼーションルール
アプリケーションで XML ペイロード内の特定の ELEMENT または ATTRIBUTE のクロスサイトスクリプティングチェックをバイパスする必要がある場合は、緩和ルールを設定できます。XML クロスサイトスクリプティングチェック緩和規則には、次のパラメータがあります。
-
Name:リテラル文字列または正規表現を使用して、ELEMENT または属性の名前を設定できます。次の式は、文字列 name_ で始まり、その後に大文字または小文字、または数字の文字列 (2 文字以上 15 文字以下) が続くすべての ELEMENTS を免除します。
^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
- Location:XML ペイロードで、クロスサイトスクリプティングチェック例外の場所を指定できます。オプション ELEMENT はデフォルトで選択されています。ATTRIBUTEに変更できます。
- [Comment]:これはオプションのフィールドです。この緩和規則の目的を説明するために、最大 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 AppFirewallに移動します > プロファイルをクリックし、ターゲットプロファイルを強調表示して、[ 編集]をクリックします。
- [詳細設定]ペインで、[ セキュリティチェック]をクリックします。
セキュリティチェックテーブルには、すべてのセキュリティチェックに対して現在構成されているアクション設定が表示されます。設定には2つのオプションがあります。
a) XML クロスサイトスクリプティングチェックのブロック、ログ、および統計アクションを有効または無効にするだけの場合は、テーブルのチェックボックスをオンまたはオフにして [OK] をクリックし、[保存して閉じる] をクリックして [セキュリティ] を閉じます。[チェック] ペイン。
b) [XML クロスサイトスクリプティング] をダブルクリックするか、行を選択して [アクション設定] をクリックすると、アクションオプションが表示されます。いずれかのアクション設定を変更したら、[OK] をクリックして変更を保存し、[セキュリティチェック] テーブルに戻ります。
必要に応じて、他のセキュリティー検査の設定に進むことができます。[ OK] をクリックして[セキュリティチェック] セクションで行ったすべての変更を保存し、[保存して閉じる ]をクリックして[セキュリティチェック]ウィンドウを閉じます。
GUI を使用して XML クロスサイトスクリプティング緩和ルールを構成するには
- Web AppFirewallに移動します > プロファイルをクリックし、ターゲットプロファイルを強調表示して、[ 編集]をクリックします。
- [詳細設定] ペインで、[緩和規則] をクリックします。
- 「リラクゼーション規則」テーブルで、「 XML クロスサイトスクリプティング」 エントリをダブルクリックするか、エントリを選択して「 編集 」をクリックします。
- 「 XML クロスサイトスクリプティング緩和規則 」ダイアログで、緩和規則の「 追加」、「編集」、「削除」、「有効化 」、または「 無効 化」の操作を実行します。
ビジュアライザーを使用して XML クロスサイトスクリプティング緩和ルールを管理するには
すべての緩和規則をまとめて表示するには、[緩和規則] テーブルの [XML クロスサイトスクリプティング] 行をハイライト表示し、[ビジュアライザー] をクリックします。展開されたリラクゼーションのビジュアライザーには、新しいルールを 追加 するか、既存のルールを 編集 するオプションがあります。ノードを選択し、緩和ビジュアライザの対応するボタンをクリックして、ルールのグループ を有効 または 無効に することもできます。
GUI を使用してクロスサイトスクリプティングパターンを表示またはカスタマイズするには
GUI を使用して、クロスサイトスクリプティングが許可される属性または許可されるタグのデフォルトのリストを表示またはカスタマイズできます。クロスサイトスクリプティング拒否パターンのデフォルトリストを表示またはカスタマイズすることもできます。
デフォルトリストは、[Web App Firewall] > [署名] > [デフォルトの署名] で指定されます。署名オブジェクトをプロファイルにバインドしない場合、デフォルトの署名オブジェクトで指定されたデフォルトのクロスサイトスクリプティングの許可および拒否リストが、クロスサイトスクリプティングのセキュリティチェック処理のためにプロファイルによって使用されます。デフォルトのシグネチャオブジェクトで指定されているタグ、属性、およびパターンは読み取り専用です。編集や修正はできません。これらを変更または変更する場合は、Default Signatures オブジェクトのコピーを作成して、ユーザー定義シグニチャオブジェクトを作成します。新しいユーザ定義シグニチャオブジェクトの Allowed リストまたは Denied リストを変更し、カスタマイズされた許可リストおよび拒否リストを使用するトラフィックを処理するプロファイルでこのシグニチャオブジェクトを使用します。
シグニチャの詳細については、http://support.citrix.com/proddocs/topic/ns-security-10-map/appfw-signatures-con.htmlを参照してください。
デフォルトのクロスサイトスクリプティングパターンを表示するには:
- [Web App Firewall] > [署名] に移動し、[*デフォルトの署名] を選択して [編集] をクリックします。次に、[ 管理]をクリックします SQL/cross-site スクリプトパターン。
管理 SQL/cross-site スクリプトパステーブルは、クロスサイトスクリプティングに関連する次の3行を示しています :
xss/allowed/attribute
xss/allowed/tag
xss/denied/pattern
<!--NeedCopy-->
行を選択し、 [要素の管理 ]をクリックして、Web App Firewallのクロスサイトスクリプティング チェックで使用される対応するクロスサイトスクリプティング要素(タグ、属性、パターン)を表示します。
クロスサイトスクリプティング要素をカスタマイズするには: ユーザー定義の署名オブジェクトを編集して、許可されたタグ、許可された属性、および拒否されたパターンをカスタマイズできます。新しいエントリを追加したり、既存のエントリを削除したりできます。
- [Web App Firewall] > [ **署名 ] に移動し、ターゲットユーザー定義の署名をハイライト表示して、[ **編集] をクリックします。[ 管理]を クリックします SQL/cross-site 管理 を表示するためのスクリプトパターン SQL/cross-site スクリプトパステーブル。
- ターゲットのクロスサイトスクリプティング行を選択します。
a)[ 要素の管理]をクリックして、対応するクロスサイトスクリプティング要素を追加、編集、または削除 します。
b) [削除] をクリックして、選択した行を削除します。
警告
デフォルトのクロスサイトスクリプティング要素を削除または変更する場合、またはクロスサイトスクリプティングパスを削除して行全体を削除する場合は、十分に注意してください。シグニチャ、HTML クロスサイトスクリプティングセキュリティチェック、および XML クロスサイトスクリプティングセキュリティチェックは、これらの要素に依存して攻撃を検出し、アプリケーションを保護します。クロスサイトスクリプティング要素をカスタマイズすると、編集中に必要なパターンが削除された場合、アプリケーションがクロスサイトスクリプティング攻撃に対して脆弱になる可能性があります。
XML クロスサイトスクリプティングチェックでのログ機能の使用
ログアクションを有効にすると、XMLクロスサイトスクリプティングのセキュリティチェック違反が監査ログに次のように記録されます。 APPFW_XML_cross-site スクリプト 違反。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|Citrix ADC|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 を使用してログメッセージにアクセスするには
Citrix GUIには、ログメッセージを分析するための便利なツール(Syslog Viewer)が含まれています。Syslog ビューアには、次の複数のオプションがあります。
-
[Web App Firewall] > [プロファイル] に移動し、ターゲットプロファイルを選択して [セキュリティチェック] をクリックします。[XML クロスサイトスクリプティング] 行を強調表示し、[ログ] をクリックします。プロファイルの XML クロスサイトスクリプティングチェックから直接ログにアクセスすると、GUI によってログメッセージが除外され、これらのセキュリティチェック違反に関連するログのみが表示されます。
-
「 Citrix ADC 」>「 システム 」>「 監査 」の順に選択して、Syslogビューアにアクセスすることもできます。[監査メッセージ]セクションで、[ Syslogメッセージ ]リンクをクリックして Syslogビューアを表示します。このビューアには、他のセキュリティチェック違反ログを含むすべてのログメッセージが表示されます。これは、要求処理中に複数のセキュリティー検査違反がトリガーされる可能性がある場合のデバッグに役立ちます。
-
[Web App Firewall] > [ポリシー] > [監査] に移動します。[ 監査メッセージ ] セクションで、[ Syslog メッセージ ] リンクをクリックして Syslog Viewer を表示します。このビューアーには、他のセキュリティチェック違反ログを含むすべてのログメッセージが表示されます。
XML ベースの Syslog ビューアには、関心のあるログメッセージだけを選択するためのさまざまなフィルタオプションがあります。XML クロスサイトスクリプティング チェックのログメッセージを選択するには、[Module] のドロップダウンオプションで [APPFW] を選択してフィルタリングします。[Event Type] リストには、選択内容をさらに絞り込むための豊富なオプションが用意されています。たとえば、 APPFW_XML_cross-site [ スクリプト ]チェックボックスをオンにして[ 適用 ]ボタンをクリックすると、XMLクロスサイトスクリプティングのセキュリティチェック違反に関連するログメッセージのみがSyslogビューアに表示されます。
特定のログメッセージの行にカーソルを置くと、 モジュール、 イベントタイプ、 イベントID、 クライアントIP などの複数のオプションが表示されます。ログメッセージの下に表示されます。これらのオプションのいずれかを選択して、ログメッセージ内の対応する情報を強調表示することができます。
XML クロスサイトスクリプティング違反の統計
stats アクションが有効な場合、Web App Firewall がこのセキュリティチェックに対して何らかのアクションを実行すると、XML クロスサイトスクリプティングチェックのカウンタが増加します。統計は、トラフィック、違反、およびログのレートと合計数について収集されます。ログカウンタの増分サイズは、構成された設定によって異なります。たとえば、ブロックアクションが有効になっている場合、3 つの XML クロスサイトスクリプティング違反を含むページに対するリクエストは、最初の違反が検出されるとすぐにページがブロックされるため、stats カウンタを 1 つ増やします。ただし、ブロックが無効になっている場合、同じ要求を処理すると、違反とログの統計カウンタが 3 ずつ増加します。これは、違反ごとに個別のログメッセージが生成されるためです。
コマンドラインを使用して XML クロスサイトスクリプティングチェック統計を表示するには
コマンドプロンプトで入力します。
> **sh appfw stats**
特定のプロファイルの統計情報を表示するには、次のコマンドを使用します。
> **stat appfw profile** <profile name>
GUI を使用して XML クロスサイトスクリプティング統計を表示するには
- [システム] > [セキュリティ] > [Web App Firewall] に移動します。
- 右側のペインで、[統計 リンク] にアクセスします。
- スクロールバーを使用して、XML クロスサイトスクリプティング違反とログに関する統計を表示します。統計テーブルはリアルタイムデータを提供し、7秒ごとに更新されます。