ELF, Não Dados: Identificando um Binário Linux pelo Cabeçalho 7F 45 4C 46
O desafio
Um arquivo suspeito chamado blob.dat foi deixado em /tmp num servidor Linux. Abra-o no visualizador hexadecimal, compare os primeiros bytes com as assinaturas de referência e digite o tipo real do arquivo.
O que você vai aprender
- Reconhecer a assinatura ELF 7F 45 4C 46 e ler 'ELF' a partir dos bytes ASCII
- Interpretar os bytes de classe e endianness (64 bits, little-endian) que seguem
- Ler os campos e_type e e_machine para confirmar um executável x86-64
- Explicar por que um arquivo .dat com cabeçalho ELF é um sinal de alerta de malware
- Diferenciar ELF das assinaturas PE/MZ, Mach-O e Java class
Habilidades testadas
Pré-requisitos
- Noção básica de que executáveis Linux usam o formato ELF
- Familiaridade com leitura de valores de bytes em hexadecimal
Como funciona
No Linux, executáveis nativos, bibliotecas compartilhadas e core dumps usam todos o contêiner ELF (Executable and Linkable Format). Todo arquivo ELF começa com a assinatura de quatro bytes 7F 45 4C 46. O byte inicial 0x7F é deliberadamente não imprimível (ele quebra ferramentas que tentam tratar o arquivo como texto), e os três bytes seguintes são as letras ASCII ELF.
Os bytes logo após o magic number são o cabeçalho de identificação ELF e confirmam o diagnóstico. 02 define a classe como 64 bits (um 01 seria 32 bits), 01 define a codificação de dados como little-endian, e 01 é a versão do ELF. Um pouco mais adiante, o campo e_type 02 00 marca o arquivo como executável e o e_machine 3E 00 identifica a arquitetura x86-64.
Um arquivo chamado blob.dat localizado em /tmp com esse cabeçalho é um sinal clássico de malware dropado: a extensão de aparência inofensiva esconde um binário executável. A lista de referência contrasta o ELF com os outros formatos executáveis principais - PE/MZ (4D 5A, 'MZ') para Windows, Mach-O (FE ED FA CE) para macOS, e arquivos Java class (CA FE BA BE) - nenhum dos quais corresponde.
Erros comuns
- Tratar o .dat como dado opaco. A extensão é propositalmente vaga, mas o cabeçalho é uma assinatura ELF concreta.
- Travar no byte 7F. Ele é não imprimível por design; o
ELFlegível vem logo em seguida. - Confundir ELF com um Java class. Arquivos Java class começam com
CA FE BA BE('cafebabe'), o que não tem relação com7F 45 4C 46. - Adivinhar o sistema operacional pelo nome do arquivo. O formato, não o nome ou a localização, é o que indica que se trata de um binário Linux.
Como se proteger
Defensores de sistemas Linux devem classificar arquivos dropados pelo conteúdo e monitorar os diretórios que o malware costuma preferir.
- Monitore caminhos com permissão de escrita para todos, como
/tmp,/dev/shme/var/tmp, em busca de novos arquivos cujos magic bytes sejam ELF, independentemente da extensão. - Monte esses caminhos com
noexecquando viável, para que um ELF dropado não possa ser executado diretamente. - Use tipagem de arquivo baseada em conteúdo no seu EDR e alerte sobre incompatibilidades entre extensão e tipo.
- Estabeleça uma linha de base dos binários esperados e sinalize arquivos ELF não assinados ou desconhecidos que aparecerem fora de locais gerenciados por gerenciador de pacotes.