Proteja Seu Apache Com mod_security
Versão 1.0
Autor: Falko Timme
Este artigo mostra como instalar e configurar o mod_security. O mod_security é um módulo do Apache (para Apache 1 e 2) que fornece detecção e prevenção de intrusões para aplicações web. Seu objetivo é proteger aplicações web de ataques conhecidos e desconhecidos, como ataques de injeção SQL, cross-site scripting, ataques de travessia de caminho, etc.
No primeiro capítulo, mostrarei como instalar o mod_security no Debian Sarge, Ubuntu 6.06 LTS (Dapper Drake) e no Fedora Core 5, e no segundo capítulo descreverei como configurar o Apache para o mod_security, que é independente da distribuição que você está usando.
Quero dizer primeiro que esta não é a única maneira de configurar um sistema assim. Existem muitas maneiras de alcançar esse objetivo, mas este é o caminho que eu sigo. Não dou nenhuma garantia de que isso funcionará para você!
1 Instalação
1.1 Debian Sarge
O mod_security está disponível como um pacote Debian nos repositórios padrão do Debian, portanto, a instalação é tão simples quanto isto:
apt-get install libapache2-mod-security
a2enmod mod-security
/etc/init.d/apache2 force-reload
1.2 Ubuntu 6.06 LTS (Dapper Drake)
A instalação é exatamente a mesma que no Debian Sarge:
apt-get install libapache2-mod-security
a2enmod mod-security
/etc/init.d/apache2 force-reload
1.3 Fedora Core 5
No Fedora, você pode instalar e ativar o mod_security assim:
yum install mod_security
/etc/init.d/httpd restart
Agora você deve encontrar o arquivo /etc/httpd/conf.d/mod_security.conf que já contém uma configuração básica do mod_security:
vi /etc/httpd/conf.d/mod_security.conf
| # Exemplo de arquivo de configuração para o módulo mod_security do Apache LoadModule security_module modules/mod_security.so # Ativar ou desativar o mecanismo de filtragem SecFilterEngine On # O mecanismo de auditoria funciona de forma independente e # pode ser ativado ou desativado por servidor ou # por diretório SecAuditEngine RelevantOnly # Certifique-se de que a codificação da URL é válida SecFilterCheckURLEncoding On # Verificação de codificação Unicode SecFilterCheckUnicodeEncoding On # Permitir apenas bytes deste intervalo SecFilterForceByteRange 1 255 # Verificações de formato de cookie. SecFilterCheckCookieFormat On # O nome do arquivo de log de auditoria SecAuditLog logs/audit_log # O mod_security deve inspecionar os payloads POST SecFilterScanPOST On # Ação padrão definida SecFilterDefaultAction "deny,log,status:406" # Filtro de exemplo simples # SecFilter 111 # Prevenir ataques de travessia de caminho (..) # SecFilter "\.\./" # Proteção XSS mais fraca, mas permite tags HTML comuns # SecFilter "<( |\n)*script" # Prevenir ataques XSS (injeção HTML/Javascript) # SecFilter "<(.|\n)+>" # Filtros muito rudimentares para prevenir ataques de injeção SQL # SecFilter "delete[[:space:]]+from" # SecFilter "insert[[:space:]]+into" # SecFilter "select.+from" # Exigir cabeçalhos HTTP_USER_AGENT e HTTP_HOST SecFilterSelective "HTTP_USER_AGENT|HTTP_HOST" "^$" # Aceitar apenas codificações de requisição que sabemos como lidar # excluímos requisições GET disso porque alguns (automatizados) # clientes fornecem "text/html" como Content-Type SecFilterSelective REQUEST_METHOD "!^GET$" chain SecFilterSelective HTTP_Content-Type "!(^$|^application/x-www-form-urlencoded$|^multipart/form-data)" # Exigir que Content-Length seja fornecido com # cada requisição POST SecFilterSelective REQUEST_METHOD "^POST$" chain SecFilterSelective HTTP_Content-Length "^$" # Não aceitar codificações de transferência que sabemos que não lidamos # (e você não precisa disso de qualquer maneira) SecFilterSelective HTTP_Transfer-Encoding "!^$" # Algumas regras comuns relacionadas a aplicações de # http://modsecrules.monkeydev.org/rules.php?safety=safe #Nuke Bookmarks XSS SecFilterSelective THE_REQUEST "/modules\.php\?name=Bookmarks\&file=(del_cat\&catname|del_mark\&markname|edit_cat\&catname|edit_cat\&catcomment|marks\&catname|uploadbookmarks\&category)=(<[[:space:]]*script|(http|https|ftp)\:/)" #Nuke Bookmarks Marks.php Vulnerabilidade de Injeção SQL SecFilterSelective THE_REQUEST "modules\.php\?name=Bookmarks\&file=marks\&catname=.*\&category=.*/\*\*/(union|select|delete|insert)" #Tentativa geral de XSS do PHPNuke #/modules.php?name=News&file=article&sid=1&optionbox= SecFilterSelective THE_REQUEST "/modules\.php\?*name=<[[:space:]]*script" # Tentativa de injeção SQL do PHPNuke SecFilterSelective THE_REQUEST "/modules\.php\?*name=Search*instory=" #inserção sql do phpnuke SecFilterSelective THE_REQUEST "/modules\.php*name=Forums.*file=viewtopic*/forum=.*\'/" # WEB-PHP phpbb quick-reply.php tentativa de comando arbitrário SecFilterSelective THE_REQUEST "/quick-reply\.php" chain SecFilter "phpbb_root_path=" #Ataque de Cross-Site Scripting do Mod de Calendário do phpBB SecFilterSelective THE_REQUEST "/calendar_scheduler\.php\?start=(<[[:space:]]*script|(http|https|ftp)\:/)" # phpMyAdmin: Seguro #phpMyAdmin Export.PHP Vulnerabilidade de Divulgação de Arquivo SecFilterSelective SCRIPT_FILENAME "export\.php$" chain SecFilterSelective ARG_what "\.\." #caminho vln do phpMyAdmin SecFilterSelective REQUEST_URI "/css/phpmyadmin\.css\.php\?GLOBALS\[cfg\]\[ThemePath\]=/etc" |
Você pode manter esta configuração, mas para obter uma melhor compreensão do que o mod_security pode fazer, você deve comentar a parte …, reiniciar o Apache e seguir o capítulo 2. Depois disso, você pode criar seu próprio conjunto de regras do mod_security ou simplesmente voltar para este.