WAF_Rule
連鎖ルール内のルールの設定
鎖ルールは追加、編集、削除、そして複製が可能です。 ルールとは、着信または発信 HTTP(S) トラフィックに対して確認される条件です。 それぞれの連鎖ルールは、1つ以上の設定されたルールを持つことができ、使用する前に最低1つのルールを持つ必要があります。
Figure 12:45 ルールの追加ページ
ルールにより、管理者は肯定セキュリティ モデルと否定セキュリティ モデルの両方を利用できます。 肯定セキュリティ モデルでは、ポリシーは許可する既知のトラフィックのみで記述され、それ以外すべてを遮断します。
ルールには、いくつかの構成要素があります。
• 変数 - これらは、正当または不正なトラフィックを区別する支援をする、ウェブ アプリケーション ファイアウォールによって走査されるHTTPプロトコルのエンティティです。 複数の変数を「値」 フィールド内に設定された値に対して照合することができます。 ’+’ と’-’ ボタンにより、「変数」 ドロップダウン リストから変数を追加する、また、それらを選択済み変数のリストから削除することができます。 指定した値と照合することを要求するために、複数の変数を結合させることができます。 複数の変数が設定された場合は、ルールは設定した変数のうちのどれか1つが対象の値に一致するかどうか照合されます。 変数の詳細情報については、変数について を参照してください。
• 演算子 - これらは、計算および文字列演算子です。 「否定」 チェックボックスは、設定した条件を除いたどんな値にも一致させるために使われる、逆演算子です。演算子の詳細情報については、演算子について を参照してください。
• 値 - このエンティティには数字、そのままの文字、または正規表現が使用可能で、走査される対象と比較されます。 これは、指定された演算子に従って、設定された変数の値と比較されます。
• 2つ以上の値と変数を比較するために、複数の値を 「値」 フィールドに空白で区切って入力して、「キーワード一致」 演算子を選択できます。 「キーワード一致」 演算子を選択した場合は、空白区切りのみ動作します。
• 回避対策 - このフィールドにより、特に回避対策の強化を目的とした、「演算子」フィールドによってサポートされている以上の対策を適用できます。これらの対策の詳細については、回避対策についてを参照してください。
以下のセクションで、ルールについての詳細情報を提供します。
• 変数について
• 演算子について
• 回避対策について
• ルールの削除
• ルールの複製
「変数」 ドロップダウン リストで変数を選択することで、その変数に関する詳細情報を、「ヒント/ヘルプ」 サイドバーに表示することができます。 このサイドバーは、それぞれの変数がいつ使用されて、HTTPプロトコルのどこで見つけられるかを説明します。
「回避対策」ドロップダウン リストの項目も、選択すると詳細情報が「ヒント / ヘルプ」サイドバーに表示されます。
このサイドバーはまた、状況感知検索を提供します。 変数を選択してから、特定のキーワードを検索すると、検索結果は変数に関連するものだけになります。
変数は、正当または不正なトラフィックを区別する支援をする、ウェブ アプリケーション ファイアウォールによって走査されるHTTPプロトコルのエンティティです。 複数の変数を「値」 フィールド内に設定された値に対して照合することができます。 ’+’ と’-’ ボタンにより、「変数」 ドロップダウン リストから変数を追加する、また、それらを選択済み変数のリストから削除することができます。
指定した値と照合することを要求するために、複数の変数を結合させることができます。 複数の変数が設定された場合は、ルールは設定した変数のうちのどれか1つが対象の値に一致するかどうか照合されます。
変数は、単一の値または集合で表現できます。 変数を 「パラメータ値」 のような集合で表現した場合は、集合内の特定の変数を、その名前を選択用テキストボックスに入力して コロン(:)の右側に付加することによって設定できます。 例えば、「URI」 または 「ホスト」 変数に対する値は各HTTP(S)要求内で一意です。 そのような変数に対しては、選択用テキストボックスは表示されません。 「要求ヘッダ値」 や 「応答ヘッダ名」 といったその他の変数は、集合を表現します。
集合自身を入力に対して試験する必要がある場合は、選択用テキストボックスを空のままにします。 しかしながら、集合内の特定項目の値を検索する必要がある場合は、選択用テキストボックスにその項目を指定します。 例えば、HTTP(S)要求内に password パラメータが存在するかどうかを試験する必要がある場合は、「パラメータ名」 変数を設定して、選択用テキストボックスを空のままにします。 「演算子」 を「文字列一致」 に、そして「値」 を password に設定します。 しかし、このpassword パラメータの値が特定の文字列 (例えば”foo”) と一致しているかどうかを確認したい場合は、「パラメータ値」 変数を選択して、選択用テキストボックスにpassword を設定します。 そして「値」 フィールドに foo を設定します。
Table 16 ルール内で使用される変数
|
多くの計算および文字列演算子があります。 「否定」 チェックボックスは、設定した条件を除いたどんな値にも一致させるために使われる、逆演算子です。
これらの演算子は、「回避対策」と組み合わせて使用できます。例えば、「文字列一致」演算子を、「回避対策」内の「小文字変換」または「URI パスの正規化」とともに使うことができます。
表 2 で、ルールで使用することができる演算子を説明します。
Table 17 ルールの演算子
|
回避対策は、入力が指定された値に対して照合される前に、選択された変数によって特定された入力に適用されます。例えば、「文字列長」の対策を使用すると、一致した入力の長さを計算して、それを比較に使うことができます。ウェブ アプリケーション ファイアウォールのルールをバイパスするために入力をエンコードしようとする、ハッカーの企てを阻止するために使われる回避対策もあります。リストの中の回避対策を選択すると、その対策に関する詳細情報が「ヒント / ヘルプ」サイドバーに表示されます。
回避対策は、通常の演算子と組み合わせて使用できます。「回避対策」フィールドでは、入力をそのままにする「なし」の対策を含む、10 種類の対策が選択できます。
複数の回避対策を同時に選択して個々に適用することができます。Ctrl キーを押しながら次の対策を選択することで、複数の対策が選択できます。ルール内で「なし」の対策をその他の対策と同時に選択した場合は、入力はそのままの状態で比較され、また、別の対策によってデコードまたは変換された後にも比較されます。Table 18 に、ルールで使用できる回避対策の説明を示します。
|
このセクションでは、対回避手法をさらに深く理解できるように、ポジティブおよびネガティブのセキュリティ モデルの例と、回避対策の使用方法を示すいくつかの例を紹介します。
例 - 肯定セキュリティモデル: 不正ログインの遮断
パスワードの長さが 8 文字未満だった場合に、アプリケーション オフロードされたウェブ サイトへのログインを防ぐには、以下の 2 つのルールを持つ連鎖ルールを作成します。
1.: 「変数」 として 「ホスト」 を選択し、「+」 を選択してこれを追加します。「演算子」 として 「文字列一致」 を設定し、「値」 にポータルの仮想ホスト名を設定します。 これは、ログイン要求のホスト ヘッダが防御しようとしているサイトに一致することを確認します。 この場合、連鎖ルールは 1 サイトにのみ適用されます。
2.: 「変数」 として 「パラメータ値」 を選択し、選択用フィールドに password を入力して、「+」 を選択してこの変数と選択した項目をルールに追加します。「演算子」 として 「< (未満)」 を設定し、「値」 に 8 を設定します。 パスワード フォーム パラメータの長さを計算するために、「回避対策」リストで「文字列長」を選択します。
この連鎖ルールの動作は 「防御」 に設定します。 Figure 12:46 は、この例の連鎖ルールを示します。
Figure 12:46 連鎖ルールの例 - 不正ログインの遮断
例 - 肯定セキュリティモデル: 好ましくないパラメータを持つフォーム提出の遮断
この連鎖ルールは、フォームがformId 以外の要求パラメータを持つ場合と、formId の値が 4 文字を超える数字を含む場合にフォーム提出を遮断します。 これを完了するには、以下の 2 つの連鎖ルールを作成する必要があります。
1.: 1 つ目の連鎖ルールは、以下の 2 つのルールを持ちます。
– 1 つ目のルールは、フォームが提出された URL を確認します。
– 2 つ目のルールは、「パラメータ名」 が正しいパラメータの名前である formId と一致していないかを確認します。 これは、「文字列一致」 演算子を、逆転の 「否定」 チェックボックスを選択して使います。
2.: 2 つ目の連鎖ルールは、以下の 2 つのルールを持ちます。
– 1 つ目のルールは、フォームが提出された URL を確認します。
– 2 つ目のルールは、「パラメータ値:formId」 変数に含まれる値が、1 文字から 4 文字の数字のどれかを含むものと照合するため、正規表現の ^\d{1,4}$ と一致するかどうかを確認します。 ルールが1 文字から 4 文字の数字を含まないものすべてに一致するように、逆転の 「否定」 チェックボックスを選択して使います
例 - 否定セキュリティモデル: フォームへの悪意のある入力の遮断
フォームへの悪意のある入力を遮断するには、以下の 2 つのルールを持つ連鎖ルールを作成します。
1.: 1 つ目のルールは、フォームの URL を確認します。
2.: 2 つ目のルールは、フォーム パラメータの shell_cmd と、不正な入力の traceroute を確認します。
例 - URL デコードと なし の使用
もしもハッカーが、要求 URI が CR と LF 文字 (キャリッジ リターンとライン フィード)に対して走査されていることを知ると、このハッカーはそれらの文字を、要求に追加する前にURL エンコードを実行することで、要求内に巧妙に挿入しようと試行するかもしれません。 そうすると、このURI は HTTP 応答スプリッティング攻撃の開始に使われる可能性がある、%0D と %0A 文字を含みます。 「URL デコード」と「URL デコード (ユニコード)」の対策は、スキャンした入力を、照合対象として設定した値と比較する前にデコードすることで、この種の攻撃を阻止するために使用できます。
具体的には、要求が http://www.host.com/foo%20bar/ という URI に対して行われ、「URL デコード」の対策が選択されている場合、スキャンされた URI はデコード後、http://www.host.com/foo bar/ となり、安全に照合できます。エンコードしていない要求に加えてエンコードした要求を送信するハッカーを阻止するために、管理者はルールに「なし」 と 「URL デコード」 オプションを選択できます。
例 - パラメータ値で小文字変換と URL デコードの使用
管理者が、「パラメータ値」 変数の内容が、値 foo bar と一致しているかどうかの確認を、そのような要求を遮断するために望んでいます。 バックエンド アプリケーションが大文字小文字を区別する入力 (foo bar と FOO BAR) を受け入れるので、ハッカーは要求内の foo BAR を通過させ、ルールを回避することができます。 この回避行為を阻止するために、管理者は「小文字変換」の対策を指定して、値を「foo bar」のようにすべて小文字で設定します。 これにより、すべての要求パラメータ値は小文字に変換されて、大文字小文字の区別が無い確認のために、値と比較されます。
同様に、ハッカーは一般的にブラウザにより使用される URL エンコードされた形である、foo%20BAR を通過させることができます。 この回避行為を阻止するために、管理者は「URL デコード」の対策を指定して要求エンティティに適用します。入力の foo%20BAR は、foo BAR に URL デコードされます。 入力が既に foo BAR の場合は、URL デコードは適用されません。
例 - パラメータ値:ID で文字列長と URL デコードの使用
デコードされた入力に対して比較することで、管理者は「文字列長」の対策を使用して、入力の長さを対応する変数と比較することができます。例えば、ウェブ アプリケーションの「ID」パラメータが 4 文字以下でなければならない場合、管理者はまず、「変数」フィールドで「パラメータ値」を選択し、選択フィールドに「ID」と入力して、「+」を選択して変数と選択した項目をルールに追加します。続いて、「値」フィールドに 4 と入力し、「演算子」リストで「>」を選択して、「回避対策」リストで「URL デコード」と「文字列長」の両方を選択します。
連鎖ルールからルールを削除するには、以下の手順に従います。
1. 「ウェブ アプリケーション ファイアウォール > ルール」ページで、削除したいルールがある連鎖ルールの「設定」 列の連鎖ルールの編集アイコン
を選択します。 連鎖ルールのページが開きます。
2. 削除したいルールの「設定」 列の削除アイコン
を選択します。
3. 確認のダイアログボックスで、「OK」 を選択します。
4. 「適用」 を選択します。
ルールを複製するには、以下の手順に従います。
1. 「ウェブ アプリケーション ファイアウォール > ルール」ページで、複製したいルールがある連鎖ルールの「設定」 列の連鎖ルールの編集アイコン
を選択します。 連鎖ルールのページが開きます。
2. 複製したいルールの「設定」 列の複製アイコン
を選択します。
3. 確認のダイアログボックスで、「OK」 を選択します。
これで、ルールを編集してカスタマイズできるようになりました。 ルールの追加と編集 を参照してください。
連鎖ルールのルールを追加または編集するには、以下の手順に従います。
1. 「ウェブ アプリケーション ファイアウォール > ルール」ページで、ルールを追加または編集したい連鎖ルールの「設定」 列の連鎖ルールの編集アイコン
を選択します。 連鎖ルールのページが開きます。
2. 新しいルールを追加するには 「ルールの追加」ボタンを選択、ルールを編集するには、編集したいルールの「設定」 列の編集アイコンを選択します。
3. ルールの追加ページまたは、ルールを編集するためのページで、「変数」 ドロップダウン リストから変数を選択します。 利用可能な変数の情報については、変数について を参照してください。
4. 選択した変数が変数の集合の場合は、「変数」 フィールドの右側に選択用フィールドが表示されます。 集合の特定のメンバに対して比較したい場合は、その項目の名前を選択用フィールドに入力します。
集合自身を入力に対して試験する必要がある場合は、選択用テキストボックスを空のままにします。 例えば、要求内に特定のパラメータが存在するかどうか試験するには、「パラメータ名」 変数を選択して、「値」 フィールド (変数の選択用フィールドではない) にその特定のパラメータ名を入力します。
を選択して、変数をルールに追加します。 さらに変数を追加するには、2. から 5. を繰り返します。
また、変数を削除するには、大きいテキストボックス内で対象を選択してから、マイナス ボタン
を選択します。
6. 「演算子」 ドロップダウン リストから、文字列または計算の演算子を選択します。 逆演算を行うには、「否定」 チェックボックスを選択します。
7. 「値」 フィールドに、走査される HTTP(S) 入力内の選択した変数と比較する値を入力します。 「キーワード一致」 演算子を選択する場合は、複数の値それぞれを空白で区切って入力することで、入力を複数の値と比較することができます。
8. 「回避対策」リストから、1 つ以上の対策を選択します。複数の対策を選択するには、キーボードの Ctrl キーを押しながら選択します。
9. 終了後に 「適用」 を選択します。