Qu'est-ce qu'un débordement de mémoire tampon ?

Dans un programme informatique, les variables sont attribuées à des blocs de mémoire de taille fixe. Une fois cette mémoire allouée, le programme peut stocker et récupérer des données à partir de ces emplacements. Les débordements de mémoire tampon se produisent lorsque la quantité de données écrites dans l'un de ces blocs de mémoire dépasse sa taille. Par conséquent, la mémoire allouée à d'autres fins est écrasée, ce qui peut avoir divers effets sur le programme.

Download the eBook Demander une démo

Qu'est-ce qu'un débordement de mémoire tampon ?

Une attaque par débordement de mémoire tampon

Une attaque par débordement de mémoire tampon est une cyberattaque courante qui exploite délibérément une vulnérabilité de débordement de mémoire tampon où des données contrôlées par l'utilisateur sont écrites dans la mémoire. En soumettant plus de données que ne peut en contenir le bloc de mémoire alloué, l'attaquant peut écraser des données dans d'autres parties de la mémoire.

Les attaquants peuvent effectuer des attaques par débordement de mémoire tampon pour diverses raisons, telles que l'écrasement de code ou de données critiques pour faire planter le programme, l'injection de code malveillant à exécuter dans le programme, ou la modification de valeurs critiques, changeant ainsi le flux d'exécution du programme.

Menace de débordement de mémoire tampon

Les attaques par débordement de mémoire tampon peuvent être utilisées pour atteindre divers objectifs, notamment

  • Denial of Service (DoS) Attacks: L'espace mémoire d'une application contient des pointeurs, du code et d'autres données essentielles à l'exécution du programme. L'écrasement de ces données peut provoquer un plantage du programme, ce qui entraîne une attaque par déni de service.
  • Exécution de code : L'objectif commun des exploits de débordement de mémoire tampon est de forcer l'application vulnérable à exécuter le code fourni par l'attaquant. Cela permet à l'attaquant d'exécuter du code sur le système affecté avec les mêmes accès et autorisations que l'application exploitée.
  • Contournement du contrôle d'accès : L'exploitation des débordements de mémoire tampon pour exécuter du code peut permettre à un attaquant d'accéder à un système cible. Cet accès élargi peut ensuite être utilisé pour effectuer des attaques ultérieures.

Types d'attaques par débordement de mémoire tampon

Une attaque par débordement de mémoire tampon peut être réalisée de différentes manières, mais les exemples les plus courants sont les suivants :

  • Débordement de mémoire tampon basé sur la pile : La pile du programme contient des données critiques sur le flux de contrôle d'une application - telles que les pointeurs de retour de fonction - et constitue une cible courante des attaques par débordement de mémoire tampon. L'écrasement d'un pointeur de retour peut amener le programme à sauter à des données contrôlées par l'attaquant et à les exécuter en tant que code, ce qui permet à l'attaquant d'exécuter du code avec les mêmes autorisations que l'application.
  • Débordement de mémoire tampon basé sur le tas : Le tas du programme est utilisé pour allouer dynamiquement de la mémoire aux variables dont la taille n'est pas définie lors de la compilation du programme. En exploitant une vulnérabilité de débordement de mémoire tampon et en inondant le tas du système, un attaquant peut écraser les données critiques de l'application.
  • Attaques par chaînes de format : Les fonctions de la famille printf en C/C++ peuvent utiliser des chaînes de format, qui permettent de lire et d'écrire dans la mémoire. Si les données fournies par l'utilisateur sont interprétées comme une chaîne de format, elles peuvent être utilisées pour fuir ou modifier des valeurs sensibles.

Exemples d'attaques par débordement de mémoire tampon

Les vulnérabilités de type débordement de tampon sont courantes en C/C++ et se produisent lorsqu'un programme alloue un morceau de mémoire de taille fixe, puis y copie des données de manière non sécurisée. L'exemple de code suivant contient une vulnérabilité de dépassement de tampon :

char buf[BUFSIZE] ;

gets(buf) ;

Dans cet exemple de code, la variable buf a une taille fixe de BUFSIZE. Cependant, la fonction gets lira les données et les stockera dans buf jusqu'à ce qu'elle atteigne un terminateur nul (0x00). Un attaquant peut exploiter cette situation pour écraser des données au-delà de la fin de buf.

Les attaques par chaîne de format sont un cas particulier de débordement de mémoire tampon. L'exemple de code suivant contient une vulnérabilité de type chaîne de format.

#include <stdio.h>

void main(int argc, char **argv)

{

 printf(argv[1]) ;

}

Dans cet exemple, le programme prend l'entrée fournie par l'utilisateur dans argv[1] et l'imprime sur le terminal. Cependant, si l'entrée de l'utilisateur contient une chaîne de format, cela pourrait permettre à un attaquant de lire ou de modifier la mémoire du système.

Comment prévenir les débordements de mémoire tampon

La vulnérabilité du débordement de tampon peut être évitée par :

  • Effectuer la validation des données d'entrée : Les vulnérabilités de type débordement de tampon se produisent lorsqu'un programme émet des hypothèses sur les données d'entrée fournies par l'utilisateur sans les valider. Vérifier la longueur des données ou ne copier qu'un certain nombre d'octets dans un emplacement de mémoire permet d'éviter les débordements de mémoire tampon.
  • Activation de la protection de la mémoire d'exécution : La plupart des ordinateurs disposent de protections intégrées contre les débordements de mémoire tampon, telles que la randomisation de la disposition de l'espace d'adressage (ASLR), la prévention de l'exécution des données (DEP) et la protection contre l'écrasement de la gestion des exceptions structurées (Structured Exception Handling Overwrite Protection). L'activation de ces protections rend les attaques par débordement de mémoire tampon beaucoup plus difficiles à réaliser.
  • Éviter les fonctions vulnérables : Les débordements de mémoire tampon sont rendus possibles par des fonctions vulnérables telles que gets, scanf et strcpy en C/C++. La vulnérabilité du débordement de tampon peut être évitée en utilisant correctement les versions sûres de ces fonctions.
  • Utiliser des langages sans risque pour la mémoire : Les débordements de mémoire tampon se produisent dans les langages de programmation dont les variables sont de taille fixe et qui ne protègent pas la mémoire. L'utilisation d'autres langages de programmation tels que Python, Java ou C# rend les débordements de mémoire tampon difficiles ou impossibles.
  • Prévenir la vulnérabilité Exploitation : Pare-feu pour applications Web (WAFs) et solutions de protection des applications Web et API (WAAP) permettent d'identifier et de bloquer les tentatives d'exploitation des vulnérabilités de débordement de mémoire tampon. Cela réduit le risque que les attaques par débordement de mémoire tampon posent à la sécurité de l'entrepriseapplication (AppSec).

Protection contre les débordements de buffers avec CloudGuard AppSec

L'exploitation d'une vulnérabilité de type débordement de mémoire tampon peut provoquer des plantages de programmes, des fuites de données ou l'exécution de codes malveillants sur les systèmes d'une organisation. Découvrez comment CloudGuard AppSec peut vous aider à vous protéger contre les attaques par débordement de mémoire tampon et d'autres menaces dans cet eBook. Ensuite, inscrivez-vous à une démo gratuite pour voir par vous-même comment CloudGuard AppSec peut améliorer la sécurité de votre site cloud application .

×
  Commentaires
Ce site web utilise des cookies à des fins de fonctionnalité, d’analyse et de marketing. En continuant d’utiliser ce site web, vous acceptez l’utilisation des cookies. Pour plus d’informations, consultez notre Avis concernant les cookies.
OK