Vous êtes sur la page 1sur 120

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

LArt de la Scurit Informatique


une [trop] brve introduction

Nicolas Bernard
Universit du Luxembourg
<n.bernard@lafraze.net>

Janvier 2005

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Quest-ce que la scurit ? Domaines de recherche

Quest-ce que la scurit ?

Maintenir un systme informatique en tat de fonctionner normalement ; Buts : Restreindre laccs certaines informations aux utilisateurs autoriss les consulter.

Il peut y avoir des contradictions !

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Quest-ce que la scurit ? Domaines de recherche

Principaux domaines de recherche

Rseaux ; systmes dexploitation ; programmation ; cryptologie ; logique ; architecture ; etc.

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Quest-ce que la scurit ? Domaines de recherche

Sommaire

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

La scurit est un compromis Scurit par lobscurit Systmes de scurit en parallle Systmes de scurit en srie Htrognit : Darwin et la scurit Compartimenter

Sommaire
1 2

Prsentation Gnrale Quelques grands principes de scurit La scurit est un compromis Scurit par lobscurit Systmes de scurit en parallle Systmes de scurit en srie Htrognit : Darwin et la scurit Compartimenter Problmes logiciels Conclusion
Nicolas Bernard LArt de la Scurit Informatique

3 4

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

La scurit est un compromis Scurit par lobscurit Systmes de scurit en parallle Systmes de scurit en srie Htrognit : Darwin et la scurit Compartimenter

La scurit est un compromis. Bruce Schneier

Principe On ne peut pas tout avoir, il faut faire des choix, la scurit nest quun des choix possibles. Scurit

Efcacit
Nicolas Bernard

Convivialit
LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

La scurit est un compromis Scurit par lobscurit Systmes de scurit en parallle Systmes de scurit en srie Htrognit : Darwin et la scurit Compartimenter

Principe La Scurit par lObscurit ne marche pas ! Consquence (Loi de Kerckhoffs, 1883) Un cryptosystme devrait tre sr mme sil est totalement public, lexception de la clef. Consquence La scurit dun systme ne doit pas dpendre du client.

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

La scurit est un compromis Scurit par lobscurit Systmes de scurit en parallle Systmes de scurit en srie Htrognit : Darwin et la scurit Compartimenter

Principe La Scurit par lObscurit ne marche pas ! Consquence (Loi de Kerckhoffs, 1883) Un cryptosystme devrait tre sr mme sil est totalement public, lexception de la clef. Consquence La scurit dun systme ne doit pas dpendre du client.

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

La scurit est un compromis Scurit par lobscurit Systmes de scurit en parallle Systmes de scurit en srie Htrognit : Darwin et la scurit Compartimenter

Principe La Scurit par lObscurit ne marche pas ! Consquence (Loi de Kerckhoffs, 1883) Un cryptosystme devrait tre sr mme sil est totalement public, lexception de la clef. Consquence La scurit dun systme ne doit pas dpendre du client. Exemple: le systme de protection des DVD-videos

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

La scurit est un compromis Scurit par lobscurit Systmes de scurit en parallle Systmes de scurit en srie Htrognit : Darwin et la scurit Compartimenter

Une chane est aussi forte que son maillon le plus faible. sagesse populaire

Principe Si diffrents mcanismes de scurit jouent le mme rle, le systme est aussi sr que le plus faible de ces mcanismes. Exemple Un ordinateur auquel on peut se connecter soit via un mot de passe ; via un lecteur dempreintes digitales.
Nicolas Bernard LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

La scurit est un compromis Scurit par lobscurit Systmes de scurit en parallle Systmes de scurit en srie Htrognit : Darwin et la scurit Compartimenter

Une chane est aussi forte que son maillon le plus faible. sagesse populaire

Principe Si diffrents mcanismes de scurit jouent le mme rle, le systme est aussi sr que le plus faible de ces mcanismes. Exemple Un ordinateur auquel on peut se connecter soit via un mot de passe ; via un lecteur dempreintes digitales.
Nicolas Bernard LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

La scurit est un compromis Scurit par lobscurit Systmes de scurit en parallle Systmes de scurit en srie Htrognit : Darwin et la scurit Compartimenter

Remember this security mantra: defense in depth Fyodor, on nmap-hackers, 2004-11-23

Principe (Dfense en profondeur) Utiliser plusieurs couches de scurit permet lune dchouer sans compromettre tout le systme. Exemple Un rseau protg par un rewall dont chaque machine est sre en elle-mme ; le rseau interne est chiffr ; etc.
Nicolas Bernard LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

La scurit est un compromis Scurit par lobscurit Systmes de scurit en parallle Systmes de scurit en srie Htrognit : Darwin et la scurit Compartimenter

Remember this security mantra: defense in depth Fyodor, on nmap-hackers, 2004-11-23

Principe (Dfense en profondeur) Utiliser plusieurs couches de scurit permet lune dchouer sans compromettre tout le systme. Exemple Un rseau protg par un rewall dont chaque machine est sre en elle-mme ; le rseau interne est chiffr ; etc.
Nicolas Bernard LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

