« Attaque par Buffer Overflow » : différence entre les versions

De Wiki du LAMA (UMR 5127)
Aller à la navigation Aller à la recherche
Ligne 24 : Ligne 24 :
Dans ce schéma, les adresses sont classées de haut en bas mais les valeurs sont empilées en haut car il s’agit d’une pile. Les différentes zones (en partant du bas du schéma) sont détaillées ci-dessous :
Dans ce schéma, les adresses sont classées de haut en bas mais les valeurs sont empilées en haut car il s’agit d’une pile. Les différentes zones (en partant du bas du schéma) sont détaillées ci-dessous :


les paramètres supplémentaires sont ceux passés à la fonction en cours d’exécution : on parle de
* les paramètres supplémentaires sont ceux passés à la fonction en cours d’exécution : on parle de
paramètres « supplémentaires » car les 6 premiers paramètres seront passés dans des registres ;
paramètres « supplémentaires » car les 6 premiers paramètres seront passés dans des registres ;
l’adresse de retour est l’adresse de l’instruction suivant l’appel de la fonction en cours d’exécution
* l’adresse de retour est l’adresse de l’instruction suivant l’appel de la fonction en cours d’exécution
dans la fonction appelante (i.e. c’est là qu’on revient quand on exécute return à la fin de la
dans la fonction appelante (i.e. c’est là qu’on revient quand on exécute return à la fin de la
fonction) ;
fonction) ;
le %rbp « précédent » est la sauvegarde du pointeur de base de la fonction appelante (on détaillera
* le %rbp « précédent » est la sauvegarde du pointeur de base de la fonction appelante (on détaillera
son rôle plus bas) ;
son rôle plus bas) ;
les variables locales de la fonction en cours d’exécution sont localisées dans son cadre de pile, à
* les variables locales de la fonction en cours d’exécution sont localisées dans son cadre de pile, à
des adresses fixes par rapport à %rbp ;
des adresses fixes par rapport à %rbp ;
on peut éventuellement utiliser de la place dans le cadre de pile pour sauvegarder des registres ou
* on peut éventuellement utiliser de la place dans le cadre de pile pour sauvegarder des registres ou
des valeurs temporaires si besoin ;
des valeurs temporaires si besoin ;
les contextes d’exécution s’empilent les uns au dessus des autres lors des appels de fonctions, donc
* les contextes d’exécution s’empilent les uns au dessus des autres lors des appels de fonctions, donc
on retrouve la même structure en haut du schéma si la fonction appelée appelle elle-même une
on retrouve la même structure en haut du schéma si la fonction appelée appelle elle-même une
autre fonction.
autre fonction.

Version du 12 novembre 2018 à 23:12

Auteurs : Olivier STHIOUL et Ludovic MILLON

Introduction

L'attaque par Buffer Overflow (dépassement de tampon mémoire) est l'exploitation d'une faille de mémoire, durant laquelle l'écriture en mémoire du buffer dépasse son espace mémoire alloué. Le processus subit alors une modification des informations nécessaires au fonctionnement du programme. Ces attaques ciblent le plus souvent des sites web, des applications de bureau ou même le système d'exploitation du serveur qui héberge le site web.

La plupart des failles se trouvent (pour un site web), dans les modules installés sur le serveur comme mod_php ou mod_ssl. Il y a par exemple la possibilité de désactiver des fonctions php dans son fichier de configuration. Par défaut, certaines de ces fonctions sont désactivées car elles ont été reconnues comme comportant des failles de sécurités.

L'attaque a pour objectif de faire crasher le programme ou l'application et d'exploiter une faille, en remplaçant, par exemple, le code source du programme. Un de ses avantages est qu'il n'y a pas besoin d'avoir accès à la machine victime.

Ce type d'attaque nécessite des compétences pointilleuses en informatique et particulièrement en sécurité informatique, et en code assembleur.

Principe de l'attaque

Rappels sur la pile d'exécution

On peut représenter un processus ainsi que sa pile d'exécution par les schémas suivants :

Pile execution.PNG Cadre pile.PNG

Les zones text et data contiennent respectivement le code source du programme et ses données statiques. Le tas est la zone dans laquelle sont stockées toutes les données allouées dynamiquement.

Dans ce schéma, les adresses sont classées de haut en bas mais les valeurs sont empilées en haut car il s’agit d’une pile. Les différentes zones (en partant du bas du schéma) sont détaillées ci-dessous :

  • les paramètres supplémentaires sont ceux passés à la fonction en cours d’exécution : on parle de

paramètres « supplémentaires » car les 6 premiers paramètres seront passés dans des registres ;

  • l’adresse de retour est l’adresse de l’instruction suivant l’appel de la fonction en cours d’exécution

dans la fonction appelante (i.e. c’est là qu’on revient quand on exécute return à la fin de la fonction) ;

  • le %rbp « précédent » est la sauvegarde du pointeur de base de la fonction appelante (on détaillera

son rôle plus bas) ;

  • les variables locales de la fonction en cours d’exécution sont localisées dans son cadre de pile, à

des adresses fixes par rapport à %rbp ;

  • on peut éventuellement utiliser de la place dans le cadre de pile pour sauvegarder des registres ou

des valeurs temporaires si besoin ;

  • les contextes d’exécution s’empilent les uns au dessus des autres lors des appels de fonctions, donc

on retrouve la même structure en haut du schéma si la fonction appelée appelle elle-même une autre fonction.

Technique

Exemple d'attaque

Solutions pour éviter l'attaque

plusieurs solutions s'offrent au développeurs:

  • utiliser des langages haut-niveau qui intègre une gestion complète de la mémoire. Ex: Java, Cyclone...
  • utiliser des librairies et des fonctions sécurisés (fonction strncpy()..., librairie Libsafe)
  • tester son code avec des logiciels spécialisé comme Qaudit ou Flawfinder
  • Appliquer rapidement les correctifs
  • CerberHost (https://www.youtube.com/watch?v=q1HODJaMY5M)

Sources

https://fr.wikipedia.org/wiki/D%C3%A9passement_de_tampon

https://www.securiteinfo.com/attaques/hacking/buff.shtml

http://www.student.montefiore.ulg.ac.be/~blaugraud/node2.html

https://www.nbs-system.com/blog/cerberhost-les-attaques-de-type-buffer-overflow/

https://zestedesavoir.com/articles/143/exploitez-votre-premier-stack-based-overflow/

https://www.consultingit.fr/fr/buffer-overflow-attack-example-website-attaques-systemes-par-buffer-overflow-stack-overflow

https://web.maths.unsw.edu.au/~lafaye/CCM/attaques/buffer-overflow.htm

http://chamilo2.grenet.fr/inp/courses/ENSIMAG3MM1LDB/document/asm_fonctions.pdf