Heimdall From Thor - Heimdall the Gatekeeper from the Movie Thor Desktop Wallpaper
Heimdall the Gatekeeper from the Movie Thor Desktop Wallpaper

O que é e como funciona o Heimdall

O Heimdall é uma ferramenta open-source desenvolvida por usuários do fórum MalwareMustDie para identificar e desofuscar códigos PHP maliciosos, especificamente web shells que usam técnicas como eval, base64_decode e codificação longa para esconder suas funções. A ideia central é bem simples: você aponta o script para um arquivo .php suspeito e ele varre linha por linha tentando quebrar as camadas de ofuscação até revelar o código real. Não é um scanner de vulnerabilidade tradicional e não substitui uma análise manual aprofundada, mas serve como ponto de partida decente. A ferramenta foi originalmente criada para ajudar analistas de malware a lidarem com PHP obfuscated em larga escala, principalmente aqueles scripts que usam múltiplas camadas de base64, str_rot13, gzinflate e outras técnicas de encode que tornam a leitura manual quase inviável. O funcionamento envolve um parser que identifica construções suspeitas, aplica transformações inversas nas funções de encoding e tenta reconstruir o fluxo original do código.

Instalando e configurando o heimdall from thor

Para começar, você precisa ter PHP instalado na versão 5.3 ou superior, preferencialmente 7.x, pois algumas bibliotecas que a ferramenta consome dependem disso. O repositório oficial está no GitHub sob o nome "heidmall" ou "heimdall-php", mas há forks espalhados por aí com pequenas modificações. Recomendo usar uma VM isolada ou container Docker, porque os arquivos que você for analisar podem conter callbacks maliciosos disfarçados que tentam executar comandos no sistema host durante o parseamento. Depois de clonar o repositório, a instalação é basicamente executar o comando de instalação do Composer dentro do diretório do projeto. Não tem muita configuração inicial, mas vale a pena ajustar as opções de timeout e depth of recursion nas configurações para evitar que a ferramenta entre em loop infinito com arquivos que têm camadas de ofuscação extremamente profundas. Um arquivo bem ofuscado pode ter mais de 30 camadas de base64 embutidas, e o padrão da ferramenta às vezes para antes de chegar no fundo.

Vejo muitos analistas Iniciantes cometendo o erro de rodar o Heimdall diretamente contra snapshots de servidores comprometidos sem filtrar os arquivos primeiro. O resultado é demorado e frequentemente gera falsos positivos massivos. O correto é selecionar apenas arquivos com suspeita real de ofuscação, como shell.php, config.inc.php, cache.php ou qualquer arquivo PHP que esteja em um diretório wp-content/uploads ou tmp.

O problema na prática

Um caso que me chamou atenção recentemente envolveu um web shell que usava uma técnica híbrida de ofuscação: as primeiras dez camadas eram base64 normal, mas na décima primeira camada aparecia um str_shuffle aplicado em strings codificadas, seguido de eval com include de um arquivo temporário gerado dinamicamente. O Heimdall conseguiu resolver as dez camadas de base64 normalmente, mas travou na parte do str_shuffle porque o parser não reconheceu o padrão como uma função reversível dentro daquela cadeia específica. A solução que encontrei foi extrair manualmente a décima primeira camada de output do Heimdall, isolar a string shuffleada e aplicar um script Python simples que inverte a operação de shuffle usando seed fixa quando disponível, ou tentativa e erro baseada em padrões comuns de tokens PHP. Esse workaround economizou cerca de trinta minutos de análise manual que eu faria decodificando linha por linha.

👉 Clique no botão abaixo para saber mais sobre o assunto!

O que o Heimdall faz bem e onde falha

A ferramenta brilha em cenários de ofuscação clássica com cadeias lineares de base64, rot13, gzinflate e eval simples. Se o malware usa esse padrão, o Heimdall resolve em segundos e entrega o código limpo. Em arquivos grandes com mais de mil linhas de ofuscação empilhada, o processo pode levar de dois a cinco minutos dependendo da máquina, o que é aceitável quando comparado ao tempo manual. O ponto fraco é quando o código usa técnicas mais avançadas como callback injection, $$variaveis dinâmicas, array de funções anônimas passando strings ofuscadas para call_user_func ou eval com concatenação dinâmica. A ferramenta simplesmente não consegue reconstruir essas estruturas e retorna o código parcialmente desofuscado ou com gaps. Nesses casos, o ideal é usar o output parcial como guia para direcionar a análise manual para as áreas que restaram ofuscadas, em vez de tentar refilar tudo de novo.

Também vale lembrar que o Heimdall não detecta backdoors puramente binários ou shellcode em formatos não-PHP. É uma ferramenta estritamente focada em PHP ofuscado, então não adianta passar um arquivo .exe ou .dll esperando resultados. Alguns analistas tentam usar para JavaScript malicioso também e se decepcionam, já que a lógica de parsing é específica para sintaxe PHP.

Alternativas e complementos

Se o Heimdall não conseguir resolver um arquivo específico, existem outras ferramentas que podem ajudar. O PHP decompiler escrito por corelanc0d3r consegue transformar bytecode opcode de volta em código legível, mas só funciona se você tiver acesso ao arquivo .op ou ao processo rodando no servidor. O dionaea e o phpggc são complementos úteis para análise estática e geração de payloads de teste, respectivamente. Para casos onde a ofuscação é muito profunda e customizada, muitas vezes a abordagem mais eficiente é combinar o Heimdall com técnicas manuais de debugging, adicionando var_dump e die em pontos estratégicos do código ofuscado para rastrear a execução linha por linha. Não é bonito, mas funciona quando a ferramenta automática chega no limite dela.

Download e acesso

O repositório principal do Heimdall para análise de PHP malicioso está disponível no GitHub. A versão mais atualizada costuma ser mantida em forks ativos pela comunidade de segurança, então vale verificar qual tem mais commits recentes e issues abertas resolvidas. Antes de baixar, verifique a assinatura do commit e a integridade do repositório, porque projetos open-source populares de segurança às vezes têm mirrors comprometidos.