Capitulo 3
Protegendo seu Servidor Web
1
1. Instalação do Ambiente em Chroot Vimos que com a instalação e configuração padrão, nosso servidor é vulnerável à ataques, além de fornecer muitas informações à um possível atacante, facilitando o trabalho dele de comprometimento de nosso servidor. Por conta disso, vamos realizar uma nova instalação do Apache e do PHP para melhorar sua segurança. O Apache e o PHP serão reinstalados dentro de um ambiente seguro chamado chroot, que permite o enjaulamento de aplicações, fazendo com que aquilo que estiver dentro do conteiner não tenha acesso à máquina real. Vamos à instalação e configuração de nosso ambiente seguro com um sistema operacional próprio, separado da máquina real. Para instalar o ambiente chroot no debian, vamos utilizar o debootstrap, ele irá nos auxiliar na criação deste ambiente.
# apt-get install debootstrap # mkdir /var/webserversecurity # debootstrap wheezy /var/webserversecurity/
Após executar o comando acima, perceba que o deboostrap irá baixar uma série de pacotes que são necessários para que este ‘mínimo’ ambiente funcione. Agora para que o ambiente chroot funcione, precisamos de ‘compartilhar’ o diretório /proc da máquina
real dentro do chroot. # mount --bind /proc/ /var/webserversecurity/proc
Vamos acessar o chroot: # chroot /var/webserversecurity/
Vamos alterar o formato que o pronto aparece, para diferenciarmos a maquina real do chroot: # vi .bashrc # exit
2
Vamos entrar novamento no chroot, agora com o prompt alterado: # chroot /var/webserversecurity
Vamos alterar a configuração 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
Esses passos vão depender do nível de segurança que você quer implementar, são opcionais, porem os seguindo você terá acesso ao ssh da maquina real e acesso ao ssh
do chroot. Para isso, precisamos alterar a porta do ssh, e compartilhar /dev/pts e reiniciar o serviço da máquina real. # vi /etc/ssh/sshd_config # /etc/init.d/ssh restart # mount --bind /dev/pts /var/websecurity/dev/pts
Vamos entrar no chroot e prosseguir com as demais configurações # chroot /var/webserversecurity/
Instalar o openssh-server: chroot:~# apt-get install openssh-server ; instalar o ssh server
Vamos definir uma senha para o root chroot:~# passwd root
Feito isso, vamos fazer com o serviço inicie sozinho quando o servidor der boot. Dentro da
, no arquivo /etc/rc.local adicione a seguinte linha:
/usr/sbin/chroot /var/webserversecurity /etc/init.d/ssh start
3
Instalar o apache2 no chroot chroot:~# apt-get install apache2
Faça um teste em seu navegador se o serviço foi instalado corretamente: http://ipdasuamaquinavirtual
Agora vamos alterar alguns parâmetros de segurança no apache2
chroot:/# vi /etc/apache2/sites-available/default
ServerAdmin webmaster@localhost
DocumentRoot /var/www Options FollowSymLinks AllowOverride None Options -Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all
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
4
# Debian packages. # # #
AllowOverride None
#
Order Deny,Allow
#
Deny from all
#
# 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:
Full | OS | Minimal | Minor | Major | Prod
# 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
chroot:/# /etc/init.d/apache2 restart
5
Feito isso, vamos fazer com o serviço inicie sozinho quando o servidor der boot. Dentro da
, no arquivo /etc/rc.local adicione a seguinte linha:
/usr/sbin/chroot /var/webserversecurity /etc/init.d/apache2 start
2. Suhosin é um avançado sistema de proteção que foi desenvolvido com o objetivo de proteger servidores e usuários de falhas nas aplicações escritas em PHP e implementar correções à própria 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 proteção contra vulnerabilidades do sistema (Engine Protection) e a outra parte é uma extensão que coloca em funcionamento todas as outras proteções e implementações de segurança. Contra o quê o Suhosin nos protege?
Suhosin é a único proteção estável e real disponível contra remote file include
Protege contra HTTP Response Splitting Vulnerabilities
Protege contra scripts que manipulam o memory_limit
Adiciona proteção contra ataques ao mail()
Filtra caracteres ASCIIZ de inputs de usuários
Ignora variáveis 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 Suporta verificação de upload de arquivos através de um script externo
Pagina do projeto: http://www.hardened-php.net/ 6
2.1. Instalando o PHP5 e Suhosin Há duas fomas de realizarmos a instalação do Suhosin:
A mais fácil; A mais difícil.
Vou explicar porque uma é considerada mais fácil que a outra. No método mais difícil, é necessário a instalação do pacth do Suhosin, a recompilação do PHP5 e a instalação de uma extensão específica do Suhosin. Esse é um processo que pode levar mais de 1h, o que pode ser precioso para o profissional que está instalando e configurando seu servidor web. Já pela maneira mais fácil, que é a que adotaremos aqui, podemos utilizar um pacote do PHP5 previamente compilado, com o patch e a extensão já instaladas, que precisa apenas ser configurado, para personalizarmos os controles de segurança do Suhosin. Esse pacote está disponível para Debian/Ubuntu. Primeiramente vamos transferir via winscp para dentro do chroot o pacote
chroot:~# dpkg –i php5-suhosin_0.9.34-1~update.1_amd64.deb
Vamos resolver as dependencias de pacotes que ele solicita: chroot:~#/tmp# apt-get -f install
Após finalizar a instalação vamos criar um arquivo chamado info.php dentro de /var/www com o conteudo phpinfo(); ?> e em seguinda vamos abri-lo no navegador.
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
7
Ativando o suporte ao Mysql pelo php5 chroot:~#/etc/php5# apt-get install php5-mysql
Ativar modificações: chroot:~#/etc/php5# /etc/init.d/apache2 restart
Vamos editar o arquivo de configuração do Suhosin e adequar as seguintes opções:
chroot:~#/etc/php5# vi /etc/php5/mods-available/suhosin.ini
# Limitar a quantidade de directory transversals (../../../): suhosin.executor.include.max_traversal=4
#Desabilitar o /e no preg_replace, que normalmente é utilizado de forma insegura, já que esse parâmetro permite a execução de funções do PHP: suhosin.executor.disable_emodifier=Off
#Proteger formulários de e-mail contra ataque de spammers: suhosin.mail.protect=2
#Configurar limite de memória, pois quando o safe_mode está desabilitado, usuários podem utilizar o ini_set para alterar seu limite de memória: suhosin.memory_limit=256M
#Qual ação o Suhosin executará ao filtrar algo (a opção 402 fará com que o código não seja executado e retornse uma resposta HTTP): suhosin.filter.action=402
#Limite máximo de tamanho para variáveis vindas de COOKIE, POST e GET: suhosin.request.max_array_depth=4096 suhosin.request.max_array_index_length=2048 suhosin.request.max_name_length=2048 suhosin.request.max_value_length=650000 suhosin.request.max_vars=4096
8
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
#Máximo upload de arquivos em um script: suhosin.upload.max_uploads=100
# Cuidado com quais módulos colocar na blacklist #suhosin.executor.eval.blacklist =
include,
include_once, require,
require_once, curl_init, fpassthru, file, base64_encode, base64_decode, mail, exec, system, proc_open, leak, syslog, pfsockopen, shell_exec, ini_restore, symlink, stream_socket_server, proc_nice ,popen, proc_get_status, dl, pcntl_exec, pcntl_fork, pcntl_signal, pcntl_waitpid, pcntl_wexitstatus, pcntl_wifexited, pcntl_wifsignaled, pcntl_wifstopped, pcntl_wstopsig,
pcntl_wtermsig,
socket_accept,
socket_bind,
socket_connect, socket_create, socket_create_listen, socket_create_pair, link, register_shutdown_function, register_tick_function
# Cuidado ao ativar essa função suhosin.executor.disable_eval = off
#Armazenar em log todas as ações, além das queries SQL que falharam, com o syslog: suhosin.log.syslog = S_ALL & ~S_SQL
#Desabilitar a possibilidade de fazer o upload de binários: suhosin.upload.disallow_binary=Off
#Desabilitar a possibilidade realizar o upload de arquivos ELF suhosin.upload.disallow_elf=Off
Para maiores detalhes sobre configurações do suhosin, acesse: http://www.suhosin.org/stories/configuration.html
Agora, vamos adequar algumas configurações do php5: 9
chroot:~# vi /etc/php5/apache2filter/php.ini
disable_functions = php_uname, getmyuid, getmypid, passthru, leak, listen, diskfreespace, tmpfile, link, ignore_user_abord, shell_exec, dl, set_time_limit, exec, system, highlight_file, source, show_source, fpaththru, virtual, proc_open, proc_close, phpinfo
proc_get_status, proc_nice,
proc_terminate,
# Desativar display_errors, para evitar que informações sejam passados para o usuário, caso ocorra algum erro na aplicação display_errors = off
#Desativar allow_url_fopen para não permitir a abertura de arquivos através da URL allow_url_fopen = off
#Desativar allow_url_include, para evitar ataques como RFI allow_url_include = off
#Ativar log_errors, para que todos os erros sejam armazenados em um arquivo de log log_errors = on
#Desativar expose_php, para evitar que informações sobre o PHP sejam exibidas para o usuário, a menos que uma url esteja como .php: expose_php = off
#Para aumentar ainda mais a segurança, limitando o tempo de execução de cada script, em segundos max_execution_time = 30
Segue link de algumas funções para serem pesquisadas:
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 modificações 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 requisições e respostas entre o servidor Web e o cliente fazendo a checagem das regras que estão em vigor. Atualmente é suportado pelo Apache, IIS7 e Nginx. Vamos começar instalando os pacotes necessários para compilar nosso Mod Security: chroot:~# apt-get install apache2-threaded-dev libxml2-dev
libcurl4-gnutls-
dev liblua5.1-0 liblua5.1-0-dev build-essential
Vá até o diretório /opt e faça o download do modsecurity: chroot:~# cd /opt/ && wget https://www.modsecurity.org/tarball/2.8.0/modsecurity-2.8.0.tar.gz
Agora descompacte o arquivo e acesse o diretório criado: chroot:~# tar -xvzf modsecurity-2.8.0.tar.gz && cd modsecurity-2.8.0
Agora iremos iniciar a compilação com o ./configure fazendo as configurações de path e verificando as dependências: chroot:~# ./configure – with-apxs=/usr/bin/apxs2 – with-pcre=/usr/bin/pcreconfig with-apu=/usr/bin/apu-config – with–with-apr=/usr/bin/apr-config – libxml=/usr/bin/xml2-config – with-curl=/usr/bin/curl-config
Depois compile e instale o Mod Security: 11
chroot:~# make chroot:~# make install
Depois de tudo instalado é hora de copiar a biblioteca do Mod Security para o diretório de módulos 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 contém milhares de regras capazes de mitigar as principais vulnerabilidades e ataques a aplicações web. Vá até o diretório do apache e baixe a última versão 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
Mude o nome do diretório para ficar mais legível chroot:~# mv SpiderLabs-owasp-modsecurity-crs-ebe8790/ ModSecurity chroot:~# cd ModSecurity/
Agora iremos renomear o arquivo modsecurity_crs_10_setup: chroot:~# mv modsecurity_crs_10_setup.conf.example modsecurity_crs_10_setup.conf
Agora iremos criar um link simbólico para o diretório activated_rules que como o próprio nome já diz é onde contém 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
Depois iremos copiar o arquivo modsecurity.conf e o unicode.mapping para o diretório do apache e renomear o modsecurity.conf: chroot:~# cp /opt/modsecurity-2.8.0/modsecurity.conf-recommended /etc/apache2/ModSecurity/ chroot:~# cp /opt/modsecurity-2.8.0/unicode.mapping /etc/apache2/ModSecurity chroot:~# mv modsecurity.conf-recommended modsecurity.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
Depois disso iremos criar os arquivos mod_security2.conf e mod_security2.load para ativar o modulo do Mod Security no Apache: chroot:~# cd ../mods-available/ chroot:~# vi mod_security2.conf
Inclua o seguinte conteúdo no arquivo: SecDataDir /var/cache/modsecurity Include “/etc/apache2/ModSecurity/modsecurity.conf” Include “/etc/apache2/Mod Security/activated_rules/*.conf”
chroot:~# vi mod_security2.load
Adicione as seguintes linhas no arquivo: LoadFile /usr/lib/libxml2.so.2 LoadModule security2_module /usr/lib/apache2/modules/mod_security2.so
Agora iremos criar um link simbólico para a biblioteca do xml2: chroot:~# ln -s /usr/lib/x86_64-linux-gnu/libxml2.so.2 /usr/lib/libxml2.so.2
Ative o modulo do Mod Security e o modulo Unique_Id no apache: chroot:~# a2enmod unique_id chroot:~# a2enmod mod_security2
Reinicie o apache: chroot:~# service apache2 restart
Execute o comando abaixo para listar os módulos ativos: 13
chroot:~# apachectl -t -D DUMP_MODULES
Verifique se a saída contém os módulos abaixo: unique_id_module (shared) security2_module (shared)
Pronto agora nosso Mod Security já está funcionando, vamos configurar as regras, entre no diretório base_rules e copie todas as regras para o activated_rules: chroot:~# cd ../ModSecurity/base_rules/ chroot:~# cp * /etc/apache2/ModSecurity/activated_rules/
Agora entre no diretório slr_rules e copie todas as regras para o activated_rules: chroot:~# cd ../slr_rules/ chroot:~# cp modsecurity_crs_46_slr_et_wordpress_attacks.conf /etc/apache2/ModSecurity/activated_rules/
Copie também as regras especificas para o WordPress: chroot:~# cp modsecurity_46_slr_et_wordpress.data /etc/apache2/ModSecurity/activated_rules/
Depois entre no diretório optional_rules e copie as seguintes regras para o activated_rules: chroot:~# cd ../optional_rules/ chroot:~# cp modsecurity_crs_42_comment_spam.conf ../activated_rules/ chroot:~# cp modsecurity_42_comment_spam.data ../activated_rules/ chroot:~# cp modsecurity_crs_16_session_hijacking.conf ../activated_rules/
Entre no diretório experimental_rules e copie as seguintes regras para o activated_rules: chroot:~# cd ../experimental_rules chroot:~# cp modsecurity_crs_11_brute_force.conf ../activated_rules/ chroot:~# cp modsecurity_crs_11_dos_protection.conf ../activated_rules/ chroot:~# cp modsecurity_crs_11_proxy_abuse.conf ../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 modifique o local do db no arquivo modsecurity_crs_11_proxy_abuse.conf: chroot:~# vi activated_rules/modsecurity_crs_11_proxy_abuse.conf
Procure a entrada SecGeoLookupDb e deixe assim: SecGeoLookupDb /etc/apache2/ModSecurity/GeoLiteCity.dat
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 não está bloqueando os ataques, ele está simplesmente gerando alerta. No início é muito importante você não ativar o Mod Security pois você vai receber muitos falsos positivos, o ideal é você analisar os logs e criar as exceções para diminuir o máximo de falsos positivos possíveis. 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
Deixe a entrada SecRuleEngine assim: #SecRuleEngine DetectionOnly
15
SecRuleEngine On
Reinicie o Apache chroot:~# service apache2 restart
Agora faça 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 exceções, 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, então vá até o log e veja o que aconteceu: chroot:~# vi /var/log/apache2/modsec_audit.log
Você vai ver algo parecido com isso: --06af3f02-A-[03/Aug/2014:20:47:38 +0000] U96f6sCoCrQAAAsWFAsAAAAA 192.168.0.104 57357 192.168.0.102 80 --06af3f02-B-GET /?p=1%27 HTTP/1.1 Host: 192.168.0.102 Connection: keep-alive Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36 DNT: 1 Accept-Encoding: gzip,deflate,sdch
16
Accept-Language: pt-BR,pt;q=0.8,en-US;q=0.6,en;q=0.4
--06af3f02-F-HTTP/1.1 403 Forbidden Vary: Accept-Encoding Content-Encoding: gzip Content-Length: 179 Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Content-Type: text/html; charset=iso-8859-1
--06af3f02-E- 403 Forbidden Forbidden
You don't have permission to access / on this server.
--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
ARGS:p: 1'"] [severity "CRITICAL"] [ver "OWASP_CRS/2.2.9"] [maturity "9"] [accuracy "8"] [tag "OWASP_CRS/WEB_ATTACK/SQL_INJECTION"] [tag "WASCTC/WASC19"] [tag "OWASP_TOP_10/A1"] [tag "OWASP_AppSensor/CIE1"] [tag "PCI/6.5.2"] Action: Intercepted (phase 2) Stopwatch: 1407098858733652 2223 (- - -) Stopwatch2: 1407098858733652 2223; combined=764, p1=251, p2=355, p3=0, p4=0, p5=111, sr=57, sw=47, l=0, gc=0 Response-Body-Transformed: Dechunked Producer: ModSecurity for Apache/2.8.0 (http://www.modsecurity.org/); OWASP_CRS/2.2.9. Server: Apache Engine-Mode: "ENABLED"
--06af3f02-Z--
Provavelmente você irá receber mais alguns alertas, então você deverá fazer o mesmo processo até que acerte as regras do Mod Security para não gerar mais esses falsos positivos, coloque o Mod Security em DetectionOnly e analise os alertas.
4. Mod Evasive O Apache tem algumas ferramentas para auxílio a proteção da sua máquina e uma delas é o mod_evasive, que protegerá pelo menos o DDOS. Mod_evasive é um módulo de segurança do Apache que proporciona bloqueio de acessos em massa ou ataques de força bruta ao site. A intenção dele é bloquear e separar os acessos em massa a área, através de uma interface que guarda os acessos gerando uma blacklist dos acessos impedindo o acesso dos mesmos por um tempo configurável.
Se o IP do cliente existe na lista temporária de IPS. Acessos simultâneos a páginas, configurando o tempo de acesso as páginas o default é de 1 segundo. Número de requisições ao site como um todo. 18
A ideia é retornar o status code 403 - forbidden para os acessos após terem sido bloqueados. Após 10 segundos, período padrão de bloqueio, o cliente tem acesso proibido ao site. A ativação do recurso é bem fácil. O mod_evasive funciona nas duas versões de Apache: 1.3 e 2.0. Veja abaixo os passos de instalação: 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
Após instalarmos o mod_evasive sem erros, vamos a sua configuração: chroot:/opt/mod_evasive# vi /etc/apache2/conf.d/evasive DOSHashTableSize 3097 DOSPageCount 2 DOSSiteCount 50 DOSPageInterval 1 DOSSiteInterval 1 DOSBlockingPeriod 600 DOSEmailNotify [email protected] DOSLogDir “/var/log/mod_evasive”
chroot:/opt/mod_evasive# /etc/init.d/apache2 restart chroot:/opt/mod_evasive/apache2# apachectl –M Com a configuração setada, as tentativas de ataque serão bloqueadas por 10 minutos. O tempo de bloqueio pode ser menor ou maior, de acordo com sua necessidade. Vamos à uma breve explicação dos parâmetros configurados acima: = essa opção é interessante ser deixada em seu valor padrão, pois quanto maior, mais memória do servidor será consumida. Só deve ser aumentada para servidores que possuem um grande número de requisições. = quantidade máxima de requisições feitas por um mesmo • cliente, em uma mesma sessão à uma mesma página antes de ser bloqueado. = quantidade máxima de requisições feitas por um mesmo • cliente, em uma mesma sessão a qualquer objeto do site antes de ser bloqueado. = valor em segundos do tempo em que uma página fará • a contagem da quantidade de requisições. = valor em segundos do tempo em que o site fará a • contagem da quantidade de requisições. = tempo em segundos que o IP suspeito ficará • bloqueado através de regras criadas no firewall. = e-mail para o qual será enviada uma mensagem todas as • vezes que um ataque for detectado. •
19
•
= diretório onde serão armazenados os logs da aplicação.
10.Mod QoS Em redes de computadores, o termo qualidade de serviço (QoS) descreve a gestão de recursos e não a qualidade de um serviço. Qualidade de serviço implementa mecanismos de controle para fornecer diferentes prioridades para diferentes usuários, aplicações e conexões. É usado para garantir um determinado nível de desempenho de recursos de dados. O termo qualidade de serviço é 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 aplicações web. O mod_qos é um módulo de qualidade de serviço para o servidor web Apache que implementa mecanismos de controle que podem apresentar diferentes níveis de prioridade às diferentes requisições HTTP. Ultimamente, com a popularização do ataque de DDoS com a ferramenta Slowloris, o mod_qos vem se popularizando, pois é uma das poucas ferramentas que pode mitigar esse ataque tão devastador, que as vezes apenas um atacante executando essa ferramenta, pode derrubar um servidor WEB com aplicações críticas.
Veja abaixo os passos de instalação:
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
## Configuração de QoS # manipula conexões de no maximo 100000 IPs diferentes QS_ClientEntries 100000 # permitirá apenas 50 conexões por IP QS_SrvMaxConnPerIP 50 # número máximo de conexões TCP ativas está limitado em 256 MaxClients 256 # desabilita o keep-alive quando 70% das conexões TCP estiverem ocupadas QS_SrvMaxConnClose 180 #
velocidade
mínima
de
requisição/respa (bloqueia
clientes
lentos
que
ocupam servidor, ie., como o slowloris que mantém conexões abertas sem requisitar dad) QS_SrvMinDataRate 150 1200 # e limita requisição de header e body (cuidado, pois isso também limita requisiçõ upload e post) # LimitRequestFields 30 # QS_LimitRequestBody 102400
chroot:/opt/mod_qos-11.4/apache2# a2enmod qos chroot:/opt/mod_qos-11.4/apache2# /etc/init.d/apache2 restart chroot:/opt/mod_qos-11.4/apache2# apachectl -M
Com essa configuração, ficaremos protegidos contra ataques de negação de serviço que baseiam sua ação em sobrecarregar o servidor, ocupando todos os seus slots de conexão e não permitindo conexões válidas de clientes reais à aplicação web. Um exemplo de ferramenta que executa esse tipo de ataque é o Slowloris. A explicação de cada uma das opções de configuração, encontra-se acima.
21
11.Mod Limitipconn Limitar que usuários abusem da banda de nosso servidor realizando grandes quantidades de downloads é interessante, para evitar indisponibilidade ou gasto desnecessário de banda limitada. Isso atualmente é fácil de fazer no Apache, utilizando o mod_limitipconn, onde podemos, por exemplo, limitar à 20 threads de download simultâneos. Para utilizar esse módulo, precisamos ter o pacote apache2-prefork-dev instalado, mas como já fizemos isso ao instalar o mod_security e os demais módulos anteriormente, não precisamos nos preocupar com isso.
Vamos para a instalação: chroot:/var/log/apache2# cd /opt/ chroot:/opt# tar -xjvf mod_limitipconn-0.24.tar.bz2 chroot:/opt# cd mod_limitipconn-0.24 chroot:/opt/mod_limitipconn-0.24# apxs2 -c -i -a mod_limitipconn.c chroot:/opt/mod_limitipconn-0.24# vi /etc/apache2/mods-available/limitipconn.load
ExtendedStatus On LoadModule limitipconn_module /usr/lib/apache2/modules/mod_limitipconn.so
chroot:/opt/mod_limitipconn-0.24# vi /etc/apache2/modsavailable/limitipconn.conf
MaxConnPerIP 10 NoIPLimit image/*
22
chroot:/opt/mod_limitipconn-0.24# /etc/init.d/apache2 restart chroot:/opt/mod_limitipconn-0.24# apachectl –M
12.OSSEC OSSEC é um sistema de código aberto baseado em Host Intrusion Detection que realiza análise de log, checagem de integridade de arquivos, monitoramento de políticas, detecção 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, têm 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 instalação: 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
** Para instalação em português, escolha [br]. ** ?????????, ??? [cn]. ** Fur eine deutsche Installation wohlen Sie [de]. ** G?a e??at?stas? sta ????????, ep????te [el]. ** For installation in English, choose [en]. ** Para instalar en Español , eliga [es].
23
** Pour une installation en français, choisissez [fr] ** A Magyar nyelvu telepítéshez válassza [hu]. ** Per l'installazione in Italiano, scegli [it]. ** ?????????????.???????.[jp]. ** Voor installatie in het Nederlands, kies [nl]. ** Aby instalowac w jezyku Polskim, wybierz [pl]. ** ??? ?????????? ?? ????????? ?? ??????? ,??????? [ru]. ** Za instalaciju na srpskom, izaberi [sr]. ** Türkçe kurulum için seçin [tr]. (en/br/cn/de/el/es/fr/hu/it/jp/nl/pl/ru/sr/tr) [en]: br
Em seguida, é só seguir com a instalação, pois é auto intuitiva, bem simples. Vamos agora para a instalação da Interface
chroot:/opt/ossec-hids-2.8# /var/ossec/bin/ossec-control start chroot:/opt/ossec-hids-2.8# cd .. chroot:/opt# tar -zxvf ossec-wui-0.8.tar.gz -C /var/www/ chroot:/opt# cd /var/www/ chroot:/var/www# mv ossec-wui-0.8 ossec chroot:/var/www# cd ossec/ chroot:/var/www/ossec# ./setup.sh
Setting up ossec ui...
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.
Setup completed successfuly.
chroot:/var/www# usermod -a -G ossec www-data chroot:/var/www# /etc/init.d/apache2 restart
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 proteções que fizemos conseguir acesso ao chroot, não 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 segurança em nosso ambiente.
Vamos a instalação:
# apt-get install mysql-server # ln -s /var/run/mysqld/mysqld.sock /var/webserversecurity/var/run/myslqd/mysqld.sock # mysql -uroot -p
# vi /etc/mysql/my.cnf
25
bind-address
= 192.168.10.180
# /etc/init.d/mysql restart
26