HTML SQL インジェクションチェック
多くの Web アプリケーションには、SQL を使用してリレーショナルデータベースサーバーと通信する Web フォームがあります。悪意のあるコードやハッカーが、安全ではない Web フォームを使用して SQL コマンドを Web サーバーに送信する可能性があります。Web App Firewall HTML SQL インジェクションチェックは、セキュリティを侵害する可能性のある不正な 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 つのオプション (sqlKeyword、sqlSPLChar**、 **sqlSplCharandKeyword、 sqlSPLCharorKeyword) のいずれかを選択して、ペイロードの処理時に 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 カウンタの予期しない急増は、アプリケーションが攻撃を受けていることを示している可能性があります。正当なリクエストがブロックされる場合、新しい緩和ルールを構成する必要があるか、既存の緩和ルールを変更する必要があるかを確認するために、構成を再確認しなければならない場合があります。
学習— どの SQL 緩和ルールがアプリケーションに適しているかわからない場合は、学習機能を使用して、学習したデータに基づいて推奨事項を生成できます。Web App Firewall 学習エンジンはトラフィックを監視し、観測された値に基づいて SQL 学習の推奨事項を提供します。パフォーマンスを損なうことなく最適な効果を得るには、学習オプションを短時間有効にしてルールの代表的なサンプルを取得し、ルールを展開して学習を無効にすることをお勧めします。
SQL 特殊文字の変換— Web App Firewall では、一重引用符 (‘)、バックスラッシュ (\)
、セミコロン (;) の 3 つの文字を SQL セキュリティチェック処理の特殊文字と見なします。 SQL 変換機能は、HTML リクエストの SQL インジェクションコードを変更して、リクエストが無害になるようにします。変更された HTML リクエストはサーバーに送信されます。デフォルトの変換ルールはすべて /netscaler/default_custom_settings.xml ファイルに指定されています。
変換操作では、リクエストに以下の変更を加えることで、SQL コードが非アクティブになります。
- 一重引用符 (‘) から二重引用符 (「)。
- バックスラッシュ
(\)
をダブルバックスラッシュ(\)
にします。 - セミコロン (;) は完全に削除されます。
この 3 つの文字 (特殊文字列) は、SQL Server にコマンドを発行するために必要です。SQL コマンドの前に特別な文字列を付けない限り、ほとんどの SQL サーバーではそのコマンドが無視されます。したがって、変換が有効な場合に Web App Firewall が実行する変更により、攻撃者はアクティブな SQL を挿入できなくなります。これらの変更が加えられた後、リクエストは保護された Web サイトに安全に転送されます。保護された Web サイト上の Web フォームが SQL 特殊文字列を正当に含むことができるが、Web フォームが正しく動作するために特殊文字列に依存しない場合、Web App Firewallが保護されたWeb サイトに提供する保護を低下させずに、ブロックを無効にして変換を有効にして、正当な Web フォームデータのブロックを防止できます。
変換操作は SQL インジェクションタイプの設定とは独立して機能します 。変換が有効で、SQL インジェクションタイプが SQL キーワードとして指定されている場合、リクエストにキーワードが含まれていなくても SQL 特殊文字が変換されます。
ヒント
通常、変換とブロッキングのどちらかを有効にしますが、両方を有効にすることはできません。ブロックアクションが有効になっている場合は、変換アクションよりも優先されます。ブロッキングを有効にしている場合、変換の有効化は冗長です。
SQL ワイルドカード文字の確認-ワイルドカード文字を使用して、SQL (SQL-SELECT) ステートメントの選択範囲を広げることができます。これらのワイルドカード演算子は、[ いいね !] および [ NOT いいね ] 演算子と共に使用して、値を類似の値と比較できます。パーセント (%) およびアンダースコア (_) 文字は、ワイルドカードとしてよく使用されます。 パーセント記号は、MS-DOS で使用されるアスタリスク (*) ワイルドカード文字に似ており、フィールド内の 0 文字、1 文字、または複数の文字に一致します。 アンダースコアは MS-DOS の疑問符 (?) と似ています。ワイルドカード文字。これは、式の 1 つの数字または文字に一致します。
たとえば、次のクエリを使用して文字列検索を実行し、名前に D 文字が含まれるすべての顧客を検索できます。
「%D%」のような名前のカスタマーから*を選択してください。:
次の例では、演算子を組み合わせて、2 番目と 3 番目に 0 がある給与値をすべて検索します。
顧客から*を選択 WHERE 給与 ‘_ 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 違反を検出するために、リクエストはインジェクションタイプの指定と照合されます。 SQL インジェクションタイプには、次の 4 つのオプションがあります。
- 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 つのハイフンで始まり、行末で終わるコメントです。
-
{}-中カッコ(中カッコはコメントを囲みます。{はコメントの前にあり、} はその後に続きます。中括弧は 1 行または複数行のコメントを区切ることができますが、コメントはネストできません)
-
/* */ : 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 つのハイフン)、 /* */ (ネストされたコメントを許可します)
- [すべてのコメントをチェック]: 何もスキップせずに、注入された SQL のリクエスト全体をチェックします。これがデフォルトの設定です。
ヒント
通常、バックエンドデータベースが Microsoft SQL Server 上で実行されていない限り、[ネスト] または [ANSI/ネスト] オプションを選択しないでください。他のほとんどの種類の SQL Server ソフトウェアは、ネストされたコメントを認識しません。ネストされたコメントが、別の種類の SQL Server 宛ての要求に表示される場合は、そのサーバーのセキュリティ侵害の試みを示している可能性があります。
[Check Request headers]:フォームフィールドの入力の検査に加えて、HTML SQL インジェクション攻撃のリクエストヘッダーを調べる場合は、このオプションを有効にします。GUI を使用する場合は、Web App Firewall プロファイルの [詳細設定]-> [プロファイル設定] ペインでこのパラメーターを有効にすることができます。
注:
Check Request ヘッダーフラグを有効にすると、 User-Agent ヘッダーの緩和ルールを設定する必要がある場合があります。のようなSQLキーワードや 、SQL特殊文字のセミコロン(; )が存在すると、偽陽性が発生し、このヘッダーを含む要求がブロックされる可能性があります。 警告
リクエストヘッダーのチェックと変換の両方を有効にすると、ヘッダーで見つかった SQL 特殊文字も変換されます。受け入れ、受け入れ文字セット、受け入れエンコーディング、受け入れ言語、期待、およびユーザーエージェントヘッダーは、通常、セミコロン(;)が含まれています。 Request ヘッダーのチェックと変換を同時に有効にすると、エラーが発生する場合があります。
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) SpecialString、または 3) WildChar のいずれかになります。
- フィールド名と URL の組み合わせごとに複数の緩和ルールを設定できます。
コマンドラインを使用した SQL インジェクションチェックの設定
コマンドラインを使用して SQL インジェクションアクションとその他のパラメーターを構成するには、次の手順を実行します。
コマンドラインインターフェイスでは、 set appfw profile コマンドまたは add appfw profile コマンドのいずれかを使用して、SQL インジェクション保護を設定できます。ブロック、学習、ログ、統計アクションを有効にし、SQL インジェクション攻撃文字列で使用される特殊文字を変換して攻撃を無効にするかどうかを指定できます。ペイロードで検出する SQL 攻撃パターンの種類 (キーワード、ワイルドカード文字、特殊文字列) を選択し、Web App Firewall で SQL インジェクション違反のリクエストヘッダーも検査するかどうかを指定します。 unset appfw profile コマンドを使用して、構成した設定をデフォルトに戻します。次のコマンドはそれぞれ 1 つのパラメータのみを設定しますが、1 つのコマンドに複数のパラメータを含めることができます。
- ページの下部に表示されるアプリケーションファイアウォールプロファイル「パラメータの説明」を設定します 。
<name> -SQLInjectionAction (([block] [learn] [log] [stats]) | [none])
- ページの下部に表示されるアプリケーションファイアウォールプロファイル「パラメータの説明」を設定します 。
<name> -SQLInjectionTransformSpecialChars (**ON** | OFF)
- ページの下部に表示されるアプリケーションファイアウォールプロファイル「パラメータの説明」を設定します 。
<name> -**SQLInjectionCheckSQLWildChars** (**ON** |**OFF**)
- ページの下部に表示されるアプリケーションファイアウォールプロファイル「パラメータの説明」を設定します 。
**<name> -**SQLInjectionType** ([**SQLKeyword**] | [**SQLSplChar**] | [**SQLSplCharANDKeyword**] | [**SQLSplCharORKeyword**])
- ページの下部に表示されるアプリケーションファイアウォールプロファイル「パラメータの説明」を設定します 。
<name> -**SQLInjectionParseComments** ([**checkall**] | [**ansi|nested**] | [**ansinested**])
- **ページの下部に表示されるアプリケーションファイアウォールプロファイル「パラメータの説明」を設定します 。
-
<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 インジェクションチェックを構成または変更するには
- [ アプリケーションファイアウォール] > [プロファイル] に移動し、ターゲットプロファイルを強調表示して、[ 編集] をクリックします。
- [ 詳細設定 ] ペインで、[ セキュリティチェック] をクリックします。
セキュリティー検査テーブルには、すべてのセキュリティー検査に対して現在構成されているアクション設定が表示されます。設定には次の 2 つのオプションがあります。
a. HTML SQL インジェクションの [ブロック]、[ログ]、[統計]、および [学習] の各アクションを有効または無効にするには、テーブルのチェックボックスをオンまたはオフにして、[ OK] をクリックし、[ 保存して閉じる ] をクリックして [ セキュリティチェック ] ウィンドウを閉じます。
b. このセキュリティ・チェックのその他のオプションを構成する場合は、「HTML SQL インジェクション」をダブルクリックするか、行を選択して「 アクションの設定」をクリックして、次のオプションを表示します。
SQL 特殊文字の変換:要求内の任意の SQL 特殊文字を変換します。
SQL ワイルドカード文字の確認— ペイロード内の SQL ワイルドカード文字を攻撃パターンと見なします。
「次を含むリクエストのチェック」— チェックする SQL インジェクションのタイプ (sqlKeyword、sqlSPLChar、sqlSPLCharandKeyword、または sqlSPLCharorKeyword)。
SQL コメントの処理-チェックするコメントのタイプ ([すべてのコメントをチェック]、[ANSI]、[ネスト]、または [ANSI/ネスト])。
上記の設定のいずれかを変更したら、「 OK」 をクリックして変更内容を保存し、「セキュリティチェック」(Security Checks) テーブルに戻ります。必要に応じて、他のセキュリティー検査の設定に進むことができます。[ OK ]をクリックして[セキュリティチェック]セクションで行った変更をすべて保存し、[ 保存して閉じる ]をクリックしてセキュリティチェックウィンドウを閉じます。
GUI を使用して SQL インジェクション緩和ルールを構成するには
- [ アプリケーションファイアウォール ] > [ プロファイル] に移動し、ターゲットプロファイルを強調表示して [ 編集] をクリックします。
- [ 詳細設定 ] ウィンドウで、[ 緩和規則] をクリックします。
- 「緩和規則」テーブルで、「 HTML SQL Injection 」エントリをダブルクリックするか、エントリを選択して「 編集」をクリックします。
- 「 HTML SQL インジェクション緩和規則 」ダイアログで、緩和規則の「 追加」、「編集」、「削除」、「 有効化」、または「 無効化 」
注
新しいルールを追加すると、[値の型フィールド] で [キーワード] または [SpecialString] または [WildChar] オプションを選択しない限り、[値の** 式**] フィールドは表示されません。
ビジュアライザーを使用して SQL インジェクション緩和ルールを管理するには
すべての緩和ルールをまとめて表示するには、[HTML SQL Injection] 行をハイライト表示して [ビジュアライザー] をクリックします。デプロイされたリラクゼーションのビジュアライザーには、[ 新しいルールを追加 ] または [既存のルールを編集] のオプションがあります。ノードを選択し、緩和ビジュアライザの対応するボタンをクリックして、ルールのグループ を有効 または 無効に することもできます。
GUI を使用して射出パターンを表示またはカスタマイズする
GUI を使用して、射出パターンを表示またはカスタマイズできます。
デフォルトの SQL パターンは、デフォルトのシグニチャファイルで指定されます。シグニチャオブジェクトをプロファイルにバインドしない場合、デフォルトシグニチャオブジェクトで指定されたデフォルトのインジェクションパターンが、コマンドインジェクションセキュリティチェック処理のためにプロファイルによって使用されます。デフォルトのシグニチャオブジェクトで指定されている規則とパターンは読み取り専用です。編集や修正はできません。これらのパターンを変更または変更する場合は、デフォルトの SSignatures オブジェクトのコピーを作成して、ユーザー定義署名オブジェクトを作成します。新しいユーザ定義シグニチャオブジェクトのコマンドインジェクションパターンを変更し、これらのカスタマイズされたパターンを使用するトラフィックを処理しているプロファイルでこのシグニチャオブジェクトを使用します。
詳細については、「 署名」を参照してください。
GUI を使用してデフォルトの射出パターンを表示するには、次の手順を実行します。
-
[ アプリケーションファイアウォール] > [署名] に移動し、[ *デフォルトシグニチャ] を選択し、[ 編集] をクリックします。
-
[ CMD/SQL/XSS パターンの管理] をクリックします。「 SQL/クロスサイトスクリプティングパスの管理 」テーブルには、CMD/SQL/XS インジェクションに関連するパターンが表示されます。
- 行を選択し、[ 要素の管理 ] をクリックして、Web App Firewall コマンドインジェクションチェックで使用される対応する注入パターン (キーワード、特殊文字列、変換ルール、またはワイルドカード文字) を表示します。
SQL インジェクションチェックでの学習機能の使用
学習アクションが有効になると、Web App Firewall 学習エンジンはトラフィックを監視し、トリガーされた違反を学習します。学習したルールは定期的に検査できます。十分に検討した後、学習したルールを SQL インジェクション緩和ルールとして展開できます。
SQLインジェクション学習の拡張:NetScalerソフトウェアのリリース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 を使用して学習済みデータを表示または使用するには
-
[ アプリケーションファイアウォール] > [プロファイル] に移動し、ターゲットプロファイルを強調表示して、[ 編集] をクリックします。
-
[ 詳細設定 ] ペインで、[ 学習済みルール] をクリックします。「学習済みルール」テーブルで HTML SQL Injection エントリを選択してダブルクリックすると、学習したルールにアクセスできます。学習したルールを展開したり、緩和ルールとして展開する前にルールを編集したりできます。ルールを破棄するには、ルールを選択して「スキップ」( Skip ) ボタンをクリックします。一度に編集できるルールは 1 つだけですが、展開またはスキップするルールは複数選択できます。
また、「学習済みルール」(Learned Rules) テーブルで「 HTML SQL Injection 」エントリを選択し、「ビジュアライザー」( Visualizer ) をクリックして、学習済みのすべての違反の統合ビューを表示することもできます。ビジュアライザを使用すると、学習したルールを簡単に管理できます。1 つの画面でデータの包括的なビューを表示し、1 回のクリックでルールのグループに対するアクションの実行を容易にします。ビジュアライザーの最大の利点は、正規表現を推奨して複数のルールを統合できることです。デリミタとアクション URL に基づいて、これらのルールのサブセットを選択できます。ドロップダウンリストから番号を選択すると、ビジュアライザーに 25、50、または 75 個のルールを表示できます。学習したルールのビジュアライザーには、ルールを編集して緩和として展開するオプションがあります。または、ルールをスキップして無視することもできます。
SQL インジェクションチェックでログ機能を使用する
ログアクションを有効にすると、HTML SQL インジェクションのセキュリティチェック違反が 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>
この変更は、 application/x-www-form-urlencoded、 マルチパート/フォームデータ、または text/x-gwt-rpc コンテンツタイプを含むリクエストに適用されます。 JSON または XML ペイロードの処理中に生成されるログメッセージは、この変更の影響を受けません。
GUI を使用してログメッセージにアクセスするには
Citrix GUIには、ログメッセージを分析するための便利なツール(Syslog Viewer)が含まれています。Syslog ビューアにアクセスするには、複数のオプションがあります:
- [ アプリケーションファイアウォール ] > [ プロファイル] に移動し、ターゲットプロファイルを選択して [ セキュリティチェック] をクリックします。 HTML SQL インジェクション行を強調表示して 、[ ログ] をクリックします。 プロファイルの HTML SQL インジェクションチェックから直接ログにアクセスすると、GUI によってログメッセージが除外され、これらのセキュリティチェック違反に関連するログのみが表示されます。
- 「 NetScaler 」>「 システム 」>「 監査 」の順に選択して、Syslogビューアにアクセスすることもできます。 「監査メッセージ」セクションで、「 Syslog messages 」リンクをクリックすると、Syslog Viewer が表示されます。このビューアには、他のセキュリティチェック違反ログを含むすべてのログメッセージが表示されます。これは、要求処理中に複数のセキュリティチェック違反がトリガーされる可能性がある場合のデバッグに役立ちます。
- アプリケーションファイアウォール > ポリシー > 監査に移動します。監査メッセージセクションで、 Syslog メッセージリンクをクリックして Syslog Viewer を表示します。このビューアには、他のセキュリティチェック違反ログを含むすべてのログメッセージが表示されます。
HTML ベースの Syslog ビューアには、関心のあるログメッセージのみを選択するためのさまざまなフィルタオプションがあります。 HTML SQL インジェクションチェックのログメッセージを選択するには 、「 モジュール 」のドロップダウン・リスト・オプションで「 APPFW」を選択してフィルタリングします。[Event Type] リストには、選択内容をさらに絞り込むための豊富なオプションが用意されています。たとえば、「 APPFW_SQL 」チェック・ボックスを選択して「 適用 」ボタンをクリックすると、 SQL Injectionセキュリティ・チェック違反に関するログ・メッセージのみが Syslog Viewerに表示されます。
特定のログメッセージの行にカーソルを置くと、[ モジュール]、[ イベントタイプ]、[ イベント ID]、[ クライアント IP ] などの複数のオプションがログメッセージの下に表示されます。これらのオプションを選択すると、ログメッセージ内の対応する情報を強調表示できます。
[クリックして展開 ] 機能は GUI でのみ使用できます。Syslog Viewer を使用すると、ログを表示するだけでなく、Web App Firewall セキュリティチェック違反のログメッセージに基づいて HTML SQL インジェクション緩和ルールを展開することもできます。この操作では、ログメッセージは CEF ログ形式である必要があります。クリックして展開機能は、ブロック (またはブロックしない) アクションによって生成されたログメッセージに対してのみ使用できます。変換操作に関するログメッセージの緩和ルールは展開できません。
Syslog Viewer から緩和ルールを展開するには、ログメッセージを選択します。選択した行の [ Syslog Viewer ] ボックスの右上隅にチェックボックスが表示されます。このチェックボックスをオンにし、[ アクション ] リストから緩和ルールを展開するオプションを選択します。[ **編集とデプロイ**]、[ **デプロイ]、[すべてデプロイ ] は、**
[Click to Deploy] オプションを使用してデプロイされる SQL インジェクションルールには、細粒度緩和の推奨事項は含まれません。
GUI の [クリックしてデプロイ] 機能を使用するには、次の手順を実行します。
- Syslog Viewer で、[ モジュール ] オプションの [ アプリケーションファイアウォール ] を選択します。
- 対応するログメッセージをフィルタするには、 イベントタイプとしてAPP_SQL を選択します。
- 展開するルールを識別するには、このチェックボックスをオンにします。
- オプションの [ アクション (Action)] ドロップダウンリストを使用して、緩和ルールを展開します。
- ルールが対応する [緩和ルール] セクションに表示されていることを確認します。
SQL インジェクション違反の統計
統計アクションが有効になっている場合、Web App Firewall がこのセキュリティチェックに対して何らかのアクションを実行すると、SQL インジェクションチェックのカウンタが増加します。統計は、トラフィック、違反、およびログのレートと合計数について収集されます。ログカウンタの増分サイズは、構成された設定によって異なります。たとえば、ブロック・アクションが有効になっている場合、3つのSQLインジェクション違反を含むページのリクエストでは、最初の違反が検出されるとすぐにページがブロックされるため、statsカウンタが1つずつ増加します。ただし、ブロックが無効になっている場合、同じ要求を処理すると、違反ごとに個別のログメッセージが生成されるため、違反とログの統計カウンタが 3 ずつ増加します。
コマンドラインを使用してSQLインジェクション・チェック統計を表示するには、次のステップを実行します。
コマンドプロンプトで入力します:
sh appfw 統計
特定のプロファイルの統計情報を表示するには、以下のコマンドを使用します。
> stat appfw profile <profile name>
GUI を使用して HTML SQL インジェクションの統計情報を表示するには
- システム > セキュリティ > アプリケーションファイアウォールに移動します。
- 右側のペインで、[統計 リンク] にアクセスします。
- スクロールバーを使用して、HTML SQL インジェクション違反とログに関する統計を表示します。統計テーブルはリアルタイムデータを提供し、7秒ごとに更新されます。
ハイライト
SQL インジェクションチェックについては、次の点に注意してください。
- SQLインジェクション保護の組み込みサポート-Citrix Web 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 違反ログメッセージを選択し、緩和ルールとして展開します。