Le dépassement de tampon

Le dépassement de tampon

Bon, aujourd'hui j'ai envie de vous parler du dépassement de tampon et on ne va pas se mentir, vous regardez cette box pour 2 raisons potentielles :
- Vous êtes intéressés par l'informatique et la SSI
- Vous vous êtes demandé quel lien il y avait avec l'hygiène féminine

Je tiens à démystifier la chose, le dépassement de tampon est l’appellation française du "Buffer Overflow".
Il s'agit d'une faille niveau logiciel. Elle demande normalement un minimum de connaissance informatique pour la comprendre mais je vais justement essayer de l'expliquer à n'importe qui. On ne va donc pas partir dans les détails de bas niveau système & mémoire.


Pour éviter de partir dans tous les sens on va partir sur un exemple simple (un cas d'école) à partir d'un mini programme en C.



Lorsque l'on veut créer un logiciel, on utilise généralement un langage de programmation (comme le C donc), avec lequel on va "écrire" le programme puis le compiler (Le transformer en un langage compréhensible par la machine).
On va donc prendre l'exemple de code suivant :

-------------------------------------------------------------------

#include <stdio.h>
#include <string.h>

int main(){
char message[10] = "Coucou !";
char buffer[20];

printf("Donnez-moi un mot : ");
scanf("%s", buffer);

printf("Au fait, j'ai un message pour vous :n%sn",message);

return 0;
}



-------------------------------------------------------------------



Concrètement ce programme va :
- Créer une variable de chaîne de caractères (message) qui contient "Coucou !". Cette variable peut faire maximum 10 caractères
- Créer une variable de chaîne de caractères (buffer) vide. Cette variable peut faire maximum 20 caractères.
- Afficher "Donnez-moi un mot : "
- Attendre que l'utilisateur entre un mot, puis il va l'ajouter à la variable buffer
- Afficher un message contenant le mot de la variable message


Donc concrètement si je le compile et je le lance il va se passer ça :
./test.exe
Donnez-moi un mot : Choualbox!
Au fait, j'ai un message pour vous :
Coucou !


Seulement voilà : En réalité je suis un connard, on me dit que j'ai le droit qu'à 20 caractères... Je vais essayer d'en avoir un peu plus.


Je relance le programme :
./test.exe
Donnez-moi un mot : AAAAAAAAAAAAAAAAAAAAChoualbox!
Au fait, j'ai un message pour vous :
Choualbox!



Et là on dirait qu'un Marabout est passé par là et a modifié le message dans le programme... Mais non.
Ce que l'on a effectué là est un "dépassement de tampon", il est dû à la façon dont est gérée la mémoire en informatique.

La mémoire est gérée sous forme de pile. C'est à dire qu'on va empiler (par octet et 1 lettre = 1 octet) toutes les données qu'on donne au programme. On peut voir sur le schéma 1 la pile (simplifiée) correspondant à notre programme.
Donc, lorsque l'on rajoutes des valeurs (en prenant l'exemple de notre première exécution), on arrive au détail que l'on voit dans le schéma 2 (Ce qu'on donne au programme est en rouge).

Comme on peut le voir, les octets s'ajoutent de haut en bas, le message "Choualbox!" ne remplis donc pas tout le tampon buffer.

Mais, dans notre 2ème exemple d’exécution, on donne plus de lettre que le tampon buffer* ne peut en contenir. Donc, il se passe ce que l'on voit dans le Schéma 3 : le message dépasse et vient écraser ce qui est contenu dans la valeur *message.


Bien sûr, ce que je vous montre là est le principe le plus simple et qu'on ne retrouve (presque) plus. De nos jour il existe une multitude de sécurités et de "contre" à ces sécurités et l'idée n'est pas de simplement modifier une variable mais plutôt de faire exécuter un code donné à la machine.


J'espère avoir été assez clair sur le fonctionnement, n'hésitez pas à me poser vos questions j'essaierai d'y répondre !

Le dépassement de tampon
Poster un commentaire
amigre
amigre
5 ans

Moi qui croyait qu'on aurait droit à ça

NSFW
IMG
NSFW
JackyLaPalourde

@amigre: Une blague assez inattendue !

amigre
amigre
5 ans

@JackyLaPalourde: Ouais t'as vu elle était palourde

JackyLaPalourde

@amigre:

GIF
GIF
Scely
Scely
5 ans

Pour les plus intéressés (et que vous connaissez un peu l'univers Linux), gdb est votre ami si vous souhaitez investiguer quelques exécutables en C.

Hisoka
Hisoka
5 ans

Faut vraiment insister sur le fait que l'idée derrière c'est de charger des instructions en RAM qui vont venir faire ce que l'on veut. En gros on vient modifier le programme volée pour y intégrer du code malicieux.

Cette page est réservée aux ADULTES

Tu es sur le point d'accéder à un site web qui contient du matériel explicite (pornographie).

Tu ne dois accéder à ce site que si tu as au moins 18 ans ou si tu as l'âge légal pour visionner ce type de matériel dans ta juridiction locale, l’âge le plus élevé étant retenu. En outre, tu déclares et garantis que tu ne permettras aucun mineur à d'accéder à ce site ou à ces services.


En accédant à ce site, tu acceptes nos conditions d'utilisation.