Définition L'attaque par débordement de tampon

Une attaque par débordement de tampon, aussi appelée buffer overflow, repose sur un dépassement du stockage de données dans la mémoire d’un ordinateur ou d’un périphérique. La mémoire tampon enregistre plus d’informations qu’elle ne peut en accueillir. Aussi, les données débordent, de la même manière qu’un vase trop rempli. Ce débordement profite alors aux pirates. Découvrez le fonctionnement d’une attaque par débordement de tampon et comment protéger votre entreprise de cet acte malveillant.

Débordement de tampon ou buffer overflow : qu’est-ce c’est ?

L’exploitation d’une attaque par débordement de tampon est née dans les années 90 avec le ver Morris. Depuis, l’histoire de la cybersécurité a connu le ver Code Red ou encore le ver SQL Slammer. Ce type de cyberattaque se révèle toujours d’actualité. Pour comprendre son mode de fonctionnement, faisons le point sur ce qu’est la mémoire tampon d’une application.

Qu’est-ce que la mémoire tampon ?

La mémoire tampon est une partie de la mémoire attribuée à un programme par un système d’exploitation. Dans certains langages de programmation (Ruby, Python, Java, etc.), la gestion de cette mémoire est automatique. Dans d’autres cas, comme le langage C et C++, ce sont les programmeurs qui doivent intervenir manuellement pour allouer un espace de stockage. La gestion de la mémoire tampon est donc plus faillible.

Si le programme n’est pas correctement codé dans la gestion de la mémoire tampon, une vulnérabilité informatique se crée. Le débordement de tampon est une faille que peuvent alors exploiter les pirates.

Le principe du dépassement de tampon : les débordements de données

Le débordement de tampon n’est ni plus ni moins qu’un dépassement de la capacité de stockage de la mémoire tampon. Imaginez que vous souhaitiez remplir un verre de 20 cl par 50 cl de liquide. Votre contenant déborde et éparpille le liquide en surplus.

Lorsque les données arrivent en masse, la mémoire tampon n’est plus en mesure de les enregistrer. Par exemple, un programmeur a pu décider d’allouer 1 Go de mémoire tampon alors que ce sont 2 Go qui arrivent. La mémoire tampon est débordée, et le programme se met alors à stocker le surplus de données dans des zones de mémoire adjacentes, écrasant des informations destinées à un autre usage ou un autre process du programme.

Comment se produit une attaque par débordement de tampon : une question de pile et de tas

La mémoire tampon comprend les adresses de tas et de pile. Ce sont vers ces deux espaces que transitent les données pour la bonne exécution du programme. Le tas et la pile disposent d’un fonctionnement différent et ne se destinent pas aux mêmes fonctions. L’attaque par débordement de pile reste la plus courante.

Le tas et la pile : le fonctionnement du stockage des données

Le tas n’est, ni plus ni moins, qu’un gros bloc de mémoire. La pile est constituée de plusieurs étages appelés cadres. Chacun contient des variables locales. Au fur et à mesure de l’exécution du programme, les fonctions contenues dans les cadres sont appelées. Alors, les cadres se retirent et laissent la place à d’autres au fur et à mesure. La mémoire de la pile est moins importante que celle du tas. Elle peut être rapidement saturée et connaître un débordement de tampon. C’est pourquoi cette partie de la mémoire tampon est plus sujette à des vulnérabilités, et donc aux attaques.

L’attaque par débordement de pile

Les cadres empilés dans la pile comprennent des fonctions pour exécuter le programme, mais aussi des adresses retour. Ces adresses servent à guider le cheminement des données, une fois qu’une fonction appelée a été retirée de la pile. Elles permettent le fonctionnement en continu de la mémoire tampon et du stockage des données.

Seulement, si l’attaquant envoie un volume de données plus important que ne peut accueillir la mémoire, alors la pile est surchargée. Les données viennent écraser les adresses retour. Le programme connaît alors un premier dysfonctionnement : les nouvelles données qui viennent s’enregistrer dans les adresses retour ne correspondent pas au format qu’il attend. L’emplacement mémoire n’est plus valide. Le programme devient instable ou s’arrête de fonctionner.

