Web Application Firewall

Web Application Firewall (WAF) é um módulo do Azion Firewall desenvolvido para proteger applications contra ameaças do tipo SQL Injections, Remote File Inclusion (RFI), Cross-Site Scripting (XSS), Cross-Site Request Forgery (CSRF), violações de protocolo (como body vazio em POST), Code Injection e outras vulnerabilidades da web, incluindo as ameaças cibernéticas mais comuns. O WAF analisa requisições HTTP e HTTPS, detecta e bloqueia atividades maliciosas, antes que elas cheguem à sua infraestrutura, origem ou servidor.

O WAF opera na sétima camada do modelo OSI, a camada da aplicação, onde ocorre o relacionamento entre as aplicações web, seus respectivos serviços de rede e dados de usuários. Funciona também como uma barreira para filtrar e monitorar o tráfego entre sua aplicação e as requisições da internet.

O Web Application Firewall se baseia em uma metodologia de pontuação por requisição. Cada requisição HTTP/HTTPS é comparada a um conjunto rigoroso e detalhado de padrões de aplicações e recebe uma pontuação associada a determinada família de ameaças. De acordo com a pontuação recebida pela requisição, ela pode ser liberada ou bloqueada diretamente nos edge nodes da Azion, antes que a ameaça atinja sua origem ou cause qualquer tipo de dano. O nível de sensibilidade para cada família de ameaças pode ser customizado a qualquer momento.

O WAF pode operar em dois modos: Learning ou Blocking. Você pode definir o modo em uma regra no Rules Engine com o comportamento Set WAF Rule Set ou via API da Azion.

Você pode usar o modo Learning para evitar o bloqueio de requisições legítimas e mau funcionamento de sua aplicação. Nesta etapa, o WAF identifica os comportamentos legítimos de sua aplicação, colocando-os em uma allowlist.

Se tráfego interno, testes e falsos positivos estiverem sendo bloqueados pelo WAF, você também pode ajustar suas configurações com o recurso Tuning, disponível dentro de uma configuração do WAF.

Requisições POST e tipos de conteúdo suportados

Ao analisar requisições POST, o WAF interpreta o corpo da requisição apenas quando o cabeçalho Content-Type utiliza um dos tipos a seguir:

  • application/x-www-form-urlencoded
  • multipart/form-data
  • application/json
  • application/vnd.api+json
  • application/csp-report

Quando o Content-Type não é um dos suportados, o corpo da requisição pode ser considerado não analisável pelo WAF, o que impacta a forma como algumas regras de validação de protocolo são aplicadas, incluindo regras relacionadas à validação de formato de POST.

Implementação

Pré-requisitos

Para configurar um WAF Rule Set, que é como uma configuração de WAF é chamada, você precisa ter uma configuração de Firewall com o módulo Web Application Firewall ativado.

Consulte o guia configurar firewall

WAF Main Settings

A seção de Main Settings é configurada ativando a proteção contra famílias específicas de ameaças: SQL Injection, Remote File Inclusions (RFI), Directory Traversal, Cross-Site Scripting (XSS), File upload, Evading tricks, Unwanted Access e Identified Attack, e definindo um nível de sensibilidade: Lowest, Low, Medium, High e Highest.

A tabela de Threat Type Configuration categoriza as ameaças em famílias, de acordo com o propósito do ataque.

Saiba mais sobre os tipos de ameaça
Consulte o guia sobre criar rule set

Você também pode ativar ou desativar a proteção para cada família de ameaças individualmente através do switch Active.

Os níveis de Sensitivity define o rigor com o qual o WAF considera uma requisição como uma ameaça.

Cada nível de sensibilidade tolera um número definido de indícios de ameaças e o score do WAF representa essa quantidade de indícios de ameaças. Quanto mais flexível é o nível de sensibilidade, maior é o score do WAF que ela aceita. Já as sensibilidades mais rígidas aceitam apenas requisições que somaram poucos indícios de ameaças.

Saiba mais sobre níveis de sensibilidade

Rule IDs do WAF

Cada regra do WAF possui um identificador numérico único, chamado Rule ID.

  • Visualização: os Rule IDs aparecem nas telas de WAF Tuning e Allowed Rules.
  • Uso: você pode usar o Rule ID para identificar, filtrar e permitir/bloquear comportamentos específicos da aplicação.
  • Lista completa: consulte a descrição das famílias de regras e seus Rule IDs em WAF Rule Sets.

Regra 13: validação de formato de POST

A regra 13 do WAF está relacionada à validação de formato de requisições POST, garantindo que o corpo da requisição esteja em conformidade com os formatos de mensagem definidos pelos padrões HTTP.

Ela considera, entre outros fatores:

  • O método utilizado (POST).
  • O Content-Type configurado.
  • A forma como o corpo é serializado (por exemplo, application/x-www-form-urlencoded, multipart/form-data, application/json).

Para entender os formatos esperados e a semântica de requisições POST, consulte:

