Citrix ADC

XML SQL インジェクションチェック

XML SQL インジェクションチェックでは、XML SQL インジェクション攻撃の可能性があるユーザー要求を調べます。XMLペイロードに挿入されたSQLが見つかると、要求がブロックされます。

XML SQL攻撃は、Webアプリケーションにソースコードを注入して、正当なSQLクエリとして解釈して実行し、悪意のある意図でデータベース操作を実行することができます。たとえば、XML SQL 攻撃を起動して、データベースのコンテンツへの不正アクセスを取得したり、格納されたデータを操作したりできます。XML SQL インジェクション攻撃は一般的であるだけでなく、非常に有害でコストがかかる可能性があります。

データベース・ユーザーの権限を区分化すると、ある程度データベースを保護するのに役立ちます。すべてのデータベースユーザーには、意図したタスクを完了するために必要な権限のみを与える必要があります。そのため、SQL クエリを実行して他のタスクを実行することはできません。たとえば、読み取り専用のユーザーは、データテーブルの書き込みや操作を許可しないでください。Web App Firewall XML SQL Injection チェックは、すべての XML 要求を検査し、セキュリティを損なう可能性のある不正な SQL コードの挿入に対する特別な防御を提供します。Web App Firewall は、ユーザーの XML 要求で不正な SQL コードを検出すると、要求をブロックできます。

Citrix Web App Firewall は、XML SQLインジェクション攻撃を識別するために、SQLキーワードと特殊文字の存在を検査します。キーワードと特殊文字のデフォルトのセットは、XML SQL 攻撃の起動に一般的に使用される既知のキーワードと特殊文字を提供します。Web App Firewall では、一重引用符 (‘)、バックスラッシュ ()、セミコロン (;) の 3 文字を SQL セキュリティチェック処理の特殊文字と見なします。新しいパターンを追加したり、デフォルトのセットを編集して XML SQL チェック検査をカスタマイズしたりできます。

Web App Firewall は、XML SQL インジェクション保護を実装するためのさまざまなアクションオプションを提供します。リクエストを ブロック し、観察された違反に関する詳細をns.logファイルにメッセージを 記録 し、 統計 を収集して観測された攻撃の数を追跡することができます。

アクションに加えて、XML SQL インジェクション処理用に構成できるパラメータがいくつかあります。SQL ワイルドカード文字をチェックできます。XML の SQL インジェクションタイプを変更し、4 つのオプション (SQLキーワードSQLSplCharSQLSplCharandKeywordSQLSplCharOR キーワード) のいずれかを選択して、XML の処理時に SQL キーワードと SQL 特殊文字の評価方法を指定できます。ペイロード。「XML SQL コメント処理」パラメータには、XML SQL インジェクションの検出時に検査または免除する必要のあるコメントのタイプを指定するオプションがあります。

リラクゼーションを展開して、誤検出を回避できます。Web App Firewall XML SQL チェックは、着信要求のペイロードに対して実行され、攻撃文字列が複数行に分散している場合でも識別されます。このチェックでは、 要素 内の SQL インジェクション文字列と 属性 値が検索されます。緩和を適用して、指定した条件下でセキュリティチェック検査をバイパスできます。ログと統計情報は、必要な緩和を特定するのに役立ちます。

アクションオプション

アクションは、XML SQL インジェクションチェックがリクエストで SQL インジェクション攻撃文字列を検出したときに適用されます。アプリケーションに最適化された XML SQL インジェクション保護を構成するには、次のアクションを使用できます。

Block:ブロックを有効にすると、入力が XML SQL インジェクションタイプの指定と一致した場合にのみ、ブロックアクションがトリガーされます。たとえば、 SQLSplCharANDKeyword が XML SQL インジェクションタイプとして設定されている場合、リクエストにキーワードが含まれていない場合、ペイロードで SQL 特殊文字が検出された場合でも、リクエストはブロックされません。XML SQL インジェクションタイプが SQLSplChar または SQLSplCharOR キーワードのいずれかに設定されている場合、このような要求はブロックされます。

