Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Se o WAF (Firewall de Aplicativo Web) estiver bloqueando solicitações que devem ser permitidas, há algumas etapas que você pode seguir.
Comece revisando a visão geral do WAF e a documentação de configuração do WAF e verifique se o monitoramento do WAF está habilitado. Esses artigos explicam como o WAF opera, como os conjuntos de regras funcionam e como acessar os logs do WAF.
Os conjuntos de regras do OWASP são projetados para serem rigorosos e ajustados para atender às necessidades específicas do aplicativo ou da organização que usa o WAF. É totalmente normal, e esperado em muitos casos, criar exclusões, personalizar regras e, inclusive, desativar regras que podem estar causando problemas ou falsos positivos. As políticas por site e por URI permitem que essas alterações afetem apenas sites/URIs específicos. Portanto, as alterações não devem afetar outros sites que podem não estar enfrentando os mesmos problemas.
Entenda os logs do WAF
A finalidade dos logs do WAF é mostrar todas as solicitações que tenham correspondência WAF ou sejam bloqueadas por ele. É um razão de todas as solicitações avaliadas que são correspondidas ou bloqueadas. Caso note que o WAF bloqueia uma solicitação que não deveria (um falso positivo), tem algumas coisas que você pode fazer. Primeiro, restrinja e localize a solicitação específica. Examine os logs para encontrar o URI específico, o carimbo de data/hora ou a ID de transação da solicitação. Ao encontrar as entradas de log relacionadas, é possível começar a tratar dos falsos positivos.
Por exemplo, digamos que você tenha um tráfego legítimo contendo a cadeia de caracteres 1=1
que você deseja que passe pelo WAF. Se você testar a solicitação, o WAF bloqueará o tráfego que contém a cadeia de caracteres 1=1
em qualquer parâmetro ou campo. Essa cadeia de caracteres é frequentemente associada a um ataque de injeção de SQL. É possível analisar os logs e ver o carimbo de data/hora da solicitação, além das regras que foram bloqueadas/correspondidas.
No exemplo a seguir, é possível ver que quatro regras são disparadas durante a mesma solicitação (usando o campo TransactionId). A primeira diz que correspondeu porque o usuário usou uma URL numérica/IP para a solicitação, o que aumenta a pontuação da anomalia em três, pois é um aviso. A próxima regra correspondente é 942130, que é a correta. Você pode ver a 1=1
no campo details.data
. Isso aumenta ainda mais a pontuação de anomalias, novamente em três, é também consiste em um aviso. Em geral, cada regra que tem a ação Correspondente aumenta a pontuação de anomalias e, agora, a pontuação de anomalias seria seis. Para obter mais informações, consulte Modo de pontuação de anomalias.
As duas entradas de log finais mostram que a solicitação foi bloqueada porque a pontuação de anomalias foi alta o suficiente. Essas entradas têm uma ação diferente das outras duas. Elas mostram que realmente bloquearam a solicitação. Essas regras são obrigatórias e não podem ser desabilitadas. Elas não devem ser consideradas regras, mas a infraestrutura principal dos internos do WAF.
{
"resourceId": "/SUBSCRIPTIONS/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/RESOURCEGROUPS/MYRESOURCEGROUP/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/DEMOWAF-V2",
"operationName": "ApplicationGatewayFirewall",
"category": "ApplicationGatewayFirewallLog",
"properties": {
"instanceId": "appgw_3",
"clientIp": "203.0.113.139",
"clientPort": "",
"requestUri": "\/",
"ruleSetType": "OWASP_CRS",
"ruleSetVersion": "3.0.0",
"ruleId": "920350",
"message": "Host header is a numeric IP address",
"action": "Matched",
"site": "Global",
"details": {
"message": "Warning. Pattern match \\\"^[\\\\\\\\d.:]+$\\\" at REQUEST_HEADERS:Host. ",
"data": "40.90.218.160",
"file": "rules\/REQUEST-920-PROTOCOL-ENFORCEMENT.conf\\\"",
"line": "791"
},
"hostname": "vm000003",
"transactionId": "AcAcAcAcAKH@AcAcAcAcAyAt"
}
}
{
"resourceId": "/SUBSCRIPTIONS/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/RESOURCEGROUPS/MYRESOURCEGROUP/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/DEMOWAF-V2",
"operationName": "ApplicationGatewayFirewall",
"category": "ApplicationGatewayFirewallLog",
"properties": {
"instanceId": "appgw_3",
"clientIp": "203.0.113.139",
"clientPort": "",
"requestUri": "\/",
"ruleSetType": "OWASP_CRS",
"ruleSetVersion": "3.0.0",
"ruleId": "942130",
"message": "SQL Injection Attack: SQL Tautology Detected.",
"action": "Matched",
"site": "Global",
"details": {
"message": "Warning. Pattern match \\\"(?i:([\\\\\\\\s'\\\\\\\"`\\\\\\\\(\\\\\\\\)]*?)([\\\\\\\\d\\\\\\\\w]++)([\\\\\\\\s'\\\\\\\"`\\\\\\\\(\\\\\\\\)]*?)(?:(?:=|\\u003c=\\u003e|r?like|sounds\\\\\\\\s+like|regexp)([\\\\\\\\s'\\\\\\\"`\\\\\\\\(\\\\\\\\)]*?)\\\\\\\\2|(?:!=|\\u003c=|\\u003e=|\\u003c\\u003e|\\u003c|\\u003e|\\\\\\\\^|is\\\\\\\\s+not|not\\\\\\\\s+like|not\\\\\\\\s+regexp)([\\\\\\\\s'\\\\\\\"`\\\\\\\\(\\\\\\\\)]*?)(?!\\\\\\\\2)([\\\\\\\\d\\\\\\\\w]+)))\\\" at ARGS:text1. ",
"data": "Matched Data: 1=1 found within ARGS:text1: 1=1",
"file": "rules\/REQUEST-942-APPLICATION-ATTACK-SQLI.conf\\\"",
"line": "554"
},
"hostname": "vm000003",
"transactionId": "AcAcAcAcAKH@AcAcAcAcAyAt"
}
}
{
"resourceId": "/SUBSCRIPTIONS/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/RESOURCEGROUPS/MYRESOURCEGROUP/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/DEMOWAF-V2",
"operationName": "ApplicationGatewayFirewall",
"category": "ApplicationGatewayFirewallLog",
"properties": {
"instanceId": "appgw_3",
"clientIp": "203.0.113.139",
"clientPort": "",
"requestUri": "\/",
"ruleSetType": "",
"ruleSetVersion": "",
"ruleId": "0",
"message": "Mandatory rule. Cannot be disabled. Inbound Anomaly Score Exceeded (Total Score: 8)",
"action": "Blocked",
"site": "Global",
"details": {
"message": "Access denied with code 403 (phase 2). Operator GE matched 5 at TX:anomaly_score. ",
"data": "",
"file": "rules\/REQUEST-949-BLOCKING-EVALUATION.conf\\\"",
"line": "57"
},
"hostname": "vm000003",
"transactionId": "AcAcAcAcAKH@AcAcAcAcAyAt"
}
}
{
"resourceId": "/SUBSCRIPTIONS/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/RESOURCEGROUPS/MYRESOURCEGROUP/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/DEMOWAF-V2",
"operationName": "ApplicationGatewayFirewall",
"category": "ApplicationGatewayFirewallLog",
"properties": {
"instanceId": "appgw_3",
"clientIp": "203.0.113.139",
"clientPort": "",
"requestUri": "\/",
"ruleSetType": "",
"ruleSetVersion": "",
"ruleId": "0",
"message": "Mandatory rule. Cannot be disabled. Inbound Anomaly Score Exceeded (Total Inbound Score: 8 - SQLI=5,XSS=0,RFI=0,LFI=0,RCE=0,PHPI=0,HTTP=0,SESS=0): SQL Injection Attack: SQL Tautology Detected.",
"action": "Blocked",
"site": "Global",
"details": {
"message": "Warning. Operator GE matched 5 at TX:inbound_anomaly_score. ",
"data": "",
"file": "rules\/RESPONSE-980-CORRELATION.conf\\\"",
"line": "73"
},
"hostname": "vm000003",
"transactionId": "AcAcAcAcAKH@AcAcAcAcAyAt"
}
}
Corrigir falsos positivos
Com essas informações e o conhecimento de que a regra 942130 é a que correspondeu à cadeia de caracteres 1=1
, você pode fazer algumas coisas para impedir que isso bloqueie o tráfego:
Use uma lista de exclusão. Para obter mais informações sobre listas de exclusão, consulte Listas de exclusão do WAF.
Desabilite a regra.
Usar uma lista de exclusões
Para tomar uma decisão embasada sobre a manipulação de um falso positivo, é importante se familiarizar com as tecnologias usadas pelo aplicativo. Por exemplo, digamos que não haja um SQL Server em sua pilha de tecnologia e que você esteja obtendo falsos positivos relacionados a essas regras. Desabilitar essas regras não necessariamente reduz a segurança.
Um benefício de usar uma lista de exclusão é que somente uma parte específica de uma solicitação está sendo desabilitada. No entanto, isso significa que uma exclusão específica é aplicável a todo o tráfego que passa pelo WAF, pois ela é uma configuração global. Por exemplo, isso pode gerar um problema caso 1=1 seja uma solicitação válida no corpo de um determinado aplicativo, mas não no de outros. Outro benefício é poder escolher entre a exclusão do corpo, dos cabeçalhos e dos cookies quando uma determinada condição é atendida, em vez de excluir a solicitação inteira.
Ocasionalmente, há casos em que parâmetros específicos podem ser passados ao WAF de maneira não intuitiva. Por exemplo, há um token que é passado ao autenticar usando a ID do Microsoft Entra.
__RequestVerificationToken geralmente é transmitido como um cookie de solicitação. Porém, em alguns casos em que os cookies estão desabilitados, esse token também é passado como um atributo de solicitação ou arg
. Se isso acontecer, será necessário garantir que __RequestVerificationToken também seja adicionado à lista de exclusões como um Nome de atributo de solicitação.
Neste exemplo, você deseja excluir o Nome do atributo de solicitação igual a text1. Isso é aparente porque você pode ver o nome do atributo nos logs de firewall: dados: dados correspondidos: 1=1 encontrado em ARGS:text1: 1=1. O atributo é text1. Você também pode encontrar esse nome de atributo de outras maneiras. Para isso, confira Localizar nomes de atributo de solicitação.
Você pode criar exclusões para o WAF no Gateway de Aplicativo em diferentes níveis de escopo. Para obter mais informações, confira Listas de exclusão do Firewall de Aplicativo Web.
Desabilitar regras
Outra forma de contornar um falso positivo é desabilitar a regra que teve correspondência na entrada que o WAF pensou ser mal-intencionada. Como os logs do WAF foram analisados e a regra foi restringida para 942130, agora é possível desabilitá-la no portal do Azure. Consulte Personalizar regras de firewall de aplicativo Web com o portal do Azure.
Um benefício de desabilitar uma regra é que, se você souber que todo o tráfego que contiver uma determinada condição normalmente bloqueada for o tráfego válido, você pode desabilitar essa regra para todo o WAF. No entanto, se o tráfego for válido somente em um caso de uso específico, uma vulnerabilidade será aberta ao desabilitar essa regra para todo o WAF, pois ela é uma configuração global.
Para usar o Azure PowerShell, consulte Personalizar regras de firewall de aplicativo Web com o PowerShell. Para usar a CLI do Azure, consulte Personalizar regras de firewall de aplicativo Web com a CLI do Azure.
Gravar arquivos HAR
Você pode usar seu navegador ou uma ferramenta externa como o Fiddler para gravar arquivos HTTP Archive (HAR). Os arquivos HAR contêm informações sobre as solicitações e respostas feitas pelo navegador ao carregar uma página da Web. Essas informações podem ser úteis para solucionar problemas do WAF.
Dica
É uma boa prática ter o arquivo HAR pronto quando você entra em contato com o suporte. A equipe de suporte pode usar o arquivo HAR para ajudar a diagnosticar o problema.
Para gravar e salvar um arquivo HAR no Microsoft Edge, siga estas etapas
Pressione F12 ou Ctrl+Shift+I para iniciar as ferramentas do desenvolvedor do Microsoft Edge. Você também pode iniciar as ferramentas no menu da barra de ferramentas em Mais ferramentas Ferramentas para desenvolvedores>.
Na guia Console , selecione Limpar console ou pressione Ctrl+L.
Selecione a guia Rede.
Selecione Limpar log de rede ou pressione Ctrl+L e depois selecione Registrar log de rede se ele não estiver gravando.
Acesse a página da web protegida pelo seu WAF que você deseja diagnosticar.
Pare a gravação selecionando Parar de gravar log de rede.
Selecione Exportar HAR (sanitizado)... e salve o arquivo HAR.
Localizar nomes de atributo de solicitação
Você pode usar o Fiddler para inspecionar solicitações individuais e determinar quais campos específicos de uma página da Web são chamados. Usar essas informações ajuda a excluir determinados campos da inspeção usando Listas de Exclusão.
Neste exemplo, veja que o campo em que a cadeia de caracteres 1=1 foi inserida é nomeado text1.
Esse é um campo que pode ser excluído. Para saber mais sobre listas de exclusões, confira Listas de exclusões do Firewall do Aplicativo Web. É possível excluir a avaliação nesse caso configurando a seguinte exclusão:
Também é possível examinar os logs do firewall para obter as informações e ver o que precisa ser adicionado à lista de exclusões. Para habilitar o log, consulteIntegridade de back-end, logs de recursos e métricas para o Gateway de Aplicativo.
Examine o log do firewall e visualize o arquivo PT1H.json com relação à hora em que a solicitação que você deseja inspecionar ocorreu.
Neste exemplo, há quatro regras com a mesma TransactionID e todas elas ocorreram exatamente ao mesmo tempo:
{
"resourceId": "/SUBSCRIPTIONS/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/RESOURCEGROUPS/MYRESOURCEGROUP/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/DEMOWAF-V2",
"operationName": "ApplicationGatewayFirewall",
"category": "ApplicationGatewayFirewallLog",
"properties": {
"instanceId": "appgw_3",
"clientIp": "203.0.113.139",
"clientPort": "",
"requestUri": "\/",
"ruleSetType": "OWASP_CRS",
"ruleSetVersion": "3.0.0",
"ruleId": "920350",
"message": "Host header is a numeric IP address",
"action": "Matched",
"site": "Global",
"details": {
"message": "Warning. Pattern match \\\"^[\\\\\\\\d.:]+$\\\" at REQUEST_HEADERS:Host. ",
"data": "40.90.218.160",
"file": "rules\/REQUEST-920-PROTOCOL-ENFORCEMENT.conf\\\"",
"line": "791"
},
"hostname": "vm000003",
"transactionId": "AcAcAcAcAKH@AcAcAcAcAyAt"
}
}
{
"resourceId": "/SUBSCRIPTIONS/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/RESOURCEGROUPS/MYRESOURCEGROUP/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/DEMOWAF-V2",
"operationName": "ApplicationGatewayFirewall",
"category": "ApplicationGatewayFirewallLog",
"properties": {
"instanceId": "appgw_3",
"clientIp": "203.0.113.139",
"clientPort": "",
"requestUri": "\/",
"ruleSetType": "OWASP_CRS",
"ruleSetVersion": "3.0.0",
"ruleId": "942130",
"message": "SQL Injection Attack: SQL Tautology Detected.",
"action": "Matched",
"site": "Global",
"details": {
"message": "Warning. Pattern match \\\"(?i:([\\\\\\\\s'\\\\\\\"`\\\\\\\\(\\\\\\\\)]*?)([\\\\\\\\d\\\\\\\\w]++)([\\\\\\\\s'\\\\\\\"`\\\\\\\\(\\\\\\\\)]*?)(?:(?:=|\\u003c=\\u003e|r?like|sounds\\\\\\\\s+like|regexp)([\\\\\\\\s'\\\\\\\"`\\\\\\\\(\\\\\\\\)]*?)\\\\\\\\2|(?:!=|\\u003c=|\\u003e=|\\u003c\\u003e|\\u003c|\\u003e|\\\\\\\\^|is\\\\\\\\s+not|not\\\\\\\\s+like|not\\\\\\\\s+regexp)([\\\\\\\\s'\\\\\\\"`\\\\\\\\(\\\\\\\\)]*?)(?!\\\\\\\\2)([\\\\\\\\d\\\\\\\\w]+)))\\\" at ARGS:text1. ",
"data": "Matched Data: 1=1 found within ARGS:text1: 1=1",
"file": "rules\/REQUEST-942-APPLICATION-ATTACK-SQLI.conf\\\"",
"line": "554"
},
"hostname": "vm000003",
"transactionId": "AcAcAcAcAKH@AcAcAcAcAyAt"
}
}
{
"resourceId": "/SUBSCRIPTIONS/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/RESOURCEGROUPS/MYRESOURCEGROUP/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/DEMOWAF-V2",
"operationName": "ApplicationGatewayFirewall",
"category": "ApplicationGatewayFirewallLog",
"properties": {
"instanceId": "appgw_3",
"clientIp": "203.0.113.139",
"clientPort": "",
"requestUri": "\/",
"ruleSetType": "",
"ruleSetVersion": "",
"ruleId": "0",
"message": "Mandatory rule. Cannot be disabled. Inbound Anomaly Score Exceeded (Total Score: 8)",
"action": "Blocked",
"site": "Global",
"details": {
"message": "Access denied with code 403 (phase 2). Operator GE matched 5 at TX:anomaly_score. ",
"data": "",
"file": "rules\/REQUEST-949-BLOCKING-EVALUATION.conf\\\"",
"line": "57"
},
"hostname": "vm000003",
"transactionId": "AcAcAcAcAKH@AcAcAcAcAyAt"
}
}
{
"resourceId": "/SUBSCRIPTIONS/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/RESOURCEGROUPS/MYRESOURCEGROUP/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/DEMOWAF-V2",
"operationName": "ApplicationGatewayFirewall",
"category": "ApplicationGatewayFirewallLog",
"properties": {
"instanceId": "appgw_3",
"clientIp": "203.0.113.139",
"clientPort": "",
"requestUri": "\/",
"ruleSetType": "",
"ruleSetVersion": "",
"ruleId": "0",
"message": "Mandatory rule. Cannot be disabled. Inbound Anomaly Score Exceeded (Total Inbound Score: 8 - SQLI=5,XSS=0,RFI=0,LFI=0,RCE=0,PHPI=0,HTTP=0,SESS=0): SQL Injection Attack: SQL Tautology Detected.",
"action": "Blocked",
"site": "Global",
"details": {
"message": "Warning. Operator GE matched 5 at TX:inbound_anomaly_score. ",
"data": "",
"file": "rules\/RESPONSE-980-CORRELATION.conf\\\"",
"line": "73"
},
"hostname": "vm000003",
"transactionId": "AcAcAcAcAKH@AcAcAcAcAyAt"
}
}
Como você compreende o funcionamento dos conjuntos de regras do CRS e sabe que o conjunto de regras do CRS 3.0 funciona com um sistema de pontuação de anomalias (consulte Firewall de Aplicativo Web para o Gateway de Aplicativo do Azure), você sabe que as duas regras inferiores com a propriedade ação: Bloqueada são bloqueadas com base na pontuação total de anomalia. As regras em foco são as duas superiores.
A primeira entrada é registrada porque o usuário usou um endereço IP numérico para navegar para o Gateway de Aplicativo, e ela pode ser ignorada nesse caso.
A segunda (regra 942130) é a importante. Você pode ver nos detalhes que ele correspondeu a um padrão (1=1)
e o campo é nomeado texto1. Siga as mesmas etapas anteriores para excluir o Nome do Atributo de Solicitação que é igual a 1=1
.
Nomes do cabeçalho da solicitação
Você pode usar o Fiddler para localizar nomes de cabeçalho de solicitação. Na captura de tela a seguir, é possível ver os cabeçalhos dessa solicitação GET, que incluem Content-Type, User-Agent e assim por diante.
Outra maneira de exibir cabeçalhos de solicitação e resposta é usar as ferramentas de desenvolvedor do Microsoft Edge ou do Google Chrome. Para obter mais informações, consulte Registrar arquivos HAR.
Encontrar nomes do cookie da solicitação
Se a solicitação contiver cookies, a guia Cookies poderá ser selecionada para exibi-los no Fiddler.
Restringir os parâmetros globais para eliminar falsos positivos
Desabilitar inspeção do corpo de solicitação
Ao configurar Inspecionar o corpo da solicitação como desativado, os corpos de solicitação do tráfego não são avaliados pelo WAF. Isso pode ser útil quando os corpos de solicitação não são mal-intencionados com relação ao seu aplicativo.
Quando você desabilitar essa opção, somente o corpo da solicitação ignora a inspeção. Os cabeçalhos e cookies ainda são inspecionados, a menos que sejam excluídos com a funcionalidade da lista de exclusão.
Desabilitar o limite máximo do corpo da solicitação
Ao desabilitar o limite máximo de corpo de solicitação, o WAF pode processar corpos de solicitação grandes sem rejeitá-los por exceder o limite de tamanho. Essa configuração é útil se você tiver solicitações grandes regularmente.
Quando você desabilitar essa opção, o corpo da solicitação só será inspecionado até o limite máximo de inspeção do corpo da solicitação. Se houver conteúdo mal-intencionado na solicitação além do limite máximo de inspeção do corpo da solicitação, o WAF não o detectará.
Desabilitar limites máximos de tamanho de arquivo
Ao desabilitar os limites de tamanho do arquivo para o WAF, arquivos grandes podem ser carregados sem que o WAF rejeite esses carregamentos de arquivo. Ao permitir que arquivos grandes sejam carregados, o risco de seu back-end ser sobrecarregado aumenta. Se você souber o tamanho máximo que um carregamento de arquivo pode ter, poderá definir um limite de tamanho para carregamentos de arquivo ligeiramente acima do tamanho máximo esperado. Limitar o tamanho do arquivo a um caso de uso normal para seu aplicativo é outra maneira de evitar ataques. No entanto, se os carregamentos de arquivo estiverem regularmente além do limite máximo de tamanho de carregamento de arquivo aplicável, talvez seja necessário desabilitar totalmente os limites de tamanho de carregamento de arquivo para evitar falsos positivos.
Observação
Se você sabe que seu aplicativo nunca precisará de nenhum upload de arquivo acima de um determinado tamanho, você pode restringi-lo definindo um limite.
Aviso
Ao atribuir um novo conjunto de regras gerenciado a uma política do WAF, todas as personalizações anteriores dos conjuntos de regras gerenciados existentes, como estado da regra, ações de regra e exclusões de nível de regra, serão redefinidas para os padrões do novo conjunto de regras gerenciado. No entanto, quaisquer regras personalizadas, configurações de política e exclusões globais permanecerão inalteradas durante a nova atribuição do conjunto de regras.
Métricas de firewall (somente WAF v1)
Para os Firewalls de Aplicativo Web v1, as seguintes métricas agora estão disponíveis no portal:
- Contagem de solicitações bloqueadas do Firewall de Aplicativo Web O número de solicitações que foram bloqueadas
- Contagem de regras bloqueadas do Firewall de Aplicativo Web Todas as regras que corresponderam e bloquearam a solicitação
- Distribuição total de regras do Firewall de Aplicativo Web Todas as regras que corresponderam durante a avaliação
Para habilitar métricas, selecione a guia Métricas no portal e selecione uma das três métricas.