Como remover malware do WordPress: passo a passo completo
Guia prático para limpar um WordPress hackeado: backup, senhas, núcleo, plugins, uploads, banco de dados, backdoors e hardening, com comandos do WP-CLI.
- guia
- malware
- resposta-a-incidente
Este é o roteiro que eu sigo, de forma simplificada, para limpar um WordPress infectado. Ele serve para quem tem acesso por SSH e o WP-CLI e quer entender o processo. Sem SSH, os mesmos passos podem ser feitos por FTP e pelo painel, só que com mais trabalho manual.
Antes de começar: mexa com cuidado. Cada caso é diferente, e apagar a coisa errada pode derrubar o site. Se for uma loja virtual ou se você não se sente seguro, considere pedir ajuda.
1. Preserve o estado atual
Faça um backup completo dos arquivos e do banco de dados como estão. Ele serve de evidência e de rede de segurança.
wp db export backup-infectado.sql
tar -czf backup-infectado-arquivos.tar.gz .
Se o site está causando dano (redirecionando visitantes, enviando spam), coloque-o em modo de manutenção ou bloqueie o acesso enquanto trabalha.
2. Troque todas as credenciais
O invasor pode ter suas senhas. Troque, a partir de um computador limpo:
- senha da hospedagem e do FTP/SFTP;
- senha do banco de dados (e atualize o
wp-config.php); - senhas de todos os usuários do WordPress, principalmente administradores;
- as chaves de segurança do WordPress, que também encerram todas as sessões ativas:
wp config shuffle-salts
3. Revise usuários administradores
wp user list --role=administrator --fields=ID,user_login,user_email,user_registered
Remova contas que você não reconhece. Cuidado: confira antes se não é a conta de alguém da sua equipe ou de uma agência.
4. Verifique e reinstale o núcleo do WordPress
wp core verify-checksums
wp core download --force --skip-content
O segundo comando substitui os arquivos do núcleo por cópias limpas, sem tocar em wp-content. Depois, olhe a raiz do site. Arquivos .php que não fazem parte do WordPress (exceto o wp-config.php e arquivos seus que você reconhece) são suspeitos.
5. Plugins e temas
wp plugin list
wp plugin verify-checksums --all
- Remova plugins que você não usa, está desatualizado há muito tempo ou não reconhece.
- Reinstale os restantes a partir de fontes oficiais:
wp plugin install nome-do-plugin --force. - Plugins premium: baixe de novo no site do fornecedor.
- Plugins piratas (“nulled”) devem sair. Substitua pelo original ou por uma alternativa legítima.
- Faça o mesmo com temas e confira o
functions.phpdo tema ativo.
6. Procure o que não deveria existir
# PHP dentro de uploads
find wp-content/uploads -type f -name "*.php"
# Plugins "must-use", que carregam automaticamente
ls -la wp-content/mu-plugins
# Arquivos PHP modificados recentemente
find . -type f -name "*.php" -mtime -14
# Diretiva usada por malware para rodar antes de qualquer página
grep -rn "auto_prepend_file" . --include=".user.ini" --include=".htaccess" --include="php.ini"
Nem tudo que aparece é malicioso (atualizações recentes mudam arquivos). Analise cada achado.
7. Revise .htaccess e wp-config.php
Procure regras de redirecionamento que você não criou, código ofuscado e include/require de arquivos estranhos. O guia de redirecionamentos mostra um .htaccess padrão para comparar.
8. Banco de dados e tarefas agendadas
# Opções e posts com script embutido
wp db query "SELECT option_id, option_name FROM $(wp db prefix)options WHERE option_value LIKE '%<script%';"
wp db query "SELECT ID, post_title FROM $(wp db prefix)posts WHERE post_content LIKE '%<script%';"
# Tarefas agendadas (cron) do WordPress
wp cron event list
Tarefas agendadas desconhecidas são um meio comum de reinfectar o site depois da limpeza.
9. Descubra e feche a brecha
Essa é a etapa que mais pessoas pulam, e a que decide se o site será invadido de novo. Pergunte:
- Havia algum plugin ou tema desatualizado com vulnerabilidade conhecida?
- Havia plugin pirata?
- A senha de algum usuário era fraca ou foi reutilizada?
- Os logs de acesso da hospedagem mostram requisições suspeitas a algum arquivo ou plugin?
Atualize ou substitua o componente vulnerável. Se não achar a brecha, assuma que ela continua aberta.
10. Hardening e monitoramento
- Desative a edição de arquivos pelo painel adicionando ao
wp-config.php:
define( 'DISALLOW_FILE_EDIT', true );
- Ative autenticação em dois fatores para administradores.
- Limite tentativas de login.
- Mantenha WordPress, plugins e temas atualizados (com backup antes).
- Tenha backup automático e fora do servidor, e teste a restauração.
- Use permissões corretas (em geral, diretórios
755e arquivos644, e owp-config.phpmais restrito).
11. Valide
- Teste o site como visitante comum, no celular, chegando pelo Google.
- Confira o
site:seudominio.com.bre o Search Console. - Acompanhe por alguns dias: novos arquivos PHP, novos usuários, tarefas agendadas.
Se o site tinha aviso de segurança, veja como pedir a revisão ao Google.
Quando não vale fazer sozinho
- Há mais de um site na mesma hospedagem (a infecção pode ter passado entre eles).
- É uma loja virtual, com dados de clientes e pagamentos.
- O malware volta mesmo depois de você limpar.
- Você não tem acesso a SSH ou aos logs.
Nesses casos, o custo de errar é maior que o custo de pedir ajuda. Veja também quanto custa limpar um site WordPress hackeado.
Seu site está assim agora? Me manda o link no WhatsApp e eu confirmo o problema, o escopo e o valor antes de começar. Quer entender o processo antes? Veja como funciona a limpeza de malware.