Citrix ADC

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

多くの Web アプリケーションには、SQL を使用してリレーショナルデータベースサーバーと通信する Web フォームがあります。悪意のあるコードやハッカーは、安全でないWebフォームを使用して、SQLコマンドをWebサーバーに送信する可能性があります。Web App Firewall HTML SQL Injection チェックは、セキュリティを損なう可能性のある不正な SQL コードの挿入に対する特別な防御を提供します。Web App Firewall は、ユーザー要求で不正な SQL コードを検出すると、要求を変換するか、SQL コードを非アクティブにするか、要求をブロックします。Web App Firewall は、1) POST 本文、2) ヘッダー、および 3) Cookie の 3 つの場所に挿入された SQL コードの要求ペイロードを調べます。注入された SQL コードのリクエストのクエリ部分を調べるには、特定のコンテンツタイプに対してアプリケーションファイアウォールプロファイル設定 ‘inspectQueryContentTypes’ を構成してください。

キーワードと特殊文字のデフォルトのセットは、SQL 攻撃の起動に一般的に使用される既知のキーワードと特殊文字を提供します。新しいパターンを追加したり、デフォルトのセットを編集して SQL チェック検査をカスタマイズしたりできます。Web App Firewall は、SQL インジェクション保護を実装するためのさまざまなアクションオプションを提供します。Web App Firewall プロファイルは、 ブロックログ統計学習アクションに加えて、 SQL 特殊文字を変換して攻撃を無害にするオプションも提供しています。

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

リラクゼーションを展開して、誤検出を回避できます。Web App Firewall 学習エンジンは、緩和ルールの設定に関する推奨事項を提供できます。

アプリケーションに最適化された SQL インジェクション保護を構成するには、次のオプションを使用できます。

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

Log:ログ機能を有効にすると、SQL インジェクションチェックによって実行されるアクションを示すログメッセージが生成されます。ブロックアクションが無効になっている場合、SQL 違反が検出された入力フィールドごとに個別のログメッセージが生成されます。 ただし、要求がブロックされると、1 つのメッセージだけが生成されます。同様に、SQL 特殊文字が複数のフィールドで変換された場合でも、変換操作に対してリクエストごとに 1 つのログメッセージが生成されます。ログを監視して、正当な要求に対する応答がブロックされているかどうかを判断できます。ログメッセージの数が大幅に増加すると、攻撃を開始しようとした可能性があります。

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

Learn:アプリケーションに最適な SQL 緩和ルールがわからない場合は、学習機能を使用して、学習したデータに基づいて推奨事項を生成できます。Web App Firewall 学習エンジンは、トラフィックを監視し、観測された値に基づいて SQL 学習の推奨事項を提供します。パフォーマンスを損なうことなく最適なメリットを得るには、ラーニングオプションを短時間有効にして、ルールの代表的なサンプルを取得してから、ルールを展開してラーニングを無効にします。

SQL 特殊文字の変換:Web App Firewall では、単一引用符(’)、バックスラッシュ()、セミコロン(;)の 3 文字を SQL セキュリティチェック処理の特殊文字と見なします。 SQL 変換機能は、HTML リクエストの SQL インジェクションコードを変更して、リクエストが無害になるようにします。その後、変更された HTML 要求がサーバーに送信されます。デフォルトの変換ルールはすべて、/netscaler/default_custom_settings.xml ファイルに指定されています。

変換操作では、リクエストに次の変更を加えることにより、SQL コードが非アクティブになります。

  • 一重引用符(’)から二重引用符(”)へ。
  • バックスラッシュ () を 2 つバックスラッシュ () にします。
  • セミコロン (;) は完全に削除されます。

