Listas de exclusões do Firewall do Aplicativo Web

O WAF (firewall de aplicativo Web) do Gateway de Aplicativo do Azure fornece proteção para aplicativos Web. Este artigo descreve a configuração para listas de exclusões do WAF. Essas configurações estão na política do WAF associada ao Gateway de Aplicativo. Para saber mais sobre as políticas do WAF, confira Firewall de Aplicativo Web do Azure no Gateway de Aplicativo do Azure e Criar políticas do Firewall de Aplicativo Web para o Gateway de Aplicativo.

Às vezes, o WAF pode bloquear uma solicitação que você deseja permitir para o aplicativo. As listas de exclusões do WAF permitem a você omitir certos atributos de solicitação de uma avaliação do WAF. O restante da solicitação é avaliado como normal.

Um exemplo comum são os tokens inseridos pelo Active Directory que são usados para autenticação. Quando usados em um cabeçalho de solicitação, esses tokens podem conter caracteres especiais que podem disparar uma detecção de falso positivo nas regras do WAF. Ao adicionar o cabeçalho a uma lista de exclusões, você pode configurar o WAF para ignorar o cabeçalho, mas ele ainda avaliará o restante da solicitação.

É possível configurar exclusões a serem aplicadas durante a avaliação de regras específicas do WAF ou globalmente à avaliação de todas as regras do WAF. As regras de exclusão se aplicam a todo o aplicativo Web.

Identificar atributos de solicitação a serem excluídos

Ao configurar uma exclusão do WAF, especifique os atributos da solicitação que devem ser excluídos da avaliação do WAF. É possível configurar uma exclusão do WAF para os seguintes atributos de solicitação:

  • Cabeçalhos da solicitação
  • Solicitar cookies
  • O nome do atributo de solicitação (args) pode ser adicionado como um elemento de exclusão, como:
    • Nome do campo de formulário
    • Entidade JSON
    • Argumentos de cadeia de consulta da URL

Você pode especificar um cabeçalho de solicitação exato, corpo, cookie ou uma correspondência de atributo de cadeia de consulta. Outra opção é especificar correspondências parciais. Use os seguintes operadores para configurar a exclusão:

  • Equals: esse operador é usado para uma correspondência exata. Como exemplo, para a seleção de um cabeçalho chamado bearerToken, use o operador equals com seletor definido como bearerToken.
  • Começa com: esse operador corresponde com todos os campos que começam com o valor do seletor especificado.
  • Termina com: esse operador corresponde todos os campos de solicitação que terminam com o valor do seletor especificado.
  • Contém: esse operador corresponde com todos os campos de solicitação que contenham o valor do seletor especificado.
  • É igual a qualquer: esse operador corresponde a todos os campos de solicitação. * será o valor do seletor. Por exemplo, esse operador pode ser usado quando você não souber os valores exatos de uma determinada variável de correspondência, mas quiser garantir que o tráfego de solicitação ainda seja excluído da avaliação de regras.

Ao processar exclusões, o mecanismo WAF executará uma correspondência que diferencia maiúsculas de minúsculas/não diferencia maiúsculas de minúsculas com base na tabela abaixo. Além disso, expressões regulares não são permitidas, pois não há suporte para seletores e corpos de solicitação XML.

Parte do corpo da solicitação CRS 3.1 e versões anteriores CRS 3.2 e versões posteriores.
Cabeçalho Não diferencia maiúsculas de minúsculas Não diferencia maiúsculas de minúsculas
Cookie* Não diferencia maiúsculas de minúsculas Diferenciar maiúsculas de minúsculas
Cadeia de caracteres de consulta* Não diferencia maiúsculas de minúsculas Diferenciar maiúsculas de minúsculas
Corpo do URL-Encoded Não diferencia maiúsculas de minúsculas Diferenciar maiúsculas de minúsculas
Corpo do JSON Não diferencia maiúsculas de minúsculas Diferenciar maiúsculas de minúsculas
Corpo XML Sem suporte Sem suporte
Corpo de várias partes Não diferencia maiúsculas de minúsculas Diferenciar maiúsculas de minúsculas

*Dependendo do aplicativo, os nomes e os valores dos cabeçalhos, cookies e argumentos de consulta podem diferenciar maiúsculas de minúsculas ou não.

Observação

Para obter mais informações e ajuda para solução de problemas, confira Solução de problemas do WAF.

Solicitar atributos por chaves e valores

Ao configurar uma exclusão, você precisa determinar se deseja excluir a chave ou o valor da avaliação do WAF.

Por exemplo, suponha que suas solicitações incluam este cabeçalho:

My-Header: 1=1

O valor do cabeçalho (1=1) pode ser detectado como um ataque pelo WAF. Se você souber que esse é um valor legítimo para o seu cenário, configure uma exclusão para o valor do cabeçalho. Para fazer isso, use a variável de correspondência RequestHeaderValues, o operador contains e o seletor (My-Header). Essa configuração interrompe a avaliação de todos os valores do cabeçalho My-Header.

