recherche de vulnérabilités / 4. le format ELF
Le format ELF
ELF (Executable and Linkable Format) est le format des exécutables, bibliothèques .so et fichiers objets .o sous Linux. On suit où chaque morceau de ce programme atterrit, dans le fichier puis en mémoire.
int g = 5; // variable globale initialisée
int z; // variable globale non initialisée
int foo(int a, int b) { int c = a + b; return c; }
int main() { foo(5, 6); printf("bye\n"); return 0; }
Sorties de commandes simplifiées, adresses données en exemple (binaire 32 bits non PIE).
vient du fichiercréé à l'exécutionmétadonnéesétape en cours
Sections ou segments ?
- Sections (
.text,.data…) : découpage logique, décrit par la section header table, utilisé par l'éditeur de liens et les outils (readelf -S, gdb). - Segments : découpage pour le chargement, décrit par la program header table (
readelf -l). Un segment regroupe plusieurs sections de mêmes droits, par exemple « tout ce qui est en lecture et exécution ». - Le noyau n'a besoin que des segments. Un binaire sans section headers s'exécute très bien, ce que certains malwares exploitent pour gêner l'analyse.
Commandes utiles
| Commande | Ce qu'elle montre |
|---|---|
file ./prog | 32/64 bits, lié dynamiquement ou non, strippé ou non |
readelf -h | l'ELF header (point d'entrée, architecture) |
readelf -l / -S | les segments / les sections |
objdump -d -M intel | le désassemblage de .text |
nm, readelf -s | la table des symboles |
strings | les chaînes lisibles (souvent dans .rodata) |
checksec --file=./prog | les protections : NX, PIE, RELRO, canary |