これらの 3 文字 (特殊文字列) は、SQL サーバーにコマンドを発行するために必要です。SQL コマンドの先頭に特別な文字列がない限り、ほとんどの SQL サーバーはそのコマンドを無視します。したがって、変換が有効なときに Web App Firewall が実行する変更により、攻撃者がアクティブな SQL を注入するのを防ぎます。これらの変更が行われた後、 リクエストは保護されたWebサイトに安全に転送できます。保護されたWebサイトのWebフォームにSQL特殊文字列を合法的に含めることができるが、Webフォームが正しく動作するために特殊文字列に依存していない場合、ブロックを無効にし、変換を有効にして、保護を弱めることなく正当なWebフォームデータのブロックを防ぐことができますWeb App Firewallは、保護されたWebサイトに提供します。

変換操作は、 SQL インジェクションタイプ設定とは独立して機能します 。変換が有効で、SQL インジェクションタイプが SQL キーワードとして指定されている場合、リクエストにキーワードが含まれていなくても SQL 特殊文字が変換されます。

ヒント

通常、変換またはブロッキングのいずれかを有効にしますが、両方を有効にすることはできません。ブロックアクションが有効になっている場合は、変換アクションよりも優先されます。ブロッキングを有効にしている場合、変換の有効化は冗長です。

SQL ワイルドカード文字の確認-ワイルドカード文字を使用して、SQL (SQL-SELECT) ステートメントの選択範囲を広げることができます。これらのワイルドカード演算子は、[ いいね !] および [ NOT いいね ] 演算子と共に使用して、値を類似の値と比較できます。パーセント (%) およびアンダースコア (_) 文字は、ワイルドカードとしてよく使用されます。 パーセント記号は、MS-DOS で使用されるアスタリスク (*) ワイルドカード文字に似ており、フィールド内の 0、1、または複数の文字に一致します。 アンダースコアは、MS-DOS の疑問符 (?) に似ています。 ワイルドカード文字。これは、式内の単一の数字または文字と一致します。

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

「%D%」のような名前の顧客から* を選択:

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

‘_ 00%’のような給与が顧客から*を選択

別のDBMSベンダーは、余分な演算子を追加することにより、ワイルドカード文字を拡張しました。Citrix Web App Firewallは、これらのワイルドカード文字を挿入することによって開始される攻撃から保護できます。デフォルトのワイルドカード文字は、パーセント(%)、アンダースコア(_)、キャレット(^)、開始括弧([)、および閉じ括弧(])です。この保護は、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 ワイルドカードもサポートしていますが、ほとんどの攻撃をブロックするには、上記のリテラルワイルドカード文字で十分です。

注:

SQL ワイルドカード文字のチェックは、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 を構成すると、Web アプリケーションファイアウォールは特殊文字を含まない Web フォームフィールドをスキップします。ほとんどのSQLサーバーは特殊文字が前に付いていないSQLコマンドを処理しないため、このオプションを有効にすると、保護されたWebサイトを危険にさらすことなく、Web App Firewallの負荷を大幅に減らし、処理を高速化できます。

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

  • ANSI—UNIX ベースの SQL データベースで通常使用される ANSI 形式の SQL コメントをスキップします。次に例を示します:
    • — (2 つのハイフン)-これは、2 つのハイフンで始まり、行末で終わるコメントです。

    • {}-中カッコ(中カッコはコメントを囲みます。コメントの前に {が付けられ、} が続きます。中カッコは、単一行または複数行のコメントを区切ることができますが、コメントをネストすることはできません)

    • /* */ : C style comments (Does not allow nested comments). Please note /*! <comment that begin with slash followed by asterisk and exclamation mark is not a comment > */

    • MySQL Server は、C スタイルのコメントのいくつかのバリエーションをサポートしています。これらのコードを使用すると、MySQL 拡張を含むが、移植可能なコードを、次の形式のコメントを使用して記述できます。/*! MySQL-specific code */

    • . #: Mysql コメント:これは # 文字で始まるコメントです。

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

ヒント

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

[Check Request headers]:フォームフィールドの入力を調べるだけでなく、HTML SQL Injection 攻撃のリクエストヘッダーを調べる場合は、このオプションを有効にします。GUI を使用する場合は、Web App Firewall プロファイルの [詳細設定]-> [プロファイル設定] ペインでこのパラメーターを有効にすることができます。

