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

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

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

スコープの除外

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

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

除外セレクター

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

各除外セレクターは、一致変数、演算子、セレクターを指定します。

一致変数

除外に、次の要求属性を追加できます。

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

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

演算子

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

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

大文字小文字の区別

ヘッダーと cookie の名前では大文字と小文字は区別されません。 クエリ文字列、POST 引数、および JSON 引数では、大文字と小文字が区別されます。

本文コンテンツの検査

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

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

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

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

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

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

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

JSON 要求本文の除外

DRS バージョン 2.0 から、JSON 要求本文は WAF によって検査されます。 たとえば、次の JSON 要求本文を考えてみます。

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

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

要求が正当であると判断した場合は、"要求本文の JSON 引数名" という一致変数、"Equals" という演算子、"post.comment" というセレクターを使用して除外を作成できます。Request body JSON args nameEqualsposts.comment

他の要求属性を除外する

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

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

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

特に、matchVariableName 値が CookieNameHeaderNamePostParamName、または QueryParamName のときは、フィールドの値ではなく名前がルールをトリガーしたことを意味します。 現時点では、これらの matchVariableName でルールの除外はサポートされていません。

次のステップ