Log:ログ機能を有効にすると、XML SQL インジェクションチェックによって実行されるアクションを示すログメッセージが生成されます。ブロックが無効になっている場合は、XML SQL 違反が検出された場所 (要素属性) ごとに個別のログメッセージが生成されます。ただし、要求がブロックされると、1 つのメッセージだけが生成されます。ログを監視して、正当な要求に対する応答がブロックされているかどうかを判断できます。ログメッセージの数が大幅に増加すると、攻撃を開始しようとした可能性があります。

Stats:有効の場合、stats 機能は違反とログに関する統計情報を収集します。stats カウンタの予期しない急増は、アプリケーションが攻撃を受けていることを示している可能性があります。正当な要求がブロックされている場合は、設定を再度参照して、新しい緩和ルールを設定するか、既存の緩和ルールを変更する必要があるかを確認する必要があります。

XML SQL パラメーター

ブロック、ログ、および統計アクションに加えて、XML SQL インジェクションチェックの次のパラメータを設定できます。

XML SQL ワイルドカード文字のチェック: ワイルドカード文字を使用して、構造化クエリ言語 (SQL-SELECT) ステートメントの選択範囲を広げることができます。これらのワイルドカード演算子は、 LIKE および NOT LIKE 演算子と組み合わせて使用して、値を同様の値と比較できます。パーセント (%) およびアンダースコア (_) 文字は、ワイルドカードとしてよく使用されます。パーセント記号は、MS-DOS で使用されるアスタリスク (*) ワイルドカード文字に似ており、フィールド内の 0、1、または複数の文字に一致します。アンダースコアは、MS-DOS の疑問符 (?) に似ています。 ワイルドカード文字。これは、式内の単一の数字または文字と一致します。

たとえば、次のクエリを使用して文字列検索を実行し、名前に D 文字が含まれているすべての顧客を検索できます。

SELECT * from customer WHERE name like "%D%"

次の例では、演算子を組み合わせて、2番目と3番目の文字として0を持つ給与値を検索します。

SELECT * from customer WHERE salary like '_00%

別のDBMSベンダーは、余分な演算子を追加することにより、ワイルドカード文字を拡張しました。Citrix Web App Firewall は、これらのワイルドカード文字を挿入することによって起動された攻撃から保護できます。既定の 5 つのワイルドカード文字は、パーセント (%)、アンダースコア (_)、キャレット (^)、左角括弧 ([)、および右角括弧 (]) です。この保護は、HTML プロファイルと XML プロファイルの両方に適用されます。

デフォルトのワイルドカード文字は、 *Default Signatures で指定されたリテラルのリストです。

-  <wildchar type=”LITERAL”>%</wildchar>
-  <wildchar type=”LITERAL”>_</wildchar>
-  <wildchar type=”LITERAL”>^</wildchar>
-  <wildchar type=”LITERAL”>[</wildchar>
-  <wildchar type=”LITERAL”>]</wildchar>

攻撃のワイルドカード文字は、[^A-F]のように PCRE にすることができます。Web App Firewall は PCRE ワイルドカードもサポートしていますが、ほとんどの攻撃をブロックするには、上記のリテラルワイルドカード文字で十分です。

XML SQL ワイルドカード文字 チェックは、XML SQL の特殊文字 チェックとは異なります。このオプションは、誤検出を避けるために注意して使用する必要があります。

SQL インジェクションタイプを含むリクエストのチェック:Web App Firewall には、アプリケーションの個々のニーズに基づいて、SQL インジェクションインスペクションに必要なレベルの厳密さを実装するための 4 つのオプションがあります。要求は、SQL違反を検出するためのインジェクションタイプの指定と照らし合わせてチェックされます。4 つの SQL インジェクションタイプのオプションは次のとおりです。

  • SQL 特殊文字とキーワード:SQL 違反をトリガーするには、検査場所に SQL キーワードと SQL 特殊文字の両方が存在する必要があります。この制限の最小限の設定もデフォルトの設定です。
  • [SQL 特殊文字]:SQL 違反をトリガーするには、処理されたペイロード文字列に少なくとも 1 つの特殊文字が含まれている必要があります。
  • SQL キーワード:SQL 違反をトリガーするには、処理されたペイロードストリングに、指定された SQL キーワードの少なくとも 1 つが存在する必要があります。このオプションは考慮せずに選択しないでください。誤検出を回避するには、入力にキーワードがないことを確認してください。
  • SQL 特殊文字またはキーワード:セキュリティチェック違反をトリガーするには、キーワードまたは特殊文字列がペイロードに存在している必要があります。

