Configurar listas de exclusões de um firewall de aplicativo web
Às vezes, os Firewalls de Aplicativo Web do Azure no Azure Front Door podem bloquear uma solicitação legítima. Como parte do ajuste do seu firewall de aplicativo web (WAF), você pode configurá-lo para permitir solicitações para o seu aplicativo. As listas de exclusões do WAF permitem a você omitir atributos de solicitação específicos de uma avaliação do WAF. O restante da solicitação é avaliado como normal. Para obter mais informações sobre listas de exclusões, confira Firewall de Aplicativo Web do Azure com listas de exclusões do Front Azure Door.
Uma lista de exclusões pode ser configurada usando o Azure PowerShell, a CLI do Azure, a API REST, o Bicep, os modelos do Azure Resource Manager e o portal do Azure.
Cenário
Suponha que você tenha criado uma API. Seus clientes enviam solicitações para sua API que incluem cabeçalhos com nomes como userid
e user-id
.
Ao ajustar seu WAF, você observou que algumas solicitações legítimas foram bloqueadas porque os cabeçalhos do usuário incluíam sequências de caracteres detectadas pelo WAF como ataques de injeção de SQL. Especificamente, a ID da regra 942230 detecta os cabeçalhos de solicitação e bloqueia as solicitações. A regra 942230 faz parte do grupo de regras SQLI.
Você decide criar uma exclusão para permitir que essas solicitações legítimas passem sem que o WAF as bloqueie.
Criar uma exclusão
Abra sua política de WAF do Azure Front Door.
Selecione Regras gerenciadas>Gerenciar exclusões.
Selecione Adicionar.
Configure a seção Aplica-se a da exclusão:
Campo Valor Conjunto de regras Microsoft_DefaultRuleSet_2.0 Grupo de regras SQLI Regra 942230 Detecta tentativas de injeção de SQL condicionais Configure as condições de correspondência da exclusão:
Campo Valor Variável de correspondência Nome do cabeçalho de solicitação Operador Começa com Seletor Usuário Examine a exclusão, que deve ser semelhante à seguinte captura de tela:
Essa exclusão se aplica a todos os cabeçalhos de solicitação que começam com a palavra
user
. A condição de correspondência não diferencia maiúsculas de minúsculas, portanto, os cabeçalhos que começam comUser
também são abrangidos pela exclusão. Se a regra 942230 do WAF detectar um risco nesses valores de cabeçalho, ela ignorará o cabeçalho e avançará.Selecione Salvar.
Defina um seletor de exclusão
Use o cmdlet New-AzFrontDoorWafManagedRuleExclusionObject para definir um novo seletor de exclusão.
O exemplo a seguir identifica OS cabeçalhos de solicitação que começam com a palavra user
. A condição de correspondência não diferencia maiúsculas de minúsculas, portanto, os cabeçalhos que começam com User
também são abrangidos pela exclusão.
$exclusionSelector = New-AzFrontDoorWafManagedRuleExclusionObject `
-Variable RequestHeaderNames `
-Operator StartsWith `
-Selector 'user'
Definir uma exclusão por regra
Use o cmdlet New-AzFrontDoorWafManagedRuleOverrideObject para definir uma nova exclusão por regra, que inclui o seletor criado na etapa anterior.
O exemplo a seguir cria uma exclusão para a ID da regra 942230.
$exclusion = New-AzFrontDoorWafManagedRuleOverrideObject `
-RuleId '942230' `
-Exclusion $exclusionSelector
Aplicar a exclusão ao grupo de regras
Use o cmdlet New-AzFrontDoorWafRuleGroupOverrideObject para criar uma substituição de grupo de regras, que aplica a exclusão ao grupo de regras apropriado.
O exemplo a seguir usa o grupo de regras de SQLI porque esse grupo contém a ID de regra 942230.
$ruleGroupOverride = New-AzFrontDoorWafRuleGroupOverrideObject `
-RuleGroupName 'SQLI' `
-ManagedRuleOverride $exclusion
Configurar o conjunto de regras gerenciadas
Use o cmdlet New-AzFrontDoorWafManagedRuleObject para configurar o conjunto de regras gerenciadas, incluindo a substituição do grupo de regras criado na etapa anterior.
O exemplo a seguir configura o conjunto de regras DRS 2.0 com substituição do grupo de regras e sua exclusão.
$managedRuleSet = New-AzFrontDoorWafManagedRuleObject `
-Type 'Microsoft_DefaultRuleSet' `
-Version '2.0' `
-Action Block `
-RuleGroupOverride $ruleGroupOverride
Aplicar a configuração do conjunto de regras gerenciadas ao perfil do WAF
Use o cmdlet Update-AzFrontDoorWafPolicy para atualizar sua política do WAF de modo a incluir a configuração que você criou. Não deixe de usar o nome correto do grupo de recursos e o nome da política do WAF do seu ambiente.
Update-AzFrontDoorWafPolicy `
-ResourceGroupName 'FrontDoorWafPolicy' `
-Name 'WafPolicy'
-ManagedRule $managedRuleSet
Criar uma exclusão
Use o comando az network front-door waf-policy managed-rules exclusion add
para atualizar a política do WAF para adicionar uma nova exclusão.
A exclusão identifica os cabeçalhos de solicitação que começam com a palavra user
. A condição de correspondência não diferencia maiúsculas de minúsculas, portanto, os cabeçalhos que começam com User
também são abrangidos pela exclusão.
Não deixe de usar o nome correto do grupo de recursos e o nome da política do WAF do seu ambiente.
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
Exemplo de arquivo Bicep
O exemplo a seguir de um arquivo Bicep mostra como fazer para:
- Criar uma política de WAF do Azure Front Door.
- Habilite o conjunto de regras DRS 2.0.
- Configure uma exclusão para a regra 942230, que existe no grupo de regras SQLI. Essa exclusão se aplica a todos os cabeçalhos de solicitação que começam com a palavra
user
. A condição de correspondência não diferencia maiúsculas de minúsculas, portanto, os cabeçalhos que começam comUser
também são abrangidos pela exclusão. Se a regra 942230 do WAF detectar um risco nesses valores de cabeçalho, ela ignorará o cabeçalho e avançará.
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'
}
]
}
]
}
]
}
]
}
}
}
Próximas etapas
Saiba mais sobre o Azure Front Door.