Apache seguro com Mod_Security

Started by Reeves, 18 de January , 2009, 04:14:01 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Reeves

* Neste tópico dou a dica de como deixar seu servidor web Apache mais seguro implementando o mod_security que é uma solução Open Source, com ele pode-se evitar alguns ataques como sql injection, RFI dentre outros muitos... assim criando uma camada de proteção contra crackers mesmo que seu código seja vuneravel, pode-se considerar o mod_security como uma espécie de 'firewall', 'IDS' para o web server.
já vi varios artigos sobre o mod_secuirty... mas estou escrevendo meu ponto de vista junto dos 'macetes' que aprendi com tempo e pesquisas...
vejamos. *




~# ok vamos considerar que você já possua seu webserver instalado... seja com sua configuração ou mesmo com o as configurações default.
vamos ao teste: http://localhost/
se abriu seu apache está ativo
não vou entrar em detalhes sobre instalação/ativação do apache apenas por esse não ser o foco deste tópico.

Considere os seguintes detalhes de minha instalação:

  • Apache/2.2.8 (Unix)
  • Meu arquivo de configuração encontra-se em /etc/httpd/httpd.conf


Vamos baixar o mod_security e instalar:
Pegue a ultima versão do pacote em http://www.modsecurity.org/download/direct.html
wget -c http://www.modsecurity.org/download/modsecurity-apache_2.5.7.tar.gz
tar -xvzf modsecurity-apache_2.5.7.tar.gz
cd modsecurity-apache_2.5.7/
./configure && make && make install



Após compilar e instalar o mod_security, vamos verificar se ele adicionou o módulo automaticamente ao httpd.conf
Busque por:
LoadModule security2_module lib/httpd/modules/mod_security2.so
em seu httpd.conf, caso não saiba a localização de seu arquivo de configuração ache ele com:
locate httpd.conf

Após a confirmação do módulo do security em seu .conf, então ele se encontra instalado.
Vejamos as opções de como configurar ele dentre outras dicas...


Baixando as regras oficiais de segurança do mod_security:
Pegue a ultima versão do pacote em http://www.modsecurity.org/download/direct.html
mkdir mod_security_regras
cd mod_security_regras/
wget -c http://www.modsecurity.org/download/modsecurity-core-rules_2.5-1.6.1.tar.gz
tar -xvzf modsecurity-core-rules_2.5-1.6.1.tar.gz


Observe que veio varios tipos de regras de proteção para você utilizar na sua configuração, depende de você observar e ver quais deverão ser utilizadas em seu web server.
Para adicionar as modsecurity-core-rules escolhidas... eu adiciono no httpd.conf, veja parte de meu httpd.conf como exemplo.


ServerRoot "/usr"

# Esconde assinatura e modulos compilados.
# deixei comentado, pois prefiro fingir ser IIS
#ServerTokens Prod
#ServerSignature Off

Timeout 300

KeepAlive Off
MaxKeepAliveRequests 100
KeepAliveTimeout 15

ServerAdmin admin@localhost

Listen *:80

LoadModule security2_module lib/httpd/modules/mod_security2.so

# ----------------------------------------------------------------------- #
  <IfModule mod_security.c>
# ----------------------------------------------------------------------- #
# Modulo de seguranca para o servidor Web

    SecFilterEngine On
    SecFilterCheckURLEncoding On
    SecFilterCheckUnicodeEncoding Off

    SecFilterForceByteRange 0 255

    # Local dos logs
        SecFilterDebugLog /var/log/modsecurity_audit
    # Logs apenas do que for relevante.
        SecAuditEngine RelevantOnly

    # Exibe pagina de aviso.
    SecFilter "'" redirect: http://localhost/aviso.html

    # Verificar POST payloads
    SecFilterScanPOST On

    # Logar e negar requisicoes suspeitas de erros status HTTP 500
    SecFilterDefaultAction "deny,log,status:500"

    # Para testes minimos
    SecFilterDebugLog /var/logs/modsecurity_debug
    SecFilterDebugLevel 0

    # Regras de defesa geral
    SecFilter /etc/password
    SecFilter /bin/ls
    SecFilter "\.\./"
   
   # XSS attacks
    SecFilter "<(.|\n)+>"
    SecFilter "<[[:space:]]*script"

    # SQL injection attacks
    SecFilter "delete[[:space:]]+from"
    SecFilter "insert[[:space:]]+into"
    SecFilter "select.+from"
    SecFilter "drop[[:space:]]table"
    SecFilter "union"

