ELF, pas des données : identifier un binaire Linux grâce à son en-tête 7F 45 4C 46
Le défi
Un fichier suspect nommé blob.dat a été laissé dans /tmp sur un serveur Linux. Ouvrez-le dans la visionneuse hexadécimale, comparez les premiers octets aux signatures de référence, et indiquez le vrai type de fichier.
Ce que tu vas apprendre
- Reconnaître la signature ELF 7F 45 4C 46 et lire 'ELF' dans les octets ASCII
- Interpréter les octets de classe et de boutisme qui suivent (64 bits, petit-boutiste)
- Lire les champs e_type et e_machine pour confirmer un exécutable x86-64
- Expliquer pourquoi un fichier .dat avec un en-tête ELF est un signal d'alerte de malware
- Distinguer ELF des signatures PE/MZ, Mach-O et Java class
Compétences testées
Prérequis
- Savoir que les exécutables Linux utilisent le format ELF
- Être à l'aise avec la lecture de valeurs hexadécimales
Comment ça marche
Sous Linux, les exécutables natifs, les bibliothèques partagées et les core dumps utilisent tous le conteneur ELF (Executable and Linkable Format). Tout fichier ELF commence par la signature de quatre octets 7F 45 4C 46. L'octet initial 0x7F est délibérément non imprimable (il fait échouer les outils qui tentent de traiter le fichier comme du texte), et les trois octets suivants sont les lettres ASCII ELF.
Les octets qui suivent immédiatement le magic constituent l'en-tête d'identification ELF et confirment le diagnostic. 02 fixe la classe à 64 bits (un 01 signifierait 32 bits), 01 fixe l'encodage des données en petit-boutiste, et 01 est la version d'ELF. Un peu plus loin, le champ e_type 02 00 marque le fichier comme exécutable et e_machine 3E 00 identifie l'architecture x86-64.
Un fichier nommé blob.dat se trouvant dans /tmp avec cet en-tête est un signe classique de malware déposé : l'extension d'apparence inoffensive cache un binaire exécutable. La liste de référence met en contraste ELF avec les autres grands formats exécutables - PE/MZ (4D 5A, 'MZ') pour Windows, Mach-O (FE ED FA CE) pour macOS, et les fichiers Java class (CA FE BA BE) - aucun ne correspond.
Erreurs fréquentes
- Considérer .dat comme une donnée opaque. L'extension est volontairement vague, mais l'en-tête est une signature ELF concrète.
- Buter sur l'octet 7F. Il est non imprimable par conception ; le
ELFlisible suit immédiatement. - Confondre ELF avec un fichier Java class. Les fichiers Java class commencent par
CA FE BA BE('cafebabe'), qui n'a aucun rapport avec7F 45 4C 46. - Deviner l'OS à partir du nom de fichier. C'est le format, pas le nom ou l'emplacement, qui indique qu'il s'agit d'un binaire Linux.
Comment s'en protéger
Les défenseurs Linux doivent classifier les fichiers déposés par leur contenu et surveiller les répertoires que privilégient les malwares.
- Surveillez les chemins accessibles en écriture par tous, comme
/tmp,/dev/shmet/var/tmp, à la recherche de nouveaux fichiers dont les magic bytes sont ceux d'ELF, quelle que soit l'extension. - Montez ces chemins en
noexeclorsque c'est possible, pour qu'un ELF déposé ne puisse pas être exécuté directement. - Utilisez un typage de fichier basé sur le contenu dans votre EDR et générez une alerte en cas d'incohérence entre extension et type.
- Établissez une base de référence des binaires attendus et signalez les fichiers ELF non signés ou inconnus apparaissant en dehors des emplacements gérés par le gestionnaire de paquets.