ヒント

[SQL 特殊文字] オプションを選択すると、Web App Firewall は特殊文字を含まない文字列をスキップします。ほとんどの SQL サーバーは、先頭に特殊文字が付いていない SQL コマンドを処理しないため、このオプションを有効にすると、Web App Firewall の負荷が大幅に軽減され、保護された Web サイトを危険にさらすことなく処理速度が向上します。

SQL コメント処理:デフォルトでは、Web App Firewall は XML データ内のすべてのコメントを解析し、挿入された SQL コマンドがないかチェックします。多くの SQL サーバーは、SQL 特殊文字が先行していても、コメント内のすべてを無視します。処理を高速化するために、XML SQL サーバーがコメントを無視する場合、挿入された SQL のリクエストを調べるときにコメントをスキップするように Web App Firewall を設定できます。XML SQL コメント処理オプションは次のとおりです。

  • ANSI—UNIX ベースの SQL データベースで通常使用される ANSI 形式の SQL コメントをスキップします。
  • ネスト: ネストされた SQL コメントをスキップします。このコメントは、Microsoft SQL Server で通常使用されます。
  • [ANSI/ネスト]: ANSI およびネストされた SQL コメント標準の両方に準拠するコメントをスキップします。ANSI 標準のみ、またはネストされた標準のみに一致するコメントは、挿入された SQL についてチェックされます。
  • すべてのコメントをチェック:何もスキップせずに、注入された SQL のリクエスト全体をチェックします。これがデフォルトの設定です。

ヒント

ほとんどの場合、バックエンドデータベースが Microsoft SQL Server で実行されている場合を除き、[ネスト] または [ANSI/ネスト] オプションを選択しないでください。他のほとんどの種類の SQL Server ソフトウェアは、ネストされたコメントを認識しません。ネストされたコメントが別の種類の SQL サーバーに送信された要求に表示された場合、そのサーバーのセキュリティ侵害の試みを示している可能性があります。

リラクゼーションルール

アプリケーションで、XML ペイロード内の特定の ELEMENT または ATTRIBUTE に対して XML SQL インジェクション検査をバイパスする必要がある場合は、緩和規則を設定できます。XML SQL インジェクションインスペクションのリラクゼーション規則には、次のパラメータがあります。

  • [名前]: リテラル文字列または正規表現を使用して、 要素 の名前または ATTRIBUTE の名前を設定できます。次の式は、文字列 PurchaseOrder_ で始まり、2 文字以上 10 文字以下の数値の文字列が続くすべての 要素 を除外します。

    コメント: 「発注要素のXML SQLチェックを免除」

    XMLSQLInjection:  "PurchaseOrder_[0-9A-Za-z]{2,10}"

    IsRegex:  REGEX          Location:  ELEMENT

    State:  ENABLED

注: 名前では大文字と小文字が区別されます。重複するエントリは許可されませんが、名前や場所の違いを大文字にすることで、類似したエントリを作成できます。たとえば、次の緩和規則はそれぞれ一意です。


1)      XMLSQLInjection:  XYZ    IsRegex:  NOTREGEX

        Location:  ELEMENT       State:  ENABLED

2)      XMLSQLInjection:  xyz    IsRegex:  NOTREGEX

        Location:  ELEMENT       State:  ENABLED

3)      XMLSQLInjection:  xyz    IsRegex:  NOTREGEX

        Location:  ATTRIBUTE     State:  ENABLED

4)      XMLSQLInjection:  XYZ    IsRegex:  NOTREGEX

        Location:  ATTRIBUTE     State:  ENABLED
  • 場所: XML ペイロードで XML SQL インスペクション例外の場所を指定できます。デフォルトでは、 ELEMENT オプションが選択されています。属性に変更できます。
  • コメント: これはオプションのフィールドです。この緩和規則の目的を説明するために、最大 255 文字の文字列を使用できます。

警告

正規表現は強力です。特に、PCRE形式の正規表現に精通していない場合は、記述した正規表現を再確認してください。例外として追加する名前を正確に定義していることを確認し、それ以外は何も定義しないでください。正規表現を不注意に使用すると、意図しない Web コンテンツへのアクセスをブロックしたり、XML SQL インジェクション検査でブロックされた攻撃を許可するなど、望ましくない結果が生じる可能性があります。