La scurit est un compromis Scurit par lobscurit Systmes de scurit en parallle Systmes de scurit en srie Htrognit : Darwin et la scurit Compartimenter

Principe (diversit) Des systmes identiques sont vulnrables des attaques grande chelle contre leurs caractristiques communes. Exemple Les vers et virus informatiques exploitent ces facteurs.

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

La scurit est un compromis Scurit par lobscurit Systmes de scurit en parallle Systmes de scurit en srie Htrognit : Darwin et la scurit Compartimenter

Principe (Sparation des pouvoirs) Une entit (programme, utilisateur, . . . ) devrait avoir accs et uniquement ce dont elle a besoin (informations, pouvoirs, ressources, . . . ) pour accomplir sa tche. Exemple Sparation excutif / lgislatif / judiciaire. Exemple Droits daccs sur un systme dexploitation.

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

La scurit est un compromis Scurit par lobscurit Systmes de scurit en parallle Systmes de scurit en srie Htrognit : Darwin et la scurit Compartimenter

Principe (Sparation des pouvoirs) Une entit (programme, utilisateur, . . . ) devrait avoir accs et uniquement ce dont elle a besoin (informations, pouvoirs, ressources, . . . ) pour accomplir sa tche. Exemple Sparation excutif / lgislatif / judiciaire. Exemple Droits daccs sur un systme dexploitation.

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

La scurit est un compromis Scurit par lobscurit Systmes de scurit en parallle Systmes de scurit en srie Htrognit : Darwin et la scurit Compartimenter

Principe (Sparation des pouvoirs) Une entit (programme, utilisateur, . . . ) devrait avoir accs et uniquement ce dont elle a besoin (informations, pouvoirs, ressources, . . . ) pour accomplir sa tche. Exemple Sparation excutif / lgislatif / judiciaire. Exemple Droits daccs sur un systme dexploitation.

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Sommaire
1 2 3

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Conclusion

buffer-overows format strings race conditions injections de code

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Penser la scurit pendant la conception ! La rajouter aprs sera au mieux difcile ! Exemple (e-mail) Condentialit : relativement facile ajouter (OpenPGP, S/MIME) Intimit des relations : beaucoup plus difcile (mixmaster, etc) Protection contre le dni de service et les envois indsirs : impossible ajouter ?

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Penser la scurit pendant la conception ! La rajouter aprs sera au mieux difcile ! Exemple (e-mail) Condentialit : relativement facile ajouter (OpenPGP, S/MIME) Intimit des relations : beaucoup plus difcile (mixmaster, etc) Protection contre le dni de service et les envois indsirs : impossible ajouter ?

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Penser la scurit pendant la conception ! La rajouter aprs sera au mieux difcile ! Exemple (e-mail) Condentialit : relativement facile ajouter (OpenPGP, S/MIME) Intimit des relations : beaucoup plus difcile (mixmaster, etc) Protection contre le dni de service et les envois indsirs : impossible ajouter ?

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Penser la scurit pendant la conception ! La rajouter aprs sera au mieux difcile ! Exemple (e-mail) Condentialit : relativement facile ajouter (OpenPGP, S/MIME) Intimit des relations : beaucoup plus difcile (mixmaster, etc) Protection contre le dni de service et les envois indsirs : impossible ajouter ?

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Penser la scurit pendant la conception ! La rajouter aprs sera au mieux difcile ! Exemple (e-mail) Condentialit : relativement facile ajouter (OpenPGP, S/MIME) Intimit des relations : beaucoup plus difcile (mixmaster, etc) Protection contre le dni de service et les envois indsirs : impossible ajouter ?

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Keep It Simple, Stupid !


Chaque chose doit tre rendue aussi simple que possible, mais pas trop simple Albert Einstein

Principe (KISS : Keep It Simple, Stupid) origine dans la philosophie Unix ; un programme fait une seule chose, mais il la fait bien. Limites : hypothse implicite : il est facile de dire si une chose simple est sre ; les interactions entres des choses simples peuvent devenir complexes !
Nicolas Bernard LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Keep It Simple, Stupid !


Chaque chose doit tre rendue aussi simple que possible, mais pas trop simple Albert Einstein

Principe (KISS : Keep It Simple, Stupid) origine dans la philosophie Unix ; un programme fait une seule chose, mais il la fait bien. Limites : hypothse implicite : il est facile de dire si une chose simple est sre ; les interactions entres des choses simples peuvent devenir complexes !
Nicolas Bernard LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Le buffer-overow

Famille des dbordements de tampons (ou buffer-overows) : sans doute celle ayant provoqu le plus de failles de scurit ; ancienne :
risque peru depuis les annes 1960 ! utilise par lInternet Worm de 1988 ;

bien connue depuis 1996 ; tend aujourdhui disparatre (?).

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Le buffer-overow

Famille des dbordements de tampons (ou buffer-overows) : sans doute celle ayant provoqu le plus de failles de scurit ; ancienne :
risque peru depuis les annes 1960 ! utilise par lInternet Worm de 1988 ;

