Formation S´ ecurit´ e Applicative
1 - Introduction
Romain Malmain
net7 & Pony7
Octobre 2020
Plan de la pr´ esentation
1 Plan du cours
2 Fonctionnement des s´eances
3 Br`eve explication de ce qu’est un Buffer Overflow avec quelques exemples
4 Quelques questions sur les effets d’un BOF
5 Fin de l’introduction
Plan de la pr´ esentation
1 Plan du cours
2 Fonctionnement des s´eances
3 Br`eve explication de ce qu’est un Buffer Overflow avec quelques exemples
4 Quelques questions sur les effets d’un BOF
5 Fin de l’introduction
Plan du cours
Introduction et pr´esentation (maintenant)
Installation de l’environnement de travail Langage C / Langage assembleur
Structure interne d’un programme en x86 Construction d’un premier Buffer Overflow Utilisation de GDB
D´etournement d’ex´ecution avec un BOF
Ex´ecution dans la pile / dans le tas : cr´eation d’un exploit de A `a Z Buffer Overflow avanc´e
Plan du cours
Introduction et pr´esentation (maintenant) Installation de l’environnement de travail
Langage C / Langage assembleur
Structure interne d’un programme en x86 Construction d’un premier Buffer Overflow Utilisation de GDB
D´etournement d’ex´ecution avec un BOF
Ex´ecution dans la pile / dans le tas : cr´eation d’un exploit de A `a Z Buffer Overflow avanc´e
Plan du cours
Introduction et pr´esentation (maintenant) Installation de l’environnement de travail Langage C / Langage assembleur
Structure interne d’un programme en x86 Construction d’un premier Buffer Overflow Utilisation de GDB
D´etournement d’ex´ecution avec un BOF
Ex´ecution dans la pile / dans le tas : cr´eation d’un exploit de A `a Z Buffer Overflow avanc´e
Plan du cours
Introduction et pr´esentation (maintenant) Installation de l’environnement de travail Langage C / Langage assembleur
Structure interne d’un programme en x86
Construction d’un premier Buffer Overflow Utilisation de GDB
D´etournement d’ex´ecution avec un BOF
Ex´ecution dans la pile / dans le tas : cr´eation d’un exploit de A `a Z Buffer Overflow avanc´e
Plan du cours
Introduction et pr´esentation (maintenant) Installation de l’environnement de travail Langage C / Langage assembleur
Structure interne d’un programme en x86 Construction d’un premier Buffer Overflow
Utilisation de GDB
D´etournement d’ex´ecution avec un BOF
Ex´ecution dans la pile / dans le tas : cr´eation d’un exploit de A `a Z Buffer Overflow avanc´e
Plan du cours
Introduction et pr´esentation (maintenant) Installation de l’environnement de travail Langage C / Langage assembleur
Structure interne d’un programme en x86 Construction d’un premier Buffer Overflow Utilisation de GDB
D´etournement d’ex´ecution avec un BOF
Ex´ecution dans la pile / dans le tas : cr´eation d’un exploit de A `a Z Buffer Overflow avanc´e
Plan du cours
Introduction et pr´esentation (maintenant) Installation de l’environnement de travail Langage C / Langage assembleur
Structure interne d’un programme en x86 Construction d’un premier Buffer Overflow Utilisation de GDB
D´etournement d’ex´ecution avec un BOF
Ex´ecution dans la pile / dans le tas : cr´eation d’un exploit de A `a Z Buffer Overflow avanc´e
Plan du cours
Introduction et pr´esentation (maintenant) Installation de l’environnement de travail Langage C / Langage assembleur
Structure interne d’un programme en x86 Construction d’un premier Buffer Overflow Utilisation de GDB
D´etournement d’ex´ecution avec un BOF
Ex´ecution dans la pile / dans le tas : cr´eation d’un exploit de A `a Z
Buffer Overflow avanc´e
Plan du cours
Introduction et pr´esentation (maintenant) Installation de l’environnement de travail Langage C / Langage assembleur
Structure interne d’un programme en x86 Construction d’un premier Buffer Overflow Utilisation de GDB
D´etournement d’ex´ecution avec un BOF
Ex´ecution dans la pile / dans le tas : cr´eation d’un exploit de A `a Z Buffer Overflow avanc´e
Plan de la pr´ esentation
1 Plan du cours
2 Fonctionnement des s´eances
3 Br`eve explication de ce qu’est un Buffer Overflow avec quelques exemples
4 Quelques questions sur les effets d’un BOF
5 Fin de l’introduction
S´ eance type
Chaque s´eance travaillera sur un (ou plusieurs) des points pr´esent´es pr´ec´edemment
Les formations seront parsem´ees d’exemples et de TP courts pour rendre les s´eances plus interactives.
TP 1.1
Consigne : Il faut faire...
Les num´eros des TPs correspondront `a l’arborescence dans la VM. Par exemple le TP 1.1 se trouvera dans
∼/Formations/securite applicative/1-introduction/
L’encadr´e contiendra la consigne `a suivre. Habituellement les TP sont simples et rapides `a faire, ils servent juste `a clarifier le propos. Des TPs plus cons´equents seront signal´es par une couleur rouge
TP 1.1
Consigne : Il faut faire...
S´ eance type
Chaque s´eance travaillera sur un (ou plusieurs) des points pr´esent´es pr´ec´edemment
Les formations seront parsem´ees d’exemples et de TP courts pour rendre les s´eances plus interactives.
TP 1.1
Consigne : Il faut faire...
Les num´eros des TPs correspondront `a l’arborescence dans la VM. Par exemple le TP 1.1 se trouvera dans
∼/Formations/securite applicative/1-introduction/
L’encadr´e contiendra la consigne `a suivre. Habituellement les TP sont simples et rapides `a faire, ils servent juste `a clarifier le propos. Des TPs plus cons´equents seront signal´es par une couleur rouge
TP 1.1
Consigne : Il faut faire...
S´ eance type
Chaque s´eance travaillera sur un (ou plusieurs) des points pr´esent´es pr´ec´edemment
Les formations seront parsem´ees d’exemples et de TP courts pour rendre les s´eances plus interactives.
TP 1.1
Consigne : Il faut faire...
Les num´eros des TPs correspondront `a l’arborescence dans la VM.
Par exemple le TP 1.1 se trouvera dans
∼/Formations/securite applicative/1-introduction/
L’encadr´e contiendra la consigne `a suivre. Habituellement les TP sont simples et rapides `a faire, ils servent juste `a clarifier le propos. Des TPs plus cons´equents seront signal´es par une couleur rouge
TP 1.1
Consigne : Il faut faire...
S´ eance type
Chaque s´eance travaillera sur un (ou plusieurs) des points pr´esent´es pr´ec´edemment
Les formations seront parsem´ees d’exemples et de TP courts pour rendre les s´eances plus interactives.
TP 1.1
Consigne : Il faut faire...
Les num´eros des TPs correspondront `a l’arborescence dans la VM.
Par exemple le TP 1.1 se trouvera dans
∼/Formations/securite applicative/1-introduction/
L’encadr´e contiendra la consigne `a suivre. Habituellement les TP sont simples et rapides `a faire, ils servent juste `a clarifier le propos. Des TPs plus cons´equents seront signal´es par une couleur rouge
TP 1.1
Consigne : Il faut faire...
Plan de la pr´ esentation
1 Plan du cours
2 Fonctionnement des s´eances
3 Br`eve explication de ce qu’est un Buffer Overflow avec quelques exemples
4 Quelques questions sur les effets d’un BOF
5 Fin de l’introduction
Explication br` eve
D´efinition
Un buffer Overflow (BOF), c’est avant tout profiter d’une erreur de programmation qui nous permet de lire ou d’´ecrire dans des zones auxquelles ont est pas cens´e acc´eder.
Exemple illustr´e
Ecrire plus de caract`´ eres dans un tableau que la taille qui lui a ´et´e allou´e.
Explication br` eve
D´efinition
Un buffer Overflow (BOF), c’est avant tout profiter d’une erreur de programmation qui nous permet de lire ou d’´ecrire dans des zones auxquelles ont est pas cens´e acc´eder.
Exemple illustr´e
Ecrire plus de caract`´ eres dans un tableau que la taille qui lui a ´et´e allou´e.
Exemple
Cas typique (langage algorithmique)
**code**
Allouer n blocs pour le tableau T
Demander `a l’utilisateur d’entrer une valeur et la stocker dans T (typiquement une chaˆıne de caract`ere)
**code**
TP 0.1 : Effet concret d’un Buffer Overflow
#include <stdio.h>
int main() {
char prenom[16];
printf("Entrez votre pr´enom : "); scanf("%s", &prenom);
printf("Votre pr´enom est %s\n", prenom); return 0;
}
Exemple
Cas typique (langage algorithmique)
**code**
Allouer n blocs pour le tableau T
Demander `a l’utilisateur d’entrer une valeur et la stocker dans T (typiquement une chaˆıne de caract`ere)
**code**
TP 0.1 : Effet concret d’un Buffer Overflow
#include <stdio.h>
int main() {
char prenom[16];
printf("Entrez votre pr´enom : ");
scanf("%s", &prenom);
printf("Votre pr´enom est %s\n", prenom);
Deuxi` eme exemple (plus avanc´ e)
TP 0.2 : Ce qu’on peut arriver `a faire avec un Buffer Overflow bien exploit´e
#include "stdio.h"
#include "string.h"
void get_name(char* name) { char buf[512];
strcpy(buf, name);
printf("Hello, %s !\n", buf);
}
int main(int argc, char* argv[]) { if (argc != 2) {
printf("usage: %s [name]\n", argv[0]);
return 1;
}
get_name(argv[1]);
return 0;
}
Solution que vous serez capable d’appliquer `a la fin du cours Analyse du code / d´etection de la faille
Phase de r´eflexion pour d´eterminer un bon angle d’attaque Ecriture d’un premier brouillon pour tenter d’appliquer notre id´ee Raffinage de la solution avec un debugger `a cˆot´e pour arriver `a quelque chose de fonctionnel
exploiter le programme
TP 0.2 : D´emonstration
Application d’un exploit en python ´ecrit `a la main avec le programme pr´ec´edent (disponible sur le git de la formation).
Solution que vous serez capable d’appliquer `a la fin du cours Analyse du code / d´etection de la faille
Phase de r´eflexion pour d´eterminer un bon angle d’attaque
Ecriture d’un premier brouillon pour tenter d’appliquer notre id´ee Raffinage de la solution avec un debugger `a cˆot´e pour arriver `a quelque chose de fonctionnel
exploiter le programme
TP 0.2 : D´emonstration
Application d’un exploit en python ´ecrit `a la main avec le programme pr´ec´edent (disponible sur le git de la formation).
Solution que vous serez capable d’appliquer `a la fin du cours Analyse du code / d´etection de la faille
Phase de r´eflexion pour d´eterminer un bon angle d’attaque Ecriture d’un premier brouillon pour tenter d’appliquer notre id´ee
Raffinage de la solution avec un debugger `a cˆot´e pour arriver `a quelque chose de fonctionnel
exploiter le programme
TP 0.2 : D´emonstration
Application d’un exploit en python ´ecrit `a la main avec le programme pr´ec´edent (disponible sur le git de la formation).
Solution que vous serez capable d’appliquer `a la fin du cours Analyse du code / d´etection de la faille
Phase de r´eflexion pour d´eterminer un bon angle d’attaque Ecriture d’un premier brouillon pour tenter d’appliquer notre id´ee Raffinage de la solution avec un debugger `a cˆot´e pour arriver `a quelque chose de fonctionnel
exploiter le programme
TP 0.2 : D´emonstration
Application d’un exploit en python ´ecrit `a la main avec le programme pr´ec´edent (disponible sur le git de la formation).
Solution que vous serez capable d’appliquer `a la fin du cours Analyse du code / d´etection de la faille
Phase de r´eflexion pour d´eterminer un bon angle d’attaque Ecriture d’un premier brouillon pour tenter d’appliquer notre id´ee Raffinage de la solution avec un debugger `a cˆot´e pour arriver `a quelque chose de fonctionnel
exploiter le programme
TP 0.2 : D´emonstration
Application d’un exploit en python ´ecrit `a la main avec le programme pr´ec´edent (disponible sur le git de la formation).
Solution que vous serez capable d’appliquer `a la fin du cours Analyse du code / d´etection de la faille
Phase de r´eflexion pour d´eterminer un bon angle d’attaque Ecriture d’un premier brouillon pour tenter d’appliquer notre id´ee Raffinage de la solution avec un debugger `a cˆot´e pour arriver `a quelque chose de fonctionnel
exploiter le programme
TP 0.2 : D´emonstration
Application d’un exploit en python ´ecrit `a la main avec le programme pr´ec´edent (disponible sur le git de la formation).
Plan de la pr´ esentation
1 Plan du cours
2 Fonctionnement des s´eances
3 Br`eve explication de ce qu’est un Buffer Overflow avec quelques exemples
4 Quelques questions sur les effets d’un BOF
5 Fin de l’introduction
Exemple
Quelles questions peut-on se poser ? Une id´ee de ce qu’il s’est pass´e ?
Est-il possible de voir pr´ecis´ement ce qu’il s’est pass´e ?
Si oui, quels outils peuvent nous permettre de comprendre cet effet ? Comment bien s’est servir ?
Peut-on se servir de ¸ca pour faire un peu mieux qu’un crash ? Si oui, comment s’y prendre ?
Exemple
Quelles questions peut-on se poser ? Une id´ee de ce qu’il s’est pass´e ?
Est-il possible de voir pr´ecis´ement ce qu’il s’est pass´e ?
Si oui, quels outils peuvent nous permettre de comprendre cet effet ? Comment bien s’est servir ?
Peut-on se servir de ¸ca pour faire un peu mieux qu’un crash ? Si oui, comment s’y prendre ?
Exemple
Quelles questions peut-on se poser ? Une id´ee de ce qu’il s’est pass´e ?
Est-il possible de voir pr´ecis´ement ce qu’il s’est pass´e ?
Si oui, quels outils peuvent nous permettre de comprendre cet effet ? Comment bien s’est servir ?
Peut-on se servir de ¸ca pour faire un peu mieux qu’un crash ? Si oui, comment s’y prendre ?
Exemple
Quelles questions peut-on se poser ? Une id´ee de ce qu’il s’est pass´e ?
Est-il possible de voir pr´ecis´ement ce qu’il s’est pass´e ?
Si oui, quels outils peuvent nous permettre de comprendre cet effet ? Comment bien s’est servir ?
Peut-on se servir de ¸ca pour faire un peu mieux qu’un crash ?
Si oui, comment s’y prendre ?
Exemple
Quelles questions peut-on se poser ? Une id´ee de ce qu’il s’est pass´e ?
Est-il possible de voir pr´ecis´ement ce qu’il s’est pass´e ?
Si oui, quels outils peuvent nous permettre de comprendre cet effet ? Comment bien s’est servir ?
Peut-on se servir de ¸ca pour faire un peu mieux qu’un crash ? Si oui, comment s’y prendre ?
Quelques r´ eponses...
Beaucoup d’outils tr`es complets pour vous aider `a comprendre l’ex´ecution d’un programme : GDB (Gnu DeBugger), radare2, ghidra, etc... Peuvent ˆetre d´elicat `a prendre en main, mais ¸ca vaut
d´efinitivement le coup de s’y pencher !
Pour l’exploitation : Python poss`ede beaucoup de librairies (surtout PwnTools en fait), ce qui en fait un tr`es bon choix pour exploiter un binaire !
Il existe une tr`es grande diversit´e d’attaques possibles que l’on choisit en fonction de la situation (architecture processeur, s´ecurit´es actives, input possible, etc...)
Dans le cadre des formations, nous allons nous concentrer sur l’architecture x86 avec le minimum de s´ecurit´es activ´ees. Bien que cela ne soit pas suffisant pour compromettre des logiciels r´ecents, cela reste un passage indispensable pour appr´ehender les
probl´ematiques de base li´ees `a la s´ecurit´e applicative sans trop se prendre la tˆete.
Quelques r´ eponses...
Beaucoup d’outils tr`es complets pour vous aider `a comprendre l’ex´ecution d’un programme : GDB (Gnu DeBugger), radare2, ghidra, etc... Peuvent ˆetre d´elicat `a prendre en main, mais ¸ca vaut
d´efinitivement le coup de s’y pencher !
Pour l’exploitation : Python poss`ede beaucoup de librairies (surtout PwnTools en fait), ce qui en fait un tr`es bon choix pour exploiter un binaire !
Il existe une tr`es grande diversit´e d’attaques possibles que l’on choisit en fonction de la situation (architecture processeur, s´ecurit´es actives, input possible, etc...)
Dans le cadre des formations, nous allons nous concentrer sur l’architecture x86 avec le minimum de s´ecurit´es activ´ees. Bien que cela ne soit pas suffisant pour compromettre des logiciels r´ecents, cela reste un passage indispensable pour appr´ehender les
probl´ematiques de base li´ees `a la s´ecurit´e applicative sans trop se prendre la tˆete.
Quelques r´ eponses...
Beaucoup d’outils tr`es complets pour vous aider `a comprendre l’ex´ecution d’un programme : GDB (Gnu DeBugger), radare2, ghidra, etc... Peuvent ˆetre d´elicat `a prendre en main, mais ¸ca vaut
d´efinitivement le coup de s’y pencher !
Pour l’exploitation : Python poss`ede beaucoup de librairies (surtout PwnTools en fait), ce qui en fait un tr`es bon choix pour exploiter un binaire !
Il existe une tr`es grande diversit´e d’attaques possibles que l’on choisit en fonction de la situation (architecture processeur, s´ecurit´es actives, input possible, etc...)
Dans le cadre des formations, nous allons nous concentrer sur l’architecture x86 avec le minimum de s´ecurit´es activ´ees. Bien que cela ne soit pas suffisant pour compromettre des logiciels r´ecents, cela reste un passage indispensable pour appr´ehender les
probl´ematiques de base li´ees `a la s´ecurit´e applicative sans trop se prendre la tˆete.
Quelques r´ eponses...
Beaucoup d’outils tr`es complets pour vous aider `a comprendre l’ex´ecution d’un programme : GDB (Gnu DeBugger), radare2, ghidra, etc... Peuvent ˆetre d´elicat `a prendre en main, mais ¸ca vaut
d´efinitivement le coup de s’y pencher !
Pour l’exploitation : Python poss`ede beaucoup de librairies (surtout PwnTools en fait), ce qui en fait un tr`es bon choix pour exploiter un binaire !
Il existe une tr`es grande diversit´e d’attaques possibles que l’on choisit en fonction de la situation (architecture processeur, s´ecurit´es actives, input possible, etc...)
Dans le cadre des formations, nous allons nous concentrer sur l’architecture x86 avec le minimum de s´ecurit´es activ´ees. Bien que cela ne soit pas suffisant pour compromettre des logiciels r´ecents, cela reste un passage indispensable pour appr´ehender les
probl´ematiques de base li´ees `a la s´ecurit´e applicative sans trop se prendre la tˆete.
Plan de la pr´ esentation
1 Plan du cours
2 Fonctionnement des s´eances
3 Br`eve explication de ce qu’est un Buffer Overflow avec quelques exemples
4 Quelques questions sur les effets d’un BOF
5 Fin de l’introduction
Pourquoi assister ` a cette formation ?
Le but principal est de vous permettre de comprendre les bases de la s´ecurit´e applicative pour que vous puissiez aller vers des sujets plus compliqu´es et ´eviter les erreurs pouvant compromettre vos propres programmes.
Vous devriez ˆetre capable d’ici la fin de ce cours de faire la plupart des challenges simples de s´ecurit´e applicative trouvables sur internet. Comprendre le fonctionnement des buffer Overflow vous fera tr`es certainement changer la fa¸con dont vous voyez un programme. Le point de vue adopt´e est beaucoup plus ”bas niveau” et permet de d´ebugger des situations assez d´elicates en C par exemple, mˆeme avec une compr´ehension sommaire.
Enfin, c’est un exercice int´eressant qui donne vraiment l’impression de comprendre ce qu’il se passe une fois que ¸ca fonctionne (assez proche d’un puzzle). Il faut souvent ˆetre pers´ev´erant et patient pour arriver au r´esultat final. L’exercice est assez exigeant mais satisfaisant en somme.
Pourquoi assister ` a cette formation ?
Le but principal est de vous permettre de comprendre les bases de la s´ecurit´e applicative pour que vous puissiez aller vers des sujets plus compliqu´es et ´eviter les erreurs pouvant compromettre vos propres programmes.
Vous devriez ˆetre capable d’ici la fin de ce cours de faire la plupart des challenges simples de s´ecurit´e applicative trouvables sur internet.
Comprendre le fonctionnement des buffer Overflow vous fera tr`es certainement changer la fa¸con dont vous voyez un programme. Le point de vue adopt´e est beaucoup plus ”bas niveau” et permet de d´ebugger des situations assez d´elicates en C par exemple, mˆeme avec une compr´ehension sommaire.
Enfin, c’est un exercice int´eressant qui donne vraiment l’impression de comprendre ce qu’il se passe une fois que ¸ca fonctionne (assez proche d’un puzzle). Il faut souvent ˆetre pers´ev´erant et patient pour arriver au r´esultat final. L’exercice est assez exigeant mais satisfaisant en somme.
Pourquoi assister ` a cette formation ?
Le but principal est de vous permettre de comprendre les bases de la s´ecurit´e applicative pour que vous puissiez aller vers des sujets plus compliqu´es et ´eviter les erreurs pouvant compromettre vos propres programmes.
Vous devriez ˆetre capable d’ici la fin de ce cours de faire la plupart des challenges simples de s´ecurit´e applicative trouvables sur internet.
Comprendre le fonctionnement des buffer Overflow vous fera tr`es certainement changer la fa¸con dont vous voyez un programme. Le point de vue adopt´e est beaucoup plus ”bas niveau” et permet de d´ebugger des situations assez d´elicates en C par exemple, mˆeme avec une compr´ehension sommaire.
Enfin, c’est un exercice int´eressant qui donne vraiment l’impression de comprendre ce qu’il se passe une fois que ¸ca fonctionne (assez proche d’un puzzle). Il faut souvent ˆetre pers´ev´erant et patient pour arriver au r´esultat final. L’exercice est assez exigeant mais satisfaisant en somme.
Pourquoi assister ` a cette formation ?
Le but principal est de vous permettre de comprendre les bases de la s´ecurit´e applicative pour que vous puissiez aller vers des sujets plus compliqu´es et ´eviter les erreurs pouvant compromettre vos propres programmes.
Vous devriez ˆetre capable d’ici la fin de ce cours de faire la plupart des challenges simples de s´ecurit´e applicative trouvables sur internet.
Comprendre le fonctionnement des buffer Overflow vous fera tr`es certainement changer la fa¸con dont vous voyez un programme. Le point de vue adopt´e est beaucoup plus ”bas niveau” et permet de d´ebugger des situations assez d´elicates en C par exemple, mˆeme avec une compr´ehension sommaire.
Enfin, c’est un exercice int´eressant qui donne vraiment l’impression de comprendre ce qu’il se passe une fois que ¸ca fonctionne (assez proche d’un puzzle). Il faut souvent ˆetre pers´ev´erant et patient pour arriver
Fin de la s´ eance / Questions
Bibliographie : The art of exploitation (Jon Ericsson), root-me (https://www.root-me.org/)
La prochaine fois : Installation de la VM de travail, explication de son fonctionnement, et introduction au langage C si on a assez de temps. Retrouver tous les documents li´es `a la formation sur ma homepage du bde : https://www.bde.enseeiht.fr/~malmair/
Des questions ?
Fin de la s´ eance / Questions
Bibliographie : The art of exploitation (Jon Ericsson), root-me (https://www.root-me.org/)
La prochaine fois : Installation de la VM de travail, explication de son fonctionnement, et introduction au langage C si on a assez de temps.
Retrouver tous les documents li´es `a la formation sur ma homepage du bde : https://www.bde.enseeiht.fr/~malmair/
Des questions ?
Fin de la s´ eance / Questions
Bibliographie : The art of exploitation (Jon Ericsson), root-me (https://www.root-me.org/)
La prochaine fois : Installation de la VM de travail, explication de son fonctionnement, et introduction au langage C si on a assez de temps.
Retrouver tous les documents li´es `a la formation sur ma homepage du bde : https://www.bde.enseeiht.fr/~malmair/
Des questions ?
Fin de la s´ eance / Questions
Bibliographie : The art of exploitation (Jon Ericsson), root-me (https://www.root-me.org/)
La prochaine fois : Installation de la VM de travail, explication de son fonctionnement, et introduction au langage C si on a assez de temps.
Retrouver tous les documents li´es `a la formation sur ma homepage du bde : https://www.bde.enseeiht.fr/~malmair/
Des questions ?
Un petit extra ?
Un aper¸cu du C : https://learnxinyminutes.com/docs/c/