Aller au contenu principal
Expert Cybersécurité & IAv9.0
Centres de ressources conformité
Besoin d'un accompagnement expert ?
Devis personnalisé sous 24h — audit, conformité, incident
Checklists Sécurité — Audit & Durcissement
Formats disponibles
📄 PDF 📊 Excel 🌐 Web

11 checklists professionnelles couvrant 2 200+ points de contrôle. Téléchargement gratuit, aucune inscription.

Return-Oriented Programming (ROP)

hacking

Définition

Return-Oriented Programming (ROP) est une technique d'exploitation avancée permettant d'exécuter du code arbitraire en chaînant des séquences d'instructions existantes dans le code légitime d'un programme ou de ses bibliothèques, sans injecter de nouveau code. ROP est devenu la technique standard pour contourner les protections NX/DEP (No-Execute/Data Execution Prevention) qui empêchent l'exécution de code dans les zones de données. La technique repose sur les 'gadgets' ROP : des séquences de deux ou trois instructions assembleur se terminant par une instruction RET (retour), présentes dans le code existant du binaire ou de ses bibliothèques. Un gadget typique peut être pop rdi; ret (charger une valeur dans le registre rdi) ou mov eax, [ebx]; ret (lire une valeur en mémoire). En contrôlant la pile d'appel, l'attaquant peut chaîner ces gadgets pour effectuer des opérations arbitraires. La construction d'une chaîne ROP commence par l'identification des gadgets disponibles dans le binaire et ses bibliothèques (avec des outils comme ROPgadget, ropper, pwndbg, ou GDB-peda). L'attaquant sélectionne ensuite les gadgets nécessaires pour réaliser ses objectifs : appeler une fonction système (execve pour un shell, VirtualAlloc+VirtualProtect pour rendre une zone exécutable), écrire des données en mémoire, ou préparer les arguments d'une fonction. Les attaques ret2libc (return-to-libc) sont un cas particulier de ROP où l'attaquant redirige l'exécution vers des fonctions de la bibliothèque C standard (system(), execve()) avec les arguments appropriés, évitant ainsi d'avoir à construire une chaîne ROP complexe. Ret2plt étend cette approche en utilisant la PLT (Procedure Linkage Table) pour résoudre dynamiquement les adresses de fonctions. ASLR (Address Space Layout Randomization) complique la construction de chaînes ROP en randomisant les adresses des bibliothèques et du code à chaque exécution. Les techniques de contournement d'ASLR incluent les memory leaks (utiliser une vulnérabilité secondaire pour révéler une adresse mémoire et calculer les positions des gadgets), les ret2ret (utiliser des gadgets dans des sections non randomisées), et le brute-force d'ASLR sur des systèmes 32-bit où l'espace d'adressage est limité.

Fonctionnement

La pile d'appel est remplie avec les adresses des gadgets dans l'ordre souhaité. Quand une instruction RET est exécutée, elle dépile l'adresse du premier gadget et y saute, exécute les quelques instructions du gadget, puis RET dépile l'adresse du gadget suivant, et ainsi de suite. En chaînant des gadgets comme pop rdi; ret (avec l'argument cible suivant sur la pile), pop rsi; ret, puis l'adresse d'une fonction cible, l'attaquant construit un appel de fonction avec des arguments arbitraires.

Exploitation offensive

ROP est utilisé dans presque toutes les exploitations binaires modernes sur des systèmes avec NX/DEP. Des outils comme pwntools facilitent la construction de chaînes ROP en Python. Une attaque typique : exploiter un buffer overflow pour contrôler la pile, construire une chaîne ROP qui appelle mprotect() pour rendre une zone mémoire exécutable, y copier le shellcode, puis l'exécuter.

Détection et mitigation

Control Flow Integrity (CFI), CET (Control-flow Enforcement Technology) d'Intel, Shadow Stack, et la protection de la pile du compilateur limitent les attaques ROP. Les EDR avec API hooking peuvent détecter des séquences de RET anormales. La compilation avec des options de sécurité (-fcf-protection, SafeStack, ShadowCallStack) réduit les gadgets disponibles et renforce les mécanismes anti-ROP.

Articles liés

Un projet cybersécurité ?

Expert dispo · Réponse 24h

Devis