コマンドラインを使用した XML SQL インジェクションチェックの設定

コマンドラインを使用して XML SQL インジェクションアクションおよびその他のパラメーターを構成するには、次の手順に従います。

コマンドラインインターフェイスでは、 set appfw profile コマンドまたは add appfw profile コマンドのいずれかを使用して、XML SQL インジェクション保護を設定できます。ブロック、ログ、および統計アクションを有効にできます。ペイロードで検出する SQL 攻撃パターンのタイプ(キーワード、ワイルドカード文字、特殊文字列)を選択します。設定済みの設定をデフォルトに戻すには、 unset appfw profile コマンドを使用します。次のコマンドはそれぞれ 1 つのパラメータのみを設定しますが、1 つのコマンドに複数のパラメータを含めることができます。

  • set appfw profile <name> **-XMLSQLInjectionAction** (([block] [log] [stats]) | [none])
  • set appfw profile <name> -XMLSQLInjectionCheckSQLWildChars (ON |OFF)
  • set appfw profile <name> -XMLSQLInjectionType ([SQLKeyword] | [SQLSplChar] | [SQLSplCharANDKeyword] | [SQLSplCharORKeyword])
  • set appfw profile <name> -XMLSQLInjectionParseComments ([checkall] | [ansi|nested] | [ansinested])

コマンドラインを使用して SQL インジェクション緩和ルールを構成するには

次のように、緩和ルールを追加または削除するには、bind または unbind コマンドを使用します。

-  bind appfw profile <name> -XMLSQLInjection <string> [isRegex (REGEX | NOTREGEX)] [-location ( ELEMENT | ATTRIBUTE )] –comment <string> [-state ( ENABLED | DISABLED )]
-  unbind appfw profile <name> -XMLSQLInjection <String>

:

> bind appfw profile test_profile -XMLSQLInjection "PurchaseOrder_[0-9A-Za-z]{2,15}" -isregex REGEX -location ATTRIBUTE

> unbind appfw profile test_profile –XMLSQLInjection "PurchaseOrder_[0-9A-Za-z]{2,15}" -location ATTRIBUTE

GUI を使用した XMLSQL インジェクションセキュリティチェックの設定

GUI では、アプリケーションに関連付けられたプロファイルの [XML SQL Injection] セキュリティー検査を区画で設定できます。

GUI を使用して XML SQL インジェクションチェックを構成または変更するには

  1. [Web App Firewall] > [プロファイル] に移動し、ターゲットプロファイルを強調表示して、[編集] をクリックします。
  2. [詳細設定] ウィンドウで、[セキュリティチェック] をクリックします。

セキュリティチェックテーブルには、すべてのセキュリティチェックに対して現在構成されているアクション設定が表示されます。設定には2つのオプションがあります。

a. XML SQL インジェクションのブロック、ログ、および統計アクションを有効または無効にするだけの場合は、テーブルのチェックボックスをオンまたはオフにして [OK] をクリックし、[保存して閉じる] をクリックして [セキュリティチェック] ウィンドウを閉じます。

b. このセキュリティー検査の追加オプションを構成する場合は、「XML SQL Injection」をダブルクリックするか、行を選択して「 アクションの設定」をクリックして、次のオプションを表示します。

SQL ワイルドカード文字のチェック:ペイロード内の SQL ワイルドカード文字を攻撃パターンとみなします。

チェックリクエストの内容-チェックする SQL インジェクションのタイプ (SQLキーワード、SQLSplChar、SQLSplCharANDキーワード、またはSQLSplCharORキーワード)。

SQLコメント処理-チェックするコメントのタイプ (「すべてのコメントをチェック」、「ANSI」、「ネスト」、または「ANSI/ネスト」)。

上記の設定のいずれかを変更したら、[OK] をクリックして変更を保存し、[セキュリティチェック] テーブルに戻ります。必要に応じて、他のセキュリティー検査の設定に進むことができます。[OK] をクリックして [セキュリティチェック] セクションで行った変更をすべて保存し、[保存 して 閉じる] をクリックして [セキュリティチェック] ウィンドウを閉じます。

