Éviter les dépassements de mémoire tampon
Un dépassement de mémoire tampon est l’une des sources les plus courantes de risque de sécurité. Un dépassement de mémoire tampon est essentiellement causé par le traitement d’une entrée externe non vérifiée en tant que 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 imprévus, ce qui permet d’endommager le système. Dans le meilleur des cas, votre application s’arrête avec un vidage de base, une erreur de segmentation ou une violation d’accès. Dans le pire des cas, une personne malveillante peut exploiter le dépassement de mémoire tampon en introduisant et en exécutant d’autres codes malveillants dans votre processus. La copie non vérifiée, les données d’entrée 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 statiques
-
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 à conserver. Les versions moins évidentes 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, provoquant ainsi une corruption potentielle de la pile.
-
Dépassements de tas
-
Les dépassements de tas, comme les dépassements de mémoire tampon statiques, 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 sur la pile, certaines personnes les considèrent comme étant moins capables de provoquer de sérieux problèmes. Néanmoins, les dépassements de tas requièrent des soins de programmation réels et sont tout aussi capables d’autoriser les risques système en cas de 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 des limites soignées et la gestion des index vous aideront à éviter ce type de dépassement de mémoire.
La prévention des dépassements de mémoire tampon consiste principalement à écrire un code correct. Validez toujours toutes vos entrées et effectuez une défaillance normale si nécessaire. Pour plus d’informations sur l’écriture de code sécurisé, consultez les ressources suivantes :
- Maguire, Steve [ 1993 ] , écrivant du code solide, ISBN 1-55615-551-4, Microsoft Press, Redmond, Washington.
- Howard, Michael et LeBlanc, David [ 2003 ] , écriture de code sécurisé, 2d ed., ISBN 0-7356-1722-8, Microsoft Press, Redmond, Washington.
Notes
Ces ressources peuvent ne pas être disponibles dans certains langages et pays.
Coffre la gestion des chaînes est un problème à long terme qui continue à être résolu à la fois en suivant les bonnes pratiques de programmation et souvent en utilisant et en réservant les systèmes existants avec des fonctions de gestion de chaînes sécurisées. un exemple d’un tel ensemble de fonctions pour l’interpréteur de commandes Windows démarre avec StringCbCat.