1. Home
  2. >
  3. Desviar
  4. >
  5. Vai, Banjax, vai!
Categorias
Blog DDoS Desviar

Vai, Banjax, vai!

O serviço Deflect foi desenvolvido com base nos princípios de defesa em profundidade para manter seu site online, independentemente do tráfego recebido. Nossos pontos de borda da rede estão localizados em data centers de vários provedores ao redor do mundo. Cada ponto de borda da rede Deflect armazena em cache recursos estáticos de páginas da web e é capaz de responder com grande rapidez a uma grande quantidade de solicitações simultâneas. À medida que o tráfego chega ao ponto de borda, dois módulos distintos estão sempre atentos a bots maliciosos e ataques. Um deles é o Baskerville — que utiliza previsões de anomalias baseadas em aprendizado de máquina. Temos uma página dedicada explicando como isso funciona. O outro é o Banjax — uma lista selecionada de padrões de expressões regulares com limites de taxa associados. Isso nos permite, por exemplo, bloquear instantaneamente endereços IP que enviam solicitações com user agents de uma lista de scanners de vulnerabilidades. Ou podemos bloquear endereços IP que solicitam um endpoint /search/ oneroso com muita frequência, ou que enviam uma quantidade excessiva de solicitações POST ou GET para a rede. É simples, mas muito eficiente.

O Banjax foi originalmente programado em C++ e criado como um plug-in do Apache Traffic Server (ATS). Essas escolhas iniciais dificultaram a adoção por terceiros (que não utilizavam o ATS). Ao refatorar o Banjax, decidimos usar Go — uma linguagem mais moderna que ainda oferecia todas as funcionalidades necessárias e facilitava a manutenção da biblioteca a longo prazo. Portanto, agora temos o prazer de apresentar o Banjax-Go, desenvolvido para a década de 2020 e funcionando perfeitamente em conjunto com os sistemas de cache Baskerville e Deflect ou como um módulo independente em sua configuração do nginx.

Portanto, as decisões que o Banjax pode tomar são: Permitir, Bloquear ou Solicitar confirmação. As listas de decisões são preenchidas a partir do arquivo de configuração (útil para criar listas de permissão ou bloqueio de IPs conhecidos como bons ou ruins), a partir dos resultados das regras de limitação de taxa por expressões regulares (portanto, violar uma regra pode resultar em um Bloqueio, um Desafio ou até mesmo uma Permissão), e a partir de mensagens recebidas em um tópico do Kafka (é assim que o Baskerville se comunica com o banjax-next).

Além de bloquear solicitações (no nível HTTP) ou bloquear endereços IP (no nível do iptables/netfilter), o Banjax também oferece suporte ao envio de uma página HTML de “desafio” que contém um desafio básico de senha (útil como uma linha extra de defesa nas seções de administração) ou um desafio de prova de trabalho (útil para bloquear bots que não conseguem executar JavaScript, ao mesmo tempo em que permite o acesso de navegadores da web).

Uma das principais preocupações ao abandonar o C++ era o desempenho — durante um ataque, o Banjax frequentemente precisa processar milhares de solicitações por segundo, em cada nó de borda. Realizamos uma série de testes sintéticos para avaliar o desempenho do Banjax-Go. Utilizamos uma série de cenários de pior caso, com base em nossas experiências anteriores com o Deflect. Nosso objetivo era processar 1.000 endereços IP únicos por segundo em uma máquina virtual comum (um droplet da Digital Ocean).

Primeiramente, testamos o iptables diretamente para verificar com que rapidez ele consegue processar solicitações diretas — excluindo 2.000 regras — sem a interferência de nenhum outro sistema. Chegamos aos seguintes resultados:

Em seguida, testamos a rapidez com que o Banjax-Go é capaz de processar diferentes tipos de solicitações comuns (novamente, nas condições do pior cenário possível):

  • Cada solicitação gera um desafio: 800 solicitações/segundo
  • Todas as solicitações são encaminhadas para o servidor de origem sem nenhum armazenamento em cache: 1.200 solicitações/segundo
  • Cada solicitação passa pelo sistema e recebe uma versão em cache de uma página da web: 2.800 solicitações/segundo

Ao mesmo tempo, decidimos atualizar nosso mecanismo de cache, passando do Apache Traffic Server para o Nginx. Esses e muitos outros módulos farão parte do nosso lançamento do Deflect-Core — um produto do projeto que esperamos apresentar até o final da primavera. Por enquanto, nossos esforços estão concentrados no kit de ferramentas de mitigação banjax-next.