bien connue depuis 1996 ; tend aujourdhui disparatre (?).

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Programme charg en mmoire (simpli)

Texte
v

Le segment de texte Il contient les instructions ; Il a gnralement les permissions lecture et excution.

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Programme charg en mmoire (simpli)

Texte

Donnes
v

Le segment de donnes Il contient les variables statiques ou globales ; note : lexcutable sur le disque stocke gnralement dans deux segments distincts, data et bss les donnes selon quelles sont initialises ou non.

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Programme charg en mmoire (simpli)

Texte

Donnes

Tas
v

Le tas (heap) Cest l que se trouve la place alloue par malloc(3) ; Il grandit vers les adresses plus hautes.

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Programme charg en mmoire (simpli)

Texte

Donnes

Tas

Pile
v

La pile (stack) Contient les informations temporaires, les variables automatiques, les paramtres de fonctions, etc ; elle grandit vers le bas, vers le tas.

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Que se passe-til lors dun appel de fonction ?


int foobar(int a, int b) { . . . return c; } int main() { . . . a = foobar(32,52); . . . }
Nicolas Bernard LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Que se passe-til lors dun appel de fonction ?


foobar: push %ebp mov %esp, %ebp sub $4, %esp . . . leave ret main: . . . mov $52, (%esp) mov $32, (%esp) call foobar . . .
Nicolas Bernard LArt de la Scurit Informatique

X Y EBP

ESP

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Que se passe-til lors dun appel de fonction ?


foobar: push %ebp mov %esp, %ebp sub $4, %esp . . . leave ret main: . . . mov $52, (%esp) mov $32, (%esp) call foobar . . .
Nicolas Bernard LArt de la Scurit Informatique

X Y $52 EBP

ESP

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Que se passe-til lors dun appel de fonction ?


foobar: push %ebp mov %esp, %ebp sub $4, %esp . . . leave ret main: . . . mov $52, (%esp) mov $32, (%esp) call foobar . . .
Nicolas Bernard LArt de la Scurit Informatique

X Y $52 $32 EBP

ESP

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Que se passe-til lors dun appel de fonction ?


foobar: push %ebp mov %esp, %ebp sub $4, %esp . . . leave ret main: . . . mov $52, (%esp) mov $32, (%esp) call foobar . . .
Nicolas Bernard

X Y $52 $32 Adresse de retour EBP

ESP

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Que se passe-til lors dun appel de fonction ?


foobar: push %ebp mov %esp, %ebp sub $4, %esp . . . leave ret main: . . . mov $52, (%esp) mov $32, (%esp) call foobar . . .
Nicolas Bernard

X Y $52 $32 Adresse de retour $X EBP

ESP

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Que se passe-til lors dun appel de fonction ?


foobar: push %ebp mov %esp, %ebp sub $4, %esp . . . leave ret main: . . . mov $52, (%esp) mov $32, (%esp) call foobar . . .
Nicolas Bernard

X Y $52 $32 Adresse de retour $X EBP

ESP

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Que se passe-til lors dun appel de fonction ?


foobar: push %ebp mov %esp, %ebp sub $4, %esp . . . leave ret main: . . . mov $52, (%esp) mov $32, (%esp) call foobar . . .
Nicolas Bernard

X Y $52 $32 Adresse de retour $X EBP

ESP

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Que se passe-til lors dun appel de fonction ?


foobar: push %ebp mov %esp, %ebp sub $4, %esp . . . leave ret main: . . . mov $52, (%esp) mov $32, (%esp) call foobar . . .
Nicolas Bernard

X Y $52 $32 Adresse de retour $X EBP

ESP

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Que se passe-til lors dun appel de fonction ?


foobar: push %ebp mov %esp, %ebp sub $4, %esp . . . leave ret main: . . . mov $52, (%esp) mov $32, (%esp) call foobar . . .
Nicolas Bernard

X Y $52 $32 Adresse de retour $X EBP

ESP

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Que se passe-til lors dun appel de fonction ?


foobar: push %ebp mov %esp, %ebp sub $4, %esp . . . leave ret main: . . . mov $52, (%esp) mov $32, (%esp) call foobar . . .
Nicolas Bernard

X Y $52 $32 Adresse de retour $X EBP

ESP

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Que se passe-til lors dun appel de fonction ?


foobar: push %ebp mov %esp, %ebp sub $4, %esp . . . leave ret main: . . . mov $52, (%esp) mov $32, (%esp) call foobar . . .
Nicolas Bernard

X Y $52 $32 Adresse de retour $X EBP

ESP

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Que se passe-til lors dun appel de fonction ?


foobar: push %ebp mov %esp, %ebp sub $4, %esp . . . leave ret main: . . . mov $52, (%esp) mov $32, (%esp) call foobar . . .
Nicolas Bernard

X Y $52 $32 Adresse de retour $X EBP

ESP

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Que se passe-til lors dun appel de fonction ?


