Ataque DDoS? Don’t Worry! Aplique o Rate Limit

Ataques DDoS acabam por se tornar cada vez mais uma ameaça constante à aplicações web, devido a facilidade de se encomendar e/ou aplicar o mesmo utilizando a computação em nuvem, com isso é importante sempre estar preparado para mitigar e se proteger dos danos de um ataque DDoS. Caso você não saiba o que é um ataque DDoS, clique AQUI.

O Rate Limit é conhecido por ser uma ferramenta de alta eficiência quando bem configurado contra ataques DDoS e DoS, já que ambos são baseados em volumetria, que visam por padrão gerar indisponibilidade em alguma aplicação web.

Neste artigo traremos alguns possíveis cenários de ataques, ilustrando como poderíamos mitigá-los utilizando o recurso de Rate Limit da GoCache

Primeiramente, é importante compreender o padrão de acessos de sua aplicação em um momento sem ataque para assim definir limitações seguras que não bloqueiem usuários legítimos. No exemplo a seguir, que é uma aplicação WordPress, começaremos avaliando:

  • Quantidade de requests por IP que acessaram a hospedagem por minuto;
  • Quantidade de requests por IP em áreas sensíveis do site, como um arquivo PHP.

Com essas informações em mãos, podemos destacar alguns destes dados, dispostos nos gráficos abaixo:

Feita a análise, já podemos preparar regras e formular ideias para uma política de segurança, com o objetivo de mitigar algum ataque que venha acontecer.

Considerando que o público-alvo deste site é o Brasil, uma primeira abordagem seria a criação de regras mais restritivas para os acessos provenientes de outros países.

A primeira e mais delicada ação, é a definição de limites seguros para cada perfil de acesso, em que serão utilizados como base os picos de acessos com o acréscimo de uma margem. No nosso caso, adicionaremos 10 acessos, acima do pico de tráfego do dia.

Os acessos a home e ademais (/*) recursos têm um pico de 120 acessos por minuto, provenientes do mesmo IP no Brasil. Dessa forma, iremos criar uma regra para 130 acessos neste período de tempo, limitado ao “País de Origem” Brasil.

Limitação de 130 requisições / minuto de um IP proveniente do Brasil

Agora, podemos nos direcionar para as regras de áreas mais sensíveis do site, como as requests para arquivos .php, veja o exemplo criado:

Limitação de 50 requisições / min em requisições .php

Pelo fato da aplicação ser um WordPress, é preciso ter cuidado com a área logada, esta que por padrão faz muitas requisições de conteúdo dinâmico, seja num /wp-json, /plugin-install.php, /admin-ajax.php, e que poderiam acabar bloqueando um usuário legítimo.

Neste caso, seria possível excluir alguns paths do Rate Limit, e também criar regras mais brandas para acessos feitos pelos administradores do site.

Veja um exemplo:

Regra com uma limitação mais abrangente para usuários logados.

Assim aqueles que estiverem logados e tiverem o cookie que comece com wordpress_logged_in*, poderão ter uma margem maior de requests antes de ativar o Rate Limit.

Com as principais regras criadas, temos uma certa segurança para ataques locais do Brasil. Agora, podemos criar regras mais rígidas para acessos estrangeiros, que possuem um padrão de 30 acessos por minuto, conforme exemplo abaixo:

Limitação de 30 requisições / minuto de um IP de fora do Brasil

Essas regras foram construídas em um cenário fora de ataque, mas supondo que um atacante resolveu fazer um DDoS na aplicação após as regras serem criadas, é possível notar no Analytics (Ferramenta da GoCache que mostra métricas da CDN) que a ferramenta foi bastante eficiente no bloqueio:

Analytics GoCache: Requisições bloqueadas pelo rate-limit em timeline

Neste momento, podemos criar regras para mitigar um ataque que já está ocorrendo, como por exemplo, um ataque de Brute Force de senha.

Supondo um cenário em que o atacante queira fazer um Brute Force no wp-login, e para tentar fazer o bypass de eventuais controles de Rate Limit, crie variações no User Agent, utilizando strings de até 5 caracteres aleatórios ( js321, ksfg, las, 0w324, 99097, 2456d , 4k).

Ao analisar o padrão dos acessos, foi possível identificar que o mesmo fazia requisições de diferentes lugares de fora do Brasil, tentando 20 vezes de cada IP.

Sendo assim, poderíamos mitigar esse ataque usando o Rate Limit com uma regra específica para esse padrão. Vejamos a regra criada:

Customização de rate-limiting utilizando critérios de user-agent e geolocalização

Com essa última regra, podemos bloquear apenas User Agents menores que 5 caracteres, com métodos POSTs, podendo assim bloquear essa tentativa de Brute Force.

Todas as regras em conjunto são ilustrativas para o contexto. O nível de customização da GoCache permite criar limitações combinando uma série de critérios e fazendo uso de expressões regulares.