Estudo em larga escala mapeia compiladores usados em 23,5 milhões de arquivos PE maliciosos
Um pesquisador do SANS Internet Storm Center processou 1,3 TB de amostras de malware do MalwareBazaar, cobrindo fevereiro de 2020 a julho de 2026, para identificar qual toolchain de compilação gerou cada binário PE malicioso. O script, construído sobre a biblioteca pefile, combina leitura do Rich Header, do cabeçalho CLR (.NET) e heurísticas de string para atribuir compilador/linker às amostras. O resultado mostra predominância de binários 32-bit, forte presença do MSVC entre as amostras identificáveis e uma fatia relevante de amostras sem toolchain identificável, provavelmente por empacotamento ou remoção de metadados.
O artigo publicado no SANS ISC descreve um exercício de fingerprinting de toolchain em escala: usando a biblioteca Python pefile, o autor varreu cerca de 23,5 milhões de arquivos extraídos de um repositório de 1,3 TB de amostras de malware do MalwareBazaar, incluindo arquivos aninhados em até três níveis de arquivos compactados. O objetivo não foi analisar uma amostra específica, mas construir um panorama estatístico de como malware é compilado atualmente, informação que normalmente fica escondida dentro dos metadados do próprio executável.
Tecnicamente, a identificação do compilador combina três fontes de evidência dentro do cabeçalho PE. A primeira é o Rich Header, uma estrutura não documentada oficialmente pela Microsoft, ofuscada por XOR, que o linker do Visual Studio grava no início de binários compilados com MSVC — ela registra versões de compilador/linker e a quantidade de arquivos-objeto usados na montagem final, servindo como uma espécie de "impressão digital" de build. A segunda é o cabeçalho CLR, presente em binários .NET (C#/VB.NET), que expõe a versão do runtime conforme a especificação ECMA-335. A terceira é uma varredura heurística de strings características de toolchains não-Microsoft, como GCC, Clang, Delphi, Free Pascal, Go e Rust, usada quando as duas primeiras fontes não se aplicam ou foram removidas.
Os números resultantes reforçam observações que analistas de malware já suspeitavam empiricamente: binários 32-bit ainda dominam de forma esmagadora (565.179 amostras contra 125.510 de 64-bit), o que sugere preocupação dos autores de malware com compatibilidade ampla mais do que com uso de recursos modernos de 64-bit. Entre as amostras com toolchain identificável, o MSVC responde por 31,3%, enquanto linguagens mais recentes como Go (0,9%) e Rust (0,2%) seguem marginais no ecossistema de malware, apesar do interesse crescente da comunidade ofensiva por essas linguagens em ferramentas legítimas. O dado mais relevante para triagem forense é que 39,4% das amostras não puderam ser atribuídas a nenhuma toolchain conhecida — um indício forte de empacotamento, ofuscação de cabeçalho ou uso de compiladores customizados/raros que os heurísticos não cobrem.
Na prática, esse tipo de fingerprinting de compilador é uma técnica de triagem usada por analistas de malware e equipes de DFIR para agrupar amostras por família ou campanha, priorizar reversão manual e levantar hipóteses de atribuição antes de um mergulho profundo em engenharia reversa. Saber que uma fração relevante das amostras maliciosas atuais esconde deliberadamente esses metadados também é um sinal prático: ferramentas de triagem automatizada que dependem só de Rich Header ou de strings de compilador vão sistematicamente perder essa fatia, reforçando a necessidade de técnicas complementares (empacotador/packer detection, análise comportamental, hashing de seções) quando o objetivo é uma investigação pericial completa e não apenas estatística agregada.