foobar: push %ebp mov %esp, %ebp sub $4, %esp . . . leave ret main: . . . mov $52, (%esp) mov $32, (%esp) call foobar . . .
Nicolas Bernard

X Y $52 $32 Adresse de retour EBP

ESP

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Que se passe-til lors dun appel de fonction ?


foobar: push %ebp mov %esp, %ebp sub $4, %esp . . . leave ret main: . . . mov $52, (%esp) mov $32, (%esp) call foobar . . .
Nicolas Bernard LArt de la Scurit Informatique

X Y EBP

ESP

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Stack Smashing !
Principe : si une fonction contient un tableau automatique local, il est plac sur la pile ;

gestion de la fonction

Adresse de retour

Tableau local

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Stack Smashing !
Principe : si une fonction contient un tableau automatique local, il est plac sur la pile ; si la mme fonction fait une copie dedans sans vrier sa taille (ex : strcpy(3)), on crase le reste de la pile ;

gestion de la fonction

Adresse de retour

Tableau local

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Stack Smashing !
Principe : si une fonction contient un tableau automatique local, il est plac sur la pile ; si la mme fonction fait une copie dedans sans vrier sa taille (ex : strcpy(3)), on crase le reste de la pile ;

gestion de la fonction

Adresse de retour

Tableau local

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Stack Smashing !
Principe : si une fonction contient un tableau automatique local, il est plac sur la pile ; si la mme fonction fait une copie dedans sans vrier sa taille (ex : strcpy(3)), on crase le reste de la pile ;

gestion de la fonction

Adresse de retour

Tableau local

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Stack Smashing !
Principe : si une fonction contient un tableau automatique local, il est plac sur la pile ; si la mme fonction fait une copie dedans sans vrier sa taille (ex : strcpy(3)), on crase le reste de la pile ;

gestion de la fonction

Adresse de retour

Tableau local

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Stack Smashing !
Principe : si une fonction contient un tableau automatique local, il est plac sur la pile ; si la mme fonction fait une copie dedans sans vrier sa taille (ex : strcpy(3)), on crase le reste de la pile ;

gestion de la fonction

Adresse de retour

Tableau local

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Stack Smashing !
Principe : si une fonction contient un tableau automatique local, il est plac sur la pile ; si la mme fonction fait une copie dedans sans vrier sa taille (ex : strcpy(3)), on crase le reste de la pile ;

gestion de la fonction

Adresse de retour

Tableau local

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Stack Smashing !
Principe : si une fonction contient un tableau automatique local, il est plac sur la pile ; si la mme fonction fait une copie dedans sans vrier sa taille (ex : strcpy(3)), on crase le reste de la pile ;

gestion de la fonction

Adresse de retour

Tableau local

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Stack Smashing !
Principe : si une fonction contient un tableau automatique local, il est plac sur la pile ; si la mme fonction fait une copie dedans sans vrier sa taille (ex : strcpy(3)), on crase le reste de la pile ;

gestion de la fonction

Adresse de retour

Tableau local

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Stack Smashing !
Principe : si une fonction contient un tableau automatique local, il est plac sur la pile ; si la mme fonction fait une copie dedans sans vrier sa taille (ex : strcpy(3)), on crase le reste de la pile ;

gestion de la fonction

Adresse de retour

Tableau local

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Stack Smashing !
Principe : si une fonction contient un tableau automatique local, il est plac sur la pile ; si la mme fonction fait une copie dedans sans vrier sa taille (ex : strcpy(3)), on crase le reste de la pile ;

gestion de la fonction

Adresse de retour

Tableau local

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Stack Smashing !
Principe : si une fonction contient un tableau automatique local, il est plac sur la pile ; si la mme fonction fait une copie dedans sans vrier sa taille (ex : strcpy(3)), on crase le reste de la pile ;

gestion de la fonction

Adresse de retour

Tableau local

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Stack Smashing !
Principe : si une fonction contient un tableau automatique local, il est plac sur la pile ; si la mme fonction fait une copie dedans sans vrier sa taille (ex : strcpy(3)), on crase le reste de la pile ;

gestion de la fonction

Adresse de retour

Tableau local

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Stack Smashing !
Principe : si une fonction contient un tableau automatique local, il est plac sur la pile ; si la mme fonction fait une copie dedans sans vrier sa taille (ex : strcpy(3)), on crase le reste de la pile ;

gestion de la fonction

Adresse de retour

Tableau local

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Stack Smashing !
Principe : si une fonction contient un tableau automatique local, il est plac sur la pile ; si la mme fonction fait une copie dedans sans vrier sa taille (ex : strcpy(3)), on crase le reste de la pile ;

gestion de la fonction

Adresse de retour

Tableau local

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Stack Smashing !
Principe : si une fonction contient un tableau automatique local, il est plac sur la pile ; si la mme fonction fait une copie dedans sans vrier sa taille (ex : strcpy(3)), on crase le reste de la pile ;

gestion de la fonction

Adresse de retour

