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;
Curti posto...
ResponderExcluirFarei Testes ao longo da semana
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