O Momento em que Descobres que o Teu Site Foi Hackeado
Pode acontecer de várias formas: um cliente avisa que o site redireciona para uma farmácia online duvidosa, o Google Search Console mostra um alerta de “Conteúdo enganoso detetado”, o teu fornecedor de hosting suspende a conta sem aviso prévio, ou simplesmente encontras publicações em japonês numa loja que vende equipamento de jardinagem. A sensação é sempre a mesma: uma combinação de pânico, confusão e urgência.
O cenário é mais comum do que parece. Em apenas o primeiro semestre de 2024, a Sucuri detetou 681.182 sites infetados em 53,2 milhões de sites analisados. Em 2023, a mesma empresa limpou mais de 39.500 sites comprometidos. A grande maioria corre WordPress — não por ser intrinsecamente inseguro, mas por ser o CMS mais usado no mundo, o que o torna o alvo mais lucrativo para campanhas automatizadas.
Este guia dá-te um plano de ação claro: o que fazer imediatamente, como identificar a infeção, como limpá-la, como restaurar o site e como prevenir que aconteça de novo.
Porque é que os Sites WordPress São Hackeados
Antes de passar à ação, é útil perceber por que aconteceu. O Patchstack identificou 7.966 novas vulnerabilidades no ecossistema WordPress em 2024 — um aumento de 34% face ao ano anterior. Desse total, 96% estão em plugins, 4% em temas e apenas um punhado no core. Mais preocupante: 43% das vulnerabilidades não requerem qualquer autenticação para serem exploradas, e 33% foram tornadas públicas antes de ter correção disponível.
A janela de exploração é brutalmente curta: o Patchstack mediu uma mediana de 5 horas entre a divulgação de uma vulnerabilidade e os primeiros ataques em massa. Manter plugins e temas atualizados não é uma boa prática — é uma obrigação contínua.
Os tipos de infeção mais comuns em 2024 (dados Sucuri Mid-Year Report 2024):
| Tipo de infeção | Sites afetados (H1 2024) |
|---|---|
| Malware injetado / redirecionamentos | 473.135 (69,5% das infeções) |
| Spam SEO (conteúdo oculto, spam japonês, farmacêutico, jogo online) | 234.033 (34,4%) |
| Campanha Balada Injector | 100.470 |
| Skimmers de cartão de crédito | 9.061 |
| Desfiguração (defacement) | 4.962 (0,73%) |
Os dados da Sucuri mostram também que 49,21% dos sites comprometidos tinham pelo menos um backdoor instalado — o que significa que a simples limpeza do conteúdo visível não é suficiente. O backdoor é a porta que o atacante deixa aberta para voltar.
Passo 1 — Agir Imediatamente
Deves colocar o site offline?
Depende do tipo de infeção. Para redirecionamentos maliciosos, páginas de phishing, ou malware que afeta os visitantes, coloca o site offline imediatamente. Não vale a pena manter o tráfego a circular enquanto o site serve malware — a reputação e as obrigações RGPD/GDPR pesam mais do que as visitas perdidas nas próximas horas.
Para infeções passivas (spam SEO oculto, backdoor que ainda não foi ativado), podes trabalhar com o site ativo se conseguires avançar rapidamente. O mais importante é não deixar o problema para amanhã.
Para colocar o site em modo de manutenção ao nível do servidor (funciona mesmo que o WordPress esteja inacessível), adiciona ao ficheiro .htaccess na raiz do site:
RewriteEngine on
RewriteCond %{REMOTE_ADDR} !^O.TEU.IP.AQUI
RewriteCond %{REQUEST_URI} !/manutencao.html$ [NC]
RewriteRule .* /manutencao.html [R=302,L]
Substitui O.TEU.IP.AQUI pelo teu endereço IP atual (verifica em whatismyip.com) e cria um ficheiro manutencao.html simples na raiz. Apenas tu consegues aceder ao site enquanto trabalhas na recuperação.
Contacta o teu hosting
Informa o fornecedor de hosting imediatamente. Pede-lhes que: verifiquem os logs de acesso ao servidor, façam um scan ao nível do servidor, e confirmem se outros sites no mesmo servidor partilhado foram afetados (contaminação cruzada é comum em hosting partilhado). Se o hosting já suspendeu a conta, isso é um sinal de que detetaram a infeção — pede-lhes os detalhes do que encontraram.
Passo 2 — Avaliar a Extensão da Infeção
Antes de limpar seja o que for, precisas de perceber o que está comprometido. Usa estas ferramentas:
- Google Search Console → Segurança e ações manuais → Problemas de segurança: mostra se o Google detetou malware, conteúdo enganoso ou software não desejado.
- Sucuri SiteCheck (
sitecheck.sucuri.net): verifica o código HTML público do site, scripts injetados, iframes suspeitos, e blacklists (Google Safe Browsing, McAfee, Norton). É gratuito e dá um diagnóstico rápido. Limitação importante: é um scanner remoto — não acede aos ficheiros PHP no servidor, por isso não deteta backdoors nem malware condicional. - Google Safe Browsing: verifica se o teu domínio está na lista negra do Google.
- Plugin Wordfence (gratuito): faz scan dos ficheiros WordPress contra checksums oficiais e assinaturas de malware conhecidas. A versão gratuita tem um atraso de 30 dias na atualização de assinaturas — para recuperação de incidentes ativos, o Premium (149 €/ano) com assinaturas em tempo real é mais fiável.
Verifica também a lista de administradores WordPress. A Sucuri encontrou contas admin maliciosas em 55,2% das bases de dados infetadas:
wp user list --role=administrator --fields=ID,user_login,user_email,user_registered
Qualquer conta que não reconheças é suspeita.
Passo 3 — Identificar e Localizar a Infeção
Verificar a integridade dos ficheiros core com WP-CLI
O WP-CLI permite comparar todos os ficheiros do WordPress core com os checksums oficiais do WordPress.org:
# Verificar integridade dos ficheiros core
wp core verify-checksums
# Verificar também os ficheiros na raiz
wp core verify-checksums --include-root
# Verificar checksums dos plugins (apenas plugins do WordPress.org)
wp plugin verify-checksums --all
Qualquer ficheiro marcado como “Modified” ou “Added” é candidato a infeção.
Localizar ficheiros PHP recentemente modificados
Encontrar ficheiros PHP modificados nos últimos 7 dias (via SSH/terminal):
find . -type f -name "*.php" -mtime -7
Ficheiros PHP em locais onde não deveriam existir são sempre um sinal de alerta imediato:
# Ficheiros PHP em uploads (NUNCA devem existir aqui)
find wp-content/uploads -type f -name "*.php"
# Procurar funções de backdoor comuns em todos os ficheiros PHP
grep -rl "eval(base64_decode" . --include="*.php"
grep -rl "shell_exec(" . --include="*.php"
grep -rl "system(" . --include="*.php"
grep -rl "gzinflate" . --include="*.php"
Locais onde os backdoors se escondem com mais frequência
wp-content/uploads/— qualquer ficheiro.phpaqui é malicioso, sem exceção.wp-content/mu-plugins/— os must-use plugins carregam automaticamente sem ativação. A Sucuri documentou um backdoor emwp-content/mu-plugins/index.phpprecisamente por ser um local raramente verificado.- Temas inativos — especialmente o
functions.phpde temas que não estão a ser usados. Os atacantes sabem que os proprietários só verificam o tema ativo. wp-includes/— ficheiros aqui que não fazem parte da release oficial do WordPress são maliciosos.- Raiz do site — ficheiros PHP disfarçados de ficheiros legítimos (ex.:
wp-class.php,wp-cache.php).
Se identificares ficheiros suspeitos, o guia de identificação e remoção de malware WordPress explica como confirmar e eliminar código malicioso em profundidade — incluindo técnicas de análise manual para backdoors ofuscados.
Infeções na base de dados
Além dos ficheiros, a base de dados pode conter código malicioso. Procura com WP-CLI:
wp db search "
As tabelas mais frequentemente afetadas são wp_options (URLs do site, opções de plugins injetadas), wp_posts (spam SEO, links ocultos) e wp_users (contas admin maliciosas).
Passo 4 — Limpar a Infeção
Restaurar ficheiros core e plugins
A forma mais fiável de limpar os ficheiros core é reinstalá-los a partir da fonte oficial. O WP-CLI faz isso sem apagar o wp-config.php nem o wp-content/:
# Reinstalar o core WordPress (substitui todos os ficheiros core modificados)
wp core download --version=$(wp core version) --force
# Reinstalar todos os plugins a partir do WordPress.org
wp plugin install $(wp plugin list --field=name) --force
# Atualizar todos os plugins e temas
wp plugin update --all
wp theme update --all
Atenção: o comando de reinstalar plugins só funciona para plugins disponíveis no WordPress.org. Plugins premium (Elementor Pro, WP Rocket, etc.) têm de ser reinstalados manualmente a partir do ficheiro original do vendor.
Eliminar backdoors manualmente
Após reinstalar o core e os plugins, verifica e elimina manualmente:
- Todos os ficheiros
.phpemwp-content/uploads/ - O conteúdo de
wp-content/mu-plugins/(apaga tudo o que não reconheças) - Os temas inativos — ou elimina-os, ou verifica-os ficheiro a ficheiro
- Ficheiros na raiz que não fazem parte do WordPress padrão
Adiciona um .htaccess ao diretório wp-content/uploads/ para bloquear a execução de PHP mesmo que algum ficheiro tenha escapado à limpeza:
<Files *.php>
deny from all
</Files>
Limpar a base de dados
Remove contas admin desconhecidas e conteúdo injetado:
# Eliminar utilizador suspeito (reassigna o conteúdo ao admin legítimo)
wp user delete ID_SUSPEITO --reassign=1
Para conteúdo spam injetado nos posts, acede ao phpMyAdmin ou usa a interface do WordPress para revisar e apagar os posts em questão.
Passo 5 — Restaurar a Partir de Backup (Quando Aplicável)
Se tens um backup limpo anterior à infeção, a restauração é frequentemente mais rápida e mais segura do que uma limpeza manual — especialmente em infeções extensas. A condição é garantir que o backup é anterior à infeção: verifica a data do backup e cruza com os logs de acesso ou com a data de primeiros sinais do hack.
Com o UpdraftPlus: painel WordPress → Definições → UpdraftPlus → Backups existentes → Restaurar. Se o wp-admin estiver inacessível, o UpdraftPlus Premium permite restaurar via FTP. O BlogVault e o ManageWP têm dashboards externos que funcionam mesmo com o site completamente inacessível.
Atenção crítica: restaurar o backup não elimina a vulnerabilidade que permitiu o hack. Se restauras o site sem atualizar o plugin que foi explorado, voltarás a ser hackeado em horas. Imediatamente após a restauração, atualiza tudo.
Passo 6 — Pós-Limpeza: Fechar Todas as Portas
Uma limpeza sem reforço de segurança é apenas um adiamento. Após confirmar que o site está limpo:
1. Resetar todas as passwords
| O quê | Como |
|---|---|
| Todos os utilizadores WordPress | WP-CLI ou Painel → Utilizadores |
| Password da base de dados | Painel de hosting → MySQL, depois atualizar wp-config.php |
| FTP/SFTP | Painel de hosting |
| Painel de controlo do hosting | Definições da conta de hosting |
| Email do domínio | Hosting ou fornecedor de email |
# Forçar reset de password para TODOS os utilizadores (obriga a redefinir no próximo login)
wp user reset-password $(wp user list --field=ID) --skip-email
2. Regenerar as chaves secretas do WordPress
As chaves e salts no wp-config.php são usadas para assinar cookies de sessão. Ao regenerá-las, invalidas imediatamente todas as sessões ativas — incluindo qualquer sessão que o atacante possa ter aberta. Gera novas chaves em https://api.wordpress.org/secret-key/1.1/salt/ e substitui o bloco completo das 8 constantes (AUTH_KEY, SECURE_AUTH_KEY, LOGGED_IN_KEY, etc.) no wp-config.php.
3. Forçar o logout de todas as sessões
wp user session destroy --all --yes
4. Verificar e corrigir as permissões de ficheiros
# Diretórios: 755, Ficheiros: 644
find /caminho/para/wordpress -type d -exec chmod 755 {} ;
find /caminho/para/wordpress -type f -exec chmod 644 {} ;
# wp-config.php: máxima proteção
chmod 440 wp-config.php
Para um guia completo de hardening de permissões WordPress além do contexto de recuperação, incluindo permissões para wp-config.php e pastas sensíveis, ver o guia dedicado.
5. Ativar o hardening básico
Adiciona ao wp-config.php para desativar a edição de ficheiros no painel:
define('DISALLOW_FILE_EDIT', true);
Ativa o 2FA para todos os administradores, instala um WAF (Wordfence ou Cloudflare), e considera alterar o URL de login padrão.
6. Pedir revisão ao Google (se necessário)
Se o Google colocou o site na lista negra, após a limpeza vai ao Google Search Console → Segurança e ações manuais → Problemas de segurança → e clica em "Pedir revisão". O processo demora geralmente entre 1 e 3 dias úteis.
Serviços Profissionais de Limpeza
Se a infeção for complexa, o tempo for crítico, ou simplesmente não tiveres confiança para fazer a limpeza manualmente, existem serviços especializados:
| Serviço | Plano pontual | Plano anual (limpezas ilimitadas) | Tempo de resposta |
|---|---|---|---|
| Sucuri | Limpeza pontual $98/site | $229–$549/ano (Basic→Business; inclui limpezas ilimitadas) | 6–30 horas (consoante plano) |
| Wordfence | $179/site | $590/ano (Wordfence Care) | Horário comercial ET |
| Wordfence Response | — | $1.250/ano | 1 hora, 365 dias/ano |
| MalCare | — | $99–$499/ano (Protect→Fortify; limpeza automática incluída) | Automático (+ suporte manual se necessário) |
O MalCare destaca-se pela limpeza automática com um clique (sem intervenção humana inicial), com garantia de reembolso se a limpeza falhar. A Sucuri e o Wordfence Care são as opções preferidas para sites de negócio onde a componente forense (perceber como entraram, não só limpar) é importante.
Passo 7 — Monitorização nos Dias Seguintes
A recuperação não termina quando o site volta online. As reinfecções mais comuns acontecem nas primeiras 48–72 horas após a limpeza, quando um backdoor que escapou ao scan inicial é reativado ou quando o mesmo vetor de entrada (um plugin desatualizado, uma conta comprometida) é explorado de novo. Esta é a fase de vigilância ativa.
Configurar alertas de email no Wordfence
Se o Wordfence está instalado, vai a Wordfence → Todas as Opções → Alertas de email e ativa pelo menos:
- Alertas sobre problemas críticos — atividade admin suspeita, novos utilizadores com papel de administrador, ficheiros modificados.
- Alertas de scan — notificação quando o scan semanal (ou diário, no Premium) deteta problemas novos.
- Alertas de login falhado — úteis para detetar ataques de força bruta em curso.
Verificar os logs de acesso durante 72 horas
Pede ao hosting acesso aos logs de acesso HTTP (access.log ou similar). Procura padrões suspeitos: pedidos POST para ficheiros PHP que não deveriam receber POST, pedidos a caminhos que não existem, IPs que fazem muitos pedidos em sequência a URLs com padrões de injeção (parâmetros com base64_decode, eval, ou traversal de diretório como ../../). Muitos painéis de hosting (cPanel, Plesk) têm um visualizador de logs em tempo real — usa-o durante os dois dias seguintes à recuperação.
Bloquear o diretório uploads via PHP
Além do .htaccess já mencionado no Passo 4, confirma que o diretório wp-content/uploads/ não executa PHP ao nível do servidor. Em Nginx, isso requer uma diretiva específica no ficheiro de configuração do vhost — pede ao hosting que verifique. Em Apache, o .htaccess com deny from all para ficheiros .php é suficiente se o AllowOverride All estiver ativo para esse diretório.
Agendar um scan completo para 7 dias depois
Passada uma semana, corre um novo scan completo com o Wordfence (ou Sucuri SiteCheck para a camada pública) e verifica novamente a lista de administradores e os ficheiros em mu-plugins/ e uploads/. Se o site está limpo ao fim de 7 dias e todos os vetores de entrada foram fechados (plugins atualizados, passwords resetadas, backdoors removidos, permissões corrigidas), a probabilidade de reinfecção é muito baixa. Se aparecer malware novo, o processo foi incompleto — há um backdoor ou vetor ativo que não foi detetado na primeira passagem.
Conclusão: a Limpeza é o Início, Não o Fim
Recuperar de um hack WordPress é um processo com um início definido — o momento da descoberta — mas cujo verdadeiro sucesso só se mede semanas depois, quando o site continua limpo e sem reinfecções. A maioria das reinfecções acontece porque a vulnerabilidade original não foi eliminada, porque algum backdoor sobreviveu à limpeza, ou porque as passwords não foram todas resetadas.
Segue o processo completo — scan, limpeza, restauro, hardening —, monitoriza os logs durante os dias seguintes, e trata este incidente como um ponto de viragem para implementar as práticas de segurança preventiva que podem não ter estado no topo das prioridades até agora.
O teu site WordPress foi comprometido e precisas de ajuda urgente? A OnePixel presta serviços de recuperação de sites WordPress e manutenção preventiva para empresas em Portugal — mesmo que não tenhas os acessos ou o site tenha sido feito por outra empresa. Contacta-nos: situações urgentes têm prioridade e o diagnóstico é gratuito.
Deixe um comentário