Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Se o Web Application Firewall (WAF) estiver bloqueando solicitações que devem ser permitidas, há algumas etapas que você pode seguir.
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 são projetados para serem rígidos desde o início e devem ser ajustados para atender às necessidades específicas do aplicativo ou organização que utiliza um firewall de aplicações web (WAF). É totalmente normal, e esperado em muitos casos, criar exclusões, regras personalizadas e até mesmo 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.
Compreender os logs WAF
O objetivo dos logs do WAF é mostrar todas as solicitações que o WAF corresponde ou bloqueia. É um registo de todas as solicitações avaliadas que são atendidas ou bloqueadas. Se você notar que o WAF bloqueia uma solicitação que não deveria (um falso positivo), você pode fazer algumas coisas. Primeiro, restrinja e encontre a solicitação específica. Examine os logs para encontrar o URI, carimbo de data/hora ou ID de transação específico da solicitação. Quando você encontrar as entradas de log associadas, você pode começar a agir sobre os falsos positivos.
Por exemplo, imagine que tem um tráfego legítimo contendo a string 1=1 que pretende deixar 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. Esta é uma cadeia de caracteres frequentemente associada a um ataque de injeção de SQL. Você pode examinar os logs e ver o carimbo de data e hora da solicitação e as regras que bloquearam ou corresponderam.
No exemplo a seguir, você pode ver que quatro regras são acionadas durante a mesma solicitação (usando o campo TransactionId). O primeiro diz que correspondeu porque o usuário usou uma URL numérica/IP para a solicitação, o que aumenta a pontuação de anomalia 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. Isto aumenta novamente a pontuação de anomalia em três, pois também constitui um aviso. Geralmente, cada regra que tem a ação Correspondeu aumenta a pontuação de anomalia e, neste ponto, a pontuação de anomalia seria de seis. Para obter mais informações, consulte Modo de pontuação de anomalias.
As duas últimas entradas de log mostram que a solicitação foi bloqueada porque a pontuação de anomalia era alta o suficiente. Estas entradas têm uma ação diferente das outras duas. Eles mostram que realmente bloquearam o pedido. Estas regras são obrigatórias e não podem ser desativadas. Não devem ser considerados como regras, mas sim como a infraestrutura central do funcionamento interno 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 sabendo que a regra 942130 é a que corresponde à 1=1 string, você pode fazer algumas coisas para impedir que isso bloqueie seu 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, é importante se familiarizar com as tecnologias que seu aplicativo usa. Por exemplo, suponha que não existe um servidor SQL na sua estrutura de tecnologia, e está a receber falsos positivos relacionados com essas regras. Desativar essas regras não enfraquece necessariamente a sua segurança.
Um benefício de usar uma lista de exclusão é que apenas uma parte específica de uma solicitação está sendo desativada. No entanto, isso significa que uma exclusão específica é aplicável a todo o tráfego que passa pelo seu WAF porque é uma configuração global. Por exemplo, isso pode levar a um problema se 1=1 for uma solicitação válida no corpo para um determinado aplicativo, mas não para outros. 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, há casos em que 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 o Microsoft Entra ID.
__RequestVerificationToken geralmente é passado como um cookie de solicitação. No entanto, em alguns casos em que os cookies estão desativados, esse token também é passado como um atributo de solicitação ou arg. Se isso acontecer, você precisará garantir que __RequestVerificationToken seja adicionado à lista de exclusão como um nome de atributo Request também.
Neste exemplo, pretende excluir o nome do atributo Request que é igual a text1. Isso é aparente porque você pode ver o nome do atributo nos logs do firewall: data: Matched Data: 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 atributos de solicitação.
Você pode criar exclusões para WAF no Application Gateway em diferentes níveis de escopo. Para obter mais informações, consulte Listas de exclusão do Web Application Firewall.
Desativar regras
Outra maneira de contornar um falso positivo é desativar a regra que correspondia à entrada que o WAF achava maliciosa. Como você analisou os logs do WAF e reduziu a regra para 942130, você pode desabilitá-la no portal do Azure. Consulte Personalizar regras de firewall de aplicativos Web por meio do portal do Azure.
Um benefício de desativar uma regra é que, se você souber que todo o tráfego que contém uma determinada condição que normalmente é bloqueada é tráfego válido, poderá desativar essa regra para todo o WAF. No entanto, se for apenas tráfego válido em um caso de uso específico, você abre uma vulnerabilidade desativando essa regra para todo o WAF, pois é uma configuração global.
Se você quiser usar o Azure PowerShell, consulte Personalizar regras de firewall de aplicativo Web por meio do PowerShell. Se você quiser usar a CLI do Azure, consulte Personalizar regras de firewall de aplicativo Web por meio da 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 que seu navegador faz ao carregar uma página da web. Essas informações podem ser úteis para solucionar problemas do WAF.
Sugestão
É uma boa prática ter o arquivo HAR pronto quando você entrar 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, execute estas etapas
Pressione F12 ou Ctrl+Shift+I para iniciar as ferramentas do Edge Developer. Você também pode iniciar 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 o separador Rede.
Selecione Limpar registo de rede ou prima Ctrl+L e, em seguida, selecione Gravar registo de rede se não estiver a gravar.
Carregue a página da Web protegida pelo WAF para a qual você deseja solucionar problemas.
Pare a gravação selecionando o Parar gravação do log de rede.
Selecione Exportar HAR (limpo) e salve o arquivo HAR.
Localizar nomes de atributos 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. O uso dessas informações ajuda a excluir determinados campos da inspeção usando Listas de Exclusão.
Neste exemplo, você pode ver que o campo onde a cadeia de caracteres 1=1 foi inserida é chamado text1.
Este é um campo que pode excluir. Para saber mais sobre listas de exclusão, consulte Listas de exclusão de firewall de aplicativos Web. Neste caso, você pode excluir a avaliação configurando a seguinte exclusão:
Você também pode examinar os logs do firewall para obter as informações para ver o que você precisa adicionar à lista de exclusão. Para activar o registo, consulte Integridade do back-end, registos de recursos e métricas do Application Gateway.
Examine o log do firewall e exiba o arquivo de PT1H.json para a hora em que a solicitação que você deseja inspecionar ocorreu.
Neste exemplo, você pode ver que tem quatro regras com o mesmo TransactionID e que 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"
}
}
Com o 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 (consulte Firewall de Aplicações Web do Gateway de Aplicações da Azure), sabe que as duas regras inferiores com a propriedade ação: Bloqueada estão a bloquear com base na pontuação total de anomalias. As regras em que se deve 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 Application Gateway, que pode ser ignorado nesse caso.
A segunda (regra 942130) é a interessante. Você pode ver nos detalhes que ele correspondia a um padrão (1=1)e o campo é chamado text1. Siga as mesmas etapas anteriores para excluir o Nome do Atributo de Solicitação que é igual a 1=1.
Localizar nomes de cabeçalho de solicitação
Você pode usar o Fiddler para encontrar 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 assim por diante.
Outra maneira de visualizar 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 Gravar ficheiros HAR.
Encontrar nomes de cookies de solicitação
Se o pedido contiver cookies, o separador Cookies pode ser selecionado para os visualizar no Fiddler.
Restringir parâmetros globais para eliminar falsos positivos
Desativar a inspeção do órgão de solicitação
Ao definir Inspecionar corpo da solicitação como desativado, os corpos das solicitações no seu tráfego não são avaliados pelo WAF. Isso pode ser útil se você souber que os corpos de solicitação não são mal-intencionados ao seu aplicativo.
Quando você desabilita 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 os individuais sejam excluídos usando a funcionalidade de lista de exclusão.
Desativar limite máximo de corpo de solicitação
Ao desativar o limite máximo de corpo de solicitação, o WAF pode processar grandes corpos de solicitação sem rejeitá-los por exceder o limite de tamanho. Essa configuração é útil se você tiver regularmente grandes solicitações.
Quando você desativar essa opção, o corpo da solicitação só será inspecionado até o limite máximo de inspeção da entidade solicitante. Se houver conteúdo mal-intencionado na solicitação além do limite máximo de inspeção do corpo de solicitação, o WAF não o detetará.
Desativar limites máximos de tamanho de arquivo
Ao desativar os limites de tamanho de arquivo para seu WAF, arquivos grandes podem ser carregados sem que seu WAF rejeite esses uploads de arquivos. Ao permitir que arquivos grandes sejam carregados, o risco de seu back-end ficar sobrecarregado aumenta. Se souber o tamanho máximo que um carregamento de ficheiro pode ter, pode definir um limite de tamanho para carregamentos de ficheiros 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 arquivos estiverem regularmente além do limite máximo de tamanho de upload de arquivo aplicável, talvez seja necessário desativar totalmente os limites de tamanho de upload de arquivos para evitar falsos positivos.
Nota
Se você sabe que seu aplicativo nunca precisará de nenhum upload de arquivo acima de um determinado tamanho, você pode restringir isso definindo um limite.
Aviso
Ao atribuir um novo conjunto de regras gerenciado a uma política 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 atribuição do novo conjunto de regras.
Métricas de firewall (somente WAF v1)
Para firewalls de aplicativos Web v1, as seguintes métricas agora estão disponíveis no portal:
- Contagem de solicitações bloqueadas pelo Web Application Firewall O número de solicitações que foram bloqueadas
- Total de regras bloqueadas pelo Web Application Firewall Todas as regras correspondidas e o pedido foi bloqueado
- Distribuição total de regras do Web Application Firewall Todas as regras que foram correspondidas durante a avaliação
Para habilitar métricas, selecione a guia Métricas no portal e selecione uma das três métricas.