Tableau local

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Stack Smashing !
Principe : si une fonction contient un tableau automatique local, il est plac sur la pile ; si la mme fonction fait une copie dedans sans vrier sa taille (ex : strcpy(3)), on crase le reste de la pile ;

gestion de la fonction

Adresse de retour

Tableau local

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Stack Smashing !
Principe : si une fonction contient un tableau automatique local, il est plac sur la pile ; si la mme fonction fait une copie dedans sans vrier sa taille (ex : strcpy(3)), on crase le reste de la pile ;

gestion de la fonction

Adresse de retour

Tableau local

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Stack Smashing !
Principe : si une fonction contient un tableau automatique local, il est plac sur la pile ; si la mme fonction fait une copie dedans sans vrier sa taille (ex : strcpy(3)), on crase le reste de la pile ;

gestion de la fonction

Adresse de retour

Tableau local

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Stack Smashing !
Principe : si une fonction contient un tableau automatique local, il est plac sur la pile ; si la mme fonction fait une copie dedans sans vrier sa taille (ex : strcpy(3)), on crase le reste de la pile ; on peut donc remplacer ladresse de retour de la fonction par celle dun morceau de code (shellcode) arbitraire.
gestion de la fonction Adresse de retour Tableau local

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Stack Smashing !
Problmes : placer le shellcode dans lespace dadressage du processus ; connatre ladresse o il se trouve.
shellcode pointeurs sur le buffer Adresse de retour landing pad Tableau local gestion de la fonction

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Solution 1: placer un canari sur la pile


Avantages : fonctionne avec toutes les architectures ; ne dpend pas du systme dexploitation ; Inconvnients : il est souvent possible de la contourner ; ncessite une recompilation des programmes ; baisse des performances (vrications durant lexcution) ; certains programmes exotiques ne marchent pas. Mthode actuellement utilise : gcc (patches Propolice, StackGuard, etc), MS Visual C, etc.
Nicolas Bernard LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Solution 1: placer un canari sur la pile


Avantages : fonctionne avec toutes les architectures ; ne dpend pas du systme dexploitation ; Inconvnients : il est souvent possible de la contourner ; ncessite une recompilation des programmes ; baisse des performances (vrications durant lexcution) ; certains programmes exotiques ne marchent pas. Mthode actuellement utilise : gcc (patches Propolice, StackGuard, etc), MS Visual C, etc.
Nicolas Bernard LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Solution 1: placer un canari sur la pile


Avantages : fonctionne avec toutes les architectures ; ne dpend pas du systme dexploitation ; Inconvnients : il est souvent possible de la contourner ; ncessite une recompilation des programmes ; baisse des performances (vrications durant lexcution) ; certains programmes exotiques ne marchent pas. Mthode actuellement utilise : gcc (patches Propolice, StackGuard, etc), MS Visual C, etc.
Nicolas Bernard LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Contourner cette solution


Dans certains cas, il est possible de contourner le canari : Exemple : un pointeur sur la pile ; deux strcpy (ou autres fonctions non sres) ; le deuxime strcpy copie ladresse indique par p ;
char* foobar() { int i = 0; char* p = (char*) malloc(1024); char tmpbuf[1024]; char toto = getchar(stdin); while (toto != \n) { tmpbuf[i++] = toto; toto = getchar(stdin); } if (validate(tmpbuf)) strcpy(p, tmpbuf); . . . return p; } Nicolas Bernard LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Contourner cette solution


Dans certains cas, il est possible de contourner le canari : Exemple : un pointeur sur la pile ; deux strcpy (ou autres fonctions non sres) ; le deuxime strcpy copie ladresse indique par p ;
char* foobar() { int i = 0; char* p = (char*) malloc(1024); char tmpbuf[1024]; char toto = getchar(stdin); while (toto != \n) { tmpbuf[i++] = toto; toto = getchar(stdin); } if (validate(tmpbuf)) strcpy(p, tmpbuf); . . . return p; } Nicolas Bernard LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

gestion de la fonction tmpbuf

Adresse de retour

variables locales

canari pointeur local

on utilise le premier strcpy pour faire pointer p sur la position de ladresse de retour; on change ladresse de retour sans toucher au canari avec le second strcpy.

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

gestion de la fonction tmpbuf

Adresse de retour

variables locales

canari pointeur local

on utilise le premier strcpy pour faire pointer p sur la position de ladresse de retour; on change ladresse de retour sans toucher au canari avec le second strcpy.

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

gestion de la fonction tmpbuf

Adresse de retour

variables locales

canari pointeur local

on utilise le premier strcpy pour faire pointer p sur la position de ladresse de retour; on change ladresse de retour sans toucher au canari avec le second strcpy.

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Solution 2: rendre la pile non excutable


Avantages : pratiquement pas de pertes de performances ; ne ncessite pas de recompilation ; Inconvnients : ncessite un support du processeur ; ncessite un support du systme ; certains programmes ne marchent pas. Mthode en cours dadoption : OpenBSD (intgr, W X), Linux (patch PAX) sur AMD64, alpha, sparc, etc..

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Solution 2: rendre la pile non excutable


