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コードの要求内のクエリ部分を調べるには、特定のコンテンツタイプに対してappfwプロファイル設定’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 サイトに提供します。

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

ヒント

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

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

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

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

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

‘_ 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 ワイルドカードもサポートしていますが、ほとんどの攻撃をブロックするには、上記のリテラルワイルドカード文字で十分です。

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 App Firewall の負荷が大幅に軽減され、保護された Web サイトを危険にさらすことなく処理速度が向上します。

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 には、特定のフォームフィールド、ヘッダー、または Cookie を SQL インジェクション検査チェックから除外するオプションがあります。SQL Injection チェックのリラクゼーション規則を設定することで、これらのフィールドの 1 つ以上のインスペクションを完全にバイパスできます。

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

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

警告

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

考慮すべきポイント:

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

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

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

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

  • appfw プロファイルの設定「パラメーターの説明は、ページの下部に表示されます。 」
  • <name> -SQLInjectionAction (([block] [learn] [log] [stats]) | [none])
  • appfw プロファイルの設定「パラメーターの説明は、ページの下部に表示されます。 」
  • <name> -SQLInjectionTransformSpecialChars (**ON** | OFF)
  • appfw プロファイルの設定「パラメーターの説明は、ページの下部に表示されます。 」
  • <name> -**SQLInjectionCheckSQLWildChars** (**ON** |**OFF**)
  • appfw プロファイルの設定「パラメーターの説明は、ページの下部に表示されます。 」
  • **<name> -**SQLInjectionType** ([**SQLKeyword**] | [**SQLSplChar**] | [**SQLSplCharANDKeyword**] | [**SQLSplCharORKeyword**])
  • appfw プロファイルの設定「パラメーターの説明は、ページの下部に表示されます。 」
  • <name> -**SQLInjectionParseComments** ([**checkall**] | [**ansi|nested**] | [**ansinested**])
  • **appfw プロファイルの設定「パラメーターの説明は、ページの下部に表示されます。 」
  • <name> -CheckRequestHeaders (ON | OFF)ページの下部に表示されるパラメータの説明。
  • <name> - CheckRequestQueryNonHtml (ON | OFF)ページの下部に表示されるパラメータの説明。

コマンドラインを使用して 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 Injection」をダブルクリックするか、行を選択して「アクション設定」をクリックして、次のオプションを表示します。

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 を使用して SQL インジェクションパターンを表示またはカスタマイズするには

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

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

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

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

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

    次に、[SQL/XSS パターンの管理] をクリックします。

    管理SQL/XSSパス 表は、SQLインジェクションに関連する次の4つの行を示しています。

    • 注入 (英数字以外, SQL)/キーワード
    • 注入(英数字、SQL以外)/特殊文字列
    • インジェクション(英数字、SQL以外)/変換ルール/変換
    • インジェクション(英数字、SQL以外)/ワイルドキャラ

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

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

    a. [アプリケーションファイアウォール] > [署名] に移動し、ターゲットの [ユーザー定義署名] を強調表示して、[編集] をクリックします。「 SQL/XSS パターンの管理 」をクリックして、 「SQL/XSS パスの管理」 テーブルを表示します。

    b. ターゲットの SQL インジェクション行を選択します。

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

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

    警告

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

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 インジェクション検査から誤って緩和する可能性があります。

メモ ユーザーエージェントヘッダーの 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

ポストリクエストがブロックされた場合の 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

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>

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

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 ビューアを表示します。このビューアには、他のセキュリティチェック違反ログを含むすべてのログメッセージが表示されます。これは、要求処理中に複数のセキュリティー検査違反がトリガーされる可能性がある場合のデバッグに役立ちます。
  • [アプリケーションファイアウォール] > [ポリシー] > [監査] に移動します。[監査メッセージ] セクションで、[Syslog メッセージ] リンクをクリックして Syslog ビューアを表示します。このビューアには、他のセキュリティチェック違反ログを含むすべてのログメッセージが表示されます。

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