Glossaire
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.
Le return-oriented programming (ROP) est une technique de réutilisation de code. Au lieu d'injecter du nouveau code, ce que la mémoire non exécutable empêche, il redirige l'exécution à travers une série de courtes séquences d'instructions qui existent déjà dans le programme ou ses bibliothèques, chacune se terminant par une instruction de retour. Enchaînés, ces fragments peuvent effectuer un calcul arbitraire. Des techniques apparentées réutilisent des fragments se terminant par un saut ou un appel.
Pour les défenseurs, ROP explique l'existence de plusieurs mitigations : l'ASLR et PIE masquent l'emplacement des fragments, tandis que les shadow stacks, l'authentification de pointeurs et l'intégrité du flot de contrôle empêchent les retours et les branchements indirects de partir vers des endroits non prévus. Voir intégrité du flot de contrôle.