Avantages : pratiquement pas de pertes de performances ; ne ncessite pas de recompilation ; Inconvnients : ncessite un support du processeur ; ncessite un support du systme ; certains programmes ne marchent pas. Mthode en cours dadoption : OpenBSD (intgr, W X), Linux (patch PAX) sur AMD64, alpha, sparc, etc..

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Solution 2: rendre la pile non excutable


Avantages : pratiquement pas de pertes de performances ; ne ncessite pas de recompilation ; Inconvnients : ncessite un support du processeur ; ncessite un support du systme ; certains programmes ne marchent pas. Mthode en cours dadoption : OpenBSD (intgr, W X), Linux (patch PAX) sur AMD64, alpha, sparc, etc..

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Et si on utilise un langage volu ?


Les langages volus surveillent la mmoire pour le programmeur : Perl : modie la taille des tableaux dynamiquement ; Caml, Java : exceptions en cas de dpassement. Le risque est donc faible ! Attention ! Des bugs dans les compilateurs rintroduisent parfois de telles failles !

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Et si on utilise un langage volu ?


Les langages volus surveillent la mmoire pour le programmeur : Perl : modie la taille des tableaux dynamiquement ; Caml, Java : exceptions en cas de dpassement. Le risque est donc faible ! Attention ! Des bugs dans les compilateurs rintroduisent parfois de telles failles !

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

format string vulnerabilities


Problme identi rcemment : 1999 ; dans les chanes de format de fonctions comme printf(3) ; se pose si lattaquant peut contrler la chane de format. Rappel : %x permet dafcher un type entier en hexadcimal ; ajouter un nombre comme dans %12x permet de spcier le nombre de caractres imprims ; dans printf("foobar%n", &i), %n stocke le nombre de caractres imprims (jusquici) dans i.

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

format string vulnerabilities


Problme identi rcemment : 1999 ; dans les chanes de format de fonctions comme printf(3) ; se pose si lattaquant peut contrler la chane de format. Rappel : %x permet dafcher un type entier en hexadcimal ; ajouter un nombre comme dans %12x permet de spcier le nombre de caractres imprims ; dans printf("foobar%n", &i), %n stocke le nombre de caractres imprims (jusquici) dans i.

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

format string vulnerabilities


Problme identi rcemment : 1999 ; dans les chanes de format de fonctions comme printf(3) ; se pose si lattaquant peut contrler la chane de format. Rappel : %x permet dafcher un type entier en hexadcimal ; ajouter un nombre comme dans %12x permet de spcier le nombre de caractres imprims ; dans printf("foobar%n", &i), %n stocke le nombre de caractres imprims (jusquici) dans i.

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

format string vulnerabilities


Problme identi rcemment : 1999 ; dans les chanes de format de fonctions comme printf(3) ; se pose si lattaquant peut contrler la chane de format. Rappel : %x permet dafcher un type entier en hexadcimal ; ajouter un nombre comme dans %12x permet de spcier le nombre de caractres imprims ; dans printf("foobar%n", &i), %n stocke le nombre de caractres imprims (jusquici) dans i.

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Comment fonctionne printf(3) ?

printf parcourt la chane de gauche droite ; chaque %, on regarde le caractre suivant et on interprte largument suivant sur la pile en consquence.

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

crire en mmoire

Que fait printf (ABCD%08x%08x%n); ? Principe : utiliser des %x pour remonter jusqu lemplacement du dbut de la chane sur la pile ; mettre une adresse ABCD au dbut de la chane ; %n interprte alors cette adresse comme lendroit o il doit crire...

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

crire en mmoire

Que fait printf (ABCD%08x%08x%n); ? Principe : utiliser des %x pour remonter jusqu lemplacement du dbut de la chane sur la pile ; mettre une adresse ABCD au dbut de la chane ; %n interprte alors cette adresse comme lendroit o il doit crire...

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

crire en mmoire

Que fait printf (ABCD%08x%08x%n); ? Principe : utiliser des %x pour remonter jusqu lemplacement du dbut de la chane sur la pile ; mettre une adresse ABCD au dbut de la chane ; %n interprte alors cette adresse comme lendroit o il doit crire...

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

crire en mmoire

Que fait printf (ABCD%08x%08x%n); ? Principe : utiliser des %x pour remonter jusqu lemplacement du dbut de la chane sur la pile ; mettre une adresse ABCD au dbut de la chane ; %n interprte alors cette adresse comme lendroit o il doit crire...

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Retour dans libc...


. . . ou que faire quand on ne peut pas excuter la pile ? Lide est dcrire dans la Global Offset Table. dnprintf(buf, n, data); le = fopen(buf, r): remplacer le pointer sur fopen(3) par un pointeur sur system(3) ; mettre en dbut de chane la commande excuter, par exemple: cd /tmp; cp /bin/sh; chmod 4777 sh; exit;ABCD%08x.
Nicolas Bernard LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Retour dans libc...


