Azure Front Door の除外リストを使用する Web Application Firewall

適用対象: ✔️ Front Door Premium

Azure Front DoorでAzure Web Application Firewallが正当な要求をブロックする場合があります。 Web アプリケーション ファイアウォール (WAF) の調整の一環として、アプリケーションの要求を許可するように WAF を構成できます。 WAF の除外リストを使用すると、WAF の評価から特定の要求属性を省略できます。 要求の残りの部分は通常として評価されます。

たとえば、Microsoft Entra ID によって認証に使用されるトークンが提供されます。 これらのトークンを要求ヘッダーで使用する場合は、1 つ以上の WAF 規則によって誤検知検出をトリガーする特殊文字を含めることができます。 ヘッダーを除外リストに追加して、WAF にヘッダーを無視するように指示できます。 WAF は、要求の他の部分で疑わしいコンテンツを引き続き検査します。

スコープの除外

除外は、次のスコープで作成できます。

  • ルール セット: これらの除外は、ルール セット内のすべてのルールに適用されます。
  • ルール グループ: これらの除外は、ルール セット内の特定のカテゴリのすべてのルールに適用されます。 たとえば、すべての SQL インジェクション ルールに適用される除外を構成できます。
  • ルール: これらの除外は、1 つのルールに適用されます。

ヒント

攻撃者がシステムを悪用する余地を誤って残さないように、除外を可能な限り狭く具体的なものにします。 除外ルールを追加する必要がある場合は、可能な限りルールごとの除外を使用します。

除外セレクター

除外セレクターは、要求で除外が適用される部分を識別します。 WAF は、要求の指定された部分で見つけたすべての検出を無視します。 1 つの除外で複数の除外セレクターを指定できます。

各除外セレクターは、一致変数、演算子、およびセレクターを指定します。 1 つの除外で複数の一致が "OR" ステートメントとして扱われます。

マッチ変数

除外に次の要求属性を追加します。

  • リクエストヘッダーの名前
  • 要求の Cookie 名
  • クエリ文字列の引数名
  • 要求本文の POST 引数名
  • 要求本文の JSON 引数名 "(DRS 2.0 以上でサポート)"

使用するフィールドの値は WAF ルールに対して評価されませんが、それらの名前は評価されます。 除外リストにより、フィールドの値の検査が無効になります。 ただし、フィールド名は引き続き評価されます。 詳細については、他の要求属性の除外に関する記事を参照してください。

演算子

完全に一致する要求ヘッダー、本文、Cookie、またはクエリ文字列属性を指定します。 また、必要に応じて、部分一致を指定できます。 一致条件には次の演算子がサポートされています。

  • Equals: 指定したセレクター値と厳密に一致するすべての要求フィールドを対象にします。 たとえば、bearerToken という名前のヘッダーを選択するには、Equals 演算子と bearerToken と設定したセレクターを使用します。
  • Starts with: 指定したセレクター値で始まるすべての要求フィールドと一致します。
  • Endts with: 指定したセレクター値で終わるすべての要求フィールドと一致します。
  • Contains: 指定したセレクター値を含むすべての要求フィールドと一致します。
  • Equals any: すべての要求フィールドと一致します。 「Equals any」演算子を使用すると、セレクター値は自動的に*に設定されます。 たとえば、 Equals any 演算子を使用して、すべての要求ヘッダーに適用される除外を構成します。

大文字小文字の区別

ヘッダー名と Cookie 名では、大文字と小文字は区別されません。 クエリ文字列、POST引数、JSON引数は、大文字と小文字を区別します。

本文コンテンツの検査

一部のマネージド ルールでは、POST 引数または JSON 引数に解析される前に、要求本文の未加工のペイロードが評価されます。 そのため、場合によっては、matchVariableName または InitialBodyContents という DecodedInitialBodyContents 値のログ エントリが表示されることがあります。

たとえば、Request body POST argsの一致変数を使用して除外を作成し、名前がFOOのPOST引数を識別して無視するセレクターを設定するとします。 matchVariableName という PostParamValue:FOO 値のログ エントリは表示されなくなります。 ただし、FOO という名前のPOST引数にルールをトリガーするテキストが含まれている場合、ログには初期本文コンテンツで検出が表示されることがあります。 現在、最初の本文コンテンツの除外を作成することはできません。

Azure Web Application Firewall のログに基づいて除外ルールを定義する

ルールをトリガーした要求部分などのブロックされた要求の詳細を、ログを使用して表示することができます。 詳細については、「Azure Web Application Firewall の監視とログ記録」を参照してください。

特定の WAF 規則によって、要求本文の要求ヘッダー、Cookie、POST 引数、クエリ文字列引数、または JSON フィールドに含まれる値から誤検知が生成されることがあります。 これらの誤検知が発生した場合は、要求の関連部分を評価から除外するようにルールを構成できます。

次の表に、WAF ログの値と、作成できる対応除外セレクターの例を示します。

WAF ログの「matchVariableName」 ポータルでのルール除外条件
CookieValue:SOME_NAME 要求の Cookie 名が SOME_NAME と等しい
ヘッダー値:SOME_NAME 要求のヘッダー名が SOME_NAME と等しい
PostParamValue:SOME_NAME 要求本文の POST 引数名が SOME_NAME と等しい
QueryParamValue:SOME_NAME クエリ文字列の引数名が SOME_NAME と等しい
JsonValue:SOME_NAME 要求本文の JSON 引数名 が SOME_NAME に等しい

JSON 要求本文の除外

DRS バージョン 2.0 以降、WAF は JSON 要求本文を検査します。 たとえば、次の JSON 要求本文を考えてみます。

{
  "posts": [
    {
      "id": 1,
      "comment": ""
    },
    {
      "id": 2,
      "comment": "\"1=1\""
    }
  ]
}

要求には SQL コメント文字シーケンスが含まれていて、WAF が SQL インジェクション攻撃の可能性があると検出します。

要求が正当であると判断した場合は、 Request body JSON args nameの一致変数、 Equalsの演算子、および posts.commentのセレクターを使用して除外を作成します。

他の要求属性を除外する

WAF ログ エントリに、前述の表にない matchVariableName 値が表示されている場合は、除外を作成できません。 たとえば、Cookie 名、ヘッダー名、POST パラメーター名、クエリ パラメーター名の除外を作成することは現在できません。

代わりに、次のいずれかのアクションを実行することを検討してください。

  • 誤検知を生成するルールを無効にする。
  • これらの要求を明示的に許可するカスタム ルールを作成する。 要求はすべての WAF 検査をバイパスします。

matchVariableName値がCookieNameHeaderNamePostParamName、またはQueryParamNameの場合は、その値ではなくフィールドの名前がルールをトリガーしたことを意味します。 ルールの除外では、これらの matchVariableName 値はサポートされません。

次のステップ