Le débordement de la mémoire tampon (ou buffer overflow ) concerne surtout les programmes fonctionnant sous Unix ou Linux. Non pas parce que ces systèmes sont peu fiables, mais parce qu'ils sont les plus exposés, étant les plus nombreux à être connectés à internet. Tous les systèmes sont susceptibles d'être attaqués, qu'il s'agisse de matériels comme un routeur, un serveur de cache, ou de logiciels, tel un serveur Windows.
Le pirate choisira sa cible selon son objectif. S'il veut couper les connexions de l'entreprise, il attaquera le routeur pour modifier sa configuration. S'il veut accéder aux données de l'entreprise, il prendra la main sur un serveur. À partir du moment où un logiciel fonctionne sur une machine connectée, il peut y avoir tentative de buffer overflow *. Toutefois, pour que la tentative aboutisse, il faut que soient réunies des conditions logicielles très particulières, et que le pirate soit un expert.
In fine, cette prise de contrôle peut avoir plusieurs effets. Le plus visible sera un déni de service aux utilisateurs, soit parce que l'application ne fonctionne plus on parlera alors de buffer overflow applicatif , soit parce que les lignes de communication et les équipements sont saturés d'informations inutiles à cause d'un débordement de la pile de réseau.
Pour comprendre comment fonctionne un buffer overflow , il est nécessaire de savoir comment sont réparties, dans l'ordinateur, les différentes zones de mémoire dont un programme a besoin pour s'exécuter. Lors de son lancement, une certaine quantité de mémoire lui est réservée ; les instructions puis les données y seront copiées. Une zone de mémoire est également affectée au stockage temporaire : il s'agit de la pile (ou stack ).
Leurrer le pointeur d'instructions par buffer overflow
Une fois le programme chargé et la mémoire allouée, l'exécution démarre. Celle-ci étant séquentielle, la pile va être dynamiquement allouée pour stocker temporairement les instructions et les données que le programme manipule. Lors de l'appel d'une fonction à exécuter, la pile est remplie de haut en bas avec les paramètres de la fonction, l'adresse de retour pour accéder à l'instruction suivante, les instructions à exécuter et, enfin, les mémoires tampons (ou buffers ), zones qui contiennent les données à manipuler. Mais, surtout, la pile va contenir le pointeur d'instructions, c'est-à-dire l'adresse mémoire de la prochaine instruction qui devra être exécutée immédiatement après celle qui est en cours. Et c'est précisément là que se situe le coeur de la manoeuvre du pirate, qui va tenter d'en modifier le contenu et d'y placer une valeur qu'il a lui-même choisie. Cette valeur abusive désignera non plus l'adresse de la prochaine instruction originale, mais celle d'une instruction qu'il aura lui-même concoctée.
Imaginons, par exemple, que le programme a reçu de l'utilisateur une chaîne de caractères qu'il doit copier. En considérant la mémoire depuis les adresses hautes et en allant vers le bas, nous trouverons dans la pile la mémoire tampon qui sera divisée en deux parties : l'une contient la chaîne originale ; l'autre est réservée pour recevoir la copie, puis l'instruction de retour, et les paramètres d'appel, s'il y en a. Supposons que le programmeur a estimé la longueur de la chaîne en question à cinquante caractères. Il a donc réservé deux fois cinquante caractères par précaution, soit cent octets.
À l'exécution du programme, lorsque l'utilisateur saisit la chaîne de caractères, plusieurs cas de figure sont possibles : soit le texte fait cent caractères ou moins, et tout va bien ;soit le texte est très long. Dans ce cas, il va déborder à la fois du buffer original, du buffer pour la copie et même de l'espace mémoire réservé pour la pile. Le système va alors générer une erreur et « se planter » . Enfin, troisième cas de figure, l'utilisateur est un pirate. Sur les cent caractères disponibles, il va saisir un ensemble d'instructions et indiquer en cent unième position l'adresse mémoire du premier caractère de sa première instruction pirate. Le programme se déroule donc normalement et continue tout aussi normalement à l'adresse indiquée par le pointeur d'instructions, c'est-à-dire précisément celle qui est contenue dans le cent unième espace mémoire de la pile, et qui désigne son premier emplacement mémoire. L'ordinateur exécute alors les instructions fournies par le pirate, qui peuvent être de tous types, tout en bénéficiant des droits accordés au programme original.
Technicité et patience exigées pour les apprentis pirates
Un certain nombre de conditions doivent être réunies pour que le système soit une proie éventuelle pour des pirates : machine accessible à distance, logiciels en attente de connexion, et, bien entendu, défaut dans la programmation de ces logiciels. Toutes les machines et tous les logiciels qui s'exécutent ne sont donc pas la cible des pirates. Ainsi ces derniers s'intéresseront-ils en priorité aux nombreux serveurs de messagerie, de courrier, aux serveurs internet, ou encore, aux passerelles qui fonctionnent en tâche de fond et attendent simplement que les utilisateurs se connectent et emploient leurs ressources. Pour bien fonctionner, et pour interagir efficacement avec le système ou les autres logiciels, ces machines et leurs programmes doivent disposer de droits d'exécution et d'écriture de niveau élevé. Si un pirate parvient, par une technique de buffer overflow , à faire exécuter ses propres instructions, il bénéficiera des mêmes privilèges, car, du point de vue du système, ce sera toujours le même programme identifié et autorisé qui s'exécutera. Il est également nécessaire que le pirate ait connaissance du fonctionnement de ces machines et programmes. Il faut aussi qu'il arrive à passer à travers les dispositifs de sécurité, s'ils sont installés. Enfin, il faut qu'il connaisse parfaitement le langage machine de la plate-forme qu'il attaque, la version spécifique du système et du logiciel qu'il veut pirater, mais également qu'il détermine précisément à quel moment de l'exécution et dans quelle condition il peut provoquer un buffer overflow . L'expérience prouve que tout cela demande à la fois beaucoup de compétences techniques, beaucoup de temps, et pas mal de chance. Il est bien plus simple, et plus rapide, de repérer la présence d'un réseau radio Wi-Fi non sécurisé et de tenter de s'introduire dans l'entreprise par ce biais !
* Pour en savoir plus, consultez l'étude de Pierre-Alain Fayolle et Vincent Glaume A Buffer Overflow Study, Attacks and Defenses à l'adresse suivante : http://downloads.securityfocus.com/library/report.pdf.
Buffer overflow : technique qui consiste à pénétrer dans un programme informatique en glissant un code malicieux dans la mémoire tampon. Ainsi (mal) remplie, cette mémoire tampon perturbe le fonctionnement du serveur, qui exécutera les instructions codées par le pirate.
Pile : zone de mémoire d'un ordinateur où sont provisoirement stockées les informations nécessaires à l'exécution du programme.
Pour se prémunir contre des attaques par buffer overflow , le plus simple est d'appliquer les correctifs de sécurité qui sont, en général, publiés après la découverte de la faille. Si l'entreprise développe ses propres applicatifs, des compilateurs sécurisants et des bibliothèques de contrôle sont disponibles sur le marché. Les compilateurs effectuent toutes les vérifications nécessaires et ne génèrent d'objet que si le code est sûr. Les bibliothèques autorisent l'ajout des routines de contrôle qui permettront d'éviter ce genre d'attaque. Pour ceux qui ne veulent pas, ou ne peuvent pas, recompiler leurs applications, la méthode la plus sûre est d'installer un pare-feu applicatif qui filtrera les données saisies.
![]() |
Photo
Canon EOS-450D. Reflex 12.2 Megapixels. Comparez les prix !
|
|
![]() |
> Pré-commande: Call of Duty Modern Warfare 2
Soyez le premier à jouer le 12 novembre !
|
|
1 Orange
2 Free
3 Bouygues Telecom
> Plus de détails

![]() |
Stockage
Dvico TViX HD 1To. Disque dur numérique. Comparez les prix !
|
|
