XML SQL インジェクションチェック
XML SQL インジェクションチェックは、XML SQL インジェクション攻撃の可能性についてのユーザー要求を調べます。XML ペイロードに注入された SQL が見つかると、要求がブロックされます。
XML SQL 攻撃は、ソースコードを Web アプリケーションに注入して、それを有効な SQL クエリとして解釈して実行し、悪意を持ってデータベース操作を実行する可能性があります。たとえば、XML SQL 攻撃を仕掛けて、データベースの内容に不正にアクセスしたり、保存されているデータを操作したりすることができます。XML SQL インジェクション攻撃はよくあるだけでなく、非常に有害でコストもかかります。
データベースユーザーの権限を区分化すると、データベースをある程度保護するのに役立ちます。すべてのデータベースユーザーには、SQL クエリを実行して他のタスクを実行できないように、目的のタスクを完了するために必要な権限のみを与える必要があります。たとえば、読み取り専用ユーザーには、データテーブルへの書き込みや操作を許可してはなりません。Web App Firewall の XML SQL インジェクションチェックは、すべての XML リクエストを検査して、セキュリティを侵害する可能性のある不正な SQL コードの注入に対する特別な防御策を提供します。Web App Firewall は、任意のユーザーの XML リクエストで不正な SQL コードを検出すると、そのリクエストをブロックできます。
NetScaler Web App Firewallは、SQLキーワードと特殊文字の有無を検査して、XML SQLインジェクション攻撃を特定します。デフォルトのキーワードと特殊文字のセットには、XML SQL 攻撃を仕掛けるのに一般的に使用される既知のキーワードと特殊文字が含まれます。Web App Firewall は、一重引用符 (‘)、バックスラッシュ ()、セミコロン (;) の 3 文字を SQL セキュリティチェック処理の特殊文字と見なします。新しいパターンを追加したり、デフォルトセットを編集して XML SQL チェックインスペクションをカスタマイズしたりできます。
Web App Firewall には、XML SQL インジェクション保護を実装するためのさまざまなアクションオプションが用意されています。 リクエストをブロックしたり 、検出された違反に関する詳細を含むメッセージを ns.log ファイルに記録したり 、 統計情報を収集して監視された攻撃の数を追跡したりできます 。
アクションの他に、XML SQL インジェクション処理用に構成できるパラメータがいくつかあります。 SQL ワイルドカード文字をチェックできます。XML SQL インジェクションタイプを変更し、4 つのオプション (sqlKeyword、sqlSplCharar、sqlSplCharandKeyword**、sqlSplCharorKeyword**) のいずれかを選択して、XML ペイロードを処理する際の SQL キーワードとSQL 特殊文字の評価方法を指定できます。XML SQL コメント処理パラメータには 、XML SQL インジェクション検出時に検査または除外する必要があるコメントの種類を指定するオプションがあります。
リラクゼーションを展開すると、誤検出を回避できます。Web App Firewall XML SQL チェックは受信リクエストのペイロードに対して実行され、攻撃文字列が複数行に分散していても識別されます。このチェックでは、 要素内の SQL インジェクション文字列と属性値が検索されます 。特定の条件下では、セキュリティチェックの検査をバイパスするための緩和措置を適用できます。ログと統計は、必要な緩和策を特定するのに役立ちます。
アクションオプション
アクションは、XML SQL インジェクションチェックがリクエスト内の SQL インジェクション攻撃文字列を検出したときに適用されます。アプリケーションに最適化された XML SQL インジェクション保護を設定するには、次のアクションを使用できます。
ブロック — ブロックを有効にすると、入力が XML SQL インジェクションタイプの仕様と一致する場合にのみブロックアクションがトリガーされます。たとえば、 SQLSplCharAndKeyword が XML SQL インジェクションタイプとして設定されている場合、ペイロードで SQL 特殊文字が検出された場合でも、リクエストにキーワードが含まれていないリクエストはブロックされません 。 XML SQL インジェクションタイプがsqlSplchar または sqlSplCharorKeywordのいずれかに設定されている場合、このようなリクエストはブロックされます。
ログ:ログ機能を有効にすると、XML SQL インジェクションチェックが実行するアクションを示すログメッセージが生成されます。ブロックが無効になっている場合、XML SQL 違反が検出された場所 (ELEMENT、 ATTRIBUTE) ごとに個別のログメッセージが生成されます。ただし、要求がブロックされると、1 つのメッセージだけが生成されます。ログを監視して、正当な要求に対する応答がブロックされているかどうかを判断できます。ログメッセージの数が大幅に増加すると、攻撃を開始しようとしたことを示している可能性があります。
[Stats]:有効にすると、統計機能は違反とログに関する統計情報を収集します。stats カウンタの予期しない急増は、アプリケーションが攻撃を受けていることを示している可能性があります。正当なリクエストがブロックされる場合、新しい緩和ルールを構成する必要があるか、既存の緩和ルールを変更する必要があるかを確認するために、構成を再確認しなければならない場合があります。
XML SQL パラメーター
ブロック、ログ、統計アクションに加えて、XML SQL インジェクションチェックには次のパラメータを設定できます。
XML SQL ワイルドカード文字の確認 — ワイルドカード文字を使用すると、構造化クエリ言語 (SQL-SELECT) ステートメントの選択肢を広げることができます。これらのワイルドカード演算子を LIKE 演算子と NOTLIKE 演算子と組み合わせて使用すると、値を類似の値と比較できます。パーセント (%) およびアンダースコア (_) 文字は、ワイルドカードとしてよく使用されます。パーセント記号は、MS-DOS で使用されるアスタリスク (*) ワイルドカード文字に似ており、フィールド内の 0 文字、1 文字、または複数の文字に一致します。アンダースコアは MS-DOS の疑問符 (?) と似ています。ワイルドカード文字。これは、式の 1 つの数字または文字に一致します。
たとえば、次のクエリを使用して文字列検索を実行し、名前に D 文字が含まれるすべての顧客を検索できます。
SELECT * from customer WHERE name like "%D%"
次の例では、演算子を組み合わせて、2 番目と 3 番目の文字が 0 の給与値をすべて検索します。
SELECT * from customer WHERE salary like '_00%
DBMS ベンダーによっては、演算子を追加してワイルドカード文字を拡張しています。NetScaler 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>
<!--NeedCopy-->
攻撃のワイルドカード文字は [^A-F] のように PCRE になります。Web App Firewall は PCRE ワイルドカードもサポートしていますが、ほとんどの攻撃をブロックするには、上記のリテラルワイルドカード文字で十分です。
注
XML SQL ワイルドカード文字チェックは XML 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 は特殊文字を含まない文字列をスキップします。ほとんどの 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 で通常使用されます。
- すべてのコメントを確認— 何もスキップせずに、挿入された SQL のリクエスト全体をチェックします。これがデフォルトの設定です。
ヒント
バックエンドデータベースが Microsoft SQL Server で実行されている場合を除き、ほとんどの場合、ネストオプションまたは ANSI/ネストオプションを選択しないでください。他のほとんどの種類の SQL Server ソフトウェアは、ネストされたコメントを認識しません。ネストされたコメントが、別の種類の SQL Server 宛ての要求に表示される場合は、そのサーバーのセキュリティ侵害の試みを示している可能性があります。
リラクゼーションルール
アプリケーションで XML ペイロード内の特定の ELEMENT または ATTRIBUTE に対する XML SQL インジェクションインスペクションをバイパスする必要がある場合は、緩和ルールを設定できます。XML SQL インジェクション検査緩和ルールには次のパラメータがあります。
-
名前: リテラル文字列または正規表現を使用して、 **要素または属性の名前を設定できます。次の式では、 **PurchaseOrder_ という文字列で始まり、その後に長さが 2 文字以上 10 文字以下の数字の文字列が続く要素はすべて除外されます 。
コメント: 「発注書要素のXML SQLチェックを免除」
XMLSQLInjection: "PurchaseOrder_[0-9A-Za-z]{2,10}"
IsRegex: REGEX Location: ELEMENT
State: ENABLED
<!--NeedCopy-->
注: 名前は大文字と小文字が区別されます。重複したエントリは許可されませんが、名前の大文字と場所の違いを使用して、類似のエントリを作成できます。たとえば、次の緩和ルールはそれぞれ異なります。
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
<!--NeedCopy-->
- 場所: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 appfw profile <name> -XMLSQLInjection <string> [isRegex (REGEX | NOTREGEX)] [-location ( ELEMENT | ATTRIBUTE )] –comment <string> [-state ( ENABLED | DISABLED )]
- unbind appfw profile <name> -XMLSQLInjection <String>
<!--NeedCopy-->
例:
> 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
<!--NeedCopy-->
GUI を使用して XMLSQL インジェクションセキュリティチェックを構成する
GUI では、アプリケーションに関連するプロファイルのペインで XML SQL インジェクションセキュリティチェックを設定できます。
GUI を使用して XML SQL インジェクションチェックを設定または変更するには
- Web App Firewall > プロファイルに移動し、ターゲットプロファイルを強調表示して、「 編集」をクリックします。
- [詳細設定] ペインで、[ セキュリティチェック] をクリックします。
セキュリティー検査テーブルには、すべてのセキュリティー検査に対して現在構成されているアクション設定が表示されます。設定には次の 2 つのオプションがあります。
a. XML SQL インジェクションのブロック、ログ、統計アクションを有効または無効にするだけの場合は、テーブルのチェックボックスをオンまたはオフにして、「OK」をクリックし、「保存して閉じる」をクリックして「セキュリティチェック」ペインを閉じます。
b. このセキュリティーチェックに追加のオプションを設定する場合は、XML SQL インジェクションをダブルクリックするか、行を選択して「 アクション設定」をクリックすると、次のオプションが表示されます。
SQL ワイルドカード文字の確認:ペイロード内の SQL ワイルドカード文字を攻撃パターンと見なします。
「次を含むリクエストのチェック」— チェックする SQL インジェクションのタイプ (sqlKeyword、sqlSPLChar、sqlSPLCharandKeyword、または sqlSPLCharorKeyword)。
SQL コメントの処理-チェックするコメントのタイプ ([すべてのコメントをチェック]、[ANSI]、[ネスト]、または [ANSI/ネスト])。
上記の設定のいずれかを変更したら、「 OK」 をクリックして変更内容を保存し、「セキュリティチェック」(Security Checks) テーブルに戻ります。必要に応じて、他のセキュリティー検査の設定に進むことができます。「 OK」 をクリックして「セキュリティ・チェック」 セクションで行ったすべての変更を保存し 、「 保存して閉じる 」をクリックしてセキュリティ・チェック・ペインを閉じます。
GUI を使用して XML SQL インジェクション緩和ルールを設定するには
- Web App Firewall > プロファイルに移動し、ターゲットプロファイルを強調表示して、「 編集」をクリックします。
- [ 詳細設定 ] ウィンドウで、[ 緩和規則] をクリックします。
- 「緩和規則」テーブルで、 XML SQL インジェクションのエントリをダブルクリックするか 、エントリを選択して「 編集」をクリックします。
- XML SQL インジェクション緩和規則ダイアログボックスで 、 緩和規則の追加、 編集、 削除、 有効化、 または無効化の操作を実行します 。
ビジュアライザーを使用して XML SQL インジェクション緩和ルールを管理するには
すべての緩和ルールをまとめて表示するには、 緩和ルール表の XML SQL インジェクション行を強調表示して 、「 ビジュアライザー」をクリックします。デプロイされたリラクゼーションのビジュアライザーには、[ 新しいルールを追加 ] または [既存のルールを編集] のオプションがあります。ノードを選択し、緩和ビジュアライザの対応するボタンをクリックして、ルールのグループ を有効 または 無効に することもできます。
GUI を使用して SQL インジェクションパターンを表示またはカスタマイズするには:
GUI を使用して SQL パターンを表示またはカスタマイズできます。
デフォルトの SQL パターンは、 Web App Firewall > 署名 > ***デフォルト署名で指定されます 。**シグネチャオブジェクトをプロファイルにバインドしない場合、Default Signatures オブジェクトで指定されたデフォルト SQL パターンが、プロファイルの XML SQL インジェクションセキュリティチェック処理に使用されます。Default Signatures オブジェクトのルールとパターンは読み取り専用です。編集や修正はできません。これらのパターンを変更または変更する場合は、Default Signatures オブジェクトのコピーを作成して SQL パターンを変更して、ユーザー定義の署名オブジェクトを作成します。カスタマイズされた SQL パターンを使用するトラフィックを処理するプロファイルで、ユーザ定義のシグニチャオブジェクトを使用します。
詳細については、「 署名」を参照してください。
デフォルトのSQLパターンを表示するには、次のステップを実行します。
a. 「Web App Firewall」>「署名」に移動し、「 ***デフォルト署名」を選択し、「編集」をクリックします。次に、[ **SQL/クロスサイトスクリプティングパターンの管理] をクリックします。
「SQL/クロスサイトスクリプティングパスの管理」テーブルには、SQLインジェクションに関する次の4行が表示されます。
Injection (not_alphanum, SQL)/ Keyword
Injection (not_alphanum, SQL)/ specialstring
Injection (not_alphanum, SQL)/ transformrules/transform
Injection (not_alphanum, SQL)/ wildchar
<!--NeedCopy-->
b. 行を選択して「 要素の管理 」をクリックすると、Web App Firewall SQL インジェクションチェックで使用される対応する SQL パターン (キーワード、特殊文字列、変換ルール、またはワイルドカード文字) が表示されます。
SQL パターンをカスタマイズするには: ユーザー定義の署名オブジェクトを編集して、SQL キーワード、特殊文字列、およびワイルドカード文字をカスタマイズできます。新しいエントリを追加したり、既存のエントリを削除したりできます。SQL 特殊文字列の変換ルールを変更できます。
a. Web App Firewall> **署名に移動し、ターゲットのユーザー定義署名を強調表示して、「編集」をクリックします。[ **SQL/クロスサイトスクリプティングパターンの管理] をクリックして、[SQL/クロスサイトスクリプティングパスの管理 ] テーブルを表示します。
b. ターゲット SQL 行を選択します。
i. [ 要素の管理] をクリックして、対応する SQL 要素を追加、 編集 、 または削除します 。
ii. 選択した行を削除するには 、[削除] をクリックします。
警告
デフォルトの SQL 要素を削除または変更したり、SQL パスを削除して行全体を削除したりする場合は、十分に注意する必要があります。シグネチャルールと XML SQL インジェクションセキュリティチェックは、これらの要素を利用して SQL インジェクション攻撃を検出し、アプリケーションを保護します。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
<!--NeedCopy-->
GUI を使用してログメッセージにアクセスするには
GUI には、ログメッセージを分析するための便利なツール (Syslog Viewer) が含まれています。Syslog ビューアにアクセスするには、複数のオプションがあります。
-
Web App Firewall > プロファイルに移動し、ターゲットプロファイルを選択して、 セキュリティチェックをクリックします。 XML SQL インジェクション行を強調表示して 、「 ログ」をクリックします。プロファイルの XML SQL インジェクションチェックから直接ログにアクセスすると、GUI はログメッセージをフィルタリングし、これらのセキュリティチェック違反に関連するログのみを表示します。
-
[ **システム ] > [監査] に移動して Syslog ビューアにアクセスすることもできます。「監査メッセージ」セクションで、「 **Syslogメッセージ 」リンクをクリックすると、Syslogビューアが表示されます。Syslogビューアには、他のセキュリティチェック違反ログを含むすべてのログメッセージが表示されます。これは、要求処理中に複数のセキュリティチェック違反がトリガーされる可能性がある場合のデバッグに役立ちます。
-
[ Web App Firewall ] > [ ポリシー ] > [ 監査] に移動します。「監査メッセージ」セクションで、「 Syslogメッセージ 」リンクをクリックすると、Syslogビューアが表示されます。 Syslogビューアには、他のセキュリティチェック違反ログを含むすべてのログメッセージが表示されます。
XML ベースの Syslog Viewer には、関心のあるログメッセージのみを選択するためのさまざまなフィルターオプションが用意されています。 XML SQL インジェクションチェックのログメッセージを選択するには、モジュールのドロップダウンオプションで **APPFW を選択してフィルタリングします。**[Event Type] リストには、選択内容をさらに絞り込むための豊富なオプションが用意されています。たとえば、 APPFW_XML_SQL チェックボックスを選択して「 **適用 」ボタンをクリックすると、XML SQL**インジェクションのセキュリティチェック違反に関するログメッセージのみが Syslog ビューアに表示されます。
特定のログメッセージの行にカーソルを置くと、 モジュール、 イベントタイプ、イベントID、クライアント IP などの複数のオプションがログメッセージの下に表示されます。これらのオプションを選択すると、ログメッセージ内の対応する情報を強調表示できます。
XML SQL インジェクション違反の統計情報
stats アクションを有効にすると、Web App Firewall がこのセキュリティチェックに対して何らかのアクションを実行すると、 XML SQL インジェクションチェックのカウンタが増加します 。統計は、トラフィック、違反、およびログのレートと合計数について収集されます。ログカウンタの増分サイズは、構成された設定によって異なります。たとえば、ブロックアクションが有効な場合、3 つの XML SQL インジェクション違反を含むページのリクエストでは 、最初の違反が検出されるとすぐにページがブロックされるため、stats カウンタが 1 つ増えます。ただし、ブロックが無効になっている場合、同じリクエストを処理すると、違反ごとに個別のログメッセージが生成されるため、違反とログの統計カウンタが 3 つ増えます。
XML SQL インジェクションの統計情報を表示するには、コマンドラインを使用して
コマンドプロンプトで入力します。
> sh appfw stats
特定のプロファイルの統計情報を表示するには、以下のコマンドを使用します。
> stat appfw profile <profile name>
GUI を使用して XML SQL インジェクションの統計を表示するには
- [ システム ] > [ セキュリティ ] > [ Web App Firewall] に移動します。
- 右側のペインで、[統計 リンク] にアクセスします。
- スクロールバーを使用して、 XML SQL インジェクションの違反とログに関する統計を表示します 。統計テーブルはリアルタイムデータを提供し、7秒ごとに更新されます。