TITRE : LE BUFFER OVERFLOW
CHAPEAU
Les attaques par buffer overflow sont parmi les plus répandues, environ 60 % des attaques connues.
Il s'agit d'exploiter un bug dans la gestion de zones mémoires déclarées dans le programme, afin de
lui faire exécuter une action qu'il n'était pas censé faire.
FIN CHAPEAU
INTRODUCTION
De manière générale, le pirate essaiera d'exécuter un bind de shell , une reverse connexion à
distance ou un simple /bin/sh.
Cela sera essayé sur un binaire ayant le SUID root, afin d'élever ses privilèges, jusqu'au statut de
root.
A la recherche du suid root
La première chose à trouver sur une machine UNIX lors d'une attaque en local est un programme
vulnérable, mais cela ne suffit pas.
Il faudrait injecter notre code arbitraire dans un programme qui est exécuté avec les droits root
même s'il est appelé par un utilisateur.
Exemple:
vous êtes utilisateur et vous voulez changer votre password, il faut pour cela que vous puissiez
écrire dans /etc/shadow avec les droits root pour modifier le contenu.
Si le pirate parvient à faire exécuter du code arbitraire au programme passwd (un /bin/sh par
exemple) il se trouvera avec les droits root et sera en possession d'un shell qui lui permettra
d'exécuter n'importe quelles commandes en tant que root.
Comment savoir les programmes avec le suid root activé ?
Il suffit de lancer la ligne de commande suivante : find / -type f -perm -04000
ILLUSTRATION: bof1.jpg
légende : trouver le suid root
Explication générale sur le format ELF
Un binaire n'est pas qu'une suite d'instructions assembleur qui s'appellent successivement, mais est
composé d'un certains nombres d'autres éléments.
D'abord une entête ELF (élément indispensable de tout exécutable sous ce format).
Puis d'autres éléments tels que variables, code exécutable ...
[entête ELF]
contient toutes les informations nécessaires, telle que la localisation des autres structures du
programme ainsi que leur localisation en mémoire...
il est l'élément indispensable à tout programme ELF