93
Sécurité du système d’exploitation et des programmes
Chapitre 5
débordement de tampon permet à un agresseur à distance d’exécuter un code arbitraire... »), c’est-à-dire que cet agresseur est en mesure de prendre le contrôle
de l’ordinateur affecté et d’en faire n’importe quoi, ce qui représente la gravité
maximale pour un incident de sécurité.
De quoi s’agit-il ? D’une maladie fréquente qui fait l’objet d’une entrée dans Wikipédia 2 et de nombreux articles détaillés, celui-ci 3 parmi beaucoup d’autres. Nous
commencerons par en exposer un cas particulier très significatif, qui a le mérite de
bien faire comprendre le principe du mécanisme, puis le cas général.
Mais il convient d’abord de préciser ce que l’on entend par tampon (buffer) : ce
terme désigne en général une zone de mémoire utilisée par le système d’exploitation pour stocker temporairement des données en provenance du (ou en partance
vers le) monde extérieur. Plus généralement il s’agira ici d’une zone de mémoire
utilisée par un programme pour y manipuler un texte, au sens le plus général.
Attaques par débordement sur la pile
La revue Communications of the Association for Computer Machinery a récemment
publié un article [71] qui décrit en détail un cas particulier d’attaque par débordement de tampon, celui qui survient sur la pile du programme.
Le principe en est le suivant : un programme en cours d’exécution note dans un
coin (comme sur un post-it) l’adresse à laquelle revenir quand il aura fini son
travail (la notion d’adresse est précisée plus bas). L’attaquant cherchera à modifier
cette adresse de retour pour la remplacer par celle d’un programme malveillant
installé par ses soins.
Le « coin » où cette adresse de retour est notée se situe dans une zone nommée
pile d’exécution du programme. Une pile est une structure de données, une façon
d’organiser un ensemble de données, telle que la dernière donnée introduite sera
la première à être obtenue, on parle d’organisation LIFO, comme last in, first out,
comme pour une pile d’assiettes, où la première à prendre sera celle du dessus,
qui a été déposée la dernière. Pour extraire les données de la pile, on utilise un
pointeur ; un pointeur est une donnée dont la valeur est un moyen d’accès à la
valeur d’une autre donnée ; par exemple la valeur du pointeur peut être le numéro
2 Cf. http://fr.wikipedia.org/wiki/Buffer_overflow
3 Cf. http://c2.com/cgi/wiki?CeeLanguageAndBufferOverflows
Précédent

- 107/276

Suivant