ModSecurity 2 – Instalação e Configuração para Ubuntu 9.04 e Debian 5.04
Introdução:
O ModSecurity é um firewall de aplicação de código livre que roda como um módulo do servidor Web Apache e possui versões para Linux e Windows. O firewall de aplicação, também conhecido como WAF (Web Application Firewall) 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.
Apesar do conjunto de regras pre-existentes no ModSecurity ser funcional, a OWASP mantém um projeto que possui um conjunto de regras mais elaboradas e atualizadas, o ModSecurity Core Rule Set Project. Também é possível fazer o download de outras regras na Internet, sites de segurança ou ainda criar suas próprias regras e alterar as já existentes.
Nesse tutorial será descrito como efetuar uma completa instalação da versão 2.5.12 do Modsecurity de modo que não haja erros durante a instalação.
Para instalar o ModSecurity, você deve ter o Apache instalado. Se não tiver, você deve instalá-lo, conforme a seguir:
# sudo apt-get –f install apache2
É importante configurar a opção -f no apt-get para o aplicativo já procurar e tentar instalar as possíveis dependências do Apache2. Depois verifique se o Apache está rodando corretamente com o comando:
# /etc/init.d/apache2 status
E inicie o serviço, caso não esteja rodando:
# /etc/init.d/apache2 start
Agora, vamos criar uma página php vulnerável para podermos testar o comportamento da aplicação antes e o depois do ModSecurity.
# vi /var/www/index.php
<? $secret_file = $_GET[‘secret_file’];
include ($secret_file);?>
Para salvar e sair do vi: (ESC : x)
Agora, faça a requisição para a página criada usando seu navegado, curl ou links, com a seguinte sintaxe:
http://localhost/index.php?secret_file=/etc/passwd
===================================================================================
===================================================================================
Observe que ao invés de mostrar o conteúdo da página, a requisição traz o conteúdo do arquivo de senhas (passwd), isso porque no arquivo que criamos inserimos propositalmente uma vulnerabilidade que permite apontar para qualquer arquivo do sistema operacional por meio da variável “secret_file”.
Agora, vamos partir para a instalação do ModSecurity para ver se a mesma vulnerabilidade poderá ser explorada com o Firewall de aplicação instalado:
Instalação do ModSecurity
Agora que temos o Apache rodando, vamos fazer o download do ModSecurity.
# wget http://www.modsecurity.org/download/modsecurity-apache_2.5.12.tar.gz
Descompacte o arquivo e entre no diretório criado:
# tar zxvf modsecurity-apache_2.5.12.tar.gz
# cd modsecurity-apache_2.5.12/apache2
ATENÇÃO: Essa parte é muito importante, pois o ModSecurity necessita de uma ferramenta, o apxs ou apxs2 (APache eXtension Tool) para sua perfeita instalação. Antes de prosseguir, verifique se ele existe:
# find / -name apxs*
Se já existir ótimo, já é possível começar a instalar o ModSecurity. Caso não exista, teremos que instalar alguns pacotes que trazem o apxs:
# sudo apt-get -f install libxml2-dev liblua5.1-0 lua5.1 apache2-threaded-dev
Agora já podemos instalar o ModSecurity!
# sudo ./configure && make && make install
Após a instalação, deverá aparecer a seguinte mensagem:
See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
———————————————————————-
Altere a permissão do arquivo abaixo e reinicie o sistema.
# chmod 644 /usr/lib/apache2/modules/mod_security2.so
Quando o sistema subir, iremos alterar o arquivo de configuração de módulos do Apache para carregar os módulos do ModSecurity:
# sudo vi /etc/apache2/mods-available/mod-security2.load
E adicionamos as seguintes linhas:
LoadFile /usr/lib/libxml2.so
LoadFile /usr/lib/liblua5.1.so.0
LoadModule security2_module /usr/lib/apache2/modules/mod_security2.so
Salve e feche o arquivo.
Agora, vamos ativar os módulos adicionados:
# sudo a2enmod mod-security2
# sudo a2enmod unique_id
Deve aparecer a seguinte mensagem para ambos os comandos, mas ainda não há necessidade de reiniciar o serviço.
Run ‘/etc/init.d/apache2 restart’ to activate new configuration!
Configuração
Vamos configurar o ModSecurity:
# sudo vi /etc/apache2/conf.d/mod-security2.conf
# Include /etc/modsecurity2/*.conf
Salve e feche o arquivo.
Vamos criar um diretório para o ModSecurity e copiar as regras de detecção para o diretório criado:
# sudo mkdir /etc/modsecurity2
# sudo cp modsecurity-apache_2.5.12/rules/*.conf /etc/modsecurity2/
# sudo cp rules/base_rules/*.conf /etc/modsecurity2/
Precisamos criar também o diretório e arquivos de log e debug:
# mkdir /var/log/modsecurity2
# touch /var/log/modsecurity2/modsec_audit.log
# touch /var/log/modsecurity2/modsec_debug.log
E atualizar a localização desses arquivos no arquivo de configuração:
#sudo vi /etc/modsecurity2/modsecurity_crs_10_config.conf
Adicione o seguinte script no meio do arquivo.
#++++ Configure ModSecurity +++++
SecDebugLog /var/log/modsecurity2/modsec_debug.log
SecAuditLog /var/log/modsecurity2/modsec_audit.log
Salve e feche o arquivo.
Agora, vamos verificar se a configuração do Apache está correta com o comando:
# sudo apache2ctl configtest
Deverá retornar a mensagem “Syntax OK”
E, por último, vamos reiniciar o Apache:
# sudo /etc/init.d/apache2 restart
Verifique se o ModSecurity está rodando junto com o Apache:
# sudo cat /var/log/apache2/error.log | grep ModSecurity
Pronto! Se aparecer a mensagem abaixo seu ModSecurity está rodando!
[Mon Apr 26 08:47:07 2010] [notice] ModSecurity for Apache/2.5.12 (http://www.modsecurity.org/) configured
Agora, vamos realizar o teste novamente para ver se conseguimos explorar a vulnerabilidade testada anteriormente.
Como podemos observar pela mensagem retornada “403 Forbidden – You don’t have permission to Access /índex.php on this server”, o ModSecurity bloqueou o acesso ao arquivo índex.php, uma vez que por trás dele havia uma função maliciosa (ler o arquivo de senhas “passwd”).
Este é só um exemplo de como um firewall de aplicação pode ajudar a “tapar buracos” de uma aplicação mal desenvolvida, enquanto se providencia um código seguro, com os devidos controles de segurança e livre de vulnerabilidades.
Até a próxima! 🙂