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.
Resumo
Este artigo ajuda você a solucionar problemas de WAF (Firewall de Aplicativo Web) para Gateway de Aplicativo do Azure quando solicitações legítimas são bloqueadas, para que você possa permitir o tráfego válido enquanto mantém a proteção.
Comece examinando a visão geral do WAF e a documentação de configuração do WAF e verifique se o monitoramento do WAF está habilitado. Estes artigos explicam como o WAF opera, como os conjuntos de regras funcionam e como acessar logs do WAF.
Os conjuntos de regras OWASP foram projetados para serem rígidos desde o início e podem ser ajustados para atender às necessidades específicas do aplicativo ou da organização que utiliza o WAF. É totalmente normal e esperado, em muitos casos, criar exclusões, regras personalizadas e até mesmo desabilitar regras que possam causar problemas ou falsos positivos. As políticas por site e por URI permitem que essas alterações afetem apenas sites ou URIs específicos. Portanto, as alterações não devem afetar outros sites que podem não estar tendo os mesmos problemas.
Entender os logs do WAF
A finalidade dos logs do WAF é mostrar cada solicitação que o WAF corresponde ou bloqueia. É um registro de todas as solicitações avaliadas que foram condizentes ou bloqueadas. Se você observar que o WAF bloqueia uma solicitação que não deve (um falso positivo), você pode executar algumas etapas. Primeiro, restrinja e localize a solicitação específica. Examine os logs para localizar o URI específico, o carimbo de data/hora ou a ID da transação da solicitação. Ao encontrar as entradas de log associadas, você pode começar a corrigir os falsos positivos.
Por exemplo, suponha que você tenha um tráfego legítimo contendo a string 1=1 que deseja passar pelo WAF. Se você tentar a solicitação, o WAF bloqueará o tráfego que contém sua 1=1 cadeia de caracteres 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 registro de data e hora da solicitação, além das regras que bloquearam ou corresponderam à solicitação.
No exemplo a seguir, você pode ver que quatro regras são disparadas durante a mesma solicitação (usando o campo TransactionId). O primeiro diz que ele correspondeu porque o usuário usou um endereço IP numérico para a solicitação, o que aumenta a pontuação de anomalias em três, já que é um aviso. A próxima regra que correspondeu é 942130, que é a que você está procurando. Você pode ver o 1=1 no campo details.data. Isso eleva a pontuação de anomalia em três pontos novamente, já que também funciona como um aviso. Em geral, cada regra que tem a ação Correspondida aumenta a pontuação de anomalias e, neste ponto, a pontuação de anomalias é seis. Para obter mais informações, consulte o modo de pontuação de anomalias.
As duas últimas entradas de log 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. Eles mostram que bloquearam a solicitação. Essas regras são obrigatórias e não podem ser desabilitadas. Não pense nessas regras como regras, mas mais como infraestrutura central dos internos do WAF.
{
"resourceId": "/SUBSCRIPTIONS/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1/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/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1/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/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1/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/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1/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 à 1=1 cadeia de caracteres, você pode executar algumas etapas para impedir que essa regra 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.
Desative a regra.
Usar uma lista de exclusão
Para tomar uma decisão informada sobre como lidar com um falso positivo, familiarize-se com as tecnologias que seu aplicativo usa. Por exemplo, se a pilha de tecnologia não incluir um SQL Server e você estiver recebendo falsos positivos relacionados a essas regras, desabilitar essas regras não necessariamente enfraquecerá sua segurança.
Um benefício de usar uma lista de exclusão é que você desabilita apenas uma parte específica de uma solicitação. No entanto, essa limitação significa que uma exclusão específica se aplica a todo o tráfego que passa pelo WAF porque é uma configuração global. Por exemplo, essa configuração poderá levar a um problema se 1=1 for uma solicitação válida no corpo de um determinado aplicativo, mas não para outras pessoas. Outro benefício é que você pode escolher entre corpo, cabeçalhos e cookies a serem excluídos se uma determinada condição for atendida, em vez de excluir toda a solicitação.
Ocasionalmente, parâmetros específicos são passados para o WAF de uma maneira que pode não ser intuitiva. Por exemplo, há um token que é passado ao autenticar usando Microsoft Entra ID.
__RequestVerificationToken geralmente é passado como um cookie de solicitação. No entanto, 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, você precisará garantir que __RequestVerificationToken também seja adicionado à lista de exclusão como um nome de atributo de solicitação .
Neste exemplo, você deseja excluir o nome do atributo Request que é igual a text1. Esse nome de atributo é aparente porque você pode ver o nome do atributo nos logs de firewall: dados: Dados correspondentes: 1=1 encontrado em ARGS:text1: 1=1. O atributo é text1. Você também pode encontrar esse nome de atributo de algumas outras maneiras, consulte Localizando nomes de atributo de solicitação.
Você pode criar exclusões para WAF no Gateway de Aplicativo em diferentes níveis de escopo. Para obter mais informações, consulte as listas de exclusão do Firewall de Aplicativo Web.
Desativar regras
Outra maneira de lidar com um falso positivo é desabilitar a regra que correspondia à entrada que o WAF achava mal-intencionada. Como você analisou os logs do WAF e reduziu a regra para 942130, você pode desabilitá-la no portal Azure. Consulte Personalize regras de firewall do aplicativo web por meio do portal Azure.
Se você souber que todo o tráfego que contém uma determinada condição normalmente bloqueada é o tráfego válido, você pode desabilitar essa regra para todo o WAF. No entanto, se for apenas um tráfego válido em um caso de uso específico, você abrirá uma vulnerabilidade desabilitando essa regra para todo o WAF, já que é uma configuração global.
Para usar Azure PowerShell, consulte Personalizar regras de firewall do aplicativo Web por meio do PowerShell. Para usar CLI do Azure, consulte Personalizar regras de firewall do aplicativo Web por meio do 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 abrir a Ferramentas de desenvolvedor do Edge. Você também pode abrir as ferramentas no menu da barra de ferramentas em Mais ferramentas > Ferramentas de desenvolvedor.
Na guia Console , selecione Limpar console ou pressione Ctrl+L.
Selecione a guia Rede .
Selecione Limpar log de rede ou pressione Ctrl+L e, em seguida, selecione Registrar log de rede se ele não estiver gravando.
Carregue a página da Web protegida pelo WAF e que você deseja solucionar problemas.
Pare a gravação selecionando o Parar de gravar log de rede.
Selecione Exportar HAR (sanitizado)... e salve o arquivo HAR.
Localizar nomes de atributo de solicitação
Use 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 você a excluir determinados campos da inspeção usando listas de exclusão.
Neste exemplo, você pode ver que o campo em que a string 1=1 foi inserida é chamado text1.
Esse é um campo que você pode excluir. Para saber mais sobre listas de exclusões, confira Listas de exclusões do Firewall do Aplicativo Web. Você pode excluir a avaliação nesse caso configurando a seguinte exclusão:
Você também pode examinar os logs de firewall para obter as informações para ver o que precisa adicionar à lista de exclusão. Para habilitar o registro em log, consulte integridade do back-end, logs de recursos e métricas para o Gateway de Aplicativo.
Examine o log de firewall e exiba o arquivo de PT1H.json para a hora em que a solicitação que você deseja inspecionar ocorreu.
Neste exemplo, você verá que tem quatro regras com a mesma TransactionID e que todas elas ocorreram exatamente ao mesmo tempo:
{
"resourceId": "/SUBSCRIPTIONS/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1/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/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1/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/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1/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/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1/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"
}
}
Com seu conhecimento de como os conjuntos de regras CRS funcionam, e que o conjunto de regras CRS 3.0 opera com um sistema de pontuação de anomalias (veja Firewall de Aplicativo Web para Gateway de Aplicativo do Azure), você sabe que as duas regras inferiores com a propriedade action: Blocked estão bloqueando com base na pontuação total de anomalias. As regras em que se concentrar são as duas principais.
A primeira entrada é registrada porque o usuário usou um endereço IP numérico para navegar até o Gateway de Aplicativo, que você pode ignorar nesse caso.
A segunda (regra 942130) é a interessante. Você verá nos detalhes que ele correspondeu a um padrão (1=1)e o campo é chamado text1. Siga as mesmas etapas anteriores para excluir o Nome do Atributo de Solicitação1=1igual a .
Localizar nomes de cabeçalho de solicitação
Use o Fiddler para localizar nomes de cabeçalho de solicitação. Na captura de tela a seguir, você pode ver os cabeçalhos dessa solicitação GET, que incluem Content-Type, User-Agent e outros cabeçalhos.
Você também pode usar as ferramentas de desenvolvedor no Microsoft Edge ou no Google Chrome para exibir cabeçalhos de solicitação e resposta. Para obter mais informações, consulte Registrar arquivos HAR.
Localizar nomes de cookie de solicitação
Se a solicitação contiver cookies, selecione a guia Cookies para exibi-los no Fiddler.
Restringir parâmetros globais para eliminar falsos positivos
Desativar a inspeção do corpo da solicitação
Quando você define o corpo da solicitação de inspeção para desativado, o WAF não avalia os corpos de solicitação do tráfego. Essa configuração será útil se você souber que os corpos da solicitação não são mal-intencionados para 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 você exclua os individuais usando a funcionalidade de lista de exclusão.
Desativar o limite máximo do corpo da solicitação
Quando você desabilitar o limite máximo do corpo da solicitação, o WAF pode processar grandes corpos de solicitação sem rejeitá-los por exceder o limite de tamanho. Essa configuração será útil se você tiver regularmente solicitações grandes.
Quando você desabilitar essa opção, o corpo da solicitação será inspecionado apenas 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
Quando você desabilitar os limites de tamanho do arquivo para o WAF, arquivos grandes poderão ser carregados sem que o WAF rejeite esses uploads 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 upload de arquivo pode ter, defina um limite de tamanho para uploads 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 uploads de arquivo estiverem regularmente além do limite máximo de tamanho de carregamento de arquivo exequível, talvez seja necessário desabilitar totalmente os limites de tamanho de upload de arquivo para evitar falsos positivos.
Observação
Se você souber que seu aplicativo nunca precisa de qualquer upload de arquivo acima de um determinado tamanho, você pode restringir esse tamanho definindo um limite.
Aviso
Quando você atribui um novo conjunto de regras gerenciado a uma política de WAF, todas as personalizações anteriores dos conjuntos de regras gerenciados existentes, como estado de regra, ações de regra e exclusões de nível de regra, sã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 permanecem inalteradas durante a nova atribuição do conjunto de regras.
Métricas de firewall (somente WAF v1)
Para firewalls de aplicativo Web v1, o portal agora fornece as seguintes métricas:
- Firewall de Aplicativo Web Contagem de Solicitações Bloqueadas O número de solicitações bloqueadas.
- Firewall de Aplicativo Web Contagem de Regras Bloqueadas Todas as regras que correspondem e a solicitação é bloqueada.
- Firewall de Aplicativo Web Total de Distribuição de Regras todas as regras que correspondem durante a avaliação.
Para habilitar as métricas, selecione a guia Métricas no portal e selecione uma das três métricas.