注:

Check Request ヘッダーフラグを有効にすると、 User-Agent ヘッダーの緩和ルールを設定する必要がある場合があります。のようなSQLキーワードや 、SQL特殊文字のセミコロン(; )が存在すると、偽陽性が発生し、このヘッダーを含む要求がブロックされる可能性があります。 警告

リクエストヘッダーのチェックと変換の両方を有効にすると、ヘッダーで見つかった SQL 特殊文字も変換されます。受け入れ、受け入れ文字セット、受け入れエンコーディング、受け入れ言語、期待、およびユーザーエージェントヘッダーは、通常、セミコロン(;)が含まれています。 要求ヘッダーのチェックと変換を同時に有効にすると、エラーが発生する可能性があります。

InspectQueryContentTypes — 特定のコンテンツタイプに対する SQL インジェクション攻撃の要求クエリ部分を調べる場合は、このオプションを設定します。GUI を使用する場合は、App Firewall プロファイルの [詳細設定] → [プロファイル設定] ペインでこのパラメーターを設定できます。

SQL ファイングレインリラクゼーション

Web App Firewall では、SQL インジェクションインスペクションチェックから特定のフォームフィールド、ヘッダー、または Cookie を除外するオプションがあります。SQL インジェクションチェックのリラクゼーションルールを設定することで、これらのフィールドの 1 つ以上のインスペクションを完全にバイパスできます。

Web App Firewall では、緩和ルールを微調整することで、より厳格なセキュリティを実装できます。アプリケーションでは、特定のパターンを許可する柔軟性が要求される場合がありますが、セキュリティインスペクションをバイパスするように緩和規則を設定すると、ターゲットフィールドが SQL 攻撃パターンの検査から免除されるため、アプリケーションが攻撃に対して脆弱になる可能性があります。SQLきめ細かなリラクゼーションは、特定のパターンを許可し、残りの部分をブロックするオプションを提供します。たとえば、Web App Firewall には、現在 100 個を超える SQL キーワードの既定のセットがあります。ハッカーは SQL Injection 攻撃でこれらのキーワードを使用できるため、Web App Firewall は潜在的な脅威としてフラグを立てます。特定の場所で安全と見なされる 1 つ以上のキーワードをリラックスできます。潜在的に危険なSQLキーワードの残りの部分は、ターゲットの場所がチェックされ、セキュリティチェック違反が引き続きトリガーされます。これで、より厳密な制御が可能になりました。

緩和で使用されるコマンドには、 [値のタイプ] と [値の] のオプションのパラメータがあります。値式が正規表現かリテラル文字列かを指定できます。 値の型は空白のままにすることも、[キーワード][SpecialString]、または[WildChar]を選択することもできます。

警告:

正規表現は強力です。特に、PCRE形式の正規表現に精通していない場合は、記述した正規表現を再確認してください。例外として追加する URL を正確に定義していることを確認し、それ以外は何も定義しないでください。ワイルドカード、特にドットアスタリスク(.*)メタ文字またはワイルドカードの組み合わせを不注意に使用すると、ブロックする意図がない Web コンテンツへのアクセスをブロックしたり、HTML SQL インジェクションチェックでブロックされた攻撃を許可するなど、望ましくない結果が生じる可能性があります。

考慮すべきポイント:

  • 値式はオプションの引数です。フィールド名には値式がない場合があります。
  • フィールド名は、複数の値式にバインドできます。
  • 値式には値型を割り当てる必要があります。SQL 値の型は、1) キーワード、2) 特殊文字列、または 3) ワイルド文字です。
  • フィールド名とURLの組み合わせごとに複数の緩和ルールを持つことができます。

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

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

