Академический Документы
Профессиональный Документы
Культура Документы
Protegendo seu
Servidor Web
1. Instalao do Ambiente em
Chroot
Vimos que com a instalao e configurao padro, nosso servidor vulnervel ataques,
alm de fornecer muitas informaes um possvel atacante, facilitando o trabalho dele
de comprometimento de nosso servidor. Por conta disso, vamos realizar uma nova
instalao do Apache e do PHP para melhorar sua segurana. O Apache e o PHP sero
reinstalados dentro de um ambiente seguro chamado chroot, que permite o
enjaulamento de aplicaes, fazendo com que aquilo que estiver dentro do conteiner
no tenha acesso mquina real. Vamos instalao e configurao de nosso ambiente
seguro com um sistema operacional prprio, separado da mquina real. Para instalar o
ambiente chroot no debian, vamos utilizar o debootstrap, ele ir nos auxiliar na criao
deste ambiente.
Aps executar o comando acima, perceba que o deboostrap ir baixar uma srie de
pacotes que so necessrios para que este mnimo ambiente funcione. Agora para que
o ambiente chroot funcione, precisamos de compartilhar o diretrio /proc da mquina
real dentro do chroot.
# mount --bind /proc/ /var/webserversecurity/proc
Vamos alterar o formato que o pronto aparece, para diferenciarmos a maquina real do chroot:
# vi .bashrc
# exit
Vamos alterar a configurao do mirror do apt para o mirro br, e atualizar os pacotes, caso
necessitem:
chroot:~# vi /etc/apt/sources.list
chroot:~# apt-get update
chroot:~# exit
Instalar o openssh-server:
chroot:~# apt-get install openssh-server ; instalar o ssh server
Feito isso, vamos fazer com o servio inicie sozinho quando o servidor der boot. Dentro
da mquina real, no arquivo /etc/rc.local adicione a seguinte linha:
/usr/sbin/chroot /var/webserversecurity /etc/init.d/ssh start
chroot:/# vi /etc/apache2/sites-available/default
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options -Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
chroot:/# vi /etc/apache2/conf.d/security
#
# Disable access to the entire file system except for the directories that
# are explicitly allowed later.
#
# This currently breaks the configurations that come with some web application
# Debian packages.
#
#<Directory />
#
AllowOverride None
Order Deny,Allow
#</Directory>
# Changing the following options will not really affect the security of the
# server, but might make attacks slightly more difficult in some cases.
#
# ServerTokens
# This directive configures what you return as the Server HTTP response
# Header. The default is 'Full' which sends information about the OS-Type
# and compiled in modules.
# Set to one of:
# where Full conveys the most information, and Prod the least.
#
#ServerTokens Minimal
#ServerTokens OS
#ServerTokens Full
ServerTokens Prod
#
# Optionally add a line containing the server version and virtual host
# name to server-generated pages (internal error documents, FTP directory
# listings, mod_status and mod_info output etc., but not CGI generated
# documents or custom error documents).
# Set to "EMail" to also include a mailto: link to the ServerAdmin.
# Set to one of:
On | Off | EMail
#
ServerSignature Off
Feito isso, vamos fazer com o servio inicie sozinho quando o servidor der boot. Dentro
da mquina real, no arquivo /etc/rc.local adicione a seguinte linha:
2. Suhosin
Suhosin um avanado sistema de proteo que foi desenvolvido com o objetivo
de proteger servidores e usurios de falhas nas aplicaes escritas em PHP e
implementar correes prpria base da linguagem. separado em duas partes
independentes que podem ser utilizadas em conjunto ou individualmente, sendo
que uma delas um patch a ser aplicado no core do PHP que implementa
proteo contra vulnerabilidades do sistema (Engine Protection) e a outra parte
uma extenso que coloca em funcionamento todas as outras protees e
implementaes de segurana.
Contra o qu o Suhosin nos protege?
Suhosin a nico proteo estvel e real disponvel contra remote file include
Protege contra HTTP Response Splitting Vulnerabilities
Protege contra scripts que manipulam o memory_limit
Adiciona proteo contra ataques ao mail()
Filtra caracteres ASCIIZ de inputs de usurios
Ignora variveis de GET, POST, COOKIE com os seguintes nome: GLOBALS, _COOKIE, _ENV,
_FILES, _GET, _POST, _REQUEST, _SERVER, _SESSION, HTTP_COOKIE_VARS,
HTTP_ENV_VARS,
HTTP_GET_VARS,
HTTP_POST_VARS,
HTTP_POST_FILES,
HTTP_RAW_POST_DATA, HTTP_SERVER_VARS, HTTP_SESSION_VARS
A mais fcil;
A mais difcil.
Vamos criar um apontamento para o arquivo do suhosin para sua chamada pelo php5 ser
efetiva:
chroot:~#/etc/php5/conf.d# ln -s ../mods-available/suhosin.ini
Ativar modificaes:
chroot:~#/etc/php5# /etc/init.d/apache2 restart
chroot:~#/etc/php5# vi /etc/php5/mods-available/suhosin.ini
#Qual ao o Suhosin executar ao filtrar algo (a opo 402 far com que o
cdigo no seja executado e retornse uma resposta HTTP):
suhosin.filter.action=402
suhosin.post.max_array_depth=8048
suhosin.post.max_array_index_length=1024
suhosin.post.max_name_length=2048
suhosin.post.max_totalname_length=8048
suhosin.post.max_vars=4096
include,
include_once, require,
pcntl_wtermsig,
socket_accept,
socket_bind,
#Armazenar em log todas as aes, alm das queries SQL que falharam, com o
syslog:
suhosin.log.syslog = S_ALL & ~S_SQL
chroot:~# vi /etc/php5/apache2filter/php.ini
proc_get_status, proc_nice,
proc_terminate,
#Desativar expose_php, para evitar que informaes sobre o PHP sejam exibidas
para o usurio, a menos que uma url esteja como .php:
expose_php = off
http://php.net/diskfreespace
http://php.net/dl
http://php.net/exec
http://php.net/fpaththru
10
http://php.net/getmypid
http://php.net/getmyuid
http://php.net/highlight_file
http://php.net/ignore_user_abord
Aplicar modificaes
chroot:~# /etc/init.d/apache2 restart
chroot:~# apachectl M
3. ModSecurity + Geo IP
O Mod Security um Web Application Firewall que atua na camada 7 do modelo OSI e
tem por objetivo bloquear diversos tipos de ataques, como o Cross-Site Scripting (XSS),
SQL Injection, Command Injection, ASP e PHP Injection, Trojans & Backdoors Detection,
dentre outros, que variam de acordo com as regras existentes, ele filtra todas as
requisies e respostas entre o servidor Web e o cliente fazendo a checagem das regras
que esto em vigor. Atualmente suportado pelo Apache, IIS7 e Nginx.
Vamos comear instalando os pacotes necessrios para compilar nosso Mod Security:
chroot:~# apt-get install apache2-threaded-dev libxml2-dev
libcurl4-gnutls-
chroot:~# make
chroot:~# make install
Depois de tudo instalado hora de copiar a biblioteca do Mod Security para o diretrio
de mdulos do apache:
chroot:~# cp /usr/local/modsecurity/lib/mod_security2.so
/usr/lib/apache2/modules/
Agora iremos baixar o core rules do Spider Labs. A empresa Spider Labs, mantem um
projeto livre chamado core rules, esse projeto contm milhares de regras capazes de
mitigar as principais vulnerabilidades e ataques a aplicaes web.
V at o diretrio do apache e baixe a ltima verso do core rules:
chroot:~# cd /etc/apache2/ &&
wget https://codeload.github.com/SpiderLabs/owasp-modsecuritycrs/legacy.tar.gz/master
Descompacte o arquivo:
chroot:~# tar -xvzf master
Agora iremos criar um link simblico para o diretrio activated_rules que como o prprio
nome j diz onde contm as regras ativas do nosso Mod Security
chroot:~# ln -s /etc/apache2/ModSecurity/modsecurity_crs_10_setup.conf
/etc/apache2/ModSecurity/activated_rules/modsecurity_crs_10_setup.conf
12
Modifique o local dos logs do Mod Security, abra o arquivo modsecurity.conf e procure a
entrada SecAuditLog e deixe como mostrado abaixo:
chroot:~# vi modsecurity.conf
SecAuditLog /var/log/apache2/modsec_audit.log
Reinicie o apache:
chroot:~# service apache2 restart
Pronto agora nosso Mod Security j est funcionando, vamos configurar as regras, entre
no diretrio base_rules e copie todas as regras para o activated_rules:
chroot:~# cd ../ModSecurity/base_rules/
chroot:~# cp * /etc/apache2/ModSecurity/activated_rules/
Baixe o banco de dados de Geo Ip para a regra de Proxy Abuse poder funcioar:
14
chroot:~# cd ..
chroot:~# wget
http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
chroot:~# gunzip GeoLiteCity.dat.gz
Agora desative a regra que bloqueia o acesso por ip ao nosso site, comente a linha 98
do arquivo modsecurity_crs_21_protocol_anomalies.conf:
chroot:~# vi activated_rules/modsecurity_crs_21_protocol_anomalies.conf
Reinicie o Apache
chroot:~# service apache2 restart
Agora de o comando abaixo para acompanhar os logs gerados pelo Mod Security.
Lembre-se que o Mod Security ainda no est bloqueando os ataques, ele est
simplesmente gerando alerta. No incio muito importante voc no ativar o Mod
Security pois voc vai receber muitos falsos positivos, o ideal voc analisar os logs e
criar as excees para diminuir o mximo de falsos positivos possveis.
chroot:~# tail -f /var/log/apache2/modsec_audit.log
Depois no seu browser, realize algum ataque, pode ser Sql Injection, XSS ou rodar algum
scanner como o w3af, wpScan ou o Nikto, depois veja os alertas sendo gerados no
terminal.
Para fazer o Mod Security bloquear os ataques voc vai abrir o arquivo modsecurity.conf
e procurar a entrada SecRuleEngine:
chroot:~# vi modsecurity.conf
15
SecRuleEngine On
Reinicie o Apache
chroot:~# service apache2 restart
Agora faa um teste, no seu browser, clique em algum post e coloque uma aspa no
final, assim:
http://seu.servidor/?p=1
Voc dever receber um forbidden, isso significa que seu Mod Security est bloqueando
os ataques. Para ajustar seu Mod Security voc vai precisar criar as excees, para isso
voc precisar analisar os logs para ver o que aconteceu. Por exemplo, ao entrar
no http://seu.servidor/?p=1, voc vai receber um Forbidden, ento v at o log e veja o
que aconteceu:
chroot:~# vi /var/log/apache2/modsec_audit.log
16
Accept-Language: pt-BR,pt;q=0.8,en-US;q=0.6,en;q=0.4
--06af3f02-H-Message: Access denied with code 403 (phase 2). Pattern match
"(^[\"'`\xc2\xb4\xe2\x80\x99\xe2\x80\x98;]+|[\"'`\xc2\xb4\xe2\x80\x99\xe2\x80\
x98;]+$)" at ARGS:p. [file
"/etc/apache2/ModSecurity/activated_rules/modsecurity_crs_41_sql_injection_att
acks.conf"] [line "64"] [id "981318"] [rev "2"] [msg "SQL Injection Attack:
Common Injection Testing Detected"] [data "Matched Data: ' found within
17
--06af3f02-Z--
Provavelmente voc ir receber mais alguns alertas, ento voc dever fazer o mesmo
processo at que acerte as regras do Mod Security para no gerar mais esses falsos
positivos, coloque o Mod Security em DetectionOnly e analise os alertas.
4. Mod Evasive
O Apache tem algumas ferramentas para auxlio a proteo da sua mquina e uma delas
o mod_evasive, que proteger pelo menos o DDOS. Mod_evasive um mdulo de
segurana do Apache que proporciona bloqueio de acessos em massa ou ataques de
fora bruta ao site. A inteno dele bloquear e separar os acessos em massa a rea,
atravs de uma interface que guarda os acessos gerando uma blacklist dos acessos
impedindo o acesso dos mesmos por um tempo configurvel.
A ideia retornar o status code 403 - forbidden para os acessos aps terem sido
bloqueados. Aps 10 segundos, perodo padro de bloqueio, o cliente tem acesso
proibido ao site. A ativao do recurso bem fcil. O mod_evasive funciona nas duas
verses de Apache: 1.3 e 2.0.
Veja abaixo os passos de instalao:
chroot:/opt# cd /opt/
chroot:/opt# tar -zxvf mod_evasive_1.10.1.tar.gz
chroot:/opt# cd mod_evasive
chroot:/opt/mod_evasive# apxs2 -c -i -a mod_evasive20.c
10.Mod QoS
Em redes de computadores, o termo qualidade de servio (QoS) descreve a gesto
de recursos e no a qualidade de um servio. Qualidade de servio implementa
mecanismos de controle para fornecer diferentes prioridades para diferentes
usurios, aplicaes e conexes. usado para garantir um determinado nvel de
desempenho de recursos de dados. O termo qualidade de serv io muitas vezes
usado no campo de protocolos de rede de maior amplitude (por exemplo, ATM) e
telefonia (por exemplo, VoIP), mas raramente em conjunto com aplicaes web.
O mod_qos um mdulo de qualidade de servio para o servidor web Apache que
implementa mecanismos de controle que podem apresentar diferentes nveis de
prioridade s diferentes requisies HTTP. Ultimamente, com a popularizao do ataque
de DDoS com a ferramenta Slowloris, o mod_qos vem se popularizando, pois uma das
poucas ferramentas que pode mitigar esse ataque to devastador, que as vezes apenas
um atacante executando essa ferramenta, pode derrubar um servidor WEB com
aplicaes crticas.
chroot:/opt# cd /opt/
chroot:/opt# tar -zxvf mod_qos-11.4.tar.gz
chroot:/opt# cd mod_qos-11.4/apache2
chroot:/opt/mod_qos-11.4/apache2# apxs2 -c -i -a mod_qos.c
chroot:/opt/mod_qos-11.4/apache2# /etc/init.d/apache2 restart
chroot:/opt/mod_qos-11.4/apache2# apachectl -t -D DUMP_MODULES
chroot:/opt/mod_qos-11.4/apache2# vi /etc/apache2/mods-available/qos.load
chroot:/opt/mod_qos-11.4/apache2# ls /usr/lib/apache2/modules/mod_qos.so
chroot:/opt/mod_qos-11.4/apache2# vi /etc/apache2/mods-available/qos.conf
20
## Configurao de QoS
<IfModule mod_qos.c>
# manipula conexes de no maximo 100000 IPs diferentes
QS_ClientEntries 100000
# permitir apenas 50 conexes por IP
QS_SrvMaxConnPerIP 50
# nmero mximo de conexes TCP ativas est limitado em 256
MaxClients 256
# desabilita o keep-alive quando 70% das conexes TCP estiverem ocupadas
QS_SrvMaxConnClose 180
#
velocidade
mnima
de
requisio/respa (bloqueia
clientes
lentos
que
ocupam servidor, ie., como o slowloris que mantm conexes abertas sem requisitar
dad)
QS_SrvMinDataRate 150 1200
# e limita requisio de header e body (cuidado, pois isso tambm limita
requisi upload e post)
# LimitRequestFields 30
# QS_LimitRequestBody 102400
</IfModule>
Com essa configurao, ficaremos protegidos contra ataques de negao de servio que
baseiam sua ao em sobrecarregar o servidor, ocupando todos os seus slots de conexo
e no permitindo conexes vlidas de clientes reais aplicao web. Um exemplo de
ferramenta que executa esse tipo de ataque o Slowloris. A explicao de cada uma das
opes de configurao, encontra-se acima.
21
11.Mod Limitipconn
Limitar que usurios abusem da banda de nosso servidor realizando grandes quantidades
de downloads interessante, para evitar indisponibilidade ou gasto desnecessrio de
banda limitada. Isso atualmente fcil de fazer no Apache, utilizando o mod_limitipconn,
onde podemos, por exemplo, limitar 20 threads de download simultneos. Para utilizar
esse mdulo, precisamos ter o pacote apache2-prefork-dev instalado, mas como j
fizemos isso ao instalar o mod_security e os demais mdulos anteriormente, no
precisamos nos preocupar com isso.
ExtendedStatus On
LoadModule limitipconn_module /usr/lib/apache2/modules/mod_limitipconn.so
chroot:/opt/mod_limitipconn-0.24# vi /etc/apache2/modsavailable/limitipconn.conf
<IfModule mod_limitipconn.c>
<Location />
MaxConnPerIP 10
NoIPLimit image/*
</Location>
</IfModule>
22
12.OSSEC
OSSEC um sistema de cdigo aberto baseado em Host Intrusion Detection que realiza
anlise de log, checagem de integridade de arquivos, monitoramento de polticas,
deteco de rootkit, alertas em tempo real e resposta ativa. Ele roda na maioria dos
sistemas operacionais, incluindo Linux, MacOS, Solaris, HP-UX, AIX e Windows. Ele tem
muitas funcionalidades, tm a capacidade de trabalhar localmente, ou em uma rede
como cliente e servidor. Uma das grandes vantagens dos OSSEC trabalhar com activeresponse, ou seja, para determinados tipos de ataques ele pode tomar algumas medidas
como bloquear o IP que est atacando por um determinado tempo e mandar um e-mail
alertando sobre o ocorrido.
Vamos a instalao:
chroot:/opt/mod_limitipconn-0.24# cd /opt
chroot:/opt# tar -zxvf ossec-hids-2.8.tar.gz
chroot:/opt# cd ossec-hids-2.8
chroot:/opt/ossec-hids-2.8# ./install.sh
23
Username: admin
New password:
Re-type new password:
Adding password for user admin
24
Enter your web server user name (e.g. apache, www, nobody, www-data, ...)
www-data
Enter your OSSEC install directory path (e.g. /var/ossec)
You must restart your web server after this setup is done.
13.Mysql
Para finalizar nosso ambiente seguro, vamos instalar o mysql, porem isto ser feito fora
do chroot. O intuito que se um atacante por ventura, depois de todas as protees que
fizemos conseguir acesso ao chroot, no ter acesso ao mysql. O ambiente chroot
consegue se conectar ao mysql pelo compartilhamento do /proc que fizemos no inicio
do curso. Colocando o mysql fora do chroot, temos mais uma camada de segurana em
nosso ambiente.
Vamos a instalao:
# vi /etc/mysql/my.cnf
25
bind-address
= 192.168.10.180
# /etc/init.d/mysql restart
26