Skip to content

Ryp

La fonction drawLine a été appelée par drawSquare – la pile d’exécution croît vers le haut sur ce schéma. Entrez votre rime ci dessus et vous obtiendrez une liste de mots français qui riment avec. Afin de profiter d’une meilleure expérience de navigation, nous vous invitons à mettre votre navigateur à jour, ou de télécharger un autre navigateur tel que Firefox, Safari ou Chrome.

YouTube video

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. Cette adresse stockée sur la pile d’exécution est dynamique et réécrite à chaque appel de la fonction avant redirection du flux de contrôle et permet d’indiquer où chaque fonction active doit retourner à la fin de son cycle d’exécution. Une fois le cycle d’exécution terminé, la fonction récupère l’adresse de retour sur la pile d’exécution et redirige le flux de contrôle vers la fonction d’appel. Ainsi, si cette adresse est écrasée, le flux de contrôle peut être détourné vers une instruction arbitraire et définie par la nouvelle adresse de retour. Une attaque utilisant la programmation orientée retour est supérieure à tout autre type d’attaque tant pour son expressivité que pour sa résistance aux mesures défensives.

Rypstick Workouts ⠀swing Fix Programs ⠀monthly Fitness

Ces jeux d’instruction appelés gadgets peuvent ainsi être chaînés par écrasement de l’adresse de retour, au moyen de l’exploitation de dépassement de tampon, avec l’adresse de la première instruction du premier gadget. La première adresse des gadgets suivant composant la ROP chain est écrite successivement sur la pile d’exécution et enchaînés un-à-un. À l’issue de l’exécution du premier gadget, une instruction de retour est exécutée et permettra d’extraire l’adresse du prochain gadget de la pile d’exécution et sauter jusqu’à lui. En chaînant ces petits jeux d’instructions, un attaquant est en mesure de créer un comportement arbitraire au programme en utilisant des codes de bibliothèques dynamiques pré-chargées en mémoire. Shacham affirme qu’étant donné le nombre important de codes (incluant, mais ne se limitant pas aux bibliothèque dynamique de C), suffisamment de gadgets existent pour permettre d’offrir des fonctionnalités Turing-complet. L’implémentation généralisée de la prévention de l’exécution des données a rendu l’exploitation standard du dépassement de tampon difficile, voire impossible tel qu’expliqué ci-dessus.

Aucune technique de contre-exploitation mentionnée ci-dessus, ni même la suppression de fonctions dangereuses au sein des bibliothèques dynamiques ne semblent efficaces contre cette attaque. Autrement dit, la programmation orientée retour fournit un « langage » entièrement fonctionnel qu’un attaquant peut exploiter pour faire exécuter par une machine compromise, n’importe quelle opération. 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 (e. g. « Variables locales » sur le diagramme de la pile d’exécution à droite), mais aussi d’écraser l’adresse de retour de la fonction. Cette approche de randomisation peut aller plus loin en déplaçant toutes les instructions du programme séparément.

  • Autrement dit, la programmation orientée retour fournit un « langage » entièrement fonctionnel qu’un attaquant peut exploiter pour faire exécuter par une machine compromise, n’importe quelle opération.
  • L’implémentation généralisée de la prévention de l’exécution des données a rendu l’exploitation standard du dépassement de tampon difficile, voire impossible tel qu’expliqué ci-dessus.
  • Implantée à LES ULIS , elle est spécialisée dans le secteur d’activité des autres organisations fonctionnant par adhésion volontaire.
  • Une des implémentations majeures de cette technique, Address Space Layout Randomization , charge les bibliothèques dynamiques dans un emplacement mémoire différent à chaque exécution d’un programme.
  • Étant donné que les bibliothèques dynamiques, telles que LIBC, contiennent généralement des appels systèmes et autres fonctions susceptibles de susciter l’intérêt des attaquants, elles sont les plus utilisées pour la recherche d’instructions afin d’assembler la ROP chain.
  • Ces jeux d’instruction appelés gadgets peuvent ainsi être chaînés par écrasement de l’adresse de retour, au moyen de l’exploitation de dépassement de tampon, avec l’adresse de la première instruction du premier gadget.

Bien que les attaques utilisant la programmation orientée retour peuvent être lancées sur une multitude d’architectures matérielles, l’article de Shacham et la plupart des suivants se concentrent sur l’architecture x86 d’Intel. La programmation orientée retour sur x86 tire profit du fait que les jeux d’instructions soient très « denses », ainsi une séquence aléatoire d’octets est interprétable comme un jeu d’instruction x86 valide. Implantée à LES ULIS , elle est spécialisée dans le secteur d’activité des autres organisations fonctionnant par adhésion volontaire. La programmation orientée retour repose sur l’approche par fragmentation de code et l’étend afin de fournir une approche Turing-complet à l’attaquant, y-compris les boucles et les branchements conditionnels,.

Josh Roper

Ainsi un attaquant se voit limité à l’utilisation d’instructions déjà en mémoire et marquées comme exécutables, telles que le code du programme lui-même et des bibliothèques dynamiques liées. Étant donné que les bibliothèques dynamiques, telles que LIBC, contiennent généralement des appels systèmes et autres fonctions susceptibles de susciter l’intérêt des attaquants, elles sont les plus utilisées pour la recherche d’instructions afin d’assembler la ROP chain. Une nouvelle évolution à cette technique s’est ainsi développée en n’utilisant qu’une partie des instructions composant ces fonctions, au lieu de fonctions complètes, permettant à nouveau l’exploitation de vulnérabilités par dépassements de tampon.

Si un attaquant parvient à déterminer l’emplacement d’une instruction connue, la position de toutes les autres peut être déduite et une attaque ROP construite. Il est ainsi possible de rechercher un code machine permettant la modification du flux de contrôle, notamment l’instruction return (valeur hexadécimale 0xC3), puis rechercher des instructions potentiellement utiles dans les octets précédant cette instruction.

Un certain nombre de techniques ont été proposées pour contrer les attaques basées sur la programmation orientée retour. Une des implémentations majeures de cette technique, Address Space Layout Randomization , charge les bibliothèques dynamiques dans un emplacement mémoire différent à chaque exécution d’un programme. Bien que largement déployé sur les systèmes d’exploitation modernes, ASLR est vulnérable aux attaques par fuite de données et d’autres approches permettant de déterminer l’adresse de n’importe quelle fonction de bibliothèque dynamique en mémoire.

Cela nécessite un support d’exécution approfondie, tel qu’un traducteur dynamique de programme, afin de ré-assembler les instructions randomisées au démarrage. Cette technique aboutit à une difficulté supplémentaire pour la recherche et l’utilisation de gadgets, mais apporte une charge supplémentaire significative. Un outil automatique a été développé afin d’offrir une automatisation du processus de recherche de gadgets et de préparation d’une attaque ROP contre un programme. Cet outil, connu sous le nom de ROPgadget, recherche dans un programme, des gadgets potentiellement exploitables et tente de les assembler en créant une ROP chain en permettant l’ouverture d’un shell interactif et l’exécution de commandes arbitraires par l’attaquant. Le support matériel pour la prévention de l’exécution des données fut par la suite implémenté afin de renforcer cette protection.