GUI を使用して XML SQL インジェクション緩和ルールを構成するには

  1. [Web App Firewall] > [プロファイル] に移動し、ターゲットプロファイルを強調表示して、[編集] をクリックします。
  2. [詳細設定] ペインで、[緩和規則] をクリックします。
  3. 「緩和規則」テーブルで、「 XML SQL インジェクション 」エントリをダブルクリックするか、エントリを選択して「 編集 」をクリックします。
  4. XML SQL インジェクション緩和規則」 ダイアログで、緩和規則の「 追加」、「編集」、「削除」、「有効化 」、または「 無効 化」の操作を実行します。

ビジュアライザーを使用して XML SQL インジェクション緩和ルールを管理するには

すべての緩和ルールをまとめて表示するには、[緩和ルール] テーブルの [XML SQL Injection] 行をハイライト表示し、[ビジュアライザー] をクリックします。展開された緩和のビジュアライザーには、[新しいルール を追加] または [既存のルールを編集] のオプションがあります。ノードを選択し、緩和ビジュアライザの対応するボタンをクリックして、ルールのグループ を有効 または 無効に することもできます。

GUIを使用してSQLインジェクション・パターンを表示またはカスタマイズするには、次のステップを実行します。

GUI を使用して、SQL パターンを表示またはカスタマイズできます。

デフォルトの SQL パターンは、[Web App Firewall] > [署名] > [* デフォルトの署名] で指定されます。シグネチャオブジェクトをプロファイルにバインドしない場合、Default Signatures オブジェクトで指定されたデフォルトの SQL パターンが、プロファイルによって XML SQL Injection セキュリティチェック処理に使用されます。デフォルトシグニチャオブジェクトの規則とパターンは読み取り専用です。編集や修正はできません。これらのパターンを変更または変更する場合は、Default Signatures オブジェクトのコピーを作成し、SQL パターンを変更して、ユーザー定義のシグニチャオブジェクトを作成します。カスタマイズされた SQL パターンを使用するトラフィックを処理するプロファイルで、ユーザ定義のシグニチャオブジェクトを使用します。

詳しくは、「署名」を参照してください。

デフォルトのSQLパターンを表示するには、次のステップを実行します。

a. [Web App Firewall] > [署名] に移動し、[*デフォルトの署名] を選択して [編集] をクリックします。次に、[SQL/XSS パターンの管理] をクリックします。

「SQL/XSSパスの管理」テーブルには、SQLインジェクションに関連する次の4つの行が表示されます。

Injection (not_alphanum, SQL)/ Keyword

Injection (not_alphanum, SQL)/ specialstring

Injection (not_alphanum, SQL)/ transformrules/transform

Injection (not_alphanum, SQL)/ wildchar

b. 行を選択して「 エレメントの管理」 をクリックすると、Web App Firewall SQL インジェクションチェックで使用される対応する SQL パターン (キーワード、特殊文字列、変換ルール、ワイルドカード文字) が表示されます。

SQLパターンをカスタマイズするには: ユーザー定義の署名オブジェクトを編集して、SQLキーワード、特殊文字列、およびワイルドカード文字をカスタマイズできます。新しいエントリを追加したり、既存のエントリを削除したりできます。SQL特殊文字列の変換ルールを変更できます。

a. [Web App Firewall] > [署名] に移動し、ターゲットのユーザー定義署名を強調表示して、[編集] をクリックします。「 SQL/XSS パターンの管理 」をクリックして、 「SQL/XSS パスの管理」 テーブルを表示します。

b. ターゲットSQL行を選択します。

i. [要素の管理] をクリックして、対応する SQL 要素を 追加編集または削除します。

ii. [削除] をクリックして、選択した行を削除します。

警告

デフォルトの SQL 要素を削除または変更する場合、または SQL パスを削除して行全体を削除する場合は、十分に注意する必要があります。シグニチャルールと XML SQL Injection セキュリティチェックは、これらの要素に依存して SQL Injection 攻撃を検出し、アプリケーションを保護します。SQL パターンをカスタマイズすると、編集中に必要なパターンが削除されると、アプリケーションが XML SQL 攻撃に対して脆弱になる可能性があります。

XML SQL インジェクションチェックでのログ機能の使用

