Firewall de Aplicativo Web com listas de exclusões do Azure Front Door

À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.

Por exemplo, a ID do Microsoft Entra fornece tokens usados para autenticação. Quando esses tokens são usados em um cabeçalho de solicitação, eles podem conter caracteres especiais que podem disparar uma detecção de falso positivo por uma ou mais regras do WAF. Você pode adicionar o cabeçalho a uma lista de exclusões, que informa ao WAF para ignorar o cabeçalho. O WAF continua inspecionando se há conteúdo suspeito no restante da solicitação.

Escopos de exclusão

Você pode criar exclusões nos seguintes escopos:

  • Conjunto de regras: Essas exclusões se aplicam a todas as regras dentro de um conjunto de regras.
  • Grupo de regras: Essas exclusões se aplicam a todas as regras de uma determinada categoria dentro de um conjunto de regras. Por exemplo, você pode configurar uma exclusão que se aplique a todas as regras de injeção de SQL.
  • Regra: Essas exclusões se aplicam a uma única regra.

Seletores de exclusão

Os seletores de exclusão identificam as partes das solicitações às quais a exclusão se aplica. O WAF ignora as detecções encontradas nas partes especificadas da solicitação. Você pode especificar vários seletores de exclusão em uma única exclusão.

Cada seletor de exclusão especifica uma variável de correspondência, um operador e um seletor.

Variáveis de correspondência

Você pode adicionar os seguintes atributos de solicitação a uma exclusão:

  • Nome do cabeçalho de solicitação
  • Nome do cookie de solicitação
  • Nome de argumentos da cadeia de caracteres de consulta
  • Nome de argumentos POST do corpo da solicitação
  • Nome de argumentos JSON do corpo da solicitação (com suporte no DRS 2.0 ou superior)

Os valores dos campos que você usa não são avaliados em relação às regras do WAF, mas seus nomes são avaliados. As listas de exclusões desabilitam a inspeção do valor do campo. No entanto, os nomes de campo continuam sendo avaliados. Para obter mais informações, confira Excluir outros atributos da solicitação.

Operadores

Você pode especificar o cabeçalho, corpo, cookie ou atributo exato da cadeia de consulta de uma solicitação para correspondência. Outra opção é especificar correspondências parciais. Os seguintes operadores são compatíveis como critérios de correspondência:

  • Equals: corresponde a todos os campos da solicitação que correspondem exatamente ao valor do seletor especificado. Por exemplo, para selecionar um cabeçalho chamado bearerToken, use o operador Equals com o seletor definido como bearerToken.
  • Starts with: corresponde a todos os campos da solicitação que começam com o valor do seletor especificado.
  • Ends with: corresponde a todos os campos da solicitação que terminam com o valor do seletor especificado.
  • Contains: corresponde a todos os campos da solicitação que contém o valor do seletor especificado.
  • Equals any: corresponde a todos os campos da solicitação. Quando você usa o operador Equals any, o valor do seletor é definido automaticamente como *. Por exemplo, você pode usar o operador Equals any para configurar uma exclusão que se aplique a todos os cabeçalhos de solicitação.

Diferenciar maiúsculas de minúsculas

Os nomes de cabeçalho e cookie não diferenciam maiúsculas de minúsculas. Cadeias de caracteres de consulta, argumentos POST e argumentos JSON diferenciam maiúsculas de minúsculas.

Inspeção de conteúdo do corpo

Algumas das regras gerenciadas avaliam o conteúdo bruto do corpo da solicitação antes que seja analisado em argumentos POST ou argumentos JSON. Portanto, em algumas situações, você pode ver entradas de log com um valor matchVariableName de InitialBodyContents ou DecodedInitialBodyContents.

Por exemplo, suponha que você crie uma exclusão com uma variável de correspondência Request body POST args e um seletor para identificar e ignorar argumentos POST chamados FOO. Você não verá mais entradas de log com um valor matchVariableName de PostParamValue:FOO. No entanto, se um argumento POST chamado FOO contiver algum texto que dispare uma regra, o log poderá mostrar a detecção no conteúdo inicial do corpo. No momento, não é possível criar exclusões para o conteúdo inicial do corpo.

Definir regras de exclusão com base nos logs do Firewall de Aplicativo Web do Azure

Você pode usar os logs para visualizar os detalhes de uma solicitação bloqueada, incluindo as partes da solicitação que acionaram a regra. Para obter mais informações, confira Registro em Log e Monitoramento do Firewall de Aplicativo Web do Azure.

Às vezes, uma regra específica do WAF produz detecções falso positivo dos valores incluídos em um cabeçalho de solicitação, cookie, argumento POST, argumento de cadeia de caracteres de consulta ou campo JSON de um corpo da solicitação. Se essas detecções falso positivo ocorrerem, você poderá configurar a regra para excluir a parte relevante da solicitação da avaliação.

A tabela a seguir mostra valores de exemplo dos logs do WAF e os seletores de exclusão correspondentes que você poderia criar.

matchVariableName de logs do WAF Exclusão de regra no portal
CookieValue:SOME_NAME Nome do cookie de solicitação igual a SOME_NAME
HeaderValue:SOME_NAME Nome do cabeçalho de solicitação igual a SOME_NAME
PostParamValue:SOME_NAME Nome de argumentos POST do corpo da solicitação Igual a SOME_NAME
QueryParamValue:SOME_NAME Nome dos argumentos da cadeia de caracteres de consulta igual a SOME_NAME
JsonValue:SOME_NAME Nome de argumentos JSON do corpo da solicitação Igual a SOME_NAME

Exclusões em corpos de solicitação JSON

No DRS versão 2.0, os corpos de solicitação JSON são inspecionados pelo WAF. Por exemplo, considere este corpo da solicitação JSON:

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

A solicitação inclui uma sequência de caracteres de comentário de SQL, que o WAF detecta como um possível ataque de injeção de SQL.

Se você determinar que a solicitação é legítima, você poderá criar uma exclusão com uma variável de correspondência Request body JSON args name, um operador Equals e um seletor posts.comment.

Excluir outros atributos da solicitação

Se a entrada de log do WAF mostrar um valor matchVariableName que não esteja na tabela anterior, não será possível criar uma exclusão. Por exemplo, atualmente você não consegue criar exclusões de nomes de cookies, nomes de cabeçalho, nomes de parâmetros POST ou nomes de parâmetros de consulta.

Em vez disso, considere realizar uma das seguintes ações:

  • Desabilite as regras que dão falsos positivos.
  • Crie uma regra personalizada que permita explicitamente essas solicitações. As solicitações ignoram toda a inspeção do WAF.

De modo particular, quando o valor matchVariableName é CookieName, HeaderName, PostParamName ou QueryParamName, significa que o nome do campo, e não o valor, disparou a regra. No momento, a exclusão de regra não dá suporte para esses valores matchVariableName.

Próximas etapas