← voltar para a bancada  ·  read in English
// página do projeto

Elderward

Um scanner e limpador de malware em PHP, gratuito e em um único arquivo, pensado para sites WordPress comprometidos. Ele encontra infecções, remove malware conhecido e lê os logs de acesso em busca de pistas de como o ataque aconteceu.

lançado no WordCamp Brasil 2026PHP 5.6+arquivo únicobaseado em assinaturas
visitar elderward.space.fast ↗ código no GitHub ↗

o_que_é

O Elderward é uma variação do Jetpack Cleanup Util, empacotada para que qualquer pessoa possa rodá-la no próprio servidor. Foi lançado publicamente durante o WordCamp Brasil 2026. Você coloca o elderward.php no servidor e executa pelo terminal, ou via HTTP quando não há acesso a shell.

o_que_faz

  • Compara arquivos com assinaturas de malware conhecidas e faz a limpeza com escrita atômica.
  • Revisa o crontab em busca de padrões conhecidos de persistência.
  • Analisa os logs de acesso em busca de tráfego de ataque conhecido, com correlação opcional com arquivos.
  • Compara o núcleo do WordPress, plugins e temas com os pacotes oficiais do wordpress.org, com restauração opcional.
  • Verificações rápidas de PHP em uploads, diretivas auto-prepend, mu-plugins e arquivos PHP ocultos.
  • Relatório de anomalias de data e hora dos arquivos.
  • Mostra os achados no formato SEVERITY,TYPE,path,detail, ou em NDJSON com format=json.

experimente

Precisa de PHP 5.6 ou mais novo (de preferência na linha de comando). A extensão zlib só é necessária para ler logs rotacionados em .gz. Comece com uma simulação:

visualizar, sem alterar nada
php elderward.php dryrun=1
escanear tudo na raiz de um WordPress
php elderward.php scanall=1 scandirectory=/path/to/wp-root
verificação de integridade, restauração simulada
php elderward.php scanintegrity=1 restore=1 dryrun=1 scandirectory=/path/to/wp-root
todas as opções
php elderward.php help=1

Sem acesso a shell? Defina WEB_ACCESS_TOKEN dentro do arquivo, envie-o para o servidor e chame por HTTP:

modo HTTP
https://example.com/elderward.php?token=YOUR_TOKEN&dryrun=1

leia_antes_de_limpar

  • Faça backup antes e use dryrun=1 para ver o que seria alterado.
  • A detecção é baseada em assinaturas. Um resultado limpo não prova que o site está limpo.
  • Os achados nos logs incluem tentativas de ataque, e muitas delas falharam. Trate como pistas, não como prova de invasão.
  • Os achados de data e hora são heurísticas e nunca disparam limpeza.
  • Restaurar um arquivo o sobrescreve e pode destruir evidências. Defina quarantinedir fora do webroot para guardar cópias.
  • Arquivos maiores que 2 MB são ignorados.
  • Depois de usar o modo HTTP, apague o arquivo do servidor.
  • Uma limpeza bem-sucedida termina com o código de saída 3, o mesmo de um achado HIGH.
NOTA PRA MIM
Adicionar exemplo de saída e um changelog de verdade quando der. A fita fica até lá.