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 Multiparte | 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/A | 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/A | 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/A | 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/A | 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/A | 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/A | 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/A | 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/A | 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/A | 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/A | 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/A | 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/A | Cabeçalho: {"Cookie": "arg1=/etc/passwd", "Cookie": "arg1=.cshrc"} |
/etc/passwd e .cshrc |
Nota
Se você criar uma exclusão usando o selectorMatchOperator EqualsAny
, tudo o que você colocar no campo seletor será convertido 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 ruleGroupName
parâmetro, o rules
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 cadeia de caracteres que o WAF deteta e assume que é maliciosa. Por exemplo, o User-Agent
cabeçalho pode incluir o 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:
Navegue até a política WAF e selecione Regras gerenciadas.
Selecione Adicionar exclusões.
Em Aplica-se a, selecione o conjunto de regras CRS ao qual aplicar a exclusão, como OWASP_3.2.
Selecione Adicionar regras e selecione as regras às quais deseja aplicar exclusões.
Configure a variável, o operador e o seletor de correspondência. 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 user
consulta contenha uma cadeia de caracteres que o 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:
Navegue até a política WAF e selecione Regras gerenciadas.
Selecione Adicionar exclusões.
Em Aplica-se a, selecione Global
Configure a variável, o operador e o seletor de correspondência. 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
- Depois de definir as configurações do WAF, você pode aprender a exibir seus logs do WAF. Para obter mais informações, consulte Application Gateway diagnostics.
- Saiba mais sobre a segurança de rede do Azure