Observação

Os atributos de solicitação por chave e valor só estão disponíveis a partir do CRS 3.2 ou mais recente e do Gerenciador de Bot 1.0 ou mais recente.

Os atributos de solicitação por nome funcionam da mesma maneira que os atributos de solicitação por valor e são incluídos para compatibilidade com o CRS 3.1 e versões anteriores. Recomenda-se usar atributos de solicitação por valor em vez de atributos por nome. Por exemplo, use RequestHeaderValues em vez de RequestHeaderNames.

Por outro lado, se o WAF detectar o nome do cabeçalho (My-Header) como um ataque, será possível configurar uma exclusão para a chave do cabeçalho usando o atributo de solicitação RequestHeaderKeys. O atributo RequestHeaderKeys só está disponível no CRS 3.2 ou mais recente e no Gerenciador de Bot 1.0 ou mais recente.

Exemplos de atributo de solicitação

A tabela abaixo mostra alguns exemplos de como você pode estruturar sua exclusão para uma determinada variável de correspondência.

Atributo a excluir matchVariable selectorMatchOperator Seletor de exemplo Solicitação de exemplo O que é excluído
Cadeia de consulta RequestArgKeys É igual a /etc/passwd Uri: http://localhost:8080/?/etc/passwd=test /etc/passwd
Cadeia de consulta RequestArgKeys EqualsAny N/D Uri: http://localhost:8080/?/etc/passwd=test&.htaccess=test2 /etc/passwd e .htaccess
Cadeia de consulta RequestArgNames É igual a text Uri: http://localhost:8080/?text=/etc/passwd /etc/passwd
Cadeia de consulta RequestArgNames EqualsAny N/D Uri: http://localhost:8080/?text=/etc/passwd&text2=.cshrc /etc/passwd e .cshrc
Cadeia de consulta RequestArgValues É igual a text Uri: http://localhost:8080/?text=/etc/passwd /etc/passwd
Cadeia de consulta RequestArgValues EqualsAny N/D Uri: http://localhost:8080/?text=/etc/passwd&text2=.cshrc /etc/passwd e .cshrc
Corpo da solicitação RequestArgKeys Contém sleep Corpo da solicitação: {"sleep(5)": "test"} sleep(5)
Corpo da solicitação RequestArgKeys EqualsAny N/D Corpo da solicitação: {".zshrc": "value", "sleep(5)":"value2"} .zshrc e sleep(5)
Corpo da solicitação RequestArgNames É igual a test Corpo da solicitação: {"test": ".zshrc"} .zshrc
Corpo da solicitação RequestArgNames EqualsAny N/D Corpo da solicitação: {"key1": ".zshrc", "key2":"sleep(5)"} .zshrc e sleep(5)
Corpo da solicitação RequestArgValues É igual a test Corpo da solicitação: {"test": ".zshrc"} .zshrc
Corpo da solicitação RequestArgValues EqualsAny N/D Corpo da solicitação: {"key1": ".zshrc", "key2":"sleep(5)"} .zshrc e sleep(5)
Cabeçalho RequestHeaderKeys É igual a X-Scanner Cabeçalho: {"X-Scanner": "test"} X-scanner
Cabeçalho RequestHeaderKeys EqualsAny N/D Cabeçalho: {"X-Scanner": "test", "x-ratproxy-loop": "value"} X-Scanner e x-ratproxy-loop
Cabeçalho RequestHeaderNames É igual a head1 Cabeçalho: {"head1": "X-Scanner"} X-scanner
Cabeçalho RequestHeaderNames EqualsAny N/D Cabeçalho: {"head1": "myvar=1234", "User-Agent": "(hydra)"} myvar=1234 e (hydra)
Cabeçalho RequestHeaderValues É igual a head1 Cabeçalho: {"head1": "X-Scanner"} X-scanner
Cabeçalho RequestHeaderValues EqualsAny N/D Cabeçalho: {"head1": "myvar=1234", "User-Agent": "(hydra)"} myvar=1234 e (hydra)
Cookie RequestCookieKeys Contém /etc/passwd Cabeçalho: {"Cookie": "/etc/passwdtest=hello1"} /etc/passwdtest
Cookie RequestCookieKeys EqualsAny N/D Cabeçalho: {"Cookie": "/etc/passwdtest=hello1", "Cookie": ".htaccess=test1"} /etc/passwdtest e .htaccess
Cookie RequestCookieNames É igual a arg1 Cabeçalho: {"Cookie": "arg1=/etc/passwd"} /etc/passwd
Cookie RequestCookieNames EqualsAny N/D Cabeçalho: {"Cookie": "arg1=/etc/passwd", "Cookie": "arg1=.cshrc"} /etc/passwd e .cshrc
Cookie RequestCookieValues É igual a arg1 Cabeçalho: {"Cookie": "arg1=/etc/passwd"} /etc/passwd
Cookie RequestCookieValues EqualsAny N/D Cabeçalho: {"Cookie": "arg1=/etc/passwd", "Cookie": "arg1=.cshrc"} /etc/passwd e .cshrc

