Firewall ou WAF: o que cada um vê e o que cada um trava
Uma firewall stateful lê endereços, portas e estado da ligação. Um WAF lê o próprio pedido HTTP. Um formulário de login precisa dos dois, em série.
Neste artigo 5 secções
- Uma firewall stateful decide pelo envelope: origem, destino, porta e estado da ligação. Um bot a adivinhar palavras-passe num formulário de login envia pedidos bem formados para uma porta que tem de estar aberta, por isso a firewall deixa-os passar.
- Um WAF, ou um reverse proxy a fazer trabalho de WAF, decide pelo conteúdo: caminho, método, corpo, código de resposta e ritmo por cliente. Os logins falhados, as tentativas de injection e os scrapers só são visíveis aí.
- Os dois encaixam em série. A firewall restringe o que pode sequer chegar ao proxy. O proxy deteta o abuso no fluxo de pedidos e pode devolver um endereço ao packet filter, com prazo de validade e com uma allow-list para o operador.
O que decide uma firewall stateful
Uma firewall de Layer 3/4 acompanha ligações e julga cada ligação nova pelos seus endereços, pela sua porta e pelo estado do fluxo a que pertence. O Cisco Firepower, o OPNsense e o netfilter fazem-no todos bem: uma porta que nenhuma regra abre está fechada, uma resposta só é permitida para uma ligação iniciada de dentro, e as portas de gestão só respondem às gamas que estão na allow-list. A sua visão termina na camada de transporte. Com TLS no caminho não consegue ver nada dentro do payload, a menos que termine a sessão, e mesmo em tráfego em claro não tem qualquer noção de URL, cabeçalho, código de resposta ou login.
O que um WAF acrescenta
Uma web application firewall lê a transação HTTP depois da terminação do TLS, o que na prática significa que vive dentro ou ao lado do reverse proxy. Acrescenta três tipos de controlo que a firewall não consegue exprimir. As regras de assinaturas, como o ModSecurity com o OWASP Core Rule Set, detetam injection, traversal e payloads de exploits conhecidos dentro do pedido. As regras de comportamento contam por cliente e por caminho: pedidos por minuto na rota de login, respostas de login falhado por endereço, sinais de bot nos cabeçalhos e nos tempos. As regras positivas declaram o que um caminho aceita, como que métodos, que tipos de conteúdo e que tamanho de corpo, e recusam o resto.
Um WAF não substitui a firewall. Só vê o tráfego que chega até ele, e não sabe nada sobre SSH, portas de bases de dados ou o plano de gestão.
Onde o abuso do login se torna visível
Um login falhado é um facto na resposta. A aplicação responde a um POST para o caminho de login com um código ou um redirecionamento que distingue a falha do sucesso, e o proxy escreve isso no seu access log em cada tentativa. Contar as falhas por cliente por minuto é uma linha de awk sobre esse log, e é o sinal que um packet filter não tem forma de ver.
O controlo tem de estar associado ao cliente, não à conta. O bloqueio de conta, por si só, trava as tentativas contra um username e tranca o seu dono do lado de fora, enquanto o bot passa ao nome seguinte da lista. Um rate limit por cliente na rota de login faz o que o bloqueio não consegue:
# nginx: at most 5 login attempts a minute per client, small burst allowed
limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m;
location = /login {
limit_req zone=login burst=5 nodelay;
proxy_pass http://app;
}O HAProxy exprime a mesma ideia com uma stick table associada ao endereço de origem, e um conjunto de regras de WAF pode contar diretamente o código de resposta do login falhado.
Como os dois encaixam
A ordem é firewall, depois terminação do TLS e o proxy com as suas regras de WAF, depois a aplicação. A deteção pertence ao Layer 7, porque é aí que está a evidência. A imposição pode ficar em qualquer uma das camadas. O proxy pode responder ao cliente infrator com um 429 ou um 403 no pedido seguinte, o que chega para a maioria dos abusos. Para um cliente que insiste, o proxy pode empurrar o endereço para a tabela dinâmica do packet filter por um período definido, o que também descarta as outras ligações desse cliente e não custa nada à firewall por pacote.
Dois pontos de desenho vêm antes de armar esse ciclo de retorno. As gamas de gestão e de monitorização do operador entram primeiro na allow-list, para que um teste ou uma gralha não possam trancar do lado de fora as pessoas que operam a plataforma. E os endereços partilhados existem: um NAT de escritório ou um carrier-grade NAT põe muita gente atrás de um único endereço, por isso os bloqueios têm validade curta e uma forma documentada de os levantar. Toda a cadeia é depois testada a partir de um host fora da rede, tal como um atacante a encontraria, antes de alguém confiar nela.
O que nenhum dos dois vê
Uma palavra-passe correta. O credential stuffing com uma palavra-passe válida que vazou parece um login bem-sucedido a todas as camadas. Essa lacuna fecha-se com autenticação multifator na conta e com a allow-list dos caminhos administrativos na firewall, para que uma credencial válida seja inútil a partir de um endereço que não é seu.
Respostas diretas
Qual é a diferença entre uma firewall e um WAF?+
Uma firewall stateful trabalha no Layer 3/4 e decide por endereços, portas e estado da ligação. Um WAF trabalha no Layer 7 e decide pelo conteúdo do pedido e da resposta HTTP. Uma tentativa de login é um evento de Layer 7, por isso só o WAF ou o proxy conseguem dizer se falhou.
Uma firewall consegue travar o credential stuffing num formulário de login?+
Não por si só. As tentativas são pedidos bem formados para uma porta aberta, que é precisamente o que a firewall foi feita para permitir. A falha está na resposta, uma camada acima. Conte-a no proxy e deixe o proxy decidir, ou alimente a firewall a partir dessa decisão.
Preciso de um appliance WAF se já corro nginx ou HAProxy?+
Muitas vezes não. O ModSecurity corre como módulo em nginx e Apache, o HAProxy tem stick tables para acompanhar ritmo e abuso, e ambos registam os códigos de resposta que revelam o abuso do login. O proxy que já tem vê tudo o que um WAF veria. A questão é se alguém escreveu as regras.
Os bloqueios devem acontecer no proxy ou na firewall?+
Detete no proxy, porque a evidência está lá. Imponha no proxy na maioria dos casos, e escale para o packet filter nas fontes persistentes, com validade, uma allow-list do operador e um caminho de desbloqueio para endereços partilhados.
O abuso do login é um problema de Layer 7.
Fale com um engenheiro sobre onde o seu está a ser vigiado.
Fale com um engenheiroChegou ao fim.
Ponha a leitura em prática
O que executa?
Fale-nos da carga de trabalho, do tráfego e dos requisitos de recuperação. Comece pelo configurador de servidores ou discuta os detalhes com um engenheiro.
Escrito pelos engenheiros que constroem e operam a infraestrutura que descreve.Fale com um engenheiro