A descrição detalhada da regra 13 e de seus parâmetros está disponível na página de WAF Rule Sets.

WAF Tuning

WAF Tuning é uma ferramenta analítica que exibe as requisições detectadas para cada regra do WAF. Todas as correspondências são exibidas agrupadas pelo rule ID, juntamente com informações adicionais para auxiliar na identificação, como total de hits, número de URIs, IPs únicos e outros dados que ajudam na configuração das Allowed Rules, garantindo a melhor calibração do WAF para sua aplicação. Você pode filtrar por Domínio, Data, Network Lists, IP e Países.

Consulte o guia fazer tuning do WAF

Ao selecionar uma Regra listada nos resultados, você pode acessar a tela de More Details para visualizar ocorrências relacionadas ao Rule ID selecionado. Isso permite entender e identificar exatamente os casos que devem ser adicionados às Allowed Rules, com o suporte de filtros como Network List, País, IP e Path.

Nos filtros abaixo, informe o domínio (obrigatório), a data, quais Network Lists prefere utilizar, quais IPs está investigando e o país de origem da requisição.

Ao clicar no botão Apply filter, uma lista de Possible Attacks será exibida. Essa lista conta com os campos Rule ID, Description, Hits, IPs, Countries, Top 10 IPs Address e Top 10 Countries. Agora você pode selecionar os que precisar e clicar em Allow Rules para adicioná-los às Allowed Rules deste WAF.

Saiba mais sobre Custom Allowed Rules do WAF

Allowed Rules

Essa aba permite a criação, edição e deleção de Allowed Rules.

Allowed Rules são compostas pelos seguintes campos:

CampoDescrição
Rule IDID numérico exclusivo da regra WAF. Consulte a lista de regras em WAF Rule Sets.
Rule DescriptionDescrição automática do que a regra é/faz
ReasonCampo de descrição textual alternativa
URIUniform Resource Identifier (URI) é o caminho (path) após o domínio na URL
PathDelimita o escopo de atuação da regra. Se especificado, restringe a aplicação da Match Zone somente ao path definido
Match ZonePartes ou campos da requisição que serão comparados com o match pattern. Saiba mais sobre cada opção na tabela de Match Zones abaixo
ActiveSwitch de ativação da Allowed Rule

Opções de Match Zone

O menu suspenso da Match Zone abre as opções disponíveis para preencher este campo. Cada opção tem um comportamento específico, conforme explicado na tabela abaixo.

CampoDescriçãoExemplo de uso
Any HTTP Header ValueMatch pattern será comparado com o valor de qualquer cabeçalho HTTP da requisiçãoCompara com valores como Mozilla/5.0, application/json, etc.
Any HTTP Header NameMatch pattern será comparado com o nome de qualquer cabeçalho HTTP da requisiçãoCompara com nomes como User-Agent, Content-Type, Authorization, etc.
Specific HTTP Header ValueMatch pattern será comparado com o valor de um cabeçalho HTTP específico da requisiçãoName: User-Agent — compara apenas o valor do header User-Agent
Specific HTTP Header NameMatch pattern será comparado com o nome de um cabeçalho HTTP específico da requisiçãoName: X-Custom-Header — verifica se existe um header com esse nome
Any Query String ValueMatch pattern será comparado com o valor de qualquer parâmetro da query stringEm ?id=123&user=admin, compara com 123 e admin
Any Query String NameMatch pattern será comparado com o nome de qualquer parâmetro da query stringEm ?id=123&user=admin, compara com id e user
Specific Query String ValueMatch pattern será comparado com o valor de um parâmetro específico da query stringName: session_id — compara apenas o valor do parâmetro session_id
Specific Query String NameMatch pattern será comparado com o nome de um parâmetro específico da query stringName: token — verifica se existe um parâmetro chamado token
Body Form Field ValueMatch pattern será comparado com o valor de qualquer campo do formulário no body da requisiçãoCompara valores de campos como username, password, etc.
Body Form Field NameMatch pattern será comparado com o nome de qualquer campo do formulário no body da requisiçãoCompara nomes de campos do formulário
Specific Body Form Field ValueMatch pattern será comparado com o valor de um campo específico do formulário no body da requisiçãoName: password — compara apenas o valor do campo password
Specific Body Form Field NameMatch pattern será comparado com o nome de um campo específico do formulário no body da requisiçãoName: api_key — verifica se existe um campo com esse nome
Any URLMatch pattern será comparado com qualquer parte da URL da requisiçãoCompara com a URL completa ou partes dela
Raw BodyMatch pattern será comparado ao body não interpretado (unparsed body) de uma requisiçãoÚtil para analisar payloads JSON ou XML brutos
File ExtensionMatch pattern será comparado com a extensão do arquivo na requisiçãoCompara extensões como .php, .exe, .sh

Limites

Estes são os limites default:

EscopoLimite
Tamanho de logs de Debug Rules1.5 kB
Consultas de WAF Tuning3 dias
Tamanho máximo do payload da requisição160 KB