28 de maio de 2013

Aumente a segurança do seu Joomla!

Por sidnei

Apesar do Joomla já ser um sistema relativamente seguro, e ter uma equipe competente que está sempre fazendo correções importantes a fim de aumentar ainda mais sua segurança, ele não é totalmente invulnerável.
Muitos administradores não adotam os devidos cuidados para manterem seus sites Joomla seguros, e acabam sofrendo ataques, ocasionando a perda de horas de trabalho ou até mesmo de dias.

Estes administradores devem sempre ter em mente que, na Internet, a segurança de um site deve estar sempre em constante evolução para os diversos desafios que se apresentam. Não existe um caminho certo e único para dar segurança a um site, sendo que todos os métodos de segurança estão sujeitos a melhorias e revisões, bem como devem estar sempre preparados contra uma possível violação.

Felizmente, existem alguns princípios que podem ajudar a evitar essas invasões. São pequenos pormenores extremamente fáceis de implementar e que aumentarão, consideravelmente, a segurança do seu site Joomla. Para isto reuni algumas informações que servirão de orientações para garantir a segurança de seu Joomla.

1 – Realizar backups regularmente.
Os backups dos arquivos e do banco de dados são a nossa última defesa contra a perda dos mesmos. Tais perdas podem acontecer por uma prática qualquer mal executa ou por um inimaginável desastre, devido a ataques hackers à  seu site.
Esta tarefa pode ser feita por meio do Cpanel de qualquer conta do seu servidor, com a utilização do FTP Protocolo ou com a utilização de um componente especifico para esta tarefa de backup.

2 – Ficar de olho nas extensões vulneráveis

Não adianta você manter seu Joomla atualizado, se você tem várias extensões instaladas que não estão devidamente atualizadas. A utilização de uma única extensão insegura coloca em perigo todo o seu site.
Para evitar isto você deve tomar as seguintes precauções:

– Faça uma relação de todas as extensões que você utiliza e procure se informar de novas atualizações para elas;

– Procure saber se as extensões que estão sendo utilizadas são seguras e se não são vulneráveis a ataques que comprometam o seu site.

Para isto procure sempre estar bem informado sobre possíveis extensões vulneráveis e verifique se há atualizações corrijam estas vulnerabilidades. Caso não tenha atualização, desinstale esta extensão imediatamente para não comprometer seu site.

Existe uma lista de extensões vulneráveis, a qual está sendo constantemente atualizada, no site oficial do Joomla e no Fórum, as quais podem ser acessadas nos links abaixo:

Fórum contendo a lista de extensões vulneráveis

E lista de extensões vulneráveis dó site oficial do Joomla.

3 – Ter um nome de usuário e senha mais segura.

Não se dê ao trabalho de atualizar constantemente o Joomla, de seguir várias recomendações, para depois colocar tudo a perder com a utilização de uma senha não segura. Par que isto não aconteça, seguem abaixo algumas sugestões:

Senha: Para ter uma senha segura você deve ter letras maiúsculas, minúsculas, números e caracteres especiais. A senha não precisa ser muito extensa. Utilize por exemplo 3 letras maiúsculas, 3 números, 1 letra minúscula e 1 caractere especial. Exemplo: M82+EhY2

Nome de usuário: Sempre que o Joomla é instalado o nome de usuário por padrão é “admin”, e muitos não a modificam, bem como continuam a utilizá-la. Para dificultar a ação de invasores, altere o nome do usuário para alguma coisa mais difícil de adivinhar, você dificultará muito o acesso indevido à sua conta.

4 – Desligar os relatórios de erro
Um das opções que você pode utilizar também é desligar os relatórios de erros. Esses relatórios de erros além de diminuírem a velocidade do site, indicam também aos “hackers” as falhas na segurança do site Joomla.

Os relatórios de erros podem ser desativados no Joomla 1.5 na sua aba de administração, conforme se vê na figura abaixo:

 

site -> Configuração Globais -> Servidor.

relatorio1.gif

Relatório de erros selecionar nenhum.

relatorio2.

Depois de desativada esta função, não será mais permitida a visualização dos erros gerados pelo Joomla, o que é uma coisa muito boa, uma vez que o utilizador comum não os vê (o que não era muito profissional) e os “hackers” não poderão forçar erros de forma a descobrirem métodos de comprometer o seu site.

