Instalação e Configuração do ModSecurity 2.8 com Apache + Core Rules
Fala galera, hoje vamos falar um pouquinho de segurança, mais especificamente de segurança defensiva, muitos conhecem ou pelo menos já ouviram falar do ModSecurity, bem, iremos abordar o passo a passo da instalação e configuração dessa maravilhosa ferramenta, para aqueles que nunca ouviram falar do Mod Security segue uma breve explicação.
O Mod Security é um Web Application Firewall que atua na camada 7 do modelo OSI e tem por objetivo bloquear diversos tipos de ataques, como o Cross-Site Scripting (XSS), SQL Injection, Command Injection, ASP e PHP Injection, Trojans & Backdoors Detection, dentre outros, que variam de acordo com as regras existentes, ele filtra todas as requisições e respostas entre o servidor Web e o cliente fazendo a checagem das regras que estão em vigor. Atualmente é suportado pelo Apache, IIS7 e Nginx.
O objetivo desse artigo é mostrar que o Mod Security não é um bicho de sete cabeças que muita gente fala, ele é PRIMORDIAL para a segurança de seu site, então chega de papo e vamos começar a “brincadeira”.
Ambiente do Lab
O sistema operacional que estou utilizando é um Ubuntu Server 14.04, você pode ficar à vontade para usar a distro que você preferir, também estou utilizando o WordPress como aplicação Web com o Apache, caso você não tenha lido acesse Instando o WordPress do Zero Passo-a-Passo.
Instalação
Vamos começar instalando os pacotes necessários para compilar nosso Mod Security:
# apt-get install apache2-threaded-dev libxml2-dev libcurl4-gnutls-dev liblua5.1-0 liblua5.1-0-dev build-essential
Vá até o diretório /opt e faça o download do modsecurity:
# cd /opt/ && wget https://www.modsecurity.org/tarball/2.8.0/modsecurity-2.8.0.tar.gz
Agora descompacte o arquivo e acesse o diretório criado:
# tar -xvzf modsecurity-2.8.0.tar.gz && cd modsecurity-2.8.0
Agora iremos iniciar a compilação com o ./configure fazendo as configurações de path e verificando as dependências:
# ./configure --with-apxs=/usr/bin/apxs2 --with-pcre=/usr/bin/pcre-config --with-apr=/usr/bin/apr-config --with-apu=/usr/bin/apu-config --with-libxml=/usr/bin/xml2-config --with-curl=/usr/bin/curl-config
Depois compile e instale o Mod Security:
Depois de tudo instalado é hora de copiar a biblioteca do Mod Security para o diretório de módulos do apache:
# cp /usr/local/modsecurity/lib/mod_security2.so /usr/lib/apache2/modules/
Agora iremos baixar o core rules do Spider Labs. A empresa Spider Labs, mantem um projeto livre chamado core rules, esse projeto contém milhares de regras capazes de mitigar as principais vulnerabilidades e ataques a aplicações web.
Vá até o diretório do apache e baixe a última versão do core rules:
# cd /etc/apache2/ && wget https://codeload.github.com/SpiderLabs/owasp-modsecurity-crs/legacy.tar.gz/master
Descompacte o arquivo:
# tar -xvzf master
Mude o nome do diretório para ficar mais legível
Agora iremos renomear o arquivo modsecurity_crs_10_setup:
# mv modsecurity_crs_10_setup.conf.example modsecurity_crs_10_setup.conf
Agora iremos criar um link simbólico para o diretório activated_rules que como o próprio nome já diz é onde contém as regras ativas do nosso Mod Security
# ln -s /etc/apache2/ModSecurity/modsecurity_crs_10_setup.conf /etc/apache2/ModSecurity/activated_rules/modsecurity_crs_10_setup.conf
Depois iremos copiar o arquivo modsecurity.conf e o unicode.mapping para o diretório do apache e renomear o modsecurity.conf:
Modifique o local dos logs do Mod Security, abra o arquivo modsecurity.conf e procure a entrada SecAuditLog e deixe como é mostrado abaixo:
# pico modsecurity.conf
SecAuditLog /var/log/apache2/modsec_audit.log
Depois disso iremos criar os arquivos mod_security2.conf e mod_security2.load para ativar o modulo do Mod Security no Apache:
Inclua o seguinte conteúdo no arquivo:
<IfModule security2_module>
SecDataDir /var/cache/modsecurity
Include "/etc/apache2/ModSecurity/modsecurity.conf"
Include "/etc/apache2/ModSecurity/activated_rules/*.conf"
</IfModule>
# pico mod_security2.load
Adicione as seguintes linhas no arquivo:
LoadFile /usr/lib/libxml2.so.2LoadModule security2_module /usr/lib/apache2/modules/mod_security2.so
Agora iremos criar um link simbólico para a biblioteca do xml2:
Se seu Linux for 64bits execute:
# ln -s /usr/lib/x86_64-linux-gnu/libxml2.so.2 /usr/lib/libxml2.so.2
Se ele for 32bits execute:
# ln -s /usr/lib/i386-linux-gnu/libxml2.so.2 /usr/lib/libxml2.so.2
Ative o modulo do Mod Security e o modulo Unique_Id no apache:
Reinicie o apache:
# service apache2 restart
Execute o comando abaixo para listar os módulos ativos:
# apachectl -t -D DUMP_MODULES
Verifique se a saída contém os módulos abaixo:
unique_id_module (shared)security2_module (shared)
Pronto agora nosso Mod Security já está funcionando, vamos configurar as regras, entre no diretório base_rules e copie todas as regras para o activated_rules:
Agora entre no diretório slr_rules e copie todas as regras para o activated_rules:
Copie também as regras especificas para o WordPress:
# cp modsecurity_46_slr_et_wordpress.data /etc/apache2/ModSecurity/activated_rules/
Depois entre no diretório optional_rules e copie as seguintes regras para o activated_rules:
Entre no diretório experimental_rules e copie as seguintes regras para o activated_rules:
Baixe o banco de dados de Geo Ip para a regra de Proxy Abuse poder funcioar:
Agora modifique o local do db no arquivo modsecurity_crs_11_proxy_abuse.conf:
# pico activated_rules/modsecurity_crs_11_proxy_abuse.conf
Procure a entrada SecGeoLookupDb e deixe assim:
SecGeoLookupDb /etc/apache2/ModSecurity/GeoLiteCity.dat
Agora desative a regra que bloqueia o acesso por ip ao nosso site, comente a linha 98 do arquivo modsecurity_crs_21_protocol_anomalies.conf:
# pico activated_rules/modsecurity_crs_21_protocol_anomalies.conf
Reinicie o Apache
# service apache2 restart
Agora de o comando abaixo para acompanhar os logs gerados pelo Mod Security. Lembre-se que o Mod Security ainda não está bloqueando os ataques, ele está simplesmente gerando alerta. No início é muito importante você não ativar o Mod Security pois você vai receber muitos falsos positivos, o ideal é você analisar os logs e criar as exceções para diminuir o máximo de falsos positivos possíveis.
# tail -f /var/log/apache2/modsec_audit.log
Depois no seu browser, realize algum ataque, pode ser Sql Injection, XSS ou rodar algum scanner como o Nessus, WpScan ou o Nikto, depois veja os alertas sendo gerados no terminal.
Para fazer o Mod Security bloquear os ataques você vai abrir o arquivo modsecurity.conf e procurar a entrada SecRuleEngine:
# pico modsecurity.conf
Deixe a entrada SecRuleEngine assim:
#SecRuleEngine DetectionOnlySecRuleEngine On
Reinicie o Apache
# service apache2 restart
Agora faça um teste, no seu browser, clique em algum post e coloque uma aspa no final, assim:
Você deverá receber um forbidden, isso significa que seu Mod Security está bloqueando os ataques. Como eu disse antes você vai receber bastante falso positivo, principalmente na hoje que tiver logado no WordPress. Para ajustar seu Mod Security você vai precisar criar as exceções, para isso você precisar analisar os logs para ver o que aconteceu. Por exemplo, ao entrar no http://seu.servidor/wp-login.php e tentar logar, você vai receber um Forbidden, então vá até o log e veja o que aconteceu:
# pico /var/log/apache2/modsec_audit.log
Você vai ver algo parecido com isso:
As linhas em negrito são as que mais nos interessa nesse momento, elas nos dizem que ao dar um POST na url /wordpress2/wp-login.php foi gerado um alerta de ID 950117, o que precisamos fazer é criar uma exceção para essa url, abra o arquivo modsecurity.conf e no final no arquivo coloque as seguintes linhas:
<LocationMatch “/wp-login.php”>SecRuleRemoveById 950117</LocationMatch>
Agora reinicie o Apache
# service apache2 restart
Provavelmente você irá receber mais alguns alertas, então você deverá fazer o mesmo processo até que acerte as regras do Mod Security para não gerar mais esses falsos positivos, coloque o Mod Security em DetectionOnly e analise os alertas. É um trabalho bem cansativo mas que faz toda a diferença na segurança de seu site.
Galera é isso ai, espero que esse artigo ajude bastante gente e aumente a segurança dos sites por ai, futuramente irei abordar a instalação do Mod Security no Nginx e mostrar todas ou pelo menos a maioria das exceções que você precisa para usar o WordPress sem tomar block. Até a próxima.
- Metasploit Framework de cabo a rabo – Parte 6 - 4 de junho de 2018
- Metasploit Framework de cabo a rabo – Parte 5 - 28 de maio de 2018
- CEH – Scanning Networks – Parte 2 - 24 de maio de 2018
Para desabilitar completamente o ModSecurity é só entrar com o comando “a2dismod mod_security2”?
Exatamente Guilherme.
Obrigado, Ricardo! 🙂