fbpx

Buffer Overflow Attack

Les attaques par « dĂ©bordement de tampon » (en anglais « Buffer overflow ») ont pour principe l’exĂ©cution de code arbitraire par un programme en lui envoyant plus de donnĂ©es qu’il n’est censĂ© en recevoir. C’est Ă  dire faire exĂ©cuter un code malveillant Ă  un programme.

Il y a deux types de codes malveillant :

  1. Un code provoquant une sorte de déni de service monopolisant un ensemble ou un sous-ensemble des ressources de la machine.
  2. Un code permettant d’exĂ©cuter des routines du système dans un but d’intrusion ou de destruction.

En effet, les programmes acceptant des donnĂ©es en entrĂ©e, passĂ©es en paramètre, les stockent temporairement dans une zone de la mĂ©moire appelĂ©e tampon (en anglais buffer). Or, certaines fonctions de lecture, telles que les fonctions strcpy() du langage C, ne gèrent pas ce type de dĂ©bordement et provoquent un plantage de l’application pouvant aboutir Ă  l’exĂ©cution du code arbitraire et ainsi donner un accès au système.

La mise en Ĺ“uvre de ce type d’attaque est très compliquĂ©e car elle demande une connaissance poussĂ©e de l’architecture des programmes et des processeurs. NĂ©anmoins, il existe de nombreux exploits capable d’automatiser ce type d’attaque et la rendant Ă  la portĂ©e de quasi-nĂ©ophytes.

Le principe de fonctionnement d’un dĂ©bordement de tampon est fortement liĂ© Ă  l’architecture du processeur sur lequel l’application vulnĂ©rable est exĂ©cutĂ©e.

Les données saisies dans une application sont stockée en mémoire vive dans une zone appelée tampon. Un programme correctement conçu doit prévoir une taille maximale pour les données en entrées et vérifier que les données saisies ne dépassent pas cette valeur.

Les instructions et les donnĂ©es d’un programme en cours d’exĂ©cution sont provisoirement stockĂ©es en mĂ©moire de manière contigĂĽe dans une zone appelĂ©e pile (en anglais stack). Les donnĂ©es situĂ©es après le tampon contiennent ainsi une adresse de retour (appelĂ©e pointeur d’instruction) permettant au programme de continuer son exĂ©cution. Si la taille des donnĂ©es est supĂ©rieure Ă  la taille du tampon, l’adresse de retour est alors Ă©crasĂ©e et le programme lira une adresse mĂ©moire invalide provoquant une faute de segmentation (en anglais segmentation fault) de l’application.

Un pirate ayant de bonnes connaissance techniques peut s’assurer que l’adresse mĂ©moire Ă©crasĂ© corresponde Ă  une adresse rĂ©elle, par exemple situĂ©e dans le tampon lui-mĂŞme. Ainsi, en Ă©crivant des instructions dans le tampon (code arbitraire), il lui est simple de l’exĂ©cuter.
Il est ainsi possible d’inclure dans le tampon des instructions ouvrant un interprĂ©teur de commande (en anglais shell) et permettant au pirate de prendre la main sur le système. Ce code arbitraire permettant d’exĂ©cuter l’interprĂ©teur de commande est appelĂ© shellcode.

Pour se protĂ©ger de ce type d’attaque,

  • utiliser des langages haut-niveau qui intègre une gestion complète de la mĂ©moire. Ex: Java, Cyclone…
  • utiliser des librairies et des fonctions sĂ©curisĂ©s (fonction strncpy()…, librairie Libsafe) et Ă©viter scanf / strcpy / gets
  • tester son code avec des logiciels spĂ©cialisĂ© comme Qaudit ou Flawfinder
  • Appliquer rapidement les correctifs
Des bulletins d’alerte sont rĂ©gulièrement publiĂ©s, annonçant la vulnĂ©rabilitĂ© de certaines applications Ă  des attaques par dĂ©bordement de tampon. Suite Ă  ces bulletins d’alerte, les Ă©diteurs des logiciels touchĂ©s par la vulnĂ©rabilitĂ© publient gĂ©nĂ©ralement des correctifs (patchs) permettant de corriger la faille. Tout administrateur système et rĂ©seau se doit de se tenir informĂ© des alertes de sĂ©curitĂ© et d’appliquer le plus rapidement possible les correctifs.
Partagez nous !