ログアクションを有効にすると、 XML SQL インジェクション のセキュリティチェック違反が APPFW_XML_SQL 違反として監査ログに記録されます。Web App Firewall は、ネイティブログ形式と CEF ログ形式の両方をサポートしています。ログをリモート syslog サーバに送信することもできます。

コマンドラインを使用してログメッセージにアクセスするには、次の手順を実行します。

シェルに切り替えて、/var/log/ フォルダ内の ns.logs を末尾に付けて、XML クロスサイトスクリプティング違反に関連するログメッセージにアクセスします。

> Shell

> tail -f /var/log/ns.log | grep APPFW_XML_SQL

GUI を使用してログメッセージにアクセスするには

Citrix GUIには、ログメッセージを分析するための便利なツール(Syslogビューア)が含まれています。Syslog ビューアには、次の複数のオプションがあります。

  • [Web App Firewall] > [プロファイル] に移動し、ターゲットプロファイルを選択して [セキュリティチェック] をクリックします。[XML SQL インジェクション] 行をハイライト表示し、[ログ] をクリックします。プロファイルの XML SQL Injection チェックから直接ログにアクセスすると、GUI によってログメッセージが除外され、これらのセキュリティチェック違反に関連するログのみが表示されます。

  • [システム] > [監査] に移動して、Syslog ビューアにアクセスすることもできます。[監査メッセージ] セクションで、[Syslog メッセージ] リンクをクリックして Syslog ビューアを表示します。このビューアには、他のセキュリティチェック違反ログを含むすべてのログメッセージが表示されます。これは、要求処理中に複数のセキュリティー検査違反がトリガーされる可能性がある場合のデバッグに役立ちます。

  • [Web App Firewall] > [ポリシー] > [監査] に移動します。[監査メッセージ] セクションで、[Syslog メッセージ] リンクをクリックして Syslog Viewer を表示します。このビューには、他のセキュリティチェック違反ログを含むすべてのログメッセージが表示されます。

XML ベースの Syslog ビューアには、関心のあるログメッセージだけを選択するためのさまざまなフィルタオプションがあります。XML SQL インジェクション チェックのログメッセージを選択するには、[モジュール] のドロップダウンオプションで [APPFW] を選択してフィルタリングします。[Event Type] リストには、選択内容をさらに絞り込むための豊富なオプションが用意されています。たとえば、[APPFW_XML_SQL] チェックボックスをオンにして [適用] ボタンをクリックすると、 XML SQL Injection セキュリティチェック違反に関するログメッセージだけが Syslog ビューアに表示されます。

特定のログメッセージの行にカーソルを置くと、 モジュールイベントタイプイベントIDクライアント IPなどの複数のオプションがログメッセージの下に表示されます。これらのオプションのいずれかを選択して、ログメッセージ内の対応する情報を強調表示することができます。

XML SQL インジェクション違反の統計

stats アクションが有効な場合、Web App Firewall がこのセキュリティチェックに対して何らかのアクションを実行すると、 XML SQL インジェクション チェックのカウンタが増加します。統計は、トラフィック、違反、およびログのレートと合計数について収集されます。ログカウンタの増分サイズは、構成された設定によって異なります。たとえば、ブロック・アクションが有効になっている場合、3 つの XML SQL Injection 違反を含むページに対するリクエストは、最初の違反が検出されるとすぐにページがブロックされるため、stats カウンタを 1 つずつインクリメントします。ただし、ブロックが無効になっている場合、同じ要求を処理すると、違反とログの統計カウンタが 3 ずつ増加します。これは、違反ごとに個別のログメッセージが生成されるためです。

コマンドラインを使用して XML SQL インジェクションチェック統計を表示するには

コマンドプロンプトで、次のように入力します。

> sh appfw stats

特定のプロファイルの統計情報を表示するには、次のコマンドを使用します。

> stat appfw profile <profile name>

GUI を使用して XML SQL インジェクション統計を表示するには

  1. [システム] > [セキュリティ] > [Web App Firewall] に移動します。
  2. 右側のペインで、[統計 リンク] にアクセスします。
  3. スクロールバーを使用して、 XML SQL インジェクション の違反とログに関する統計を表示します。統計テーブルはリアルタイムデータを提供し、7秒ごとに更新されます。