Introduction à Buffer Overflow

Le débordement de tampon est également connu sous le nom de dépassement de tampon, c'est un état de l'ordinateur où une application essaie de stocker plus de données dans la mémoire tampon que la taille de la mémoire. Cela entraîne le stockage des données dans un stockage adjacent qui peut parfois remplacer les données existantes, entraînant une perte de données potentielle et parfois un plantage du système. C'est une erreur de programmation courante que la plupart des développeurs commettent sans le savoir. Ceci est le plus souvent exploité par des pirates pour accéder à des données non sollicitées.

Qu'est-ce que la mémoire tampon?

Excellente question. Une mémoire tampon, ou tampon, est simplement une partie séquentielle de la RAM réservée pour conserver temporairement les données pendant leur transfert d'un endroit à un autre - l'endroit étant généralement un périphérique d'entrée ou de sortie. Ceci est fait pour compenser la différence de vitesse à laquelle les appareils fonctionnent.

Par exemple, lorsque vous donnez des documents à imprimer, votre dernier processeur i7 est suffisamment rapide pour exécuter la commande d'impression en nanosecondes, tandis que la pauvre vieille imprimante n'est pas équipée de ce processeur rapide. Ainsi, les documents sont conservés dans la mémoire tampon et transmis à l'imprimante à une vitesse acceptée par l'imprimante. Cela libère la RAM de votre CPU pour d'autres tâches.

Attaque de dépassement de tampon

Maintenant qu'une vulnérabilité a été identifiée avec les ordinateurs, les pirates informatiques sont tenus de l'exploiter et d'essayer d'attaquer divers systèmes via des attaques par dépassement de tampon. Maintenant, la question se pose, comment un pirate exécute-t-il une telle attaque et quelles sont les conséquences?

Dans une attaque par débordement de tampon, les données supplémentaires incluent des instructions destinées à déclencher des activités dommageables telles que la corruption de fichiers, la modification de données, l'envoi d'informations privées sur Internet, etc. Un attaquant profiterait simplement de tout programme qui attend un certain utilisateur saisir et injecter les données excédentaires dans le tampon.

L'attaque par débordement de tampon peut être principalement classée en deux types

  • Basé sur la pile : lorsque l'attaque porte sur l'allocation de mémoire basée sur la pile. C'est plus simple à exploiter et donc plus sujet aux attaques.
  • Basé sur le tas : lorsque l'attaque porte sur l'allocation de mémoire basée sur le tas. Ce n'est pas si facile à exploiter et c'est donc beaucoup moins fréquent.

Les langages les plus vulnérables aux attaques par dépassement de tampon sont le C, C ++, Fortran et Assembly car ils utilisent des techniques d'allocation de mémoire basées sur la pile.

Le traitement

Une fois les données corrompues, il n'y a tout simplement aucun remède pour restaurer les données d'origine. De plus, l'intensité de l'attaque détermine en grande partie la guérison. Si l'attaque est maigre et n'affecte qu'une partie de la mémoire d'une machine isolée, un format système simple peut être le remède. Alors que, si l'attaque est répandue et a compromis les données sur plusieurs machines, le formatage de l'ensemble du réseau n'aiderait pas tant que le programme qui injecte le code malveillant n'est pas corrigé.

Mieux vaut prévenir que guérir

En tant que développeurs, il est de notre responsabilité de vérifier les débordements de tampon dans notre code. Si les dépassements de tampon sont gérés dans le code lui-même, la sécurité du système n'est pas entravée par des attaques de dépassement de tampon.

Voici quelques mesures de précaution simples qui peuvent aider à éviter les débordements de tampon.

  • La gestion des exceptions doit être mise à profit pour détecter les dépassements de tampon et empêcher l'exécution de code en cas de cela.
  • Allouez une taille suffisamment grande pour mettre en mémoire tampon afin que les gros volumes de données non souhaités soient traités correctement.
  • Évitez d'utiliser des fonctions de bibliothèque ou des méthodes tierces qui ne sont pas soumises à une vérification des limites pour les dépassements de tampon. Des exemples courants de ces fonctions à éviter sont gets (), scanf (), strcpy (). Ces fonctions sont principalement en langage C / C ++.
  • Les tests de code doivent tenir compte de ces vulnérabilités et tester rigoureusement le code et corriger les bogues qui peuvent entraîner un débordement.
  • Les langages de programmation, les systèmes d'exploitation et les compilateurs de code modernes ont évolué pour arrêter l'exécution des commandes en cas de dépassement de tampon. C'est devenu le moyen le plus fiable pour détecter automatiquement les dépassements de tampon.

Essayez-le vous-même…

Vous en avez tellement compris sur Buffer Overflow et Buffer Attacks, pourquoi ne pas essayer de coder vous-même quelque chose de malveillant?

Avis de non-responsabilité - Le programme suivant est uniquement à des fins d'illustration et ne doit pas être utilisé pour causer des dommages de toute nature. Toute ressemblance avec un code malveillant n'est qu'une coïncidence. De plus, les systèmes d'exploitation sont aujourd'hui suffisamment intelligents pour mettre en place des contrôles préventifs contre les attaques par tampon.

Vous trouverez ci-dessous le programme C qui peut provoquer un dépassement de tampon potentiel. Pourquoi le choix de la langue C? Cela est dû au fait que les langages de programmation les plus avancés ont été développés pour gérer les dépassements de mémoire tampon uniquement lors de la compilation. Bien que, de nos jours, les compilateurs de C aient également certains contrôles en place pour éviter de détecter un débordement de tampon. Ainsi, vous ne verriez qu'un message d'erreur indiquant qu'un dépassement de tampon a été détecté.

#include
#include
#include
int main(int argc, char *argv())
(
char mybuffer(8);
// copy the user input to mybuffer, without any bound checking
printf("Storing user input to mybuffer…\n");
strcpy(mybuffer, argv(1));
printf("mybuffer content= %s\n", mybuffer);
return 0;
)

Que s'est-il passé lorsque 123456789 a été donné comme argument de ligne de commande au programme? Le programme a généré une erreur qui est levée lorsque le compilateur détecte un dépassement de tampon. Les compilateurs et les systèmes d'exploitation disposent aujourd'hui d'une couche de protection supplémentaire. Cette couche n'est rien, mais des variables appelées les Canaries qui sont initiées à certaines valeurs au moment de la compilation. Ces variables sont ensuite stockées dans des unités de mémoire adjacentes au tampon. Ainsi, chaque fois que le tampon déborde, les données supplémentaires circulent dans la mémoire adjacente et corrompt la valeur des Canaries. Dès qu'un canari corrompu est détecté, le système interrompt l'exécution.

Un autre exemple en langage C ++:

#include
using namespace std;
int main()
(
char buf(8);
cin>>buf;
return 0;
)

Entrée - 123456789

Sortie -

Conclusion - Buffer Overflow

Donc, maintenant je suis sûr que vous auriez compris l'importance de la gestion des tampons dans votre programme. Incluez cette pratique pour vérifier les limites du tampon lors de l'écriture ainsi que pour tester votre code. Cela vous aidera à écrire du code sécurisé.

Articles recommandés

Cela a été un guide sur ce qu'est le débordement de tampon. Ici, nous avons discuté de la définition, la prévention, la mémoire, l'attaque dans Buffer Overflow. Vous pouvez également consulter nos autres articles suggérés pour en savoir plus -

  1. Qu'est-ce que JavaScript?
  2. Qu'est-ce que Django?
  3. Qu'est-ce que SQL Developer?
  4. Qu'est-ce qu'Azure?