Éviter les dépassements de mémoire tampon

Un dépassement de mémoire tampon est l’une des sources de risque de sécurité les plus courantes. Un dépassement de mémoire tampon est essentiellement dû au traitement d’une entrée externe non vérifiée comme des données dignes de confiance. Le fait de copier ces données, à l’aide d’opérations telles que CopyMemory, strcat, strcpy ou wcscpy, peut créer des résultats inattendus, ce qui permet d’endommager le système. Dans le meilleur des cas, votre application abandonnera avec un vidage du cœur, une erreur de segmentation ou une violation d’accès. Dans le pire des cas, un attaquant peut exploiter le dépassement de la mémoire tampon en introduisant et en exécutant d’autres codes malveillants dans votre processus. La copie de données d’entrée non vérifiées dans une mémoire tampon basée sur la pile est la cause la plus courante d’erreurs exploitables.

Les dépassements de mémoire tampon peuvent se produire de différentes façons. La liste suivante fournit une brève introduction à quelques types de situations de dépassement de mémoire tampon et propose des idées et des ressources pour vous aider à éviter de créer de nouveaux risques et à atténuer les risques existants :

Dépassements de mémoire tampon statique

Un dépassement de mémoire tampon statique se produit lorsqu’une mémoire tampon, qui a été déclarée sur la pile, est écrite dans avec plus de données qu’elle n’a été allouée à contenir. Les versions moins apparentes de cette erreur se produisent lorsque des données d’entrée utilisateur non vérifiées sont copiées directement dans une variable statique, ce qui provoque une altération potentielle de la pile.

Dépassements de tas

Les dépassements de tas, comme les dépassements de mémoire tampon statique, peuvent entraîner une altération de la mémoire et de la pile. Étant donné que les dépassements de tas se produisent dans la mémoire du tas plutôt que dans la pile, certaines personnes considèrent qu’ils sont moins capables de causer de graves problèmes; néanmoins, les dépassements de tas nécessitent un réel soin de programmation et sont tout aussi capables d’autoriser les risques système que les dépassements de mémoire tampon statique.

Erreurs d’indexation de tableau

Les erreurs d’indexation de tableau sont également une source de dépassements de mémoire. La vérification minutieuse des limites et la gestion des index permettent d’éviter ce type de dépassement de mémoire.

La prévention des dépassements de mémoire tampon consiste principalement à écrire du code correct. Validez toujours toutes vos entrées et échouez correctement si nécessaire. Pour plus d’informations sur l’écriture de code sécurisé, consultez les ressources suivantes :

  • Maguire, Steve [1993], Writing Solid Code, ISBN 1-55615-551-4, Microsoft Press, Redmond, Washington.
  • Howard, Michael et LeBlanc, David [2003], Writing Secure Code, 2d ed., ISBN 0-7356-1722-8, Microsoft Press, Redmond, Washington.

Notes

Ces ressources peuvent ne pas être disponibles dans certaines langues et certains pays.

 

La gestion des chaînes sécurisées est un problème de longue date qui continue d’être résolu à la fois en suivant les bonnes pratiques de programmation et souvent en utilisant et en réaménageant les systèmes existants avec des fonctions de gestion de chaîne sécurisées. Un exemple de cet ensemble de fonctions pour l’interpréteur de commandes Windows commence par StringCbCat.