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