. . . ou que faire quand on ne peut pas excuter la pile ? Lide est dcrire dans la Global Offset Table. dnprintf(buf, n, data); le = fopen(buf, r): remplacer le pointer sur fopen(3) par un pointeur sur system(3) ; mettre en dbut de chane la commande excuter, par exemple: cd /tmp; cp /bin/sh; chmod 4777 sh; exit;ABCD%08x.
Nicolas Bernard LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Retour dans libc...


. . . ou que faire quand on ne peut pas excuter la pile ? Lide est dcrire dans la Global Offset Table. dnprintf(buf, n, data); le = fopen(buf, r): remplacer le pointer sur fopen(3) par un pointeur sur system(3) ; mettre en dbut de chane la commande excuter, par exemple: cd /tmp; cp /bin/sh; chmod 4777 sh; exit;ABCD%08x.
Nicolas Bernard LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

Retour dans libc...


. . . ou que faire quand on ne peut pas excuter la pile ? Lide est dcrire dans la Global Offset Table. dnprintf(buf, n, data); le = fopen(buf, r): remplacer le pointer sur fopen(3) par un pointeur sur system(3) ; mettre en dbut de chane la commande excuter, par exemple: cd /tmp; cp /bin/sh; chmod 4777 sh; exit;ABCD%08x.
Nicolas Bernard LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

les race conditions par lexemple


Contexte : utilisateur lambda ( uid) ; programme setuid root ( euid) ; le programme doit modier un chier de lutilisateur.

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

les race conditions par lexemple


