Le débordement de tampon est l’une des vulnérabilités logicielles les plus courantes, et il affecte généralement les applications C/C++. Un débordement de tampon se produit lorsqu’un volume de données entrant dépasse ce que la mémoire tampon peut contenir. Cela peut se produire par accident ou dans le cadre d’une attaque malveillante. Dans les deux cas, un débordement de tampon peut créer des opportunités pour des hackers mal intentionnés.
Cet article examine en détail les attaques par débordement de tampon, en décrivant leur nature, la forme qu’elles peuvent prendre et comment vous pouvez protéger votre entreprise contre ces attaques.
Imaginez un tampon de mémoire conçu pour contenir des identifiants de connexion. Si le tampon attend des données de noms d’utilisateur et de mots de passe contenant 8 bits mais en reçoit 11, alors vous avez un problème de dépassement de tampon car les données en trop surchargeront la capacité du tampon.
Les tampons de mémoire sont des segments de mémoire séquentiels de longueur fixe ayant été alloués à une suite de caractères ou un tableau de nombres entiers. Ces tampons détiennent temporairement les données pendant qu’elles sont transférées vers divers emplacements.
Lorsqu’un programme ou un processus essaye d’écrire plus de données que la longueur fixe que le tampon peut contenir, les données en trop doivent aller quelque part, donc elles se dirigent vers un stockage adjacent et écrasent ou corrompent les données qui y sont détenues. Cela peut aboutir à des changements concernant le flux d’exécution du programme, et entraîner des comportements étranges du programme, des plantages, des erreurs ou des résultats erronés. Le dépassement de tampon peut être utilisé à des fins malveillantes, en créant un boulevard pour que les hackers exécutent un code arbitraire ou qu’ils manipulent un code pour atteindre l’effet escompté.
Si un hacker peut contrôler l’entrée de parties mal écrites d’un programme, il peut écraser des segments de mémoire avec des codes exécutables et les remplacer avec les siens. Les techniques d’attaque varient en fonction du système d’exploitation et de l’architecture de programmation, mais l’objectif est toujours le même : manipuler la mémoire pour contrôler la façon dont les programmes sont exécutés.
Les attaques par dépassement de tampon s’appuient généralement sur des piles. La pile utilise une structure dernier arrivé premier sorti pour contenir les données et son espace est limité. Sont hébergées dans la pile les données utilisées dans des appels de fonction, notamment les paramètres de fonction, les variables locales des fonctions et les informations de gestion.
Une attaque par dépassement de tampon basée sur une pile se produit quand un attaquant envoie des données contenant un code malveillant à une application qui stocke ses données dans le tampon d’une pile. Étant donné que la taille de la pile est limitée, le code a un espace spécifique mis à part pour l’entrée de l’utilisateur. Si cette entrée est plus longue que l’espace que lui a réservé la pile, un dépassement a lieu.
C’est exactement ce que cherche l’attaquant. Étant donné que l’attaquant envoie des données trop longues pour être contenues dans le tampon de la pile, le code malveillant du hacker écrase les données existantes. Cela inclut le pointeur de retour, qui donne le contrôle des transferts de données à l’attaquant.
Heureusement, il existe plusieurs manière de réduire vos risques d’attaque par dépassement de tampon.
D’abord, bien que le dépassement de tampon puisse se produire dans n’importe quel environnement de programmation permettant de manipuler la mémoire directe, certains langages de programmation sont plus résistants que d’autres au dépassement de tampon.
Java, JavaScript, C#, Python et PERL ont des protections intégrées contre le dépassement de tampon. Leur structure réduit la probabilité des erreurs de codage pouvant engendrer des vulnérabilités liées au dépassement.
Outre le langage de programmation, il est important de s’assurer que des protection de l’exécution du système d’exploitation (OS) soient en place. La plupart des OS incluent les protections d’exécution suivantes, pouvant compliquer la réussite des attaques par dépassement de tampon :
L’ASLR (Address space layout randomization ou distribution aléatoire de l’espace d’adressage) rend aléatoire la distribution des emplacements des espaces d’adressage des zones de données clés. Grâce à l’ASLR, il est plus difficile pour les attaquants de localiser et de cibler une fonction de mémoire en particulier.
La butée SEHOP (Structured exception handling overwrite protection) peut contrecarrer les attaques ayant recours à la technique du SEHOP (un dépassement de tampon basé sur une pile).
La prévention de l’exécution de données désigne des zones de mémoire comme exécutables ou non exécutables, ce qui empêche les hackers d’exécuter des instructions écrites vers une zone de mémoire par dépassement.
La prévention des dépassements de tampon incombe principalement aux applications et aux consommateurs. Si les applications utilisent de bonnes pratiques de codage et que les consommateurs ont des systèmes d’exploitation modernes, les dépassements de tampon peuvent être réduits.
Lancez-vous dès Aujourd'hui
Contactez-Nous
Découvrez comment Ping peut vous aider à protéger vos employés et améliorer l'expérience de vos clients dans un monde digital en constante évolution.
Démonstration Gratuite