Listas de exclusões da Firewall de Aplicações Web

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

Às vezes, o WAF pode bloquear uma solicitação que você deseja permitir para seu aplicativo. As listas de exclusão do WAF permitem omitir determinados atributos de solicitação de uma avaliação do WAF. O restante do pedido é avaliado normalmente.

Por exemplo, o Ative Directory insere tokens 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 deteção de falso positivo das regras WAF. Ao adicionar o cabeçalho a uma lista de exclusão, você pode configurar o WAF para ignorar o cabeçalho, mas o WAF ainda avalia o restante da solicitação.

Você pode configurar exclusões para serem aplicadas quando regras específicas do WAF forem avaliadas ou para serem aplicadas globalmente à avaliação de todas as regras do WAF. As regras de exclusão aplicam-se a toda a sua aplicação Web.

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

Ao configurar uma exclusão WAF, você deve especificar os atributos da solicitação que devem ser excluídos da avaliação WAF. Você pode configurar uma exclusão WAF para os seguintes atributos de solicitação:

  • Cabeçalhos do pedido
  • 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
    • String de consulta de URL args

Você pode especificar uma correspondência exata de cabeçalho de solicitação, corpo, cookie ou atributo de cadeia de caracteres de consulta. Ou, você pode especificar correspondências parciais. Use os seguintes operadores para configurar a exclusão:

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

Ao processar exclusões, o mecanismo WAF executa uma correspondência sensível a maiúsculas e minúsculas/insensível com base na tabela abaixo. Além disso, expressões regulares não são permitidas, pois seletores e corpos de solicitação XML não são suportados.

Solicitar parte do corpo CRS 3.1 e anteriores CRS 3.2 e posterior
Cabeçalho* Insensível a maiúsculas e minú Insensível a maiúsculas e minú
Biscoito* Insensível a maiúsculas e minú Sensível a maiúsculas e minú
Cadeia de caracteres de consulta* Insensível a maiúsculas e minú Sensível a maiúsculas e minú
Corpo codificado por URL Insensível a maiúsculas e minú Sensível a maiúsculas e minú
Corpo JSON Insensível a maiúsculas e minú Sensível a maiúsculas e minú
Corpo XML Não suportado Não suportado
Corpo Multipartes Insensível a maiúsculas e minú Sensível a maiúsculas e minú

*Dependendo da sua aplicação, os nomes e valores dos seus cabeçalhos, cookies e args de consulta podem diferenciar maiúsculas de minúsculas ou não.

Nota

Para obter mais informações e ajuda para solução de problemas, consulte 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 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 detetado como um ataque pelo WAF. Mas se você souber que esse é um valor legítimo para seu cenário, poderá configurar uma exclusão para o valor do cabeçalho. Para fazer isso, use a variável de correspondência RequestHeaderValues , o operador contém e o seletor (My-Header). Esta configuração interrompe a avaliação de todos os valores para o cabeçalho My-Header.

Nota

Os atributos de solicitação por chave e valores só estão disponíveis no CRS 3.2 ou mais recente e no Bot Manager 1.0 ou mais recente.

Os atributos de solicitação por nomes funcionam da mesma forma que os atributos de solicitação por valores e são incluídos para compatibilidade com versões anteriores do CRS 3.1 e versões anteriores. Recomendamos que você use atributos de solicitação por valores em vez de atributos por nomes. Por exemplo, use RequestHeaderValues em vez de RequestHeaderNames.

Por outro lado, se o WAF detetar o nome do cabeçalho (My-Header) como um ataque, você poderá configurar uma exclusão para a chave de 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 Bot Manager 1.0 ou mais recente.

Exemplos de atributos 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 Pedido de exemplo O que é excluído
Cadeias de consulta RequestArgKeys É igual a /etc/passwd Uri: http://localhost:8080/?/etc/passwd=test /etc/passwd
Cadeias de consulta RequestArgKeys IgualQualquer N/D Uri: http://localhost:8080/?/etc/passwd=test&.htaccess=test2 /etc/passwd e .htaccess
Cadeias de consulta RequestArgNames É igual a text Uri: http://localhost:8080/?text=/etc/passwd /etc/passwd
Cadeias de consulta RequestArgNames IgualQualquer N/D Uri: http://localhost:8080/?text=/etc/passwd&text2=.cshrc /etc/passwd e .cshrc
Cadeias de consulta RequestArgValues É igual a text Uri: http://localhost:8080/?text=/etc/passwd /etc/passwd
Cadeias de consulta RequestArgValues IgualQualquer N/D Uri: http://localhost:8080/?text=/etc/passwd&text2=.cshrc /etc/passwd e .cshrc
Corpo do pedido RequestArgKeys Contains sleep Corpo do pedido: {"sleep(5)": "test"} sleep(5)
Corpo do pedido RequestArgKeys IgualQualquer N/D Corpo do pedido: {".zshrc": "value", "sleep(5)":"value2"} .zshrc e sleep(5)
Corpo do pedido RequestArgNames É igual a test Corpo do pedido: {"test": ".zshrc"} .zshrc
Corpo do pedido RequestArgNames IgualQualquer N/D Corpo do pedido: {"key1": ".zshrc", "key2":"sleep(5)"} .zshrc e sleep(5)
Corpo do pedido RequestArgValues É igual a test Corpo do pedido: {"test": ".zshrc"} .zshrc
Corpo do pedido RequestArgValues IgualQualquer N/D Corpo do pedido: {"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 IgualQualquer 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 IgualQualquer 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 IgualQualquer N/D Cabeçalho: {"head1": "myvar=1234", "User-Agent": "(hydra)"} myvar=1234 e (hydra)
Cookie RequestCookieKeys Contains /etc/passwd Cabeçalho: {"Cookie": "/etc/passwdtest=hello1"} /etc/passwdtest
Cookie RequestCookieKeys IgualQualquer 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 IgualQualquer 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 IgualQualquer N/D Cabeçalho: {"Cookie": "arg1=/etc/passwd", "Cookie": "arg1=.cshrc"} /etc/passwd e .cshrc

Nota

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

Âmbitos de exclusão

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

Gorjeta

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

Exclusões por regra

Você pode configurar uma exclusão para uma regra, grupo de regras ou conjunto de regras específico. Você deve especificar a regra ou regras às quais a exclusão se aplica. Você também precisa especificar o atributo request que deve ser excluído da avaliação do WAF. Para excluir um grupo completo de regras, forneça apenas o parâmetro, o ruleGroupNamerules parâmetro 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 Bot Manager versão 1.0 ou posterior.

Exemplo

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

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

Você pode usar as seguintes abordagens para excluir o User-Agent cabeçalho 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 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 CRS ao qual 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 selecione as regras às quais deseja aplicar exclusões.

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

Você pode configurar várias exclusões.

Você também pode excluir o User-Agent cabeçalho da avaliação apenas pela regra 942270:

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

Exclusões globais

Você pode configurar uma exclusão para ser aplicada em todas as regras do WAF.

Exemplo

Suponha que você queira excluir o valor no parâmetro user que é passado na solicitação por meio da URL. Por exemplo, digamos que é comum em seu ambiente que o argumento da cadeia de caracteres de consulta contenha uma cadeia de caracteres que o user WAF vê como conteúdo mal-intencionado, portanto, ele a bloqueia. Você pode excluir todos os argumentos de cadeia de caracteres de consulta em que o nome começa com a palavra user, para que o WAF não avalie o valor do campo.

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

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

  1. Navegue até a política 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 de correspondência, o operador e o seletor. Em seguida, selecione Guardar.

Você pode configurar várias exclusões.

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

Próximos passos