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

Ataques DDoS acabam por se tornar cada vez mais uma ameaça constante a 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 se 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 iremos trazer 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, iremos começar 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, que estão dispostos nos gráficos abaixo::

Feita a análise, já podemos preparar regras e formular idéias para uma política de segurança, com o objetivo de reduzir o impacto de um eventual ataque.

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, iremos adicionar 10 acessos, acima do pico de tráfego do dia.

Os acessos a home e ademais (/*) recursos tem 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.

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

Pelo fato da aplicação ser um wordpress, é preciso ter cuidado com a área logada, esta que por padrão faz muitas requests dinâmicas, 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, como também criar regras mais brandas para acessos feitos pelos administradores do site.

Veja um exemplo:

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:

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:

Agora, 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:

Com essa última regra, podemos bloquear apenas UserAgents 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 dado. 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.