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 InjectionXSS, 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;

 

 

Fonte: http://www.nanoshots.com.br/2016/01/modsecurity-web-application-firewall.html

.