Como Limpar WordPress Infectado: Guia de Recuperação via SSH

Guia de Recuperação de Desastre (DRP): WordPress Infectado

Limpar wordpress infectado. Premissa: Assuma que qualquer arquivo .php pode conter código malicioso e que o banco de dados pode ter usuários administradores fantasmas.

Fase 1: Estancar o Sangramento (Containment)

Antes de limpar, você precisa impedir que o atacante continue acessando ou que o malware se espalhe (spam/phishing).

Suspenda o acesso web (Manutenção forçada): Não coloque apenas em “modo manutenção” do WP. Bloqueie no nível do servidor web. Crie um .htaccess na raiz (public_html) permitindo apenas o seu IP:

Order Deny,Allow
Deny from all
Allow from 123.123.123.123

Backup Forense: Faça um backup do estado infectado. Se você deletar algo crítico ou precisar investigar a origem (RCA – Root Cause Analysis) depois, precisará disso. tar -czf site_infectado_backup.tar.gz /home/usuario/domains/dominio.com/public_html . mysqldump -u usuario_db -p nome_db > dump_infectado.sql

Fase 2: O “Nuclear” nos Arquivos do Core

Não tente limpar arquivos do core (wp-admin, wp-includes). Substitua-os. Malware adora se esconder em wp-includes/images/smilies/icon.php ou injetar códigos em wp-login.php.

  1. Identifique a versão do WP: wp core version --allow-root
  2. Baixe o core limpo (em um diretório temporário): mkdir /tmp/wp-clean cd /tmp/wp-clean wp core download --version=6.X.X --locale=pt_BR --allow-root
  3. Substitua os diretórios: No diretório do site infectado:
    • Delete: wp-admin e wp-includes.
    • Mantenha: wp-content, wp-config.php e .htaccess.
    • Copie: Os diretórios limpos do /tmp/wp-clean para a raiz do site.

Fase 3: A Zona de Guerra (wp-content)

É aqui que 90% dos malwares residem, disfarçados de plugins ou uploads.

  1. Pasta uploads: Por padrão, não deve haver arquivos PHP executáveis aqui. Execute este comando para listar qualquer PHP escondido em uploads: find wp-content/uploads -name "*.php" -print Ação: Se encontrar, verifique o conteúdo. Geralmente são backdoors (webshells). Delete-os.Dica de SysAdmin: Bloqueie execução de PHP em uploads via .htaccess ou configuração do Nginx no futuro.
  2. Plugins e Temas:
    • Plugins Gratuitos: Liste os plugins instalados, delete as pastas em wp-content/plugins/ e baixe versões frescas do repositório oficial.
    • Plugins Premium/Temas: Se não tiver backup limpo, você terá que auditar. Use grep para buscar padrões comuns de ofuscação: grep -rE "base64_decode|eval\(|gzinflate|str_rot13" wp-content/plugins/
    • Arquivo index.php: Verifique se existe um arquivo index.php falso dentro das pastas de cada plugin.

Fase 4: Limpeza do Banco de Dados

O malware pode criar usuários fantasmas ou injetar scripts nas opções do site.

  1. Verifique Usuários Administradores: Use o WP-CLI para listar usuários com role ‘administrator’. wp user list --role=administrator --allow-root Ação: Remova qualquer usuário desconhecido imediatamente.
  2. Injeções na Tabela wp_options: Hackers costumam injetar redirecionamentos de JavaScript no siteurl ou home se conseguirem acesso ao banco, ou em widgets de texto.
  3. Reset de Senhas: Force o reset de senha de todos os usuários administradores legítimos.

Fase 5: wp-config.php e Sais de Segurança

O arquivo wp-config.php é frequentemente modificado.

  1. Auditoria Manual: Abra o arquivo. Verifique se há include ou require estranhos no topo ou no final do arquivo.
  2. Troque as senhas do Banco: Crie um novo usuário/senha no MySQL e atualize o arquivo. Isso desconecta scripts maliciosos que roubaram as credenciais antigas.
  3. Regenerar Salt Keys: Isso é crítico. Invalida todos os cookies de sessão ativos (deslogando o atacante). wp config shuffle-salts --allow-root

