domingo, 3 de janeiro de 2016

ModSecurity Web Application Firewall: Configurando Regras de Bloqueio de SQL Injection e XSS



No outro post demonstramos como fazer a instalação e configuração do ModSecurity no modo Detection Only, onde configuramos a ferramenta para gravar vários logs de possíveis ataques gerados pelos erros de SQL Injection, XSS entre outros. Neste tutorial, estarei demonstrando como efetuar a configuração da engine de segurança do ModSecurity para adotar somente regras pertinentes a segurança ofensiva, bloqueando ataques comuns no servidos a nível de aplicação. Eu sei que pode parecer redundante, mas vou abordar a instalação do ModSecurity mais uma vez, para deixar tanto esse tutorial quando do Detection Only bem completo.

Instalando o ModSecurity no Debian:

Caso ainda não esteja com o ambiente pronto:
 # sudo apt-get install apache2 php5 php5-mysql mysql-server  

Agora vamos instalar os pacotes para a utilização do ModSecurity:
 # sudo apt-get install apache2-threaded-dev libxml2-dev libcurl4-gnutls-dev liblua5.1-0 liblua5.1-0-dev build-essential php5-cli libghc-pcre-light-dev  

Vamos fazer o Download da Source:
 # apt-get install zip libapache2-mod-security2 libxml2 libxml2-dev libxml2-utils libaprutil1 libaprutil1-dev  

Parametrizando as configurações recomendadas do ModSecurity:
 # mv /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf  

Agora reinicie o Apache:
 # service apache2 restart  # ou
 # systemctl restart apache2  

Configurando o ModSecurity no Escopo de Security Engine

Edite o arquivo de configuração do ModSecurity e altere o SecRuleEngine para DetectionOnly

 # vim /etc/modsecurity/modsecurity.conf  
 SecRuleEngine On 
 SecRequestBodyAccess On 

Fazendo os Downloads das Rules do ModSecurity:

Faça o Download e extraia os arquivos de configuração das regras do ModSecurity:
 # wget https://github.com/SpiderLabs/owasp-modsecurity-crs/archive/master.zip  
 # unzip master.zip  
 # cp -R owasp-modsecurity-crs-master/* /etc/modsecurity/


Copie os arquivos das regras para os diretórios e crie os links simbólicos para a pasta de regras ativas do ModSecurity.
 # mv /etc/modsecurity/modsecurity_crs_10_setup.conf.example /etc/modsecurity/modsecurity_crs_10_setup.conf  
 # cd /etc/modsecurity  

Edite os arquivo security2.conf e adicione a linha em destaque apontando para a pasta onde estão as regras que acabamos de instalar:
 # vim /etc/apache2/mods-available/security2.conf  

 <IfModule security2_module>  
     # Default Debian dir for modsecurity's persistent data  
     SecDataDir /var/cache/modsecurity  
   
     # Include all the *.conf files in /etc/modsecurity.  
     # Keeping your local configuration in that directory  
     # will allow for an easy upgrade of THIS file and  
     # make your life easier  
     IncludeOptional /etc/modsecurity/*.conf  
     IncludeOptional /etc/modsecurity/base_rules/*.conf  
 </IfModule>                                                                                                                                                      

Agora habilite os headers das novas configurações do apache e reinicie o apache:
 # a2enmod headers   
 # service apache2 restart                                                                                                                                          


Configurando as Regras do ModSecurity

Agora vamos excluir as Base Rules e recriar o conteúdo da pasta com somente os módulos que queremos ativar:
 # rm -r /etc/modsecurity/base_rules/*  

Neste exemplo estaremos instalando regras de SQL Injection, XSS, uma base de dados para scanners e um arquivo de hardening básico a partir do arquivo de regras que extraímos anteriormente.

 # cp owasp-modsecurity-crs-master/base_rules/modsecurity_crs_41_sql_injection_attacks.conf /etc/modsecurity/base_rules/  
 # cp owasp-modsecurity-crs-master/base_rules/modsecurity_crs_41_xss_attacks.conf /etc/modsecurity/base_rules/  
 # cp owasp-modsecurity-crs-master/base_rules/modsecurity_crs_42_tight_security.conf /etc/modsecurity/base_rules/  
 # cp owasp-modsecurity-crs-master/base_rules/modsecurity_35_scanners.data /etc/modsecurity/base_rules/  


Fazendo os testes:

Subi uma aplicação vulnerável ao ataque de SQL Injection em no servidor que estamos configurando. Antes de eu subir as regras podemos ver que a aplicação é vulnerável ao ataque.Executei uma injeção básica e vimos que o servidor respondeu a Query. Depois de subir as regras, o servidor apresentou uma nova resposta, dando um Forbidden Error quando tentei injetar. Vamos tentar a exploração via SQLmap para ver como o servidor reage a Ataques Automatizados.




Resposta do SQLmap:

Primeiramente vamos testar o analisador de respostas de SQL Injection sem o Hardening efetuado no ModSecurity. Podemos ver que normalmente a aplicação reagiu as sucessivas querys que injetamos através do SQL Map.


Após o Hardening efetuado no servidor, utilizando o mesmo Script, podemos notar que todas as entradas de SQLinjection foram negadas pelo ModSecurity, acusando o parâmetro vulnerável 'id' como não injetável aos olhos do script;



SOBRE O AUTOR

Matheus Fidelis

http://msfidelis.github.io/

Power Ranger, Piloto de Helicópteros e Astronauta da NASA. Desenvolvedor Web PHP com foco em Backend e POO, Linux SysAdmin DevOps e Entusiasta Python. Criou esse site pra contribuir com a comunidade com coisas que aprende dentro de um setor maluco de TI :)

2 comentários:

  1. Curti posto...
    Farei Testes ao longo da semana

    ResponderExcluir
  2. Estou tendo um problema, tudo funcionou, to com tudo instalado, tudo que foi necessario, em funcionalidade ta tudo ok, o problema esta com o aceso ao phpmyadmin via localhost/phpmyadmin depois de ter feito toda configuração ele ficou dando o erro "Forbidden You don't have permission to access /phpmyadmin on this server." eu ja tentei permissões e configurar o 000-default do apache também, mas nada funcionou, poderia ajudar? desde já, agradeço pelo tutorial.

    ResponderExcluir

 
Nanoshots | Open Source Security, Linux e Tutoriais © 2015 - Designed by Templateism.com