Encontre o score de uma requisição bloqueada
Leia quais regras internas corresponderam a uma requisição recusada, e quanto cada família de ameaças pontuou, no Real-Time Events ou na API GraphQL.
Você pode ler quais regras internas corresponderam a uma requisição que o Web Application Firewall (WAF) recusou, e quanto cada família de ameaças pontuou.
A decisão não deixa nada na resposta, então ela é consultada depois. O header x-azion-request-id na recusa é o que a liga ao seu evento. Para o modelo por trás do score, consulte Score e modos.
Selecione a interface que você vai usar. Os pré-requisitos e a consulta abaixo seguem essa escolha.
Pré-requisitos
- Um workload vinculado a um firewall que aplica um WAF rule set em modo
Blocking. Consulte Primeiros passos com WAF. - O domínio desse workload, que tem o formato
<id>.map.azionedge.net.
- Acesso ao Azion Console. Para entrar, consulte Como acessar o Azion Console.
Capture o request ID
Uma requisição recusada recebe 400, e ela nunca alcança uma origem. Nada nessa resposta nomeia o WAF, a regra que correspondeu ou o score, então o request ID é o único valor que encontra o evento.
Para provocar uma recusa no seu próprio workload, envie uma requisição com a forma de uma injection:
O WAF a recusa:
Anote o x-azion-request-id. Nenhum header x-azion-waf-* existe, nesta resposta ou em qualquer outra, então uma recusa não se distingue de outro 400 apenas pelos headers.
O corpo é a página de erro padrão da Azion, encabeçada por Bad Request. Um visitante que reporta uma recusa pode ler o mesmo valor na linha Request ID do bloco Error Details dessa página.
Encontre o evento no Real-Time Events
O Real-Time Events guarda uma linha por requisição, e essa linha carrega a decisão do WAF.
Para abrir o evento no Azion Console:
Acesse o Azion Console > Real-Time Events.
No dropdown de intervalo de tempo, selecione um intervalo que contenha a requisição.
No campo Search, escreva a query abaixo, com o domínio do seu workload em host:
O evento abre com seus campos de WAF, entre eles WAF Block e WAF Learning.
Uma segunda query alcança as mesmas linhas pelo outro lado, já que uma recusa é um 400 cujo upstream status é 0:
As duas queries retornam resultados semelhantes, com pequenas variações entre eles.
Leia a correspondência e o score
wafMatch e wafScore carregam a decisão. Os dois são strings que guardam uma entrada por correspondência, separadas por vírgulas, e os dois leem - em uma requisição sobre a qual o WAF não agiu.
wafMatch tem o formato <index>:<ruleId>:<zone>:<varName>. Em 0:1009:ARGS:q,1:1013:ARGS:q, as regras internas 1009 e 1013 corresponderam cada uma ao argumento q na zona ARGS. São essas duas, e não uma única regra de injection, que 1' OR '1'='1 dispara. Para o que cada id detecta, consulte WAF Rule Sets.
wafScore tem o formato <index>:$<family>:<score>, e é um score por família de ameaças, nunca um número para a requisição. Em 0:$SQL:18,1:$XSS:32, a família SQL injection tem score 18 e a família cross-site scripting tem score 32. Uma família bloqueia quando o seu score alcança o limiar do nível de sensibilidade definido para ela: as duas famílias acima estão definidas como medium, cujo limiar é 16. Os limiares estão listados em WAF Rule Sets.
Nenhuma fonte informa um limite superior para um score, então um score não carrega leitura percentual. Uma regra interna que não pertence a nenhuma família pontuada reporta wafScore como um nome de família isolado, como $OTHERS.
Os campos restantes estreitam a leitura. wafBlock lê 1 quando a requisição foi recusada. wafLearning lê 1 quando a regra rodou em modo Logging, que registra a correspondência e serve a requisição. wafAttackFamily e wafAttackAction resumem o mesmo evento como $SQL,$XSS e $BLOCK. O Azion Console renderiza esses valores sob labels, entre eles WAF Block e WAF Learning.
wafTotalProcessed e wafTotalBlocked leem 0 em toda linha por requisição, inclusive na linha de uma requisição que foi recusada. Eles são contadores agregados, então não respondem nada sobre uma requisição individual.