Vous êtes sur la page 1sur 19

Olivier Crte

Les dbordements de tampons sur les systmes Unix

Mmoire prsent lOrganisation du baccalaurat international

Collge FranoisXavierGarneau Qubec 22 janvier 2001

Prcis Depuis les dbuts de linformatique, la scurit proccupe les concepteurs de systmes. Les dbordements de tampons1 sont de loin le problme le plus criant dans le domaine de la scurit informatique. La majorit des problmes de scurit dcouverts dans les dernires annes sur les systmes Unix sont causs par des dbordements de tampons. Il est donc important de comprendre leur fonctionnement et les mthodes employes par les attaquants malicieux pour les exploiter. Les mthodes pour se protger contre leurs effets seront prsentes et compares afin de trouver des solutions ce problme. Ils peuvent se produire aussi bien dans la pile que dans dautres sections de la mmoire, mme si ceux se produisant dans la pile sont les plus communes, les plus exploites et les plus tudies. Il existe plusieurs manires de rduire les risques associs aux dbordements de tampons. La mthode la plus efficace est la vrification manuelle, mais celleci tant longue et coteuse des outils automatiss ont t invents pour aider le vrificateur. Ces outils peuvent aussi bien tre des outils danalyse statique que des outils de vrification dynamique, reconnaissant les dbordements de tampons ds quils se produisent. La vrification manuelle tant malheureusement aussi souvent imparfaite, des compilateurs spciaux ont t crs pour tenter de protger les logiciels contre les consquences des dbordements de tampons. Ils tentent de sassurer que ceuxci deviennent impossible exploiter ou, tout le moins, que le programme puisse tre arrt en toute scurit. Il existe enfin des solutions cres pour protger les systmes contre les logiciels pour lesquels le code source nest pas disponible. Ce sont des bibliothques modifies protgeant les fonctions standards contre les dbordements de tampons et aussi une modification du noyau empchant lexcution dinstructions partir de la pile.

1 De langlais buffer overflows, selon selon Le grand dictionnaire terminologique.

3 Table des matires Prcis.....................................................................................................................................2 Introduction............................................................................................................................4 1. Le problme.......................................................................................................................6 1.1 Concepts de base.........................................................................................................6 1.2 Types dattaques..........................................................................................................6 1.2.1 Attaques de la pile................................................................................................6 1.2.2 Autres attaques.....................................................................................................8 2. Les solutions....................................................................................................................10 2.1 La vrification manuelle............................................................................................10 2.2 Les outils de protection automatiss...........................................................................12 Conclusion...........................................................................................................................16 Bibliographie........................................................................................................................17

