Buffer overflow : c’est ainsi que fonctionne cette formidable source de vulnérabilités
Notre quotidien est composé de centaines de programmes. Il n’y a pas de moment dans notre journée où nous n’y accédons pas, qu’il s’agisse d’un programme «traditionnel» (qui nécessite une installation) ou d’un programme Web. Cette fois, nous allons vous expliquer tout ce que vous devez savoir sur l’une des failles de sécurité les plus anciennes et les plus populaires. L’échec du buffer overflow , ou buffer overflow , est l’un des principaux casse-tête des développeurs. Au fil des années, il est devenu l’un des alliés des cybercriminels pour mener d’autres attaques aussi ou plus dangereuses que celle-ci.
Mais qu’est-ce exactement qu’un défaut de débordement de tampon ? Il s’agit d’un problème de sécurité de la mémoire où le logiciel/programme ne prend pas en compte ou ne vérifie pas ses limites de stockage. Ensuite, la mémoire du programme reçoit une quantité de données supérieure à ce qu’elle peut réellement traiter selon la façon dont il a été développé. En plus d’entraîner des problèmes dans le fonctionnement du programme ou simplement de s’arrêter de manière inattendue, des vulnérabilités exploitables peuvent apparaître.
Un fait intéressant est que le débordement de tampon est l’une des raisons les plus courantes pour lesquelles des attaques par exécution de code arbitraire sont possibles en raison de vulnérabilités. Aussi, de nombreux programmes développés dans des langages classiques tels que C et C++ sont considérés comme assez sensibles à ce type de problème.
Un problème de sécurité qui persiste au fil des années
Les années ont passé et ce type de problèmes de sécurité est pratiquement aussi valable que les premières années. D’emblée, il n’y a aucune explication concrète qui puisse nous montrer pourquoi, après plus de 10 ans, cela reste un énorme casse-tête pour toute personne impliquée dans le développement et/ou la maintenance de programmes vulnérables à son échec.
Un autre facteur qui alimente la popularité de ce type de défaillance est la popularité permanente de l’ IoT , c’est-à-dire de l’Internet des objets. Plus que jamais, il est possible qu’un objet que nous utilisons fréquemment chez nous ou sur notre lieu de travail puisse être connecté à un réseau. L’aspect malheureux de cette tendance bienvenue est qu’une grande partie des appareils IoT sont contrôlés par un micrologiciel de très mauvaise qualité. De plus, les contrôles et l’application des mesures de sécurité sont pratiquement nuls. Nous savons qu’il existe de nombreux fabricants réputés qui font tout leur possible pour protéger non seulement les appareils, mais aussi les utilisateurs. Cependant, il existe également de nombreux fabricants qui négligent l’aspect sûr d’une bonne expérience utilisateur.
Bug de débordement de tampon en action
Avant de passer à un exemple pratique, il est important d’être clair sur la notion de buffer (ou buffer). En programmation, il s’agit d’emplacements de mémoire qui appartiennent à un programme. C’est-à-dire qu’un programme a plusieurs emplacements mémoire pour stocker toutes les données qui sont générées à la suite de l’utilisation dudit programme. Tout développeur doit garder à l’esprit que les tampons ou les tampons sont essentiels au bon fonctionnement de tout programme qu’ils développent. Si cet aspect est négligé, les programmes auront beaucoup de problèmes pour fonctionner correctement ou directement, ils cessent de fonctionner.
Ainsi, ce qui se passe pendant le débordement de tampon, c’est qu’un processus est exécuté, ce qui amène le programme affecté à générer des données dans une quantité supérieure à ce que les tampons du programme peuvent stocker. Par conséquent, les données générées lors de l’utilisation du programme lui-même vont à des emplacements en mémoire qui ne sont pas préparés pour stocker ces données. Ensuite, nous partageons une vidéo extrêmement pratique et facile à comprendre. Nous allons voir comment la panne est implémentée avec un programme simple développé en langage C.
Heureusement, la vidéo a opté pour un programme très simple : un formulaire simple qui vous demande seulement de saisir votre nom et prénom au clavier. Il permet de comprendre en quelques minutes comment se comporte ce type de panne. Déplaçons l’exemple de cette même vidéo à une situation quotidienne.
Imaginez que vous naviguez sur le Web et tombez sur un service qui a attiré votre attention. Par conséquent, vous décidez de vous inscrire et pour cela, vous devez remplir un formulaire avec quelques détails. Je dois simplement fournir mon prénom, nom et email.
Nombre:
Apellido:
Correo electrónico:
Ensuite, je saisis mes données.
Nombre: Lorena
Apellido: Fernández
Correo electrónico: [email protected]
Jusqu’à présent, tout est normal. Mais que se passe-t-il si vous essayez de vous abonner et de mettre un nom très long dans le champ ? Par exemple, ceci :
Nombre: Lorenaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Apellido: Fernández
Correo electrónico: [email protected]
Vous cliquez sur S’inscrire et du coup, le formulaire affiche un message d’erreur qui n’est pas compréhensible pour tout le monde. Beaucoup de lettres et de chiffres qui ne sont pas compris. Vous essayez à nouveau de remplir les données directement en modifiant le contenu des champs, mais rien ne se passe. Ce n’est qu’en fermant le site Web et en le rouvrant que vous pouvez accéder au formulaire vierge et recommencer. C’est ainsi que vous exploitez le débordement de tampon.
Passerelle vers d’autres cyberattaques
Bien sûr, il existe des situations un peu plus complexes qu’un simple formulaire. De même, avec la situation démontrée, on peut comprendre que tout programme, application ou service développé avec de mauvaises pratiques de sécurité conduit à ce type d’échec.
Cela permet même aux cybercriminels d’exécuter du code malveillant et d’avoir ainsi un champ d’attaque beaucoup plus large. Ce qui signifie que de nombreuses autres attaques peuvent être exécutées si l’échec réussit. Des attaques DDoS , des injections SQL, des attaques de type phishing peuvent être menées si les données personnelles des utilisateurs sont consultées et même des événements de violation de données peuvent être effectués.
Comment se protéger efficacement de cet échec
L’une des principales recommandations, en particulier pour les développeurs, est de suivre les normes de développement de code sécurisé. De plus, vous devez sensibiliser à l’importance de faire de la sécurité l’une des priorités lorsque vous pensez à tout type de logiciel. Selon la langue que vous utilisez, le cadre et d’autres aspects, vous pouvez trouver plusieurs guides avec des normes très détaillées. Ils vous aideront non seulement à développer du code en toute sécurité pour empêcher le débordement de la mémoire tampon, mais également d’autres menaces de sécurité potentielles. Le projet OWASP dans sa section Top 10, présente les principales menaces de sécurité pour tout type de solution web, nous vous recommandons d’y jeter un œil.
De même, ils proposent d’opter pour des langages de programmation qui, en plus d’être efficaces en termes d’utilisation de la mémoire, sont sûrs. La même chose s’applique à tout type de framework et de bibliothèque qui doit être utilisé. D’autres recommandations plus spécifiques pour les développeurs sont que les applications contiennent, par exemple, des exécutables indépendants de la position. A quoi cela servirait-il ? Limiter les impacts que pourrait engendrer un buffer overflow, en supposant qu’il n’était pas possible de capturer l’événement et de le contenir. On ne parle pas seulement de prévention, mais aussi d’atténuation des impacts. En ce qui concerne les failles de sécurité, les limites sont presque infinies.
Nous avons mentionné ci-dessus que le débordement de tampon est une situation persistante dans les programmes développés dans des langages tels que C et C++. Heureusement, les développeurs ont développé et diffusé ensemble des pratiques meilleures et plus sûres. Et par pratiques, nous entendons le développement du logiciel lui-même. En conséquence, de nombreux fabricants de gros et de petits calibres ont déjà adopté de telles pratiques pour leur cycle de développement.