Aller au contenu

Glossaire

Définitions claires des termes de sûreté mémoire, d'exploitation et de mitigation utilisés dans les guides.

AddressSanitizer (ASan)
Une instrumentation à la compilation et un runtime qui détectent les accès hors limites, l'use-after-free et le double free à l'instruction fautive exacte.
ASLR
Address Space Layout Randomization : le système d'exploitation place la pile, le tas, les bibliothèques et l'exécutable à des adresses aléatoires à chaque exécution.
Attaques sur les structures FILE (FSOP)
Corrompre un objet FILE de la glibc pour qu'un appel stdio normal soit dispatché via un pointeur de vtable contrôlé par l'attaquant vers un code choisi.
Authentification de pointeurs (PAC)
Fonctionnalité ARMv8.3 qui signe les pointeurs avec une clé secrète : un pointeur altéré, comme une adresse de retour écrasée, échoue à l'authentification et déclenche une faute.
Bit NX (DEP)
Permission au niveau de la page qui marque la mémoire comme non exécutable, empêchant l'exécution comme code des données écrites sur la pile ou le tas. Appelée DEP sous Windows.
Branch target identification (BTI)
Une fonctionnalité ARMv8.5 qui force les branchements indirects à atterrir sur une instruction de landing pad bti, invalidant les gadgets en milieu de fonction sur le forward edge.
Canari de pile
Valeur secrète placée entre les tampons locaux d'une fonction et ses données de retour sauvegardées, vérifiée avant le retour de la fonction pour détecter les débordements de tampon de pile.
Control Flow Guard (CFG)
Une mitigation Windows du forward-edge qui vérifie chaque appel indirect contre un bitmap de cibles valides, bloquant les sauts au milieu des fonctions ou dans des données.
Débordement d'entier
Un résultat arithmétique qui dépasse la plage de son type entier et boucle ou déclenche un comportement indéfini, produisant souvent des tampons sous-dimensionnés (CWE-190).
Double free
Libérer deux fois la même allocation sur le tas, ce qui corrompt les listes de blocs libres de l'allocateur et peut mener à une corruption mémoire (CWE-415).
Fuzzing
Test automatisé qui envoie des entrées générées à un programme pour trouver des crashs ; les fuzzers guidés par la couverture font évoluer les entrées utiles.
Global Offset Table (GOT)
La table des adresses résolues à l'exécution des fonctions importées ; inscriptible sous liaison paresseuse, ce qui en fait une cible pour rediriger les appels.
Intégrité du flux de contrôle (CFI)
Une famille de mitigations qui vérifient à l'exécution que les appels, sauts et retours indirects ne visent que des cibles que le programme pourrait légitimement atteindre.
KASLR (ASLR du noyau)
La Kernel Address Space Layout Randomization charge l'image du noyau à une base aléatoire à chaque démarrage, rendant inconnues les adresses des fonctions et des gadgets du noyau.
KPTI (isolation des tables de pages du noyau)
Une mitigation Linux qui attribue des tables de pages distinctes aux modes utilisateur et noyau, démappant le noyau pendant l'exécution de l'espace utilisateur ; introduite contre Meltdown.
PIE (exécutable indépendant de la position)
Exécutable compilé pour pouvoir s'exécuter à n'importe quelle adresse, permettant à l'ASLR de randomiser le code et les données du programme lui-même, pas seulement ses bibliothèques.
Registre de lien (x30 / lr)
Le registre AArch64 qui contient l'adresse de retour ; bl l'écrit et ret y branche, de sorte que l'adresse de retour n'est pas sur la pile par défaut.
RELRO
Relocation Read-Only : fonctionnalité de l'éditeur de liens et du chargeur qui rend la GOT et d'autres données de relocation en lecture seule après le démarrage, empêchant leur écrasement.
Return-oriented programming (ROP)
Technique de réutilisation de code qui enchaîne de courtes séquences d'instructions existantes se terminant par des instructions de retour, pour contourner la mémoire non exécutable.
Return-to-libc (ret2libc)
Attaque par réutilisation de code qui redirige l'exécution vers une fonction existante de la bibliothèque C, comme system(), au lieu d'injecter du nouveau code.
Shadow stack
Pile séparée et protégée qui ne stocke que les adresses de retour : un retour n'est autorisé que s'il correspond à l'adresse sauvegardée au moment de l'appel.
Sigreturn-oriented programming (SROP)
Technique de réutilisation de code qui forge une trame de signal pour que l'appel système sigreturn restaure d'un coup tous les registres du processeur depuis des données contrôlées par l'attaquant.
SMEP et SMAP
Des fonctionnalités du processeur qui empêchent le noyau d'exécuter (SMEP) ou d'accéder (SMAP) à la mémoire de l'espace utilisateur, mettant en échec la technique classique ret2usr.
Structured Exception Handling (SEH)
Le mécanisme de gestion des exceptions de Windows ; sur x86 32 bits, une liste chaînée de gestionnaires sur la pile qu'un débordement peut écraser pour détourner le contrôle.
Sûreté mémoire
Propriété selon laquelle un programme n'accède à la mémoire que dans les limites et la durée de vie d'objets valides, excluant débordements, use-after-free et double free.
tcache (cache de thread)
Cache par thread de chunks de tas libérés, présent dans glibc 2.26+, qui accélère les petites allocations et constitue une cible courante des techniques d'exploitation du tas.
Use-after-free
Bug de sûreté mémoire où un programme continue d'utiliser un pointeur après la libération de la mémoire pointée, menant souvent à une confusion de types (CWE-416).
Vulnérabilité de chaîne de format
Un bug où une entrée non fiable est passée comme argument de format des fonctions de type printf, ce qui lui permet de lire ou d'écrire en mémoire via les spécificateurs de conversion (CWE-134).