JSON SQL インジェクション保護
受信 JSON リクエストでは、部分的な SQL クエリ文字列またはコード内の不正なコマンドの形式で SQL インジェクションが行われることがあります。これにより、ウェブサーバーの JSON データベースからデータが盗まれることになります。このような要求を受信すると、アプライアンスはお客様のデータ保護要求をブロックします。
クライアントがJSON SQL要求をNetScalerアプライアンスに送信し、JSONパーサーが要求ペイロードを解析し、SQLインジェクションが観察された場合、アプライアンスはJSON SQLコンテンツに制約を適用するシナリオを考えてみましょう。この制約により、JSON SQL リクエストにサイズ制限が適用されます。その結果、JSON SQL インジェクションが検出されると、アプライアンスはアクションを適用し、JSON SQL エラーページで応答します。
JSON SQL インジェクション保護
JSON SQL 保護を設定するには、次の手順を完了する必要があります。
- アプリケーションファイアウォールプロファイルを JSON として追加します。
- JSON SQL インジェクション設定のアプリケーションファイアウォールプロファイルの設定
- アプリケーションファイアウォールプロファイルをバインドして JSON SQL アクションを設定します。
JSON タイプのアプリケーションファイアウォールプロファイルの追加
最初に、アプリケーションファイアウォールが JSON Web コンテンツを JSON SQL インジェクション攻撃から保護する方法を指定するプロファイルを作成する必要があります。 コマンドプロンプトで入力します:
add appfw profile <name> -type (HTML | XML | JSON)
注記:
プロファイルタイプを JSON に設定すると、HTML や XML などの他のチェックは適用されません。
例
add appfw profile profile1 –type JSON
JSON SQL インジェクションの設定
JSON SQL インジェクション攻撃からアプリケーションを保護するには、1 つ以上の JSON SQL インジェクションアクションを設定する必要があります。 コマンドプロンプトで入力します:
set appfw profile <name> - JSONSQLInjectionAction [block] [log] [stats] [none]
SQL インジェクションアクションは次のとおりです。 ブロック-このセキュリティー検査に違反する接続をブロックします。 Log - このセキュリティチェックの違反を記録します。 Stats-このセキュリティー検査の統計を生成します。 [なし]-このセキュリティー検査に対するすべてのアクションを無効にします。
JSON SQL インジェクションタイプ
アプリケーションファイアウォールプロファイルで JSON SQL Injection タイプを構成するには、コマンドプロンプトで次のように入力します。
set appfw profile <name> - JSONSQLInjectionType <JSONSQLInjectionType>
例
set appfw profile profile1 -JSONSQLInjectionType SQLKeyword
利用可能な SQL インジェクションタイプは、 利用可能な SQL インジェクションタイプです。 SQLSplChar. SQL 特殊文字 SQLKeywordをチェックします。SQL キーワードをチェックします。 SQLSplCharANDKeyword. ブロックが見つかった場合は、ブロックとブロックの両方をチェックします。 SQLSplCharORKeyword. . SQL 特殊文字または spl キーワードが見つかった場合にブロックします。 指定可能な値は sqlSPLChar、sqlKeyword、sqlSPLCharor キーワード、sqlSPLCharand キーワードです。
注:1 つ以上のアクションを有効にするには、「set appfw プロファイル-jsonSQLInjectionAction」に続けて有効にするアクションを入力します。
例
set appfw profile profile1 -JSONSQLInjectionAction block log stat
次に、ペイロード、対応するログメッセージ、および統計カウンタの例を示します。
Payload:
=======
{
"test": "data",
"username": "waf",
"password": "select * from t1;",
"details": {
"surname": "test",
"age": "23"
}
}
Log Message:
===========
08/19/2019:08:49:46 GMT pegasus121 Informational 0-PPE-0 : default APPFW APPFW_JSON_SQL 6656 0 : 10.217.32.165 18402-PPE0 - profjson http://10.217.32.147/test.html SQL Keyword check failed for object value(with violation="select(;)") starting at offset(52) <blocked>
Counters:
========
1 441083 1 as_viol_json_sql
3 0 1 as_log_json_sql
5 0 1 as_viol_json_sql_profile appfw__(profjson)
7 0 1 as_log_json_sql_profile appfw__(profjson)
<!--NeedCopy-->
GUI を使用して JSON SQL インジェクション保護を設定する
JSON SQL インジェクション保護設定を設定するには、次の手順に従います。
- ナビゲーションペインで、[ セキュリティ ] > [ プロファイル] に移動します。
- 「 プロファイル 」ページで、「 追加」をクリックします。
- NetScaler Web App Firewall プロファイルページで 、[ 詳細設定 ] の [ セキュリティチェック] をクリックします。
- [ セキュリティチェック ] セクションで、[ JSON SQL インジェクション設定 ] に移動します。
- チェックボックスの近くにある実行可能アイコンをクリックします。
- [アクション設定]をクリックして、[JSON SQL インジェクション設定] ページにアクセスします。
- JSON SQL インジェクションアクションを選択します 。
- [OK] をクリックします。
- [NetScaler Web App Firewall プロファイル ]ページで、[ 詳細設定 ]の[ 緩和ルール]をクリックします。
- [ 緩和ルール ] セクションで、[ JSON SQL インジェクション設定 ] を選択し、[編集] をクリックします。
- [JSON SQL インジェクション緩和ルール] ページで、リクエストの送信先となる URL を入力します。この URL に送信されたすべてのリクエストはブロックされません。
-
[Create] をクリックします。
JSON SQL インジェクション保護のための細粒度緩和の設定
Web App Firewall には、JSON ベースの SQL インジェクションインスペクションチェックから特定の JSON キーまたは値を緩和するオプションがあります。細粒度緩和ルールを使用して JSON ペイロードを緩和する複数のオプションを設定できます。
以前は、JSON 保護チェックの緩和を設定する唯一の方法は URL 全体を指定することであり、URL 全体の検証はバイパスされていました。
JSON ベースの SQL セキュリティ保護により、次のことが緩和されます。
- キーネーム
- キーバリュー
JSON ベースの SQL 保護チェックでは、特定のパターンを許可し、残りをブロックする緩和を設定できます。たとえば、Web App Firewall には現在、100 を超える SQL キーワードのデフォルトセットがあります。ハッカーはこれらのキーワードを SQL インジェクション攻撃で使用できるため、Web App Firewall はすべてを潜在的な脅威としてフラグを立てます。特定の場所で安全と考えられる 1 つ以上のキーワードを緩和する場合は、セキュリティチェックをバイパスして残りをブロックする緩和ルールを設定できます。 リラクゼーションで使用されるコマンドには、値タイプと値表現のオプションパラメータがあります。値式が正規表現かリテラル文字列かを指定できます。値のタイプは空白のままにすることも、[キーワード] または [特殊文字列] を選択することもできます。
注:
正規表現は強力です。特に PCRE 形式の正規表現に慣れていない場合は、作成した正規表現をすべて再確認してください。例外として追加する URL を正確に定義していることを確認し、それ以外は何も定義しないでください。ワイルドカード、特にドットとアスタリスク (.*) のメタ文字やワイルドカードの組み合わせを不注意に使用すると、ブロックする意図のない Web コンテンツへのアクセスをブロックしたり、JSON SQL インジェクションチェックによってブロックされるような攻撃を許可したりするなど、望ましくない結果が生じる可能性があります。
考慮すべきポイント
- 値式はオプションの引数です。フィールド名には値式がない場合があります。
- 1 つのキー名を複数の値式にバインドできます。
- 値式には値型を割り当てる必要があります。値の型は、1) キーワード、2) SpecialString です。
- キー名または URL の組み合わせごとに複数の緩和ルールを設定できます。
コマンドインターフェイスを使用してコマンドインジェクション攻撃に対する JSON 細粒度緩和の設定
JSON ファイル粒度緩和ルールを構成するには、細粒度緩和エンティティを Web App Firewall プロファイルにバインドする必要があります。
コマンドプロンプトで入力します:
bind appfw profile <profile name> -jsoncmdURL <URL> -key <key name> -isregex <REGEX/NOTREGEX> -valueType <keyword/SpecialString> <value Expression> -isvalueRegex <REGEX/NOTREGEX>
<!--NeedCopy-->
例:
bind appfw profile appprofile1 -jsonsqlurl www.example.com -key stn_name -isRegex NOTREGEX -valueType Keyword “union” -isvalueRegex NOTREGEX
<!--NeedCopy-->
GUI を使用して JSON ベースのコマンドインジェクション攻撃に対する細粒度緩和ルールを構成するには
- [ アプリケーションファイアウォール] > [プロファイル] に移動し、プロファイルを選択して [ 編集] をクリックします。
- [ 詳細設定 ] ウィンドウで、[ 緩和規則] をクリックします。
- 「 緩和ルール 」セクションで、 JSON SQL インジェクションレコードを選択し 、「 編集」をクリックします。
- JSON SQL インジェクション緩和ルールスライダーで 、「 追加」をクリックします。
-
[ JSON SQL インジェクション緩和規則 ] ページで、次のパラメータを設定します。
- 有効
- 名前は正規表現ですか
- キー名
- URL
- 値のタイプ
- コメント
- リソース ID
- [Create] をクリックします。