5- Utilizar um componente SEF
De que forma os “hackers” decidem atacar o seu site? O método habitual é simples de explicar. Eles descobrem, por exemplo, que uma determinada versão de uma extensão está vulnerável, bem como a forma de explorar essa mesma vulnerabilidade. Depois procuram no Google por meio do comando inurl, a assinatura dessa extensão. O resultado é uma lista de sites vulneráveis, e se o seu site estiver nessa lista, adivinhe o que vai acontecer ?

Utilize um componente SEF (Eearch Engine Friendly) de modo a reescrever a sua url. Assim, o seu site não aparecerá mais naquelas listas e você terá mais sucesso nas pesquisas que lhe interessam dado que o seu site ficará mais otimizado para o Google.

6 – Mudar o Prefixo da base de dados

Por padrão, ao se instalar o Joomla, o prefixo da base de dados será jos_. A maioria dos arquivos “hackers” escritos para comprometer um site Joomla, tentam adquirir informações da tabela jos_users. E, desta maneira, podem adquirir a password (senha) e username (nome de usuário) do administrador do website. Mudar o nome do prefixo para algo aleatório ajudará a impedir a maioria dos ataques “hackers”.

O prefixo pode ser escolhido no momento da instalação de um site Joomla mudando o prefixo padrão de jos_ para um que lhe for mais conveniente.

7 – Utilizando um .htaccess seguro.

Outra opção de segurança muito útil é utilizar um arquivo .htaccess com regras de segurança especificas. Abaixo segue um exemplo disso. Para utilizar basta copiar e inserir dentro do arquivo (.htaccess) em seu site

##
# @package        Joomla
# @copyright    Copyright (C) 2005 – 2012 Open Source Matters. All rights reserved.
# @license        GNU General Public License version 2 or later; see LICENSE.txt
##

##
# READ THIS COMPLETELY IF YOU CHOOSE TO USE THIS FILE!
#
# The line just below this section: ‘Options +FollowSymLinks’ may cause problems
# with some server configurations.  It is required for use of mod_rewrite, but may already
# be set by your server administrator in a way that dissallows changing it in
# your .htaccess file.  If using it causes your server to error out, comment it out (add # to
# beginning of line), reload your site in your browser and test your sef url’s.  If they work,
# it has been set by your server administrator and you do not need it set here.
##

## Can be commented out if causes errors, see notes above.
Options

## Mod_rewrite in use.

RewriteEngine On

RewriteRule .*.(jpg|jpeg|gif|png|bmp)$ – [F,NC]

