Résumé
La ROP, return-oriented programming, est une technique d'exploitation avancée de type dépassement de pile (stack overflow) permettant l'exécution de code par un attaquant et ce en s'affranchissant plus ou moins efficacement des mécanismes de protection tels que l'utilisation de zones mémoires non-exécutables ( bit NX pour Data Execution Prevention, DEP), l'utilisation d'un espace d'adressage aléatoire (Address Space Layout Randomization, ASLR) ou encore la signature de code. Cette technique permet à un attaquant d'obtenir le contrôle de la pile d'exécution (call stack) d'un programme, d'en rediriger les flux et, in fine, exécuter une suite de courtes instructions situées en zone mémoire exécutable, appelées « gadgets ». Chaque gadget est typiquement suivi d'une instruction ret et localisé dans une routine d'un autre programme ou dans le code d'une bibliothèque dynamique chargée en mémoire. Une fois assemblés, ces gadgets forment une chaîne généralement appelée ROP chain et permettent à un attaquant d'effectuer des opérations arbitraires sur une machine employant pourtant des mécanismes de protection, là où une attaque simple aurait été déjouée. thumb|right|upright=1.9|Un exemple de représentation de la pile d'exécution. La fonction drawLine a été appelée par drawSquare – la pile d'exécution croît vers le haut sur ce schéma. Généralement, ce type d'attaque est issu d'une manipulation de la pile d'exécution (call stack) en exploitant un défaut dans la conception d'un programme, notamment un dépassement de tampon (buffer overrun). Dans une attaque par dépassement de tampon, une fonction ne procédant pas aux contrôles relatifs à la taille des données fournies par l'utilisateur avant de les stocker en mémoire est susceptible d'accepter plus de données qu'elle n'est dûment capable de stocker. Les données étant écrites sur la pile d'exécution, le surplus de données dépassant la zone allouée est ainsi susceptible d'écraser la zone allouée aux variables de la fonction ( « Variables locales » sur le diagramme de la pile d'exécution à droite), mais aussi d'écraser l'adresse de retour de la fonction.
À propos de ce résultat
Cette page est générée automatiquement et peut contenir des informations qui ne sont pas correctes, complètes, à jour ou pertinentes par rapport à votre recherche. Il en va de même pour toutes les autres pages de ce site. Veillez à vérifier les informations auprès des sources officielles de l'EPFL.
Concepts associés (10)
Return-oriented programming
La ROP, return-oriented programming, est une technique d'exploitation avancée de type dépassement de pile (stack overflow) permettant l'exécution de code par un attaquant et ce en s'affranchissant plus ou moins efficacement des mécanismes de protection tels que l'utilisation de zones mémoires non-exécutables ( bit NX pour Data Execution Prevention, DEP), l'utilisation d'un espace d'adressage aléatoire (Address Space Layout Randomization, ASLR) ou encore la signature de code.
Protection de l'espace exécutable
La protection de l'espace exécutable (executable space protection) correspond, en sécurité informatique, à une protection contre les dépassements de tampon en prévenant l'exécution d'un code sur la pile ou le tas. Une tentative d'attaque sur un système protégé ainsi provoque une exception. Des exemples d'implémentation de ce mécanisme sont : sous Linux : PaX, Exec Shield, et Openwall ; sous OpenBSD et d'autres systèmes : W^X ; sous Microsoft Windows : Data Execution Prevention. Dépassement de tampon Catégo
Stack-Smashing Protector
Le Stack-Smashing Protector (également appelé SSP, et autrefois connu sous le nom de ProPolice) est une extension au compilateur GCC qui permet de minimiser les dommages qui peuvent être dus à des attaques de type dépassement de tampon. En particulier, il fournit une protection contre la corruption de pile (stack-smashing). La protection Stack-Smashing Protector a originairement été écrite, et est toujours entretenue, par Hiroaki Etoh d'IBM. La première implémentation a été faite pour GCC 3 et a ensuite été réécrite de façon moins intrusive puis intégrée dans GCC 4.
Afficher plus