WAF Custom Allowed Rules
Web Application Firewall (WAF) Custom Allowed Rules são configurações que explicitamente permitem certos padrões de requisições não serem bloqueados, sobrepondo a definição das regras de segurança do WAF padrão que identificariam essas requisições como potencialmente maliciosas. Operam em alto nível, analisando componentes específicos das requisições HTTP, como parâmetros (ARGS), conteúdos do corpo da requisição (BODY) ou o caminho da URL (URL). A regra é definida com um identificador único, um string de correspondência e uma zona de aplicação, assegurando que o filtro de segurança permaneça eficaz ao minimizar bloqueios de requisições que contenham características consideradas necessárias ou legítimas pelo usuário, ou seja, falsos positivos.
Pré-requisitos
Para instanciar Custom Allowed Rules em um WAF Rule Set, você deve ter uma configuração de Edge Firewall com o módulo Web Application Firewall ativado.
WAF Tuning
A funcionalidade de WAF Tuning na Azion é uma ferramenta analítica que permite identificar os bloqueios que as regras do WAF identificaram com base em registros de tráfego permitindo identificar possíveis ataques e definir quais casos podem ser permitidos, caso sejam um comportamento esperado ou aceito pelo usuário. Este recurso permite ao usuário ajustar a precisão do WAF para evitar falsos positivos ou permitir tráfego legítimo.
Com este recurso de WAF Tuning você pode analisar o tráfego distribuído por listas de rede, IPs e países que correspondam aos conjuntos de regras do WAF configurados.
Para mais informações sobre como o tuning do WAF funciona na prática, confira nosso guia sobre como fazer a configuração.
Quando é apropriado utilizá-las?
As WAF Custom Allowed Rules devem ser usadas com cautela e apenas em situações específicas, como:
- Cenários onde falsos positivos estão impactando o tráfego legítimo, na forma de requisições sendo respondidas para os usuários com HTTP Status 400 ou na resposta configurada pelo WAF.
- Necessidade de liberar requisições de parceiros ou sistemas confiáveis que utilizam padrões não convencionais.
- Durante testes e validações de novas funcionalidades em ambientes controlados.
Boas práticas para usar WAF Custom Allowed Rules
Empresas podem manter um equilíbrio apropriado entre segurança e funcionalidade, minimizando perigos potenciais associados ao uso incorreto de WAF Custom Allowed Rules.
- Minimização e especificidade: apenas permita o necessário e seja específico. Em vez de liberar muitas regras de WAF amplamente, restrinja ao mínimo viável e aplique as Allowed Rules somente às partes das requisições exatas exigidas.
- Revisão e auditoria: avalie regularmente as WAF Custom Allowed Rules para garantir que ainda são necessárias e estão adequadas, removendo entradas desnecessárias ou desatualizadas. O recurso de WAF Tuning existe para auxiliar neste processo.
- Testes e monitoramento: após implementar uma WAF Custom Allowed Rule, execute testes rigorosos para assegurar que não há introdução de vulnerabilidades. Monitore logs para identificar comportamentos anômalos ou acessos não autorizados com o Real-Time Events e Data Stream.
- Segregação de ambientes: sempre que possível, use diferentes conjuntos de WAF Custom Allowed Rules para ambientes de desenvolvimento, teste e produção, ajustando as permissões conforme necessário para cada contexto.
- Documentação: mantenha uma documentação clara sobre as regras criadas e o raciocínio por trás de cada uma para facilitar revisões futuras e auditorias.
Riscos de segurança associados à implementação do Web Application Firewall (WAF) Custom Allowed Rules
O uso incorreto de WAF Custom Allowed Rules pode expôr aplicações web a riscos significativos. Se muito permissivas ou mal configuradas, podem abrir brechas que permitem a entrada de tráfego malicioso, inutilizando ou reduzindo o efeito das medidas de segurança. Por exemplo, ao liberar amplamente certos padrões ou zonas sem uma análise criteriosa, usuários mal intencionados podem explorar essas exceções para injetar código ou executar ataques de força bruta.
Exemplo prático de uma WAF Custom Allowed Rule em ação
Cenário
Você tem uma aplicação web protegida pelo Web Application Firewall (WAF) da Azion. Uma das regras padrão do WAF está bloqueando requisições que contêm caracteres especiais no parâmetro de consulta (query string), podendo indicar uma tentativa de SQL Injection. No entanto, você percebe que uma API legítima da sua aplicação usa esses caracteres especiais como parte do seu funcionamento normal.
Problema
- O WAF está bloqueando requisições legítimas da API, gerando falsos positivos.
- O tráfego legítimo é interrompido, impactando negativamente a experiência do usuário.
Solução com WAF Custom Allowed Rule
- Identificação do problema:
- No WAF Tuning, você analisa os registros de tráfego bloqueados e identifica que as requisições legítimas estão sendo bloqueadas pela regra com o Rule ID correspondente a SQL Injection.
- Criação de uma Allowed Rule permitindo requisições legítimas que atendem a critérios específicos, como o caminho (path) da API ou o parâmetro de consulta.
- Configuração da Allowed Rule:
- Vá até a aba Allowed Rules no conjunto de regras WAF.
- Clique em + Allowed Rule e configure os seguintes parâmetros:
- Rule ID: escolha a regra que está gerando o falso positivo (ex.: “SQL Injection”).
- Path: especifique o caminho da API que deve ser permitido (ex.:
/api/v1/data
). - Match Zone: configure para verificar apenas a query string.
- Regex: ative se os valores permitidos contêm padrões específicos (ex.:
^[a-zA-Z0-9]+$
). - Status: habilite a regra.
- Salve a regra e teste a aplicação.
- Agora, as requisições legítimas para
/api/v1/data
com caracteres especiais na query string serão permitidas, enquanto outras requisições que violam a regra continuarão sendo bloqueadas.
Resultado
O WAF continua protegendo sua aplicação contra ataques de SQL Injection, mas agora permite tráfego legítimo para a API. A experiência do usuário é restaurada, e a segurança da aplicação mantida.
Exemplo prático de Allowed Rule
Imagine que a API recebe requisições como esta:
GET /api/v1/data?filter=name%20LIKE%20%27%test%27
Essa requisição seria bloqueada pela regra de SQL Injection devido ao uso de caracteres como %
e '
. Com a Allowed Rule configurada, o WAF permite essa requisição pois atende aos critérios definidos (path /api/v1/data
e query string específica).
Benefícios
- Personalização: você ajusta o WAF para atender às necessidades específicas da sua aplicação.
- Redução de falsos positivos: permite tráfego legítimo sem comprometer a segurança.
- Manutenção da segurança: outras requisições que não atendem aos critérios da Allowed Rule continuam sendo bloqueadas.
Regras internas do WAF
Sua WAF Custom Allowed Rule pode ser baseada em solicitações reais, marcadas pelo WAF como possíveis ameaças. Você também pode criar uma custom allowed rule em casos de testes e falsos positivos.
Ao criar Custom Allowed Rule para uma configuração de WAF, é necessário escolher, entre as disponíveis, uma regra interna para sua composição.
Veja, abaixo, a lista de todas as regras internas disponíveis:
ID da Regra | Descrição |
---|---|
1 | Solicitação estranha, incapaz de analisar |
2 | Requisição maior que 128 kilobytes, armazenada no disco e não parseada |
10 | Codificação HEX inválida (bytes nulos) |
11 | Cabeçalho Content-Type ausente ou desconhecido em um POST . Esta regra se aplica apenas à zona de correspondência Request Body |
12 | Formatação de URL inválida |
13 | Formato POST inválido Nota: requisições que se enquadram na regra 13 serão bloqueadas em alguns casos, mesmo que o WAF esteja operando em modo learning. Veja na documentação do Rules Engine para Edge Firewall a definição dos modos learning/blocking. Veja no guia como verificar o modo do seu WAF. |
14 | Limite de POST inválido |
15 | Formato JSON inválido |
16 | POST sem corpo |
17 | Possível ataque de SQL Injection: validação com libinjection_sql |
18 | Possível ataque de XSS: validação com libinjection_xss |
1000 | Possível ataque de SQL Injection: palavras-chave SQL encontradas no Body , Path , Query String ou Cookies |
1001 | Possível ataque de SQL Injection: aspas duplas " encontradas no Body , Path , Query String ou Cookies |
1002 | Possível ataque de SQL Injection: possível codificação HEX 0x encontrada no Body , Path , Query String ou Cookies |
1003 | Possível ataque de SQL Injection: comentário MySQL /* encontrado no Body , Path , Query String ou Cookies |
1004 | Possível ataque de SQL Injection: comentário MySQL */ encontrado no Body , Path , Query String ou Cookies |
1005 | Possível ataque de SQL Injection: palavra-chave MySQL | encontrada no Body , Path , Query String ou Cookies |
1006 | Possível ataque de SQL Injection: palavra-chave MySQL && encontrada no Body , Path , Query String ou Cookies |
1007 | Possível ataque de SQL Injection: comentário MySQL -- encontrado no Body , Path , Query String ou Cookies |
1008 | Possível ataque de SQL Injection ou XSS: ponto e vírgula ; encontrado no Body , Path ou Query String |
1009 | Possível ataque de SQL Injection: sinal de igual = encontrado no Body ou Query String |
1010 | Possível ataque de SQL Injection ou XSS: parêntese aberto ( encontrado no Body , Path , Query String ou Cookies |
1011 | Possível ataque de SQL Injection ou XSS: parênteses fechado ) encontrado no Body , Path , Query String ou Cookies |
1013 | Possível ataque de SQL Injection ou XSS: apóstrofe ' encontrado no Body , Path , Query String ou Cookies |
1015 | Possível ataque de SQL Injection: vírgula , encontrada no Body , Path , Query String ou Cookies |
1016 | Possível ataque de SQL Injection: comentário MySQL # encontrado no Body , Path , Query String ou Cookies |
1017 | Possível ataque de SQL Injection: sinal de arroba duplo @@ encontrado no Body , Path , Query String ou Cookies |
1100 | Possível ataque de RFI: esquema http:// encontrado no Body , Query String ou Cookies |
1101 | Possível ataque de RFI: esquema https:// encontrado no Body , Query String ou Cookies |
1102 | Possível ataque de RFI: esquema ftp:// encontrado no Body , Query String ou Cookies |
1103 | Possível ataque de RFI: esquema php:// encontrado no Body , Query String ou Cookies |
1104 | Possível ataque de RFI: esquema sftp:// encontrado no Body , Query String ou Cookies |
1105 | Possível ataque de RFI: esquema zlib:// encontrado no Body , Query String ou Cookies |
1106 | Possível ataque de RFI: esquema data:// encontrado no Body , Query String ou Cookies |
1107 | Possível ataque de RFI: esquema glob:// encontrado no Body , Query String ou Cookies |
1108 | Possível ataque de RFI: esquema phar:// encontrado no Body , Query String ou Cookies |
1109 | Possível ataque de RFI: esquema file:// encontrado no Body , Query String ou Cookies |
1110 | Possível ataque de RFI: esquema gopher:// encontrado no Body , Query String ou Cookies |
1200 | Possível ataque de Directory Traversal: ponto duplo .. encontrado no Body , Path , Query String ou Cookies |
1202 | Possível ataque de Directory Traversal: tentativa evidente de travessia de diretório /etc/passwd encontrada no Body , Path , Query String ou Cookies |
1203 | Possível ataque de Directory Traversal: tentativa evidente de travessia de diretório com caminho c:\\ encontrado no Body , Path , Query String ou Cookies |
1204 | Possível ataque de Directory Traversal: tentativa evidente de travessia de diretório cmd.exe encontrado no Body , Path , Query String ou Cookies |
1205 | Possível ataque de Directory Traversal: backslash \ encontrado no Body , Path , Query String ou Cookies |
1206 | Possível ataque de Directory Traversal: slash / encontrado no Body , Path , Query String ou Cookies |
1207 | Possível ataque de Directory Traversal: tentativa evidente de travessia de diretório /..;/) encontrado no Body , Path , Query String ou Cookies |
1208 | Possível ataque de Directory Traversal: tentativa evidente de travessia de diretório /.;/) encontrado no Body , Path , Query String ou Cookies |
1209 | Possível ataque de Directory Traversal: tentativa evidente de travessia de diretório /./) encontrado no Body , Path , Query String ou Cookies |
1302 | Possível ataque de XSS: tag aberta HTML < encontrada no Body , Path , Query String ou Cookies |
1303 | Possível ataque de XSS: tag fechada HTML > encontrada no Body , Path , Query String ou Cookies |
1310 | Possível ataque de XSS: colchete aberto [ encontrado no Body , Path , Query String ou Cookies |
1311 | Possível ataque de XSS: colchete fechado ] encontrado no Body , Path , Query String ou Cookies |
1312 | Possível ataque de XSS: caractere til ~ encontrado no Body , Path , Query String ou Cookies |
1314 | Possível ataque de XSS: caractere ` (backtick) encontrado no Body , Path , Query String ou Cookies |
1315 | Possível ataque de XSS: codificação dupla %2|3 encontrada no Body , Path , Query String ou Cookies |
1400 | Possível truque para evitar a proteção: codificação UTF7/8 &# encontrado no Body , Path , Query String ou Cookies |
1401 | Possível truque para evitar a proteção: codificação MS %U encontrada no Body , Path , Query String ou Cookies |
1402 | Possível truque para evitar a proteção: caracteres codificados %20-%3F encontrados no Body , Path , Query String ou Cookies |
1500 | Possible File Upload attempt: asp/php ou .ph , .asp , .ht encontrados no nome de um arquivo em um POST de múltiplas partes contendo um arquivo |
Contribuidores