<IfModule mod_deflate.c>
<IfModule mod_setenvif.c>
<IfModule mod_headers.c>
SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)s*,?s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
RequestHeader append Accept-Encoding “gzip,deflate” env=HAVE_Accept-Encoding
</IfModule>
</IfModule>
</IfModule>
## Filtra potenciais exploits
RewriteCond %{QUERY_STRING} base64_(en|de)code[^(]*([^)]*) [OR]
RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} (<|%3C).*iframe.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} proc/self/environ [OR]
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|%3D) [OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|[|%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|[|%[0-9A-Z]{0,2})
RewriteRule ^(.*)$ – [F,L]

## Evita a injeção de URLsou outros meios de alterar a execusão de códigos
RewriteCond %{REQUEST_METHOD} GET
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=http:// [OR]
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=(..//?)+ [OR]
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=/([a-z0-9_.]//?)+ [NC]
RewriteRule ^(.*)$ – [F,L]

## Não aceita os métodos TRACE, HEAD, DELETE e TRACK
RewriteCond %{REQUEST_METHOD} ^(HEAD|TRACE|DELETE|TRACK)
RewriteRule ^(.*)$ – [F,L]

## Filtra potenciais comandos de XSS
RewriteCond %{QUERY_STRING} (“|%22).*(>|%3E|<|%3C).* [NC]
RewriteRule ^(.*)$ – [F,L]
RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3E) [NC]
RewriteRule ^(.*)$ – [F,L]
RewriteCond %{QUERY_STRING} (javascript:).*(;).* [NC]
RewriteRule ^(.*)$ – [F,L]

## Evita o envio de endereços locais ou pedido de execução de arquivos pela QS

## Evita envio de códigos com linhas e outros meios comuns de injetar códigos
RewriteCond %{QUERY_STRING} (<|>|’|%0A|%0D|%27|%3C|%3E|%00|%E3) [NC]
RewriteRule ^(.*)$ – [F,L]

## Evita o uso de tags, pastas e comando JS na URL
RewriteRule (,|;|<|>|’|`) /- [F,L]

## Bloqueia as tentativas de injeção nas variáveis normalmente utilizadas para sessões etc.
RewriteCond %{THE_REQUEST} (\r|\n|%0A|%0D) [NC]
RewriteRule ^(.*)$ – [F,L]
RewriteCond %{HTTP_REFERER} (<|>|’|%0A|%0D|%27|%3C|%3E|%00|%E3) [NC]
RewriteRule ^(.*)$ – [F,L]
RewriteCond %{HTTP_COOKIE} (<|>|’|%0A|%0D|%27|%3C|%3E|%00|%E3) [NC]
RewriteRule ^(.*)$ – [F,L]
RewriteCond %{HTTP_USER_AGENT} (<|>|’|%0A|%0D|%27|%3C|%3E|%00|%E3) [NC]
RewriteRule ^(.*)$ – [F,L]

# Evita agentes normalmente utilizados nos ataques. Observe o uso do curl e wget, retire se você fizer uso deles
RewriteCond %{HTTP_USER_AGENT} ^$
RewriteRule ^(.*)$ – [F,L]
RewriteCond %{HTTP_USER_AGENT} (winhttp|HTTrack|clshttp|archiver|loader|harvest|extract|grab|miner) [NC]
RewriteRule ^(.*)$ – [F,L]

## Palavras utilizadas normalemente pelos SPAMMERs nas buscas e injeção de spam.
RewriteCond %{QUERY_STRING} b(ambien|bluespill|cialis|cocaine|ejaculation|erectile)b [NC,OR]
RewriteCond %{QUERY_STRING} b(erections|hoodia|huronriveracres|impotence|levitra|libido)b [NC,OR]
RewriteCond %{QUERY_STRING} b(lipitor|phentermin|pro[sz]ac|sandyauer|tramadol|troyhamby)b [NC,OR]
RewriteCond %{QUERY_STRING} b(ultram|unicauca|valium|viagra|vicodin|xanax|ypxaieo)b [NC]
RewriteRule .* – [F]

# Regras copiadas do Fórum do Host

### @version $Id: htaccess.txt 10492 2008-07-02 06:38:28Z ircmaxell $
# @package Joomla
# @copyright Copyright © 2005 – 2008 Open Source Matters. All rights reserved.
# @license http://www.gnu.org/copyleft/gpl.html GNU/GPL
# Joomla! is Free Software
##

## Can be commented out if causes errors, see notes above.
Options

#
# mod_rewrite in use

RewriteEngine On

########## Begin – Rewrite rules to block out some common exploits
## If you experience problems on your site block out the operations listed below
## This attempts to block the most common type of exploit `attempts` to Joomla!
#
# Block out any script trying to set a mosConfig value through the URL
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|%3D) [OR]
# Block out any script trying to base64_encode crap to send via URL
RewriteCond %{QUERY_STRING} base64_encode.*(.*) [OR]
# Block out any script that includes a tag in URL
RewriteCond %{QUERY_STRING} (|%3E) [NC,OR]
# Block out any script trying to set a PHP GLOBALS variable via URL
RewriteCond %{QUERY_STRING} GLOBALS(=|[|%[0-9A-Z]{0,2}) [OR]
# Block out any script trying to modify a _REQUEST variable via URL
RewriteCond %{QUERY_STRING} _REQUEST(=|[|%[0-9A-Z]{0,2})
# Send all blocked request to homepage with 403 Forbidden error!
# RewriteRule ^(.*)$ index.php [F,L]
#
########## End – Rewrite rules to block out some common exploits

# RewriteBase /

ExpiresActive On
ExpiresDefault A600
ExpiresByType image/x-icon A2592000
ExpiresByType application/x-javascript A604800
ExpiresByType text/css A604800
ExpiresByType image/gif A2592000
ExpiresByType image/png A2592000
ExpiresByType image/jpeg A2592000
ExpiresByType text/plain A1200
ExpiresByType application/x-shockwave-flash A2592000
ExpiresByType video/x-flv A2592000
ExpiresByType application/pdf A2592000
ExpiresByType text/html A600.