Web アプリケーション ファイアウォールの除外リストを構成する

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

除外リストを構成するには、Azure PowerShellAzure CLIREST API、Bicep、Azure Resource Manager テンプレート、Azure portal を使用します。

シナリオ

API を作成済みであるとします。 クライアントは、useriduser-id のような名前を持つヘッダーを含む要求を API に送信します。

WAF の調整中に、SQL インジェクション攻撃として WAF が検出した文字シーケンスがユーザー ヘッダーに含まれていたため、一部の正当な要求がブロックされていることがわかりました。 具体的には、規則 ID 942230 で要求ヘッダーが検出され、要求がブロックされます。 規則 942230 は、SQLI 規則グループの一部です。

WAF によってブロックされることなく、これらの正当な要求のパススルーを許可するために除外を作成することにしました。

除外を作成する

  1. Azure Front Door の WAF ポリシーを開きます。

  2. [マネージド ルール]>[除外の管理] の順に選択します。

    [除外の管理] ボタンが強調表示されている、WAF ポリシーの [マネージド ルール] ページを示す Azure portal のスクリーンショット。

  3. [追加] を選択します。

    除外リストの [追加] ボタンがある Azure portal のスクリーンショット。

  4. 除外の [適用対象] セクションを次のように構成します。

    フィールド
    [ルール セット] Microsoft_DefaultRuleSet_2.0
    規則グループ SQLI
    ルール 942230 条件付き SQL インジェクション試行を検出します
  5. 除外一致条件を構成します。

    フィールド
    一致変数 要求ヘッダーの名前
    演算子 次で始まる
    セレクター User
  6. 除外を確認します。次のスクリーンショットのようになります。

    除外の構成を表示している Azure portal のスクリーンショット。

    この除外は、単語 user で始まるすべての要求ヘッダーに適用されます。 一致条件では大文字と小文字が区別されないため、User で始まるヘッダーも除外の対象となります。 WAF 規則 942230 がこれらのヘッダー値のリスクを検出した場合、ヘッダーは無視され、次に進みます。

  7. [保存] を選択します。

除外セレクターを定義する

New-AzFrontDoorWafManagedRuleExclusionObject コマンドレットを使用して、新しい除外セレクターを定義します。

次の例では、単語 user で始まる要求ヘッダーを特定します。 一致条件では大文字と小文字が区別されないため、User で始まるヘッダーも除外の対象となります。

$exclusionSelector = New-AzFrontDoorWafManagedRuleExclusionObject `
  -Variable RequestHeaderNames `
  -Operator StartsWith `
  -Selector 'user'

ルールごとの除外を定義する

New-AzFrontDoorWafManagedRuleOverrideObject コマンドレットを使用して、前の手順で作成したセレクターを含む規則ごとの新しい除外を定義します。

次の例では、規則 ID 942230 の除外を作成します。

$exclusion = New-AzFrontDoorWafManagedRuleOverrideObject `
  -RuleId '942230' `
  -Exclusion $exclusionSelector

規則グループに除外を適用する

New-AzFrontDoorWafRuleGroupOverrideObject コマンドレットを使用して、適切な規則グループに除外を適用する規則グループのオーバーライドを作成します。

次の例では、SQLI ルール グループを使用します。このグループにはルール ID 942230 が含まれているためです。

$ruleGroupOverride = New-AzFrontDoorWafRuleGroupOverrideObject `
  -RuleGroupName 'SQLI' `
  -ManagedRuleOverride $exclusion

マネージド規則セットを構成する

New-AzFrontDoorWafManagedRuleObject コマンドレットを使用して、前の手順で作成した規則グループのオーバーライドを含めて、マネージド規則セットを構成します。

次の例では、ルール グループのオーバーライドとその除外を使用して DRS 2.0 ルール セットを構成します。

$managedRuleSet = New-AzFrontDoorWafManagedRuleObject `
  -Type 'Microsoft_DefaultRuleSet' `
  -Version '2.0' `
  -Action Block `
  -RuleGroupOverride $ruleGroupOverride

WAF プロファイルにマネージド規則セットの構成を適用する

作成した構成を含むように WAF ポリシーを更新するには、Update-AzFrontDoorWafPolicy コマンドレットを使用します。 ご使用の環境の正しいリソース グループ名と WAF ポリシー名を使用していることを確認します。

Update-AzFrontDoorWafPolicy `
  -ResourceGroupName 'FrontDoorWafPolicy' `
  -Name 'WafPolicy'
  -ManagedRule $managedRuleSet

除外を作成する

az network front-door waf-policy managed-rules exclusion add コマンドを使用して WAF ポリシーを更新し、新しい除外を追加します。

この除外は、単語 user で始まる要求ヘッダーを特定します。 一致条件では大文字と小文字が区別されないため、User で始まるヘッダーも除外の対象となります。

ご使用の環境の正しいリソース グループ名と WAF ポリシー名を使用していることを確認します。

az network front-door waf-policy managed-rules exclusion add \
  --resource-group FrontDoorWafPolicy \
  --policy-name WafPolicy \
  --type Microsoft_DefaultRuleSet \
  --rule-group-id SQLI \
  --rule-id 942230 \
  --match-variable RequestHeaderNames \
  --operator StartsWith \
  --value user

Bicep ファイルの例

次の Bicep ファイル例では、以下の方法を示しています。

  • Azure Front Door の WAF ポリシーを作成します。
  • DRS 2.0 規則セットを有効にします。
  • SQLI 規則グループ内に存在する規則 942230 の除外を構成します。 この除外は、単語 user で始まるすべての要求ヘッダーに適用されます。 一致条件では大文字と小文字が区別されないため、User で始まるヘッダーも除外の対象となります。 WAF 規則 942230 がこれらのヘッダー値のリスクを検出した場合、ヘッダーは無視され、次に進みます。
param wafPolicyName string = 'WafPolicy'

@description('The mode that the WAF should be deployed using. In "Prevention" mode, the WAF will block requests it detects as malicious. In "Detection" mode, the WAF will not block requests and will simply log the request.')
@allowed([
  'Detection'
  'Prevention'
])
param wafMode string = 'Prevention'

resource wafPolicy 'Microsoft.Network/frontDoorWebApplicationFirewallPolicies@2022-05-01' = {
  name: wafPolicyName
  location: 'Global'
  sku: {
    name: 'Premium_AzureFrontDoor'
  }
  properties: {
    policySettings: {
      enabledState: 'Enabled'
      mode: wafMode
    }
    managedRules: {
      managedRuleSets: [
        {
          ruleSetType: 'Microsoft_DefaultRuleSet'
          ruleSetVersion: '2.0'
          ruleSetAction: 'Block'
          ruleGroupOverrides: [
            {
              ruleGroupName: 'SQLI'
              rules: [
                {
                  ruleId: '942230'
                  enabledState: 'Enabled'
                  action: 'AnomalyScoring'
                  exclusions: [
                    {
                      matchVariable: 'RequestHeaderNames'
                      selectorMatchOperator: 'StartsWith'
                      selector: 'user'
                    }
                  ]
                }
              ]
            }
          ]
        }
      ]
    }
  }
}

次のステップ

Azure Front Door の詳細を確認します。