Si l’attaquant a pour objectif de récupérer des données sur le mode de fonctionnement du programme, alors il injecte du code malveillant comprenant une adresse de retour valide. Il donne ainsi un nouvel emplacement de stockage des données, qui peut être un serveur personnel. Il peut également intégrer du code malveillant qui lui donne accès à l’infrastructure informatique.

Comment les attaquants exploitent-ils les vulnérabilités de débordement de tampon ?

L’exploitation d’une vulnérabilité sur la mémoire tampon s’opère en plusieurs étapes.

  • L’attaquant recherche des vulnérabilités sur les fonctions en C/C++ comme « strcpy » ou « sprintf », connues pour leur défaut de sécurité.
  • L’attaquant injecte ensuite du code malveillant en générant un volume supérieur à la capacité de stockage de la mémoire tampon.
  • Les fonctions d’exécution du programme sont directement impactées, impliquant un dysfonctionnement, un arrêt ou un détournement des données.
  • Le code malveillant s’exécute lors du lancement du programme : l’attaquant peut alors en prendre le contrôle, s’introduire dans les systèmes, intégrer des virus, etc.

 

Quels sont les dommages causés par ce type d’attaque ?

L’attaque par débordement de tampon est motivée par plusieurs objectifs. Il peut donc causer différents dommages selon les techniques utilisées par l’attaquant.

La prise de contrôle de programme par un code malveillant

Lorsque l’attaquant injecte du code malveillant, l’exécution du programme peut rester fonctionnelle. En revanche, l’exécution peut entraîner le déploiement de malwares, la modification de fichiers sensibles ou encore le vol de données. L’attaquant peut également avoir accès à la gestion du système sur lequel s’exécute le programme. Selon la force de son intrusion, il peut ensuite s’introduire plus loin dans le système, jusqu’à ce qu’il soit arrêté ou qu’il ait terminé.

L’arrêt d’un programme : des dommages économiques

Un débordement de tampon prend aussi la forme d’une attaque par déni de service (attaque DDoS). Le pirate envoie un trop gros volume de données que ne peut supporter la mémoire tampon. Le programme peut se rendre inaccessible et ne plus fonctionner correctement. Les utilisateurs n’y ont plus accès, le temps que l’entreprise réussisse à opérer les réparations nécessaires. L’arrêt d’un programme ou d’un service a un impact économique.

Compromission et corruption des données

L’attaque par débordement de tampon peut donner accès à des données sensibles. Il peut s’agir des données confidentielles de l’entreprise concernant les codes de fonctionnement de ses services. Il peut aussi être question des données des utilisateurs se servant du programme ou de l’application. Les données corrompues par un code malveillant affectent également le bon fonctionnement du programme.

Comment se protéger des attaques par débordement de tampon ?

Vous pouvez vous prémunir des attaques par débordement de tampon.

  • Utilisez des langages de programmation disposant des protections contre le dépassement de tampon. Préférez des langages comme Java, Python, C#, JavaScript, etc.
  • Vérifiez les protections des systèmes d’exploitation contre le débordement de tampon et leur activation (ASLR, DEP, SEHOP).
  • N’utilisez pas les fonctions connues comme étant vulnérables (strcpy, gets ou scanf) dans le langage C/C++. Vous disposez de versions plus sûres pour éviter tout risque d’incident de sécurité.
  • L’utilisation de pare-feu pour les applications web (WAF) et des outils de protection des applications web et API vous aident à détecter les tentatives d’intrusion sur les vulnérabilités de débordement de mémoire tampon. N’oubliez pas également de mettre à jour vos outils de sécurité informatique.

 

La protection contre les attaques par débordement de tampon revient essentiellement aux bonnes pratiques de codage et de développement de programmes. Des solutions de cybersécurité capables de détecter des vulnérabilités viennent compléter une politique interne de mise à jour régulière des applications. Cette approche de sécurité peut ainsi vous éviter de perdre vos programmes et vos données sensibles.