コマンドラインインターフェイスでは、 set appfw profile コマンドまたは add appfw profile コマンドのいずれかを使用して、SQL インジェクション保護を設定できます。ブロック、学習、ログ、統計アクションを有効にし、SQL インジェクション攻撃文字列で使用される特殊文字を変換して攻撃を無効にするかどうかを指定できます。ペイロードで検出する SQL 攻撃パターンの種類 (キーワード、ワイルドカード文字、特殊文字列) を選択し、Web App Firewall で SQL インジェクション違反のリクエストヘッダーも検査するかどうかを指定します。設定済みの設定をデフォルトに戻すには、 unset appfw profile コマンドを使用します。次のコマンドはそれぞれ 1 つのパラメータのみを設定しますが、1 つのコマンドに複数のパラメータを含めることができます。

コマンドインターフェイスを使用して SQL インジェクション緩和ルールを設定するには

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

  • bind appfw profile <name> -SQLInjection <String> [isRegex(REGEX| NOTREGE)] <formActionURL> [-location <location>] [-valueType (Keywor|SpecialString|Wildchar) [<valueExpression>][-isValueRegex (REGEX | NOTREGEX) ]]

  • unbind appfw profile <name> -SQLInjection <String> <formActionURL> [-location <location>] [-valueTyp (Keyword|SpecialString|Wildchar) [<valueExpression>]]

注:

SQL キーワードと SQL 特殊文字のリストを含むビューシグニチャオブジェクトを表示することで、デフォルトのシグニチャファイルのコンテンツから SQL キーワードのリストを検索できます。

GUI を使用した SQL インジェクションのセキュリティー検査の設定

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

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

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

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

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

b. このセキュリティ・チェックのその他のオプションを構成する場合は、「HTML SQL インジェクション」をダブルクリックするか、行を選択して「 アクションの設定」をクリックして、次のオプションを表示します。

SQL 特殊文字の変換:要求内の任意の SQL 特殊文字を変換します。

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

チェック要求: チェックする SQL インジェクションのタイプ (SQLキーワード、SQLSplchar、SQLSplcharandキーワード、または SQLSplcharorKeyword)。

SQL コメント処理: チェックするコメントのタイプ ([すべてのコメント]、[ANSI]、[ネストされた]、または [ANSI/ネスト])。

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

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

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

新しいルールを追加すると、[値の型フィールド] で [キーワード] または [SpecialString] または [WildChar] オプションを選択しない限り、[値の** 式**] フィールドは表示されません。

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

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

GUI を使用して射出パターンを表示またはカスタマイズする

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

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

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

GUI を使用してデフォルトの射出パターンを表示するには、次の手順を実行します。

  1. [ アプリケーションファイアウォール] > [署名] に移動し、[ *デフォルトシグニチャ] を選択し、[ 編集] をクリックします。

既定の射出パターンの表示

  1. [ CMD/SQL/XSS パターンの管理] をクリックします。「 SQL/クロスサイトスクリプティングパスの管理 」テーブルには、CMD/SQL/XS インジェクションに関連するパターンが表示されます。

既定の射出パターンの表示

  1. 行を選択し、[ 要素の管理 ] をクリックして、Web App Firewall コマンドインジェクションチェックで使用される対応する注入パターン (キーワード、特殊文字列、変換ルール、またはワイルドカード文字) を表示します。

SQL インジェクションチェックでの学習機能の使用

学習アクションが有効の場合、Web App Firewall 学習エンジンはトラフィックを監視し、トリガーされた違反を学習します。これらの学習済みルールを定期的に検査できます。十分に検討した後、学習したルールを SQL インジェクション緩和ルールとして展開できます。

SQLインジェクション学習の強化:Citrix ADCソフトウェアのリリース11.0で、Web App Firewall 学習機能強化が導入されました。 きめ細かなSQLインジェクション緩和を導入するために、Web App Firewall は細かいSQLインジェクション学習を提供します。 学習エンジンは、観測された値のタイプ(keyword、SpecialString、Wildchar)および入力フィールドで観測された対応する値式に関する推奨事項を作成します。ブロックされたリクエストをチェックして、現在のルールが制限が厳しく、緩和する必要があるかどうかを判断するだけでなく、学習エンジンによって生成されたルールを確認して、違反を引き起こしている値タイプと値式を判断し、で対処する必要があります。リラクゼーションルール。