Fase 6: Permissões e Hardening (Pós-Limpeza)

Restaure as permissões corretas para evitar reinfecção imediata.

  1. Permissões Padrão: find . -type d -exec chmod 755 {} \; find . -type f -exec chmod 644 {} \; chmod 600 wp-config.php
  2. Proteção contra Escrita (Imutabilidade): Como root, você pode usar o atributo imutável no wp-config.php e .htaccess para que nem mesmo o usuário do sistema possa alterá-los sem remover o atributo antes. chattr +i wp-config.php chattr +i .htaccess

Fase 7: Root Cause Analysis (Como eles entraram?)

Não adianta limpar se a porta continuar aberta. Verifique os logs (access.log e error.log).

  1. Busque por chamadas POST suspeitas: Geralmente, o ataque inicial ou o upload do webshell é feito via POST. grep "POST" access.log | grep ".php"
  2. Verifique a data dos arquivos maliciosos: Use stat nome_do_arquivo_malicioso.php para ver a data de modificação e cruze essa data/hora exata com o access log para ver qual IP acessou e qual URL foi explorada.

Resumo de Ferramentas Úteis

  • WP-CLI: Essencial para reinstalar core e gerenciar usuários via terminal.
  • Maldet (Linux Malware Detect): Excelente para scannear diretórios em busca de assinaturas de malware conhecidas. maldet -a /home/usuario/domains/dominio.com/public_html
  • ClamAV: Pode ser usado em conjunto com o Maldet.
  • Wordfence CLI: Versão gratuita para linha de comando que faz um scan de alta performance (bom para servidores).

Próximo Passo: Após limpar, remova o bloqueio de IP do .htaccess, limpe os caches (Redis/Nginx/LiteSpeed) e monitore o tail -f error_log nas próximas 24 horas.

FAQ: Perguntas Frequentes sobre Limpeza de Malware em WordPress

Posso limpar um site WordPress infectado apenas instalando um plugin de segurança?

Geralmente não. Plugins de segurança são excelentes para prevenção (WAF) e escaneamento, mas raramente conseguem remover backdoors complexos que se escondem em arquivos do sistema, cron jobs ou fora da pasta pública. Para uma recuperação de desastre real, é necessário acesso SSH e substituição dos arquivos do núcleo (core).

Como localizar arquivos maliciosos (backdoors) via SSH?

A maneira mais eficiente é buscar por arquivos PHP modificados recentemente (find . -type f -name "*.php" -mtime -7) ou usar o grep para encontrar funções comumente usadas em webshells, como base64_decode, eval, gzinflate e shell_exec dentro da pasta wp-content.

É necessário reinstalar o WordPress após uma infecção?

Sim. A prática recomendada de segurança (Hardening) dita que você nunca deve confiar em arquivos que estiveram em um ambiente comprometido. Substituir as pastas wp-admin e wp-includes por cópias limpas do repositório oficial garante que o código executado seja legítimo.

O malware pode estar escondido no banco de dados do WordPress?

Sim. Atacantes frequentemente injetam scripts JavaScript maliciosos (redirecionamentos) na tabela wp_posts ou criam usuários administradores fantasmas na tabela wp_users. É crucial auditar o banco de dados além dos arquivos físicos.

O que fazer se o site for reinfectado logo após a limpeza?

Se a reinfecção for imediata, provavelmente há um “backdoor” persistente que não foi encontrado (talvez em um plugin “nulled”), uma tarefa cron maliciosa agendada no servidor, ou as senhas de banco de dados/FTP não foram rotacionadas. Verifique também permissões de escrita incorretas (777).

Veja Mais:

Como Configurar Login Automático no phpMyAdmin via DirectAdmin

O Que é Gerenciamento de Servidor?

Guerra dos Web Servers: Apache vs. Nginx vs. Litespeed – Benchmarks reais.

TCP Tuning para WordPress: Guia de Alta Performance

Antivirus, Antimalware, Antiphishing on Almalinux or Cloudlinux with ClamAV