Instalando o ModSecurity Detection: Open Source Web Application Firewall

Share:

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.


4 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
  2. Matheus, obrigado pelo post, tá dificil achar algo assim.
    Porém, quando vou criar um link simbolico, gera o seguinte erro:

    ln: failed to create symbolic link '/etc/modsecurity/activated_rules/util': No such file or directory

    Se puder me ajudar, Obrigado

    ResponderExcluir