重要

Web App Firewall の学習エンジンでは、名前の最初の 128 バイトしか区別できません。フォームに、最初の 128 バイトに一致する名前のフィールドが複数ある場合、学習エンジンはそれらを区別できないことがあります。同様に、デプロイされた緩和ルールは、そのようなフィールドを SQL インジェクション検査から誤って緩和する可能性があります。

(注 )User-Agent ヘッダーの SQL チェックインをバイパスするには、次の緩和ルールを使用します。

bind appfw profile your_profile_name -SQLInjection User-Agent " .*" -location HEADER

コマンドラインインターフェイスを使用して学習データを表示または使用するには

コマンドプロンプトで、次のコマンドのいずれかを入力します。

  • show appfw learningdata <profilename> SQLInjection
  • rm appfw learningdata <profilename> -SQLInjection <string> <formActionURL> [<location>] [<valueType> <valueExpression>]
  • export appfw learningdata <profilename> SQLInjection

GUI を使用して学習したデータを表示または使用するには

  1. [ アプリケーションファイアウォール] > [プロファイル] に移動し、ターゲットプロファイルをハイライト表示して、[ 編集] をクリックします。

  2. [詳細設定] ウィンドウで、[学習ルール] をクリックします。「学習済みルール」テーブルで「 HTML SQL Injection 」エントリを選択し、ダブルクリックすると、学習済みルールにアクセスできます。学習したルールを展開するか、緩和ルールとして展開する前にルールを編集できます。ルールを破棄するには、ルールを選択して [スキップ] ボタンをクリックします。一度に編集できるルールは 1 つだけですが、複数のルールを選択して展開またはスキップできます。

また、「学習済みルール」(Learned Rules) テーブルで「 HTML SQL Injection 」エントリを選択し、「ビジュアライザー」( Visualizer ) をクリックして、学習済みのすべての違反の統合ビューを表示することもできます。ビジュアライザを使用すると、学習したルールを簡単に管理できます。データの包括的なビューを 1 つの画面に表示し、1 回のクリックでルールのグループに対するアクションを簡単に実行できます。ビジュアライザーの最大の利点は、複数のルールを統合するために正規表現を推奨することです。区切り文字とアクション URL に基づいて、これらのルールのサブセットを選択できます。ドロップダウンリストから番号を選択すると、ビジュアライザーに 25、50、または 75 のルールを表示できます。学習したルールのビジュアライザーには、ルールを編集して緩和として展開するオプションがあります。または、ルールをスキップして無視することもできます。

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

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

コマンドラインを使用してログメッセージにアクセスするには

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

> Shell

# tail -f /var/log/ns.log | grep APPFW_SQL

リクエストが変換されたときの HTML SQL インジェクションログメッセージの例

Jun 26 21:08:41 <local0.info> 10.217.31.98 CEF:0|Citrix|Citrix ADC|NS11.0|APPFW|APPFW_SQL|6|src=10.217.253.62 geolocation=Unknown spt=54001 method=GET request=http://aaron.stratum8.net/FFC/login.php?login_name=%27+or&passwd=and+%3B&drinking_pref=on&text_area=select+*+from+%5C+%3B&loginButton=ClickToLogin&as_sfid=AAAAAAXjnGN5gLH-hvhTOpIySEIqES7BjFRs5Mq0fwPp-3ZHDi5yWlRWByj0cVbMyy-Ens2vaaiULKOcUri4OD4kbXWwSY5s7I3QkDsrvIgCYMC9BMvBwY2wbNcSqCwk52lfE0k%3D&as_fid=feeec8758b41740eedeeb6b35b85dfd3d5def30c msg= Special characters seen in fields cn1=74 cn2=762 cs1=pr_ffc cs2=PPE1 cs3=9ztIlf9p1H7p6Xtzn6NMygTv/QM0002 cs4=ALERT cs5=2015 act=transformed
<!--NeedCopy-->

