Pesquisar neste blog

terça-feira, 17 de abril de 2012

ModSecurity: Open Source Web Application Firewall - Segurança no Apache

ModSecurity Instalação e Configuraçã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



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.

Isso é tudo pessoal, até a próxima!


Nenhum comentário: