JSON コマンドインジェクション保護
JSON コマンドインジェクションチェックは、受信した JSON トラフィックを調べて、システムセキュリティを侵害したり、システムを変更したりする不正なコマンドがないか調べます。トラフィックを調べる際に、悪意のあるコマンドが検出されると、アプライアンスは要求をブロックするか、設定されたアクションを実行します。
コマンドインジェクション攻撃では、攻撃者はNetScalerオペレーティングシステムまたはバックエンドサーバーで不正なコマンドを実行しようとします。これを実現するために、攻撃者は脆弱なアプリケーションを使用してオペレーティングシステムコマンドを注入します。アプライアンスがセキュリティチェックを行わずに要求を転送するだけの場合、バックエンドアプリケーションはインジェクション攻撃に対して脆弱です。したがって、NetScalerアプライアンスが安全でないデータをブロックしてWebアプリケーションを保護できるように、セキュリティチェックを構成することが非常に重要です。
コマンドインジェクション保護のしくみ
- 受信した JSON リクエストに対して、WAF はトラフィックにキーワードや特殊文字がないか調べます。JSON リクエストに、拒否されたキーワードまたは特殊文字のいずれにも一致するパターンがない場合、リクエストは許可されます。それ以外の場合、要求は設定されたアクションに基づいてブロック、ドロップ、またはリダイレクトされます。
- リストからキーワードまたは特殊文字を除外する場合は、特定の条件下でセキュリティチェックをバイパスする緩和ルールを作成できます。
- ロギングを有効にすると、ログメッセージを生成できます。ログを監視して、正当な要求に対する応答がブロックされているかどうかを判断できます。ログメッセージの数が大幅に増加すると、攻撃を開始しようとしたことを示している可能性があります。
- また、統計機能を有効にして、違反やログに関する統計データを収集することもできます。stats カウンタの予期しない急増は、アプリケーションが攻撃を受けていることを示している可能性があります。正当な要求がブロックされた場合は、新しい緩和ルールを構成する必要があるか、既存の緩和ルールを変更する必要があるかを再確認するために、構成を再確認する必要があります。
コマンドインジェクションチェックで拒否されたキーワードと特殊文字
JSON コマンドインジェクション攻撃を検出してブロックするために、アプライアンスではデフォルトのシグニチャファイルに一連のパターン(キーワードと特殊文字)が定義されています。コマンドインジェクションの検出中にブロックされるキーワードの一覧を次に示します。
<commandinjection>
<keyword type="LITERAL" builtin="ON">7z</keyword>
<keyword type="LITERAL" builtin="ON">7za</keyword>
<keyword type="LITERAL" builtin="ON">7zr</keyword>
…
</commandinjection>
<!--NeedCopy-->
シグネチャファイルに定義されている特殊文字は次のとおりです。
| ; & $ > < ' \ ! >> #
注:
キーワードとパターンのリストは /netscaler/default_signatures.xml ファイルにあります。
CLI を使用した JSON コマンドインジェクションチェックの設定
set appfw profile
コマンドを使用するか、appfw profile
コマンドを追加して JSON コマンドインジェクション設定を構成できます。 ブロック、ログ、統計の各アクションを有効にできます。また、ペイロードで検出するキーワードや文字列などのコマンドインジェクションタイプも設定する必要があります。
コマンドプロンプトで入力します:
set appfw profile <profile-name> –cmdInjectionAction <action-name> -CMDInjectionType <CMDInjectionType>]
注:
デフォルトでは、コマンドインジェクションアクションは Block、 Log、 Statsに設定されています。また、デフォルトのコマンドインジェクションタイプは
CmdSplCharANDKeyWord
として設定されています。アップグレード後、既存の Web アプリファイアウォールプロファイルのアクションは [ なし] に設定されます。
例:
set appfw profile profile1 -JSONCMDInjectionAction block -JSONCMDInjectionType CmdSplChar
ここで、使用できる JSON コマンドインジェクションアクションは次のとおりです。
None-コマンドインジェクション保護を無効にします。 Log:セキュリティー検査のコマンドインジェクション違反をログに記録します。 Block-コマンドインジェクションセキュリティー検査に違反するトラフィックをブロックします。 Stats-コマンドインジェクションのセキュリティ違反に関する統計を生成します。
ここで、使用可能な JSON コマンドインジェクションタイプは次のとおりです。
Cmd SplChar
-特殊文字をチェックする
CmdKeyWord
-コマンドインジェクションをチェックするキーワード
CmdSplCharANDKeyWord
-これはデフォルトのアクションです。アクションは特殊文字とコマンドインジェクションをチェックします。キーワードとブロックは、両方が存在する場合に限ります。
CmdSplCharORKeyWord
-特殊文字とコマンドインジェクションキーワードとブロックのいずれかが見つかった場合にチェックします。
JSON コマンドインジェクション保護チェックのための緩和ルールの設定
アプリケーションでペイロード内の特定の ELEMENT または ATTRIBUTE に対する JSON コマンドインジェクションインスペクションをバイパスする必要がある場合は、緩和ルールを設定できます。
JSON コマンドのインジェクションインスペクション緩和規則の構文は次のとおりです。
bind appfw profile <profile name> –JSONCMDURL <expression> -comment <string> -isAutoDeployed ( AUTODEPLOYED | NOTAUTODEPLOYED ) -state ( ENABLED | DISABLED )
ヘッダーの正規表現の緩和ルールの例
bind appfw profile abc_json -jsoncmDURL http://1.1.1.1/hello.html
一方、以下では 1.1.1.1 でホストされているすべての URL からのリクエストが緩和されます。
bind appfw profile abc_json -jsoncmDURL http://1.1.1.1/*”
リラクゼーションを削除するには、’unbind’ を使います。
unbind appfw profile abc_json -jsoncmDURL “ http://1.1.1.1/*”
GUI を使用して JSON コマンドインジェクションチェックを設定する
JSON コマンドインジェクションチェックを設定するには、次の手順を実行します。
- [ セキュリティ] > [NetScaler Web App Firewall とプロファイル] に移動します。
- [ プロファイル] ページでプロファイルを選択し 、[ 編集] をクリックします。
- [NetScaler Web App Firewall プロファイル ]ページで、 [詳細設定] セクションに移動し、[ セキュリティチェック]をクリックします。
- [ セキュリティチェック ] セクションで、[ JSON コマンドインジェクション ] を選択し、[ アクション]の設定をクリックします。
-
[ JSON コマンドインジェクションの設定] ページで、次のパラメータを設定します。
- アクション。JSON コマンドインジェクションのセキュリティチェックに対して実行するアクションを 1 つ以上選択します。
- リクエストに含まれるものをチェックしてください。コマンドインジェクションパターンを選択して、受信リクエストにパターンがあるかどうかを確認します。
- [OK] をクリックします。
コマンドインジェクショントラフィックおよび違反統計情報の表示
NetScaler Web App Firewall Statistics ] ページには、セキュリティトラフィックとセキュリティ違反の詳細が表形式またはグラフ形式で表示されます。
コマンドインターフェイスを使用してセキュリティ統計情報を表示するには。
コマンドプロンプトで入力します:
stat appfw profile profile1
Appfw プロファイルのトラフィック統計 | レート (/s) | 合計 |
---|---|---|
リクエスト | 0 | 0 |
要求バイト数 | 0 | 0 |
レスポンス | 0 | 0 |
送信バイト数 | 0 | 0 |
中止する | 0 | 0 |
リダイレクト | 0 | 0 |
長期平均応答時間 (ミリ秒) | – | 0 |
最近の平均応答時間 (ミリ秒) | – | 0 |
HTML/XML/JSON 違反の統計情報 | レート (/s) | 合計 |
---|---|---|
開始URL | 0 | 0 |
URL を拒否する | 0 | 0 |
リファラーヘッダー | 0 | 0 |
バッファオーバーフロー | 0 | 0 |
Cookie の整合性 | 0 | 0 |
Cookie ハイジャック | 0 | 0 |
CSRF フォームタグ | 0 | 0 |
HTML クロスサイトスクリプティング | 0 | 0 |
HTML SQL インジェクション | 0 | 0 |
フィールド形式 | 0 | 0 |
フィールドの一貫性 | 0 | 0 |
クレジットカード | 0 | 0 |
セーフオブジェクト | 0 | 0 |
シグネチャ違反 | 0 | 0 |
コンテンツの種類 | 0 | 0 |
JSON サービス拒否 | 0 | 0 |
JSON SQLインジェクション | 0 | 0 |
JSON クロスサイトスクリプティング | 0 | 0 |
ファイルアップロードの種類 | 0 | 0 |
コンテンツタイプ XML ペイロードを推測 | 0 | 0 |
HTML CMD インジェクション | 0 | 0 |
XML 形式 | 0 | 0 |
XML サービス拒否 (XDoS) | 0 | 0 |
XML メッセージ検証 | 0 | 0 |
Web サービスの相互運用性 | 0 | 0 |
XML SQL インジェクション | 0 | 0 |
XML クロスサイトスクリプティング | 0 | 0 |
XML 添付ファイル | 0 | 0 |
SOAP フォールト違反 | 0 | 0 |
XML ジェネリック違反 | 0 | 0 |
違反総数 | 0 | 0 |
HTML/XML/JSON ログ統計 | レート (/s) | 合計 |
---|---|---|
URL ログの開始 | 0 | 0 |
URL ログの拒否 | 0 | 0 |
リファラーヘッダーログ | 0 | 0 |
バッファオーバーフローログ | 0 | 0 |
Cookie 整合性ログ | 0 | 0 |
Cookie ハイジャックのログ | 0 | 0 |
タグログからの CSRF | 0 | 0 |
HTML クロスサイトスクリプティングログ | 0 | 0 |
HTML クロスサイトスクリプティング変換ログ | 0 | 0 |
HTML SQL インジェクションログ | 0 | 0 |
HTML SQL 変換ログ | 0 | 0 |
フィールド形式ログ | 0 | 0 |
フィールド整合性ログ | 0 | 0 |
クレジットカード | 0 | 0 |
クレジットカード変換ログ | 0 | 0 |
セーフオブジェクトログ | 0 | 0 |
シグネチャログ | 0 | 0 |
コンテンツタイプログ | 0 | 0 |
JSON サービス拒否ログ | 0 | 0 |
JSON SQLインジェクションログ | 0 | 0 |
JSON クロスサイトスクリプティングログ | 0 | 0 |
ファイルアップロードタイプログ | 0 | 0 |
コンテンツタイプ XML ペイロードを推測 L | 0 | 0 |
JSONCMD インジェクション | 0 | 0 |
HTML コマンドインジェクションログ | 0 | 0 |
XML 形式ログ | 0 | 0 |
XML サービス拒否 (XDoS) ログ | 0 | 0 |
XML メッセージ検証ログ | 0 | 0 |
WSI ログ | 0 | 0 |
XML SQL インジェクションログ | 0 | 0 |
XML クロスサイトスクリプティングログ | 0 | 0 |
XML 添付ファイルログ | 0 | 0 |
SOAP フォールトログ | 0 | 0 |
XML 汎用ログ | 0 | 0 |
ログメッセージの総数 | 0 | 0 |
サーバエラーレスポンス統計レート (/s) | 合計 | |—|–|–| HTTP クライアントエラー (4xx Resp) | 0 | 0| HTTP サーバエラー (5xx Resp) | 0 |
HTML/XML/JSON ログ統計 | レート (/s) | 合計 |
---|---|---|
JSON コマンド注入ログ | 0 | 0 |
XML 形式のログ | 0 | 0 |
NetScaler GUIを使用したJSONコマンドインジェクションの統計情報の表示
コマンドインジェクションの統計情報を表示するには、次の手順を実行します:
- [ **セキュリティ] > [NetScaler Web App Firewall] **[プロファイル] に移動します。
- 詳細ペインで Web App Firewall プロファイルを選択し、[ 統計] をクリックします。
- NetScaler Web App Firewall統計ページには 、JSONコマンドインジェクショントラフィックと違反の詳細が表示されます。
- 表形式ビューを選択するか 、 グラフィカルビューに切り替えて 、データを表形式またはグラフィカル形式で表示できます。
JSON コマンドのインジェクション
JSON コマンド注入違反統計
JSON コマンドインジェクション用の微粒子緩和の設定
Web App Firewall には、JSON ベースのコマンドインジェクションチェックから特定の JSON キーまたは値を緩和するオプションがあります。細粒度緩和ルールを設定することで、1 つ以上のフィールドの検査を完全に回避できます。
以前は、JSON 保護チェックの緩和を設定する唯一の方法は URL 全体を指定することであり、URL 全体の検証はバイパスされていました。
JSON ベースのコマンドインジェクションセキュリティ保護により、次のことが緩和されます。
- キーネーム
- キーバリュー
JSON ベースのコマンドインジェクション保護により、特定のパターンを許可し、残りをブロックする緩和を設定できます。たとえば、Web App Firewall には現在、100 を超える 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> -valueType <keyword/SpecialString> <value Expression>
<!--NeedCopy-->
例:
bind appfw profile appprofile1 -jsoncmdurl www.example.com -key blg_cnt -isRegex NOTREGEX -valueType Keyword “cat” -isvalueRegex NOTREGEX
GUI を使用して JSON ベースのコマンドインジェクション攻撃に対する細粒度緩和ルールを構成するには
- [ アプリケーションファイアウォール] > [プロファイル] に移動し、プロファイルを選択して [ 編集] をクリックします。
- [ 詳細設定 ] ウィンドウで、[ 緩和規則] をクリックします。
- [ 緩和ルール ] セクションで、 JSON コマンドインジェクションレコードを選択し 、[ 編集] をクリックします。
- JSON コマンドインジェクション緩和規則スライダーで 、「 追加」をクリックします。
-
[JSON コマンドインジェクション緩和規則 ] ページで、次のパラメータを設定します。
- 有効
- 名前は正規表現ですか
- キー名
- URL
- 値の種類
- コメント
- リソース ID
- [Create] をクリックします。