ポストリクエストがブロックされた場合の HTML SQL インジェクションログメッセージの例

Jun 26 21:30:34 <local0.info> 10.217.31.98 CEF:0|Citrix|Citrix ADC|NS11.0|APPFW|APPFW_SQL|6|src=10.217.253.62 geolocation=Unknown spt=9459 method=POST request=http://aaron.stratum8.net/FFC/login_post.php msg=SQL Keyword check failed for field text_area="(')" cn1=78 cn2=834 cs1=pr_ffc cs2=PPE1 cs3=eVJMMPtZ2XgylGrHjkx3rZLfBCI0002 cs4=ALERT cs5=2015 act=blocked
<!--NeedCopy-->

10.5.e ビルド (エンハンスメントビルド) と 11.0 以降のビルドでのストリーミング変更の一環として、入力データをブロック単位で処理するようになりました。RegEx パターンマッチングは、連続した文字列マッチングで 4K に制限されるようになりました。この変更により、SQL 違反ログメッセージには、以前のビルドとは異なる情報が含まれる場合があります。入力のキーワードと特殊文字は、多くのバイトで区切ることができます。データを処理するときに、入力値全体をバッファリングするのではなく、SQL キーワードと特殊文字列を追跡します。フィールド名に加えて、ログメッセージには、構成された設定によって決定された SQL キーワード、SQL 特殊文字、または SQL キーワードと SQL 特殊文字の両方が含まれるようになりました。次の例に示すように、残りの入力はログメッセージに含まれなくなります。

例:

10.5 では、Web App Firewall が SQL 違反を検出すると、次に示すように、入力文字列全体がログメッセージに含まれることがあります。

SQL Keyword check failed for field text=\"select a name from testbed1;(;)\".*<blocked>

リクエストサイドストリーミングおよび 11.0 以降のビルドをサポートする 10.5.e の拡張ビルドでは、次に示すように、フィールド名、キーワード、および特殊文字(該当する場合)のみをログメッセージに記録します。

SQL Keyword check failed for field **text="select(;)" <blocked>

この変更は、 アプリケーション/x-www-form-urlencoded、 マルチパート/フォームデータ、またはテキスト/x-gwt-rpc コンテンツタイプを含むリクエストに適用されます。JSON または XML ペイロードの処理中に生成されたログメッセージは、この変更の影響を受けません。

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

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

  • [アプリケーションファイアウォール] > [プロファイル] に移動し、ターゲットプロファイルを選択して [セキュリティチェック] をクリックします。[HTML SQL インジェクション] 行をハイライト表示し、[ログ] をクリックします。 プロファイルの HTML SQLインジェクションチェックから直接ログにアクセスすると、GUI によってログメッセージが除外され、これらのセキュリティチェック違反に関連するログのみが表示されます。
  • Citrix ADC 」>「 システム 」>「 監査 」の順に選択して、Syslogビューアにアクセスすることもできます。 [監査メッセージ] セクションで、[ Syslog メッセージ ] リンクをクリックして Syslog Viewer を表示します。このビューアーには、他のセキュリティチェック違反ログを含むすべてのログメッセージが表示されます。これは、要求処理中に複数のセキュリティー検査違反がトリガーされる可能性がある場合のデバッグに役立ちます。
  • [アプリケーションファイアウォール] > [ポリシー] > [監査] に移動します。[監査メッセージ] セクションで、[ Syslog メッセージ ] リンクをクリックして Syslog Viewer を表示します。このビューアーには、他のセキュリティチェック違反ログを含むすべてのログメッセージが表示されます。

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

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