Observação

Se você criar uma exclusão usando o seletorMatchOperator EqualsAny, qualquer coisa que colocar no campo seletor será convertida em "*" pelo back-end quando a exclusão for criada.

Escopos de exclusão

As exclusões podem ser configuradas para se aplicar a um conjunto específico de regras do WAF, a conjuntos de regras ou globalmente em todas as regras.

Dica

É uma boa prática tornar as exclusões o mais limitadas e específicas possível, para evitar acidentalmente deixar espaço para os invasores explorarem seu sistema. Quando precisar adicionar uma regra de exclusão, use exclusões por regra sempre que possível.

Exclusões por regra

É possível configurar uma exclusão para uma regra específica, um grupo de regras ou um conjunto de regras. Especifique a regra ou as regras às quais a exclusão se aplica. Também é necessário especificar o atributo de solicitação que deve ser excluído da avaliação do WAF. Para excluir um grupo completo de regras, forneça apenas o parâmetro ruleGroupName, o parâmetro rules só é útil quando você deseja limitar a exclusão a regras específicas de um grupo.

As exclusões por regra estão disponíveis quando você usa o conjunto de regras OWASP (CRS) versão 3.2 ou posterior ou o conjunto de regras do Gerenciador de Bot versão 1.0 ou posterior.

Exemplo

Suponha que você queira que o WAF ignore o valor do cabeçalho de solicitação User-Agent. O cabeçalho User-Agent contém uma cadeia de caracteres característica que permite que os pares de protocolo de rede identifiquem o tipo de aplicativo, o sistema operacional, o fornecedor de software ou a versão de software do agente do usuário de software solicitante. Para obter mais informações, confira User-Agent.

Pode haver vários motivos para desabilitar a avaliação desse cabeçalho. Pode haver uma cadeia de caracteres que o WAF vê e supõe que seja mal-intencionada. Por exemplo, o cabeçalho User-Agent pode incluir o ataque de injeção de SQL clássico x=x em uma cadeia de caracteres. Em alguns casos, isso pode ser um tráfego legítimo. Portanto, talvez seja necessário excluir esse cabeçalho da avaliação do WAF.

É possível usar as seguintes abordagens para excluir o cabeçalho User-Agent da avaliação por todas as regras de injeção de SQL:

Para configurar uma exclusão por regra usando o portal do Azure, siga estas etapas:

  1. Navegue até a política de WAF e selecione Regras gerenciadas.

  2. Selecione Adicionar exclusões.

    Screenshot of the Azure portal that shows how to add a new per-rule exclusion for the W A F policy.

  3. Em Aplica-se a, selecione o conjunto de regras do CRS para aplicar a exclusão, como OWASP_3.2.

    Screenshot of the Azure portal that shows the per-rule exclusion configuration for the W A F policy.

  4. Selecione Adicionar regras e escolha as regras às quais você deseja aplicar as exclusões.

  5. Configure a variável, o operador e o seletor de correspondência. Em seguida, selecione Salvar.

Você pode configurar várias exclusões.

Também é possível excluir o cabeçalho User-Agent da avaliação apenas com a regra 942270:

Siga as etapas descritas no exemplo anterior e selecione a regra 942270 na etapa 4.

Exclusões globais

É possível configurar uma exclusão para se aplicar a todas as regras do WAF.

Exemplo

Suponha que você queira excluir o valor no parâmetro user que é transmitido na solicitação por meio da URL. Por exemplo, digamos que seja comum em seu ambiente o argumento de cadeia de caracteres user conter uma cadeia de caracteres que o WAF vê como conteúdo mal-intencionado e bloqueia. É possível excluir todos os argumentos de cadeia de caracteres da consulta com um nome que começa com a palavra user, para que o WAF não avalie o valor do campo.

O exemplo a seguir mostra como excluir da avaliação o argumento de cadeia de caracteres user da consulta:

Para configurar uma exclusão global usando o portal do Azure, siga estas etapas:

  1. Navegue até a política de WAF e selecione Regras gerenciadas.

  2. Selecione Adicionar exclusões.

    Screenshot of the Azure portal that shows how to add a new global exclusion for the W A F policy.

  3. Em Aplica-se a, selecione Global

    Screenshot of the Azure portal that shows the global exclusion configuration for the W A F policy.

  4. Configure a variável, o operador e o seletor de correspondência. Em seguida, selecione Salvar.

Você pode configurar várias exclusões.

Portanto, se a URL http://www.contoso.com/?user%3c%3e=joe for examinada pelo WAF, ele não avaliará a cadeia de caracteres joe, mas ainda avaliará o nome de parâmetro user%3c%3e.

Próximas etapas