Mod_Evasive

Mod_Evasive – DDoS Mitigation
Index –
  • x0001 – Conceitos Básicos
  • x0002 – Instalação/Configuração
  • x0003 – PoC

x0001 – Conceitos Básicos

Para falar de mitigação de DDoS é necessário antes de tudo definir o que é exatamente um DDoS. Porém, antes disso, é importante saber a diferença entre DoS e DDoS, ela é bem sucinta. DoS significa Denial of Service, traduzindo fica negação de serviço, consiste basicamente em negar um serviço, geralmente vinculado a serviços de rede, deixar tal serviço indisponível, por exemplo, um servidor web, DoS parte apenas de um host, vamos colocar que o atacante é apenas uma máquina. Já quando se fala em DDoS, que significa Distributed DoS, é basicamente a mesma coisa que DoS porém parte de várias origens, geralmente relacionado a botnets ou skidies que se reunem com os coleguinha de suas casa e disparam um ion cannon em um alvo.
Agora que temos definido a diferença entre DoS e DDoS podemos prosseguir em como um ataque desses ocorre, a maioria consiste em ocupar recursos do servidor até que ele pare de responder a conexões de usuários reais, causando assim uma indisponibilidade, o conceito de DoS é muito abrangente e pode ser aplicado a muitas coisas porém parte do principio de negar o serviço, então qualquer coisa que negue um serviço é um DoS. Existem várias técnicas de ataque de negação de serviço e esse não é o foco desse post porém caso você queria saber mais tem um DDoS Handbook muito interessante aqui.
Agora que reunimos informações acredito que suficientes para a discutir sobre a ferramenta, o módulo Mod_Evasive do apache é bem interessante e simples de implementar e melhor ainda é que funciona. È um módulo que consiste basicamente em tentar diminuir um impacto de um ataque de negação de serviço, ele funciona da seguinte forma:

  • Verifica quantas vezes o cliente tentou acessar tal diretório em determinado tempo.
  • Verifica quantas vezes o cliente tentou acessar o site em si em determinado tempo.
  • Caso o cliente já está em blacklist e as tentativas de acesso continuam.

Então a partir dessas informações ele trabalha bloqueando o acesso ao usuário dando um 403 status pro cliente, é bem interessante.

x0002 – Instalação/Configuração

A instalação é relativamente simples, vamos lá:
Sistema homogolado:


linux:/etc/apache2# cat /etc/*-release
NAME="openSUSE Leap"
VERSION="42.3"

Não irei abordar a instalação do httpd/apache2.

O pacote pode ser instalado pelo gerenciador de pacotes zypper, o pacote epel já está instalado aqui, então caso você não encontre o pacote, instale o epel e tente novamente.
Instalando a partir dos repositórios


linux:/etc/apache2# zypper install apache2-mod_evasive

Arquivo de Configuração:

/etc/apache2/conf.d/mod_evasive.conf

É nesse arquivo aonde toda a configuração acontece, a leitura dos comentários é essencial para entender o que cada variável faz, você calibra nesse arquivo o tempo máximo entre cada requisição do cliente, quanto tempo o cliente vai ficar na blacklist etc. Por ser algo extremamente fácil acredito que eu não deva explicar detalhadamente.

Algumas configurações que você pode habilitar são, para habilitar, remova o ‘#’ da frente da linha.
A opção abaixo habilita um diretório para o mod_evasive jogar os arquivos (com ip) que ele vai bloquear, você terá que criar o diretório.

DOSLogDir           "/var/lock/mod_evasive"

Criando o diretório para conter os locks:

linux:/etc/apache2 #mkdir /var/lock/mod_evasive && chown wwwrun. -R /var/lock/mod_evasive

Feito isso, precisamos reiniciar o apache2/httpd:

linux:/etc/apache2 #systemctl restart httpd

O módulo deve ter sido carregado automaticamente devido a primeira linha do arquivo de configuração

/etc/apache2/conf.d/mod_evasive.conf

.

Verifique os módulos com o comando abaixo:

linux:/etc/apache2# apachectl -M 

E procure pela linha que contenha:

 evasive24_module (shared)

Explicação das configurações:

  • DOSPageCount : Contador de requisições de uma só página.
  • DOSSiteCount: Contador de requisições feitas para todo o site.
  • DOSPageInterval: Intervalo aceitável entre as requisições feitas em páginas específicas.
  • DOSSiteInterval: Intervalo aceitável entre as requisições feitas em todo o site.
  • DOSBlockingPeriod: Período de bloqueio do IP em segundos.

Você pode estar habilitando a notificação por email também, porém não irei abordar aqui, você só precisaria ter um serviço/aplicação para disparar o email e habilitar no arquivo de configuração, é relativamente simples.

x0003 – PoC

Agora vamos a POC, eu escrevi um script em python3.5.2 que vai simular um ataque de DoS, você pode visualizar no repositório aqui.

Do lado esquerdo do vídeo é o atacante e do lado direito é o servidor web qual vai sofrer o ataque de DoS.
O Ataque começa rodando normal, como eu configurei o mod_evasive com um intervalo bem curto o bloqueio começa bem rápido ao ataque retornando o erro 403, que seria o erro de 403 Forbidden, uma coisa interessante é, o IP do atacante entrou na blacklist automaticamente, caso ele não pare de atacar, cada requisição que ele faz o tempo que ele vai ficar na blacklist é resetado, então nunca vai sair da blacklist caso ele não pare o ataque.

Vìdeo abaixo:

Caso tenha dúvidas ou encontrado erros ou qualquer coisa, entre em contato.

Fontes:
http://www.nanoshots.com.br/2016/10/apache-modevasive-uma-camada-de.html
https://www.digitalocean.com/community/tutorials/how-to-protect-against-dos-and-ddos-with-mod_evasive-for-apache-on-centos-7

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.