</IfModule>

# Confundindo Lammer's
    SecServerSignature "Microsoft-IIS/5.0"
# ---------------------------------------------------------------------- #

# Proteger form contra spammers, coloque o caminho obsoludo de seu formail
#subistitua o darkers.com.br para seu endereço de website
#<Location /cgi-bin/FormMail>
#    SecFilterSelective "ARG_recipient" "!@darkers\.com.br$"
#</Location>



Esse é apenas um exemplo de como pode ser adicionado as regras de proteção ao seu mod_security.
Repare nas seguintes linhas em especial do .conf exibido acima.

  <IfModule mod_security.c>
  </IfModule>

Inicio e fim das configurações para o mod_security

ServerTokens Prod
ServerSignature Off

Com esses parametros pode-se esconder os modulos compilados junto ao apache, assim não passando facilmente informações sobre seu webserver nas páginas de erro default.
ex:
Apache/2.2.10 (Unix) mod_ssl/2.2.10 OpenSSL/0.9.8b mod_bwlimited/1.4 mod_jk/1.2.25 mod_perl/2.0.4 Perl/v5.8.8 Server at www.cafedaweb.com.br Port 80


# Confundindo Lammer's
    SecServerSignature "Microsoft-IIS/5.0"

Com isso, faço meu apache fingir ser um servidor web IIS 5.0 da M$, apenas para confundir os kiddies e seus scans de vunerabilidades web.


<Location /cgi-bin/FormMail>
    SecFilterSelective "ARG_recipient" "!@darkers\.com.br$"
</Location>

Essa é uma proteção contra SPAMMERS que você pode adicionar... assim apenas enviando os forms de contato para o email pré-configurado.

Outra grande sacada é que você  pode criar suas proprias regras de bloqueio.  :)

E é isso, perca um tempo avaliando as modsecurity core rules, crie suas rules e seja feliz com um web server mais seguro.


Espero ter lhes ajudado, caso haja dúvidas é só falar.


Hug's
  °vº   NÃO USE DROGAS,
/(_)\  USE GNU/LINUX
^ ^

KEst

#1
Valeu Reeves, vai ajudar o mundo inteiro!

by KEst
¬¬

Campanha Converta-se a Gnu is Not Unix/Linux

DarkGenesis

#2
Reeves sempre trazendo seus macetes aqui para o DK. =]

Parabéns cara, suas façanhas são sempre bem vindas aqui.  8)

kohx

#3
Excelente Reeves!  ;)

Atualmente uso lighttpd aqui...


Abraços!


Triplo X

Excelente post brother!!!

Mas me diga Reeves, tem algum tuto parecido pra tomcat tb?

[]s.
Não me venha dizer que é melhor que alguém que eu te espanco!
Todos não passamos de ratinhos que morrerão um dia como todos os outros...

remontti

precisei instalar no meu

apt-get install kernel-package libncurses5-dev fakeroot wget bzip2 build-essential libselinux1 libselinux1-dev debhelper linuxdoc-tools libcap-dev apache2-threaded-dev libxml2-dev

pois na hora de compilar estava dando alguns erro...  :o



guioximitsu

Bom tópico, vai ajudar muitos que operam servidores e querem segurança  :)
"Inteligência busca Sabedoria"

VonNatur

Demorei mas achei, excelente cara

[]'s