Return-to-libc attack

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher

Une attaque de type return-to-libc est une attaque informatique démarrant généralement par un dépassement de tampon dans lequel l'adresse de retour dans la pile est remplacée par l'adresse d'une autre fonction et une seconde partie de la pile est modifiée pour fournir les paramètres à cette fonction. Ceci permet à un attaquant d'utiliser une fonction existante et d'éviter d'injecter du code malveillant dans le programme.

La bibliothèque partagée libc fournit le moteur d'exécution C sur les systèmes de type Unix. Bien que l'attaquant puisse faire pointer l'adresse de retour n'importe où, libc est la cible la plus probable car étant toujours liée au programme et fournissant des fonctions utiles (comme la fonction system() qui ne nécessite qu'un seul paramètre et permet d'exécuter un programme arbitraire). C'est pour cette raison que cet exploit est appelé return-to-libc même si l'adresse de retour peut pointer sur un endroit totalement différent.

Protections[modifier | modifier le code]

Une pile non-exécutable peut protéger de l'exploitation de certains dépassements de tampon mais pas d'une attaque de type return-to-libc car seul du code exécutable existant est utilisé.

D'autres protections contre les dépassements de tampon peuvent empêcher ou entraver l'exploitation en détectant la corruption de la pile et éventuellement supprimer le segment compromis.

L'address space layout randomization (ASLR) laisse très peu de chance de réussite pour ce type d'attaque sur une machine 64-bits car les positions des fonctions en mémoire sont aléatoires. Pour les systèmes 32-bits, l'ASLR n'est pas très avantageux car seuls 16 bits sont aléatoires, et peuvent ainsi être trouvés par force brute en quelques minutes[1].

Dans certains systèmes d'exploitation, le chargement des bibliothèques en mémoire s'effectue à une adresse contenant au moins un octet de poids fort égal à 0x00. Ceci empêche l'attaquant d'utiliser l'adresse lors de l'exploitation du buffer overflow, l'octet 0x00 (null) correspondant au caractère de fin de chaîne. Cette protection peut cependant être contournée en spécifiant l'adresse d'une instruction de saut vers la bibliothèque contenue dans la zone mémoire du programme exécuté. Par exemple, l'attaquant pourrait indiquer l'adresse d'une instruction de la Procedure Linkage Table (dans le format de fichier ELF) chargée de faire la liaison entre l'exécutable et les fonctions qu'il utilise dans les bibliothèques partagées lors de l'édition de liens dynamiques.

Attaques semblables[modifier | modifier le code]

Le return-oriented programming (en) un perfectionnement des techniques utilisées dans cette attaque pouvant être utilisé pour exécuter des opérations plus générales en enchaînant de plus petites attaques exécutant un plus petit nombre d'instructions à la fois.

Voir aussi[modifier | modifier le code]

Articles connexes[modifier | modifier le code]

Liens externes[modifier | modifier le code]

Références[modifier | modifier le code]

  1. Shacham, Hovav; Page, Matthew; Pfaff, Ben; Goh, Eu-Jin; Modadugu, Nagendra; and Dan Boneh. « On the Effectiveness of Address-Space Randomization » Proceedings of Computer and Communications Security (CCS'04), October 25–29, 2004, Washington (DC).