Contexte : utilisateur lambda ( uid) ; programme setuid root ( euid) ; le programme doit modier un chier de lutilisateur. Dans le programme :
if (access(lename, W_OK) == 0) { if ((fd = open(lename, O_WRONLY)) == NULL) { perror(lename); return(0); } /* crire dans le chier */

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

les race conditions par lexemple


Attaque : lambda stoppe le processus entre laccess(2) et le open(2) ; lambda remplace le chier lename par un lien symbolique sur un autre chier ; lambda relance le processus, qui ouvrira avec succs le chier en criture. Solutions (?) :

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

les race conditions par lexemple


Attaque : lambda stoppe le processus entre laccess(2) et le open(2) ; lambda remplace le chier lename par un lien symbolique sur un autre chier ; lambda relance le processus, qui ouvrira avec succs le chier en criture. Solutions (?) :

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

les race conditions par lexemple


Attaque : lambda stoppe le processus entre laccess(2) et le open(2) ; lambda remplace le chier lename par un lien symbolique sur un autre chier ; lambda relance le processus, qui ouvrira avec succs le chier en criture. Solutions (?) :

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

les race conditions par lexemple


Attaque : lambda stoppe le processus entre laccess(2) et le open(2) ; lambda remplace le chier lename par un lien symbolique sur un autre chier ; lambda relance le processus, qui ouvrira avec succs le chier en criture. Solutions (?) :

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

les race conditions par lexemple


Attaque : lambda stoppe le processus entre laccess(2) et le open(2) ; lambda remplace le chier lename par un lien symbolique sur un autre chier ; lambda relance le processus, qui ouvrira avec succs le chier en criture. Solutions (?) : inverser lordre de access et de open.

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

les race conditions par lexemple


Attaque : lambda stoppe le processus entre laccess(2) et le open(2) ; lambda remplace le chier lename par un lien symbolique sur un autre chier ; lambda relance le processus, qui ouvrira avec succs le chier en criture. Solutions (?) : inverser lordre de access et de open. N E CHANGE RIEN !

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

les race conditions par lexemple


Attaque : lambda stoppe le processus entre laccess(2) et le open(2) ; lambda remplace le chier lename par un lien symbolique sur un autre chier ; lambda relance le processus, qui ouvrira avec succs le chier en criture. Solutions (?) : utiliser un access qui fonctionne sur les le descriptors.

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

les race conditions par lexemple


Attaque : lambda stoppe le processus entre laccess(2) et le open(2) ; lambda remplace le chier lename par un lien symbolique sur un autre chier ; lambda relance le processus, qui ouvrira avec succs le chier en criture. Solutions (?) : utiliser un access qui fonctionne sur les le descriptors. = Ncessite un changement dans le noyau...

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

les race conditions par lexemple


Attaque : lambda stoppe le processus entre laccess(2) et le open(2) ; lambda remplace le chier lename par un lien symbolique sur un autre chier ; lambda relance le processus, qui ouvrira avec succs le chier en criture. Solutions (?) : utiliser un access qui fonctionne sur les le descriptors. = Ncessite un changement dans le noyau... abandonner les privilges root avant le open.

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

les race conditions par lexemple


Attaque : lambda stoppe le processus entre laccess(2) et le open(2) ; lambda remplace le chier lename par un lien symbolique sur un autre chier ; lambda relance le processus, qui ouvrira avec succs le chier en criture. Solutions (?) : utiliser un access qui fonctionne sur les le descriptors. = Ncessite un changement dans le noyau... abandonner les privilges root avant le open. = Peut ncessiter des modications de larchitecture du programme.
Nicolas Bernard LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

SQL Injections

SQL est un langage pour interroger des bases de donnes ; Une application (ex : page web dynamique) peut lutiliser pour accder une base de donnes. Imaginons que la requte soit faite ainsi :
$res = request_sql("SELECT login FROM users WHERE login = $login AND password = $pass");

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

SQL Injections

SQL est un langage pour interroger des bases de donnes ; Une application (ex : page web dynamique) peut lutiliser pour accder une base de donnes. Imaginons que la requte soit faite ainsi :
$res = request_sql("SELECT login FROM users WHERE login = $login AND password = $pass");

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

SQL Injections

SQL est un langage pour interroger des bases de donnes ; Une application (ex : page web dynamique) peut lutiliser pour accder une base de donnes. Imaginons que la requte soit faite ainsi :
$res = request_sql("SELECT login FROM users WHERE login = $login AND password = $pass");

Un utilisateur malicieux entre comme mot de passe toto OR 1=1 !

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Erreurs de conception Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation : Erreurs dimplmentation :

buffer-overows format strings race conditions injections de code

SQL Injections

SQL est un langage pour interroger des bases de donnes ; Une application (ex : page web dynamique) peut lutiliser pour accder une base de donnes. Imaginons que la requte soit faite ainsi :
$res = request_sql("SELECT login FROM users WHERE login = $login AND password = $pass");

Un utilisateur malicieux entre comme mot de passe toto OR 1=1 ! Moralit : Ne jamais faire conance aux donnes externes !

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Questions ? Bibliographie

Sommaire

1 2 3 4

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion Questions ? Bibliographie

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Questions ? Bibliographie

Pense dabord, utilise lordinateur ensuite. Ian Stewart Rchir beaucoup lemporte sur rchir peu, et plus encore sur ne pas rchir du tout. Sun Zi

Pas de scurit absolue ; programmes srs : condition ncessaire ; mesures simples = attaques beaucoup plus difciles ;
Se faire battre est excusable, se faire surprendre impardonnable. Napolon

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Questions ? Bibliographie

Pense dabord, utilise lordinateur ensuite. Ian Stewart Rchir beaucoup lemporte sur rchir peu, et plus encore sur ne pas rchir du tout. Sun Zi

Pas de scurit absolue ; programmes srs : condition ncessaire ; mesures simples = attaques beaucoup plus difciles ;
Se faire battre est excusable, se faire surprendre impardonnable. Napolon

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Questions ? Bibliographie

Pense dabord, utilise lordinateur ensuite. Ian Stewart Rchir beaucoup lemporte sur rchir peu, et plus encore sur ne pas rchir du tout. Sun Zi

Pas de scurit absolue ; programmes srs : condition ncessaire ; mesures simples = attaques beaucoup plus difciles ;
Se faire battre est excusable, se faire surprendre impardonnable. Napolon

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Questions ? Bibliographie

Pense dabord, utilise lordinateur ensuite. Ian Stewart Rchir beaucoup lemporte sur rchir peu, et plus encore sur ne pas rchir du tout. Sun Zi

Pas de scurit absolue ; programmes srs : condition ncessaire ; mesures simples = attaques beaucoup plus difciles ;
Se faire battre est excusable, se faire surprendre impardonnable. Napolon

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Questions ? Bibliographie

Des questions ?

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Questions ? Bibliographie

Quelques rfrences bibliographiques. . .

Ross A NDERSON. Security Engineering. Wiley Computer Publishing. John Wiley & Sons, Inc, 2001.

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Questions ? Bibliographie

Quelques rfrences bibliographiques. . .

Aleph1. Smashing the stack for fun and prot. Phrack, 7(49), 1996. Larticle qui a expos au grand jour le Buffer Overow.

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Questions ? Bibliographie

Quelques rfrences bibliographiques. . .

Cyrus P EIKARI and Anton C HUVAKIN. Security Warrior. OReilly, 2004. Couvre superciellement un large panorama de mthodes dattaques.

Nicolas Bernard

LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Questions ? Bibliographie

Quelques rfrences bibliographiques. . .


Bruce S CHNEIER. Beyond Fear, Thinking Sensibly about Security in an Uncertain World. Copernicus Books, 2003. Lexprience de la scurit informatique applique au monde rel...
Nicolas Bernard LArt de la Scurit Informatique

Prsentation Gnrale Quelques grands principes de scurit Problmes logiciels Conclusion

Questions ? Bibliographie

Quelques autres rfrences.... . .


B ULBA and K IL 3 R. Bypassing stackguard and stackshield. Phrack, 10(56), 2000. Peter VAN DER L INDEN. Expert C Programming Deep C Secrets. SunSoft Press / Prentice Hall, 1994. David A. Wheeler. Secure Programming for Linux and Unix HOWTO, 3.010 edition, Mars 2003. http://www.dwheeler.com/secure-programs.
Nicolas Bernard LArt de la Scurit Informatique

Vous aimerez peut-être aussi