Press "Enter" to skip to content

Hardening do Apache

Dando continuidade ao assunto segurança Web, onde já publique como habilitar o SSL e como fazer o redirect de http para https, agora mostro como fazer um hardening ( endurecimento ) deste grande webserver.

Umas das primeiras coisas a fazer após a instalação do Apache ou de qualquer serviço é limitar as opções de acesso. No caso do Apache faremos isso editando o arquivo /etc/apache2/sites-available/default.

Verifique a seção abaixo:

Options FollowSymLinks
AllowOverride None

Esta seção controla como o Apache tratará o diretório raiz do sistema de arquivos e todos os arquivos contidos nele.

Edite esta seção adcionando as seguintes linhas:

Order Deny,Allow
Deny from all
Options None
AllowOverride None

Isto fará com que o Apache não exiba qualquer arquivo do sistema de arquivos, não permitindo opções especiais (como symlinking, includes, ou scripts cgi), nem que sobreescrevam os arquivos .htaccess nos diretórios. No entanto, uma vez que queremos que o Apache acesse arquivos a partir do diretório /var/www/ , nós precisamos editar a seção abaixo:

Options FollowSymLinks MultiViews
Order allow,deny
Allow from all

Isto permite que o Apache disponibilize páginas contidas em /var/www e removendo Indexes, isto significa que os usuários não serão capazes de acessar o conteúdo dos diretórios na web.

É necessário reiniciar o Apache para que as efetuar as mudanças.

Ocultando a versão do servidor

Agora iremos configurar o Apache para ocultar informações sobre o sistema. Estas informações surgem quando ocorre uma tela de erro. Como o exemplo abaixo:

Error 404
Error 404

Para ocultar as informações do sistema edite o arquivo /etc/apache2/apache2.conf. Mudando a seguinte linha:

ServerTokens Full

para

ServerTokens Prod

Reinicie o Apache e faça o teste acessando uma página que não existe.

Instalando o Mod_Security

O módulo de segurança, o mod_security, é um módulo do Apache que será instalado para bloquear o monitoramento de requisições e respostas HTTP tanto quanto a negação de pacotes suspeitos.

Inicialmente instale as dependências necessárias

aptitude install libxml2-dev apache2-prefork-dev

Para baixar o source do mod_security clique AQUI, existem também pacotes pré-compilados para várias distros AQUI.
Para baixar o pacote .deb clique AQUI.

Se você optou por baixar o source execute os seguintes passos para compilar o módulo

tar zxvf modsecurity-apache_2.5.7.tar.gz

cd modsecurity-apache_2.5.7/apache2/

./configure && make && make install ( como root! )

Configurando o Apache

Agora acesse o diretório /etc/apache2/mods-available, acesse o arquivo modsecurity2.load e adicione as seguintes linhas:

LoadFile /usr/lib/libxml2.so
LoadModule security2_module /usr/lib/apache2/modules/mod_security2.so

Agora vá para um diretório acima, no caso o mods-enabled e crie um link simbólico para os arquivo editado anteriormente e para o arquivo mod_unique_id:

cd ../mods-enabled

ln -s ../mods-available/modsecurity2.load

ln -s ../mods-available/unique_id.load

Após reiniciar o Apache, verifique o aquivo de log que está em /var/log/apache2/error.log. Deverá existir a seguinte linha:

[Wed Dec 03 16:54:25 2008] [notice] ModSecurity for Apache/2.5.2 (http://www.modsecurity.org/) configured.

Configurando o Mod_security

Primeiro, as regras necessárias para inciar o funcionamento deste módulo encontra-se no diretório /modsecurity-apache_2.5.7/rules, copie estas regras para o diretório /var/lib/modsecurity/

cp modsecurity_crs_* /var/lib/modsecurity/

Informe ao Apache onde encontram-se a regras criando o arquivo /etc/apache2/conf.d/modsecurity2.conf e adicionando as seguintes linhas:

Include /var/lib/modsecurity/*.conf

Reinicie o Apache para efetivar as mudanças

Testando o Mod_security

Agora que o módulo já está configurado e rodando podemos realizar um teste simples usando o wget:

wget -O – -U “ngsecurity analyzer” http://

Se o mod_security estiver funcionando, será informado o erro 404:

alexos@cypher:~$ wget -O – -U “ngsecurity analyzer” http://
–19:13:17– http://
=> `-‘
Resolving meu_webtestserver… X.X.X.X
Connecting to meu_webtestserver|X.X.X.X|:80… connected.
HTTP request sent, awaiting response… 404 Not Found
19:13:17 ERROR 404: Not Found.

No servidor web execute o comando abaixo

tail /var/log/apache2/debug.log

ou

tail /var/log/apache2/audit.log

Vejam o que apareceu para mim!

[03/Dec/2008:17:18:17 –0500] [matrix/sid#855d8f0][rid#87357f8][/][1]
Access denied with code 404 (phase 2). Pattern match “(?:b(?:m(?:ozilla/4.0
(compatible)|etis)|ngsecurity analyzer|pmafind)b|n(?:-stealth|sauditor|
essus|ikto)|b(?:lack ?widow|rutus|ilbo)|(?:jaascoi|paro)s|webinspect|.nasl)” at
REQUEST_HEADERS:User-Agent. [file “/var/lib/modsecurity/modsecurity_crs_35_bad_robots.conf”]
[line “19”] [id “990002”] [msg “Request Indicates a Security Scanner Scanned the Site”]
[severity “CRITICAL”] [tag “AUTOMATION/SECURITY_SCANNER”]

Porque surgiu na expressão regular acima o “ngsecurity analyzer”, a requisição para o arquivo foi negada, mostrando que o mod_security está funcionando.

Então é isso moçada! Num próximo artigo falarei sobre Hardening do S.O.

* Hardening – É um processo de mapeamento das ameaças, mitigação dos riscos e execução das atividades corretivas – com foco na infra-estrutura e objetivo principal de torná-la preparada para enfrentar tentativas de ataque. ( Wikipedia )

Fonte:
Debian Clusters

4 Comments

  1. Alessandro Nakamuta Alessandro Nakamuta December 10, 2008

    O grande problema do mod_security é que terá que moldá-lo depois. Não é instalar e esquecer. E pode anotar, aprender a moldá-lo está longe de ser trivial. No começo o número de falsos positivos é imenso, muitos sites pararão de funcionar corretamente. Muitos sysadmin ficam frustrados com isso e acabam por desativá-lo.

  2. Jeferson Jeferson January 6, 2009

    Gostei.
    Uma otima dica.
    Irei implementar em meu site.
    Valeu ae Alex

Comments are closed.