[クリックして展開] 機能は、GUI でのみ使用できます。Syslog ビューアを使用すると、ログを表示するだけでなく、Web App Firewall のセキュリティチェック違反のログメッセージに基づいて HTML SQL Injection 緩和ルールを展開することもできます。この操作では、ログメッセージは CEF ログ形式である必要があります。クリックして展開機能は、ブロック (またはブロックしない) アクションによって生成されたログメッセージに対してのみ使用できます。変換操作に関するログメッセージのリラクゼーションルールは展開できません。

Syslog Viewer から緩和ルールを展開するには、ログメッセージを選択します。選択した行の [ Syslog Viewer ] ボックスの右上隅にチェックボックスが表示されます。チェックボックスをオンにし、[アクション] リストからオプションを選択して、緩和ルールを展開します。[編集と配備]、[配備]、[すべて配備] は、[アクション]オプションとして利用できます。

[クリックして展開する] オプションを使用して展開される SQL インジェクションルールには、細粒緩和の推奨事項は含まれません。

GUIでクリックして展開機能を使用するには、次の手順に従います。

  1. Syslog ビューアで、 モジュール オプションで [アプリケーションファイアウォール] を選択します。
  2. イベント・タイプ として APP_SQL を選択し、対応するログ・メッセージをフィルタリングします。
  3. 展開するルールを識別するには、チェックボックスをオンにします。
  4. 緩和ルールを展開するには、オプションの [Action] ドロップダウンリストを使用します。
  5. 対応する緩和規則セクションに規則が表示されていることを確認します。

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

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

コマンドラインを使用してSQLインジェクション・チェック統計を表示するには、次のステップを実行します。

コマンドプロンプトで入力します。

shアプリケーションfwの統計情報

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

> stat appfw profile <profile name>

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

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

ハイライト

SQL インジェクションチェックについては、次の点に注意してください。

  • SQLインジェクション保護の組み込みサポート-CitrixWeb App Firewallは、フォームパラメーター内のSQLキーワードと特殊文字の組み合わせを監視することにより、SQLインジェクションから保護します。すべてのSQLキーワード、特殊文字、ワイルドカード文字、およびデフォルトの変換ルールは、/netscaler/default_custom_settings.xmlファイルに指定されています。
  • カスタマイズ:デフォルトのキーワード、特殊文字、ワイルドカード文字、および変換ルールを変更して、アプリケーションの特定のニーズに合わせて SQL セキュリティチェックインスペクションをカスタマイズできます。デフォルトのシグニチャオブジェクトのコピーを作成するか、既存のエントリを変更するか、新しいシグニチャオブジェクトを追加します。カスタマイズした設定を使用するには、このシグニチャオブジェクトをプロファイルにバインドします。
  • ハイブリッドセキュリティモデル-シグニチャと詳細なセキュリティ保護の両方で、 SQL/cross-site プロファイルにバインドされている署名オブジェクトで指定されたスクリプトパターン。署名オブジェクトがプロファイルにバインドされていない場合、 SQL/cross-site デフォルトの署名オブジェクトに存在するスクリプトパターンが使用されます。
  • Transform:変換操作について、次の点に注意してください。
    • 変換操作は、他の SQL インジェクションアクション設定とは独立して動作します。変換が有効で、ブロック、ログ、統計、学習がすべて無効になっている場合、SQL の特殊文字は変換されます。
    • SQL 変換が有効な場合、SQL 特殊文字が非ブロックモードで変換された後、ユーザー要求がバックエンドサーバーに送信されます。ブロックアクションが有効になっている場合は、変換アクションよりも優先されます。インジェクションタイプが SQL 特殊文字として指定され、ブロックが有効な場合、変換アクションにもかかわらずリクエストはブロックされます。
  • [きめ細かな緩和と学習]:緩和ルールを微調整して、SQL 要素のサブセットをセキュリティチェック検査から緩和し、残りは検出します。学習エンジンは、観測されたデータに基づいて、特定の値のタイプと値の式を推奨しています。
  • [Click to Deploy]:syslog ビューアで 1 つまたは複数の SQL 違反ログメッセージを選択し、緩和規則として展開します。