4 Introduction Depuis les dbuts de linformatique, la scurit proccupe les concepteurs de systmes. Dj durant les annes 60, les concepteurs de systmes mettaient laccent sur les diffrents moyens de protger les systmes informatiques contre les attaques extrieures. Lapparition de grands rseaux informatiques publics, en particulier lInternet, a rendu la vie plus facile aux attaquants malicieux. La plupart de ces attaques sont faites en profitant derreurs de programmation dans les logiciels employs. La gravit du problme ne doit pas tre sousestime: le Computer Security Institute de San Franscisco fait un sondage annuel. En 2000, cette socit a sond 643 experts en scurit travaillant dans les secteurs priv et public o 74% de ces compagnies ont subi des pertes financires cause dintrusions dans leur systme: le total slve 265 millions de dollars amricains en lan 2000, alors que la moyenne des trois annes prcdentes tait de 120 millions1. Dans la dernire dcennie, le type le plus commun derreur2 ayant caus des intrusions sont des dbordements de tampons. Ce type de problme se retrouve sur presque tous les systmes informatiques utiliss, il dcoule de la faon dont plusieurs langages informatiques ont t conus, en particulier le C et ses descendants. Ltude des dbordements de tampons et de leurs solutions nous permettra donc de dterminer les solutions privilgies qui doivent tre adoptes par les administrateurs de systmes et les programmeurs pour rduire les intrusions dans les systmes informatiques. Le systme Unix est le systme pour lequel le C a t invent et ses descendants dominent toujours les serveurs, surtout sur lInternet. Ils sont la principale cible des attaques par les braqueurs informatiques3. Ltude des dbordements de tampons sera donc limite aux systmes Unix cause de leur grande popularit et lexistence dune abondante documentation sur leur fonctionnement interne et de lexistence de plusieurs versions libres4. Bien que diffrentes solutions automatises aient t proposes pour rgler les problmes de
1 2 3 4 Computer Security Institute, Ninety percent of survey respondents detect cyber attacks. SANS Institute. Curmudgeons Executive Summary. De langlais cracker, selon Le grand dictionnaire terminologique. Lexpression libre est ici employ dans le sens dfini par la Free Software Foundation (http://www.fsf.org). Cestdire, libre comme la libert dexpression dans son sens le plus dmocratique.

5 dbordement de tampons, aucune de ces mthodes nest capable de donner un rsultat aussi efficace que la vrification manuelle du code scuriser. Aprs avoir expliqu les dbordements de tampons et les diffrentes manires de les exploiter, quils soient situs dans la pile ou dans un autre segment de mmoire1, il devient alors possible de discuter des solutions automatises qui soffrent au programmeur et ladministrateur de systme et dexpliquer leurs avantages et leurs inconvnients.

1 Par exemple, dans le heap qui ne possde pas de traduction plus prcise.

6 1. Le problme Un tampon est une rgion de la mmoire utilise pour emmagasiner des donnes. Dans le langage C, la reprsentation la plus commune dun tampon est le tableau1, cest dire la rptition de plusieurs lments identiques, le plus souvent des octets ou caractres pour former des chanes de texte. En C, une chane de caractres se termine par un octet nul et traditionnellement la plupart des fonctions oprant sur les chanes de caractres se fient cet octet nul pour en connatre la fin. Par exemple, la fonction strcpy()2 accepte comme argument un pointeur vers le dbut dun tampon vide et le dbut dun tampon contenant une chane de caractres et copie le contenu du second dans le premier jusqu atteindre loctet nul. Dans des conditions normales, le tampon vide est assez grand pour contenir la chane en entier, mais sil est trop petit, alors ce qui suit ce tampon dans la mmoire sera aussi cras par la chane de caractres. La chane dborde alors lextrieur du tampon et il est ainsi possible de modifier le contenu de la zone de mmoire qui suit le tampon dune faon non prvue par le programmeur. La zone de la mmoire qui est le plus souvent attaque est la pile. Elle fonctionne la manire dun LIFO3, cestdire dernier entr, premier sorti , on ajoute les informations sur le dessus de la pile et on les retire au mme endroit. Sur la plupart des architectures les plus communes (par exemple, x86, SPARC, MIPS, Alpha)4, la pile crot du haut vers le bas, cestdire que le dessus a une adresse
1 2 3 4

Adresses suprieures

Adresse de retour sens de la chane Pointeur vers la section prcdente Variable 1 Variable 2 Tampon 1 Tampon 2 croissance de la pile

Adresses infrieures
Illustration 1 La pile dun logiciel sur Linux (ou un autre systme Unix) sur un processeur de type x86

De langlais array, selon Le grand dictionnaire terminologique. Linux Programmers Manual, version du 11 avril 1993. De langlais Last In, First Out, selon Le grand dictionnaire terminologique. Evan Thomas. Attack Class: Buffer Overflows.

7 infrieure au dessous. Quand une fonction est appele, une nouvelle section1 est cre sur la pile, on pousse ladresse de la prochaine instruction excuter dans la fonction appelante, puis ladresse de la base de la section prcdente dans la pile et enfin on y cre les variables locales la fonction. Une de ces variables locales peut tre un tampon; si les donnes crites dpassaient la longueur du tampon et dbordaient, cela affecterait dabord les variables qui le suivent et ensuite cela pourrait modifier ladresse de retour.2 Cest l que rside le danger. Ladresse de retour ayant t modifie, le programme, la fin de lexcution de la fonction, tentera de retourner la fonction prcdente en lisant linstruction ladresse spcifie. Si cette adresse ne fait pas partie de la mmoire alloue ce logiciel, le noyau3 arrtera lexcution du logiciel. Par contre, si cette adresse tait valide, lordinateur continuerait excuter les instructions partir de ce point. Il ne reste plus lattaquant qu insrer un morceau de code excuter. Ce type dattaque requiert donc deux tapes, linsertion du code tranger et son activation4. La mthode la plus simple consiste mettre le code dans le tampon luimme sil est assez grand ou de le mettre aprs le tampon sil nest pas assez grand et quil y assez de place aprs celuici. On peut aussi placer le code dans un autre tampon, mme si celuici nest pas situ dans la pile. Le but de ce genre dattaque est donc de contrler le flux de commande du logiciel et ainsi excuter des instructions autres que celles dsires par le propritaire du systme. Le type dinstructions excutes varie, mais le plus souvent il sagit de ce que lon appelle le shellcode 5, cestdire quelques instructions qui remplacent le contenu du processus6 par lexcution dune coquille7. Il est aussi possible douvrir un mcanisme dchange8 si le logiciel attaqu est un serveur et que lon na donc pas accs son entre standard9, et
1 2 3 4 5 6 7 8 9 En anglais, ces sections sont des stack frames. Aleph One, Smashing The Stack for Fun And Profit. De langlais kernel, selon Le grand dictionnaire terminologique. Crispin Cowan et al. StackGuard: Automatic Adaptive Detection and Prevention of BufferOverflow Attacks, p. 2. La version la plus utilise dun tel shellcode est celle publie par Aleph One dans son article Smashing The Stack for Fun And Profit. De langlais process, selon Le grand dictionnaire terminologique. De langlais shell, selon Le grand dictionnaire terminologique, un logiciel qui interprte des commandes. De langlais socket, selon Le grand dictionnaire terminologique. De langlais stdin (standard input), selon Le grand dictionnaire terminologique.

8 remplacer son entre standard par ce mcanisme dchange1. Mais cette technique est plus complique et requiert plus de codes et plus de travail de la part du lattaquant, mais elle permet dexploiter des vulnrabilits distance sur des systmes ayant trs peu de services ouverts ou mme un seul, par exemple un serveur HTTP ou un serveur de courrier. Dautres attaques ne visent pas changer les instructions excutes, mais uniquement modifier les donnes. Le Internet Worm ou Morris Worm , du nom de son auteur, est le premier virus capable de se dplacer via lInternet et il aurait utilis ce type dattaque2. Il remplaait le nom du logiciel excut par fingerd. Celuici avait /usr/ucb/finger dans sa mmoire comme programme excuter, le Morris Worm le remplaait par /bin/sh en remplissant un tampon et en dbordant jusqu la fin de la pile, le nom du programme excuter tant aprs la fin de celleci, il obtenait donc ainsi une coquille dont lentre et la sortie standard taient connectes sur un mcanisme dchange. Il est possible dutiliser ce genre dattaque pour modifier toutes sortes de donnes prsentes dans la mmoire aprs un tampon do il est possible de faire dborder des donnes3. Par exemple, sil y a un tampon de 32 octets pour contenir le nom de lusager suivi dun autre tampon qui contient un mot de passe, on peut dborder du nom de lusager et craser le mot de passe pour le modifier et ainsi avoir accs au systme. Il peut aussi modifier le nom de lusager ou son numro pour obtenir des privilges plus levs4. Ce type dattaque o on change des donnes peut tre utilis sur la pile, mais lest plus frquemment quand le dbordement a lieu ailleurs que sur la pile, dans une autre partie de la mmoire. Ces autres parties de la mmoire sont le plus souvent la section contenant les variables statiques initialises et noninitialises (BSS), et le segment de mmoire5 allou dynamiquement6. Ces sections contiennent uniquement des donnes et sont donc identiques si elles sont considres du point de vue des dbordements de tampons. Sur Unix, la mmoire rserve un logiciel est divise en plusieurs morceaux, parmi ceuxci, il y a la
1 2 3 4 5 6 Taeho Oh. Advanced buffer overflow exploits. Bob Page. A Report On The Internet Worm. Matt Conover. w00w00 on Heap Overflows. Ces exemples sont pris presque textuellement de Matt Conover. w00w00 on Heap Overflows. De langlais heap, selon Le grand dictionnaire terminologique. Par exemple les variables dont lespace est cre par malloc en C ou new en C++.

9 pile, dont il a t question, puis la section contenant le programme luimme, que lon appelle aussi text1 . Il y a aussi les donnes initialises qui sont prises directement dans le fichier excutable quand le logiciel est charg dans la mmoire et la zone contenant des donnes noninitialises (ou BSS2) dont seuls les symboles identifiant le contenu sont chargs, mais dont le contenu est initialis zro par le noyau au chargement du programme. Ces diffrentes zones contiennent toutes des donnes et peuvent, bien sr, contenir des tampons. On peut donc aussi dborder de ces tampons, on peut changer le contenu de certaines parties de la mmoire et remplacer les donnes que cette mmoire contient. En C et en C++, ces sections de la mmoire peuvent souvent contenir des pointeurs vers des fonctions3, ces pointeurs permettent lexistence de fonctions qui peuvent tre remplaces, par exemple laide de plugiciel4. Quand le programme appelle la fonction et passe par ce pointeur, il excute alors les instructions partir de lendroit point, exactement comme ladresse de retour dans la pile. Si lon peut modifier ce pointeur, il est alors possible de modifier le flux de commande et de forcer le logiciel excuter des instructions qui ont t mises quelque part dans la mmoire du logiciel, il est ainsi possible dexcuter un shellcode ou quelque autre code. Les dbordements de tampons prsentent donc de nombreuses facettes et il est possible de les utiliser de plusieurs manires des fins malicieuses. Ils peuvent se produire partout o il peut y avoir des tampons, cestdire dans presque toute la mmoire contenant des donnes. Il existe diverses mthodes pour les exploiter pour pntrer le primtre de scurit dun systme et ainsi le compromettre.

1 2 3 4

Tirunelveli J. Sundar. Unix processes. id. Traduction libre de fonction pointer. De langlais plugin, selon Le grand dictionnaire terminologique.

10 2. Les solutions Diffrentes solutions soffrent aux problmes poss par les dbordements de tampons. Ceuxci tant la principale cause dintrusions dans les systmes informatiques lheure actuelle, de nombreuses quipes dans le monde se sont penches sur diffrentes solutions. Il y a dabord un point de vue radical qui consiste rejeter le C et le C++ et proposer dautres langages qui vrifient les tampons tels le Fortran, le Java ou le ADA; mais il est utopique de croire que les millions de lignes de code dj crites puissent tre remplaces. Il existe plusieurs autres solutions, certaines ncessitent laccs au code source comme la vrification manuelle ou laide doutils danalyse statique et dynamique. Il est aussi possible dutiliser des compilateurs modifis protgeant le programme partiellement ou totalement contre les dbordements. Il y a aussi dautres solutions, ne ncessitant pas daccs au code source, qui ont pour but de diminuer les risques et de rendre plus difficile lexploitation de ces dbordements des fins malicieuses, sans les liminer. Entre autres, lusage de fonctions standards modifies et de certaines modifications au noyau permettent de rduire limpact des dbordements de tampons. La mthode la plus commune et srement la plus efficace pour liminer les

problmes de dpassement de capacit est la vrification manuelle par des humains de chaque ligne des logiciels scuriser. Il est aussi important dutiliser des techniques de programmation favorisant la scurit1: par exemple, limiter au minimum la taille des logiciels ncessitant des privilges et limiter ces privilges leur niveau minimal. Il est galement important de dfinir les interfaces de manire trs prcise et de vrifier toute entre de donnes pour sassurer quelles entrent strictement dans les normes nonces. Lusage de logiciels dont le code source est public semble aussi tre trs avantageux, car ceuxci sont plus souvent vrifis par des individus autres que les auteurs, ceuxl peuvent ainsi dcouvrir les erreurs avant quelles ne deviennent problmatiques. Ces logiciels semblent donc afficher un niveau de qualit beaucoup plus lev que leur

1 Peter Galvin. The Unix Secure Programming FAQ.

11 contrepartie dont le code source reste cach1. Le projet OpenBSD2, qui vise crer le systme dexploitation le plus scuritaire possible et dont les membres vrifient manuellement chaque ligne du systme, na dailleurs pas eu de trou de scurit exploitable distance dans les trois dernires annes3. Il est donc vident que la vrification manuelle donne dexcellents rsultats. Mais cette mthode est trs coteuse en main doeuvre ce qui a entran la cration doutils pouvant faciliter ce genre de travail. Il existe plusieurs types doutils permettant daider le vrificateur dans son travail danalyse du logiciel en lui permettant de dcouvrir les trous de scurit potentiels. Il existe tout dabord des outils danalyse statique. Par exemple, laide de modles synthtiques crs partir du code source des logiciels, il est possible de dtecter certains dbordements de tampons quil aurait t impossible de trouver sans laide de tels outils. Il en est ainsi des erreurs o le tampon est dbord dune seule unit qui sont particulirement difficiles reprrer et cest alors que ce genre doutil montre toute sa force4. Malheureusement, il est trs difficile de crer un modle complet et correct de la plupart des logiciels. Wagner et al. utilisent une mthode simplifie qui ne vrifie pas certains cas et qui laisse donc passer des erreurs; elle introduit un trs grand nombre de fausses alertes, les essais effectus montrent quenviron une erreur rapporte sur dix est relle et que le reste sont des erreurs dapproximation de leur systme. Il serait galement possible de rendre leur systme plus complet et leur analyse plus prcise, mais cela requerrait une puissance de calcul beaucoup plus importante5. Cette mthode ne peut donc se substituer une vrification manuelle et peut, au mieux, laider, mais plus probablement lui nuire car cela incite le vrificateur ne pas vrifier attentivement le reste du programme et danalyser toutes les erreurs potentielles quune analyse automatise naurait pas t en mesure de dtecter. Il existe aussi des outils dynamiques qui vrifient les dbordements de tampons pendant lexcution du logiciel. Le plus connu est probablement Purify de Rational6, qui est disponible sur la plupart des versions commerciales de Unix (Solaris/SPARC, HPUX, SGI
1 2 3 4 5 Miller, Fredrickson et al. An Empirical Study in the Reliability of UNIX utilities. OpenBSD. Selon leur page web (http://www.openbsd.org) et ce en date du 17 janvier 2001. David Wagner et al. A First Step Towards Automated Detection of Buffer Overrun Vulnerabilities, p.2. id. p. 5.

12 IRIX et Siemens Reliant Unix). Ce logiciel vrifie en temps rel chaque appel vers un tampon et vrifie si le pointeur ne sort pas du tampon appel. videmment, excuter un logiciel lintrieur dun tel systme impose une importante rduction de la vitesse du logiciel et ne peut tre utilis que dans un contexte de dbogage. Il existe aussi une version modifie de GCC (GNU C Compiler)1 qui introduit du code dans chaque programme pour vrifier chaque accs un tampon. Un tel compilateur modifie donc le programme pour ajouter du code supplmentaire qui vrifie chaque accs un tampon et arrte le programme immdiatement si un pointeur ne pointe plus vers un endroit valide. Cela permet donc de dtecter facilement les dbordements de tampons. Cet outil est class parmi les outils de dbogage plutt que dans la catgorie suivante, celle des compilateurs protecteurs, parce quun programme sur lequel il est utilis ralentit de cinq six fois2. Ce genre de technique dynamique ne peut dcouvrir des dbordements que sils se produisent, elle ne peut pas trouver les dbordements lors de squences inhabituelles quune analyse statique pourrait trouver: celleci vrifiant lensemble des possibilits thoriques sans gard leur utilisation. Les auteurs de cette version modifie de GCC proposent dutiliser leur compilateur sur le produit final pour ainsi empcher tous les dbordements, au moins pour les applications les plus sensibles, mais cela est peu pratique. Il existe dautres compilateurs modifis qui permettent de rduire les dbordements de tampons ou, tout le moins, de rendre leur exploitation plus difficile tout en ayant un effet beaucoup moins important sur la vitesse. Ces compilateurs modifis tentent de rduire limpact sur la performance des logiciels: les auteurs de StackGuard affirment navoir aucun impact mesurable3 sur Apache4 et sshd5. Celuici est bas, comme tous les autres compilateurs qui offrent ce genre de fonctions, sur GCC. StackGuard place une variable juste
6 Rational, Rational Purify for Unix. 1 partir de la version 3, GCC veut dire GNU Compiler Collection car il supporte maintenant de nombreux langages autres que le C (entre autres le C++, le Objective C, le Java et le Fortran) . La page web officielle est situe http://gcc.gnu.org 2 Jones, R. W. M. et Kelly, P. H. J. Backwardscompatible bounds checking for arrays and pointers in C programs, p. 9. 3 Crispin Cowan et al. Protecting Systems from Stack Smashing Attacks with StackGuard, p. 67. 4 Serveur Web le plus populaire, ayant une part de march denviron 60% selon The Netcraft Web Server Survey. 5 SSH (Secure Shell) est un remplacement scuritaire pour rsh (Remote Shell) et est un des lments critiques de la scurit de trs nombreux sites.

13 avant ladresse de retour, cette variable peut contenir deux diffrents types de valeurs, il peut tre soit un finisseur1, cestdire un caractre quil est impossible de mettre dans une chane de caractres, soit une valeur alatoire. Cette variable est appele canari et on ne peut donc arriver jusqu ladresse de retour en dbordant dun tampon sans craser ce canari. Lorsque quune fonction se termine, le logiciel vrifie ce canari avant de sauter vers ladresse de retour et le compare la valeur attendue; si le canari a t modifi, le programme est alors arrt2. Cette mthode est trs efficace pour empcher lexploitation des tampons situs dans la pile. Par contre, elle ne protge pas des attaques dans une autre partie de la mmoire ou dune attaque qui ne tente pas de modifier ladresse de retour. Il est aussi possible dexploiter un logiciel compil avec StackGuard dans certains cas sil y a un pointeur situ aprs le tampon. Si un pointeur suit un tampon vulnrable et que ce pointeur sera utilis pour copier des donnes qui peuvent aussi tre modifies (ou copier des donnes partir dun autre pointeur qui peut lui aussi tre modifi), il est alors possible dcraser uniquement ladresse de retour; ou, tout le moins, de la modifier en vitant de toucher au canari rendant la mthode de StackGuard inoprante. Une quipe de IBM situe au Japon propose une mthode pour rgler ce problme; aussi elle a teste cette mthode grce sa propre version modifie de GCC et qui semble base sur celle de StackGuard. Non seulement insreelle un canari avant ladresse de retour comme StackGuard, mais de plus, elle modifie lordre des variables dans la mmoire pour placer les tampons aprs tous les pointeurs, rendant ainsi impossible de modifier un pointeur laide dun dbordement dans la pile3. Par contre, cette mthode nest pas efficace contre les dbordements qui se produisent dans le segment de mmoire o des tampons peuvent tre allous de manire dynamique4. Il existe aussi un troisime type de compilateur modifi. Le groupe ayant produit ce compilateur a galement bas son travail sur GCC; cependant, il utilise une mthode
1 De langlais terminator, selon Le grand dictionnaire terminologique. 2 Crispin Cowan et al. StackGuard: Automatic Adaptive Detection and Prevention of BufferOverflow Attacks. 3 Hiroaki Etoh et Kunikazu Yoda, Protecting from stacksmashing attack, section 4.2. 4 id, section 4.4.

14 diffrente: elle ne tente pas de dtecter les attaques une fois quelle se sont produites ou de les rendre impossible, elle tente plutt de les rendre inoprantes. Pour ce faire, chaque fois quune fonction est appele, une copie de ladresse de retour est enregistre dans une table situe au tout dbut de la mmoire et qui nest donc prcde daucun tampon. Il est par consquent impossible de modifier cette table laide dun dbordement. la fin de lexcution de la fonction, ladresse de retour situe dans cette table est compare la valeur situe dans la pile. Si elles sont diffrentes, il peut, soit arrter le programme, soit craser la valeur situe dans la pile et continuer lexcution du logiciel comme si aucun vnement ne stait produit1. Cette mthode est par contre sensible aux mmes attaques que celles qui ont t proposes contre StackGuard, cestdire que si un pointeur peut tre modifi, il sera alors possible de modifier cette table et ladresse de retour situe dans la pile et ainsi prendre le contrle du programme. Toutes les mthodes exposes prcdemment requiert laccs au code source des logiciels. Il existe malheureusement encore certains logiciels pour lesquels cela est impossible. Dautres mthodes ont alors t proposes pour tenter doffrir un certain degr de protection aux logiciels pour lesquels le code source nest pas disponible. La premire et la plus ancienne de ces mthodes est de rendre impossible lexcution de codes partir de la pile. Il existe une option sur les versions rcentes de Solaris2 et il existe aussi une rustine3 pour Linux produite par Solar Designer4. La plupart des microprocesseurs permettent de donner des permissions chaque rgion de la mmoire, en particulier, de spcifier sil est permis de lire, dcrire ou dexcuter le contenu dun morceau de la mmoire. Par exemple, il est habituellement impossible dcrire dans la rgion contenant la portion excutable dun logiciel5. De la mme manire, il a t propos de rendre le contenu de la pile non excutable, il devient alors impossible dinsrer le code malicieux. Il est trs facile de contourner cette protection en le mettant dans une autre partie de la mmoire o en utilisant du code dj prsent dans la mmoire du logiciel6. Le principal avantage de cette mthode est
1 2 3 4 5 6 Vendicator, Stack Shield: A "stack smashing" technique protection tool for Linux. John McDonald, Defeating Solaris/SPARC NonExecutable Stack Protection. De langlais patch, selon Le grand dictionnaire terminologique. OpenWall Project, Linux kernel patch from the Openwall project. En anglais, cest le text. Rafal Wojtczuk, Defeating Solar Designers Nonexecutable Stack Patch.

15 de rendre inoprant la plupart des logiciels prfabriqus pour exploiter les trous connus; tant que son usage ne sera pas rpandu, la plupart des attaquants passeront probablement au prochain ordinateur plutt que de tenter dattaquer un systme protg ainsi. Il a t constat1 que la grande majorit des dbordements de tampons sont causs par lusage inappropri de certaines fonctions standards qui nont pas t conues en tenant compte dventuels problmes de dbordements de tampons. Ces fonctions sont: strcpy(), strcat(), getwd(), gets(), realpath(), scanf(), fscanf(), sscanf() et sprintf()2. Il existe des remplacements scuriss tels strncpy()3 que les programmeurs devraient employer au lieu des versions traditionnelles. Malheureusement, cellesci sont souvent encore trop utilises. Il a donc t propos de les rcrire de manire ce quelles ne permettent pas de dpasser la fin de sa section de la pile et ne puissent ainsi corrompre ladresse de retour4. Cela permet donc de rduire le nombre dattaques. Cette mthode a par contre des limites importantes5. Tout dabord, pour que cette mthode russisse, il faut que le pointeur vers la section prcdente soit prsent dans la section actuelle, car cest grce lui que le dbut de la section est repre, certains compilateurs peuvent lliminer lors de leur optimisation. Il faut galement que ces fonctions ne soient pas inclues dans le programme, mais appeles partir de bibliothques dynamiques. Et videmment, elle ne protge que contre lusage inappropri de certains fonctions et non contre lensemble des dbordements de tampons.

1 Navjot Singh, Arash Baratloo et Timothy Tsai. Transparent RunTime Defense Against Stack Smashing Attack. 2 Ainsi que vscanf(), vfscanf(), vsscanf() et vsprintf(). 3 Linux Documentation Project. Linux Programmers Manual, scanf(3). 4 Arash Baratloo, Timothy Tsai, et Navjot Singh. Libsafe: Protecting Critical Elements of Stacks. 5 Crispin Cowan et Perry Wagle, Re: libsafe.

16 Conclusion Le problme pos par les dbordements de tampons est central la scurit des systmes informatiques modernes. Ils permettent de prendre le contrle du flux de commande des logiciels et ainsi de compromettre les systmes. Ils peuvent aussi permettre de modifier les donnes et de les corrompre. Il est heureusement possible de les arrter. Quelques mthodes existent pour protger les logiciels dont le code source nest pas public, mais ces mthodes ont un effet limit. La plupart des techniques de protection requirent laccs au code source. Bien que les diffrentes techniques proposes incluent gnralement la compilation des logiciels, ce ne sont en fait que des bquilles pour pallier les erreurs de programmation. La seule mthode vraiment efficace est celle qui consiste trouver et rgler ces erreurs par une vrification manuelle complte et exhaustive de tous les aspects sensibles du systme. En fait, les logiciels dont le code source est public sont habituellement de meilleure qualit1 que leurs concurrents commerciaux. Cette grande qualit serait due la plus grande prsence de contrle par les pairs2. Lerreur tant le propre de lhomme, il est peu probable que les dbordements de tampons disparaissent tant que des langages peu sr seront utiliss, mais en publiant le code source, la qualit des logiciels pourra samliorer et offrir une plus grande scurit pour tous.

1 Miller, Fredrickson et al., Fuzz revisited: A Reexamination of the Reliability of UNIX Utilities and Services, p. 6. 2 Eric S. Raymond. The Cathedral & the Bazaar, ch. 4.

17 Bibliographie Aleph One. Smashing the Stack for Fun and Profit, Phrack, Volume 7, Numro 49, 8 novembre 1996. Bakke, Peat, etSteve Beattie, Crispin Cowan, Aaron Grier, Heather Hinton, Dave Maier, Calton Pu, Perry Wagle, Jonathan Walpole et Qian Zhang. StackGuard: Automatic Adaptive Detection and Prevention of BufferOverflow Attacks, Oregon Graduate Institute of Science & Technology, 1997. Baratloo, Arash et Timothy Tsai, et Navjot Singh. Libsafe: Protecting Critical Elements of Stacks, Page web [visite le 8 janvier 2001], http://www.bell labs.com/org/11356/libsafe.html Beattie, Steve et Crispin Cowan, Calton Pu , Perry Wagle etJonathan Walpole. Attacks and Defenses for the Vulnerability of the Decade, Oregon Graduate Institute of Science & Technology, 2000. Bulba et Kil3r. Bypassing StackGuard and StackShield, Phrack, Volume 10, Numro 56, 1er mai 2000. Computer Security Institute, Ninety percent of survey respondents detect cyber attacks, 273 organizations report $265,589,940 in financial losse, 22 mars 2000, San Francisco. Conover, Matt (a.k.a. Shok) & w00w00 Security Team. w00w00 on Heap Overflows, Page web [visite le 8 janvier 2001], http://www.w00w00.org/files/articles/heaptut.txt Cowan, Crispin, et Steve Beattie, Ryan Finnin Day, Calton Pu, Perry Wagle, et Erik Walthinse. Protecting Systems from Stack Smashing Attacks with StackGuard, Oregon Graduate Institute of Science & Technology, 1999. Cowan, Crispin et Perry Wagle. Re: libsafe, securityaudit@ferret.lmh.ox.ac.uk (25 avril 2000). Etoh, Hiroaki et Kunikazu Yoda. Protecting from stacksmashing attack, IBM Research Division, Tokyo Research Laboratory, Yamato, 2000. Free Software Foundation, GNUs Not Unix, Page web [visite le 17 janvier 2001], http://www.fsf.org Galvin, Peter. The Unix Secure Programming FAQ, 1998, Page web [visite le 7 janvier 2001], http://www.sunworld.com/sunworldonline/swol081998/swol08security.html GCC Team. GCC Home Page, page web [visite le 20 janvier 2001], http://gcc.gnu.org

18 Jones, R. W. M. etKelly, P. H. J. Backwardscompatible bounds checking for arrays and pointers in C program, Imperial College of Technology, Science etMedice, London, 1997. Kirch, Olaf. Re: libsafe, securityaudit@ferret.lmh.ox.ac.uk (25 avril 2000). Lefty. Buffer Overruns, whats the real story?, Page web [visite le 8 janvier 2001], http://julianor.tripod.com/stackhistory.txt Linux Documentation Project, Linux Programmers Manual, 2000. McDonald, John. Defeating Solaris/SPARC NonExecutable Stack Protection, 2 mars 2000, Page web [visite le 7 janvier 2001], http://julianor.tripod.com/nonexecstacksol.html Miller, Fredrickson et al. Fuzz revisited: A Reexamination of the Reliability of UNIX Utilities and Services, University of Wisconsin, Madisson, 2000. Mudge @ l0pth. How to write Buffer Overflows, 20 octobre 1995, Page web [visite le 9 janvier 2001], http://www.insecure.org/stf/mudge_buffer_overflow_tutorial.html Netcraft, The Netcraft Web Server Survey, dcembre 2000, page web [visite le 7 janvier 2001], http://www.netcraft.com/survey Office de la langue franaise. Le grand dictionnaire terminologique, Qubec, Page web [visite le 12 janvier 2001], http://www.granddictionnaire.com OpenBSD, OpenBSD, Page web [visite le 17 janvier 2001], http://www.openbsd.org/ Openwall Project. Linux kernel patch from the Openwall Project, Page web [visite le 8 janvier 2001], http://www.openwall.com/linux/ Page, Bob. A Report on the Internet Worm, University of Lowell, Lowell, 7 novembre 1988. Prym. finding and exploiting programs with buffer overflows, Page web [visite le 7 janvier 2001], http://destroy.net/machines/security/buffer.txt Rational. Rational Purify for Unix, page web [visite le 8 janvier 2001], http://www.rational.com/products/purify_unix/index.jsp Raymond, Eric S. The Cathedral & the Bazaar, OReilly etAssoociates, Cambridge, 1999, 279 pp. SANS Institute. Curmudgeons Executive Summary, The SANS Network Security Digest, volume 1, numro 5, 23 juin 1997. Singh, Navjot et Arash Baratloo et Timothy Tsai. Transparent RunTime Defense Against Stack Smashing Attack, Bell Labs Reseach, Murray Hill, 2000.

19 Smith, Nathan P. Stack Smashing Vulnerabilities in the UNIX Operating System, Southern Connecticut State University, New Haven, 1997. Sundar, Tirunelveli J. Unix processe, Page web [visite le 10 janvier 2001], http://www.employees.org/~tjsundar/html/tutorials/unixprocesses.html Taeho Oh. Advanced buffer overflow exploits, Page web [visite le 7 janvier 2001], http://www.securityfocus.com/data/library/advanced.txt Thomas, Evan. Attack Class: Buffer Overflows, avril 2000, Page web [visite le 10 janvier 2001], http://students.ou.edu/W/Amos.P.Waterland1/wellspring/buffer_overflow.html Vendicator, Stack Shield: A "stack smashing" technique protection tool for Linux, 2000, Page web [visite le 10 janvier 2001], http://www.angelfire.com/sk/stackshield/info.html Wagner, David et Jeffrey S. Foster, Eric A. Brewer et Alexander Aiken. A First Step Towards Automated Detection of Buffer Overrun Vulnerabilities, University of California, Berkeley, 2000 WireX Communications, StackGuard, Page web [visite le 7 janvier 2001], http://www.immunix.org/stackguard.html Wojtczuk, Rafal. Defeating Solar Designers Nonexecutable Stack Patch, bugtraq@netspace.org, 30 janvier 1998.

Vous aimerez peut-être aussi