terça-feira, 29 de dezembro de 2015

Instalando o ModSecurity Detection: Open Source Web Application Firewall


O ModSecurity é um WAF (Web Application Firewall) Open Source muito poderoso no quesito de prevenção, mitigação e loggin de ações executadas a nível de aplicação do seu servidor.  Tecnicamente ele atua diretamente em Layer 7 da camada OSI e possui módulos configuráveis específicos para tratar e detectar ataques mais comuns como XSS, SQLInjection, Command Injection, Reverse Shell entre outros. Hoje a ferramente pode ser utilizada em diversos Web Servers como Apache, Tomcat, NGINX em diversos sistemas operacionais como Windows, BSD e Linux. Ele possui alguns modos de configuração como o Engine de Sec e a Engine de Detection. Para realizar a configuração de forma simplificada, estaremos abordando neste artigo o modo de Detecção, que basicamente não irá parar os ataques, somente irá gerar logs para o SysAdmin. A engine de proteção será abordada de forma mais detalhada futuramente.

Instalando o ModSecurity no Debian no Modo Detection:

Caso ainda não esteja com o ambiente pronto:
 # sudo apt-get install apache2 php php-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  

Fazendo o Download do Modsecurity:
 # 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 Detection Only

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

 # vim /etc/modsecurity/modsecurity.conf  
 SecRuleEngine DetectionOnly  
 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  
 # for f in * ; do ln -s /etc/modsecurity/base_rules/$f /etc/modsecurity/activated_rules/$f ; done  
 # for f in * ; do ln -s /etc/modsecurity/optional_rules/$f /etc/modsecurity/activated_rules/$f ; done  

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                                                                                                                                          


Testando os Logs:

Instalei no servidor uma aplicação Web Vulnerável, onde estarei realizando uma tentativa manual de SQL Injection afim de gerar logs no sistema. Abra o terminal e deixe o tail -f rodando, este modo irá dar uma view contínua as ultimas linhas do arquivo.


 # tail -f /var/log/apache2/modsec_audit.log  



Perceba que ele gerou um log da origem do ataque. Este modo de DetectionOnly não bloqueia os ataques de SQL Injection, XSS, DDoS entre outros. Para que a ferramenta funcione na opção de bloqueio, a mesma requer uma série de parametrizações que serão abordadas em outro post.


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 :)

3 comentários:

  1. Apresenta o seguinte erro na sgund criação de links simbólicos.
    for a in * ; do ln -s /etc/modsecurity/optional_rules/$a /etc/modsecurity/activated_rules/$a ; done
    ln: failed to create symbolic link “/etc/modsecurity/activated_rules/activated_rules”: Arquivo existe
    ln: failed to create symbolic link “/etc/modsecurity/activated_rules/base_rules”: Arquivo existe
    ln: failed to create symbolic link “/etc/modsecurity/activated_rules/CHANGES”: Arquivo existe
    ln: failed to create symbolic link “/etc/modsecurity/activated_rules/experimental_rules”: Arquivo existe
    ln: failed to create symbolic link “/etc/modsecurity/activated_rules/INSTALL”: Arquivo existe
    ln: failed to create symbolic link “/etc/modsecurity/activated_rules/LICENSE”: Arquivo existe
    ln: failed to create symbolic link “/etc/modsecurity/activated_rules/lua”: Arquivo existe
    ln: failed to create symbolic link “/etc/modsecurity/activated_rules/modsecurity.conf”: Arquivo existe
    ln: failed to create symbolic link “/etc/modsecurity/activated_rules/modsecurity_crs_10_setup.conf”: Arquivo existe
    ln: failed to create symbolic link “/etc/modsecurity/activated_rules/optional_rules”: Arquivo existe
    ln: failed to create symbolic link “/etc/modsecurity/activated_rules/README.md”: Arquivo existe
    ln: failed to create symbolic link “/etc/modsecurity/activated_rules/slr_rules”: Arquivo existe
    ln: failed to create symbolic link “/etc/modsecurity/activated_rules/unicode.mapping”: Arquivo existe
    ln: failed to create symbolic link “/etc/modsecurity/activated_rules/util”: Arquivo existe

    ResponderExcluir
    Respostas
    1. É comum esse erro, alguns das rules já existem no diretório. Pode prosseguir sem medo!

      Excluir

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