Return-to-libc attack
![](http://upload.wikimedia.org/wikipedia/commons/thumb/b/b3/Circle-icons-key.svg/35px-Circle-icons-key.svg.png)
Cet article est une ébauche concernant la sécurité informatique.
Vous pouvez partager vos connaissances en l’améliorant (comment ?) selon les recommandations des projets correspondants.
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
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
Le return-oriented programming 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
Articles connexes
Liens externes
- (en) [PDF] Contourner la pile non-exécutable en utilisant return-into-libc par c0ntex à InfoSecWriters.com
- (fr) [PDF] Exploitation avancée de buffer overflows (voir section RET-into-libc)
Références
Portail de la sécurité informatique