Etat des lieux des systèmes de protection contre les buffer overflows sous Linux Sommaire Qu'est ce qu'un buffer overflow ? Stack Execute invalidation.

Slides:



Advertisements
Présentations similaires
Introduction Langage très répandu Noyau Linux VLC … Des avantages indéniables mais aussi des contraintes ! Ceci nest quun rapide tour.
Advertisements

Rappels C.
Rappels de C ECP – Option SA Henri Fallon. Objectifs Théorie + pratique Compréhension générale du langage Repartant « du début » Pour ceux qui savent.
Introduction. Les pointeurs Bête noir des programmeurs Pas daide de Visual Studio Sauf en utilisant les « break point » Pas toujours intuitif Facile de.
GEF 243B Programmation informatique appliquée
La pile un élément essentiel
Rappels de C ECP – Option SA Henri Fallon. Objectifs Théorie + pratique Compréhension générale du langage Repartant « du début » Pour ceux qui savent.
Système d’Exploitation
2ième Classe (Mercredi, 13 Octobre) C++ Intro CSI2572.
Récursivité.
PROGRAMMATION SCIENTIFIQUE EN C PRO Généralités u Présentation du plan de cours –Disponibilité –Références u Environnement de travail –Langage C.
Course Critique Race Condition
Algorithmique et langage C. Les traitements Comment utiliser les données.
Une introduction à Java
GDB: Debogueur GNU Multi-langage Permet l’inspection du source pendant l’exécution Permet le débogage post-mortem Bogue (de châtaigne), terme recommandé.
Programmation Système et Réseau (sous Linux)
Les Pointeurs et les Tableaux Statiques et Tableaux Dynamiques
La notion de type revisitée en POO
Notions avancées du C++
Argc et argv Utilisation des paramètres de la ligne de commande.
Communication avec l’environnement
Algorithmes sur les sons
Buffer Overflow When Data Become Instructions Vendredi, 1er mars 2002 : Sart-Tilman.
Programmation Système et Réseau
Les buffers overflow
TABLEAUX des POINTEURS TRAITEMENT DE STRUCTURES
8PRO100 Éléments de programmation Les pointeurs de caractères.
1 École des Mines de Saint-Etienne. 158, cours Fauriel Saint-Etienne Cedex 2. tél Fax Cours Architecture des.
Classe 1 CSI2572 Autres modificateurs de déclaration de variables: & volatile & register & static & auto & extern & const volatile Indique au compilateur.
Pthread Ordonnancement. #define _MULTI_THREADED #include #ifndef _CHECK_H #define _CHECK_H /* headers used by a majority of the example program */ #include.
UE MAREP Cours 12 : Révisions
1 Cpt JAVA : Eclipse (bis) Debogage. 2 Code à tester public class siecle { int t; public siecle() { super(); t=1; } static public boolean vrai() { return(false);
Exception Handling "Unfortunately, it's almost accepted practice to ignore error conditions, as if we're in a state of denial about errors." Bruce Eckel.
Mysterie Introduction L'exploitation de programmes vulnérables est rendu de plus en plus difficile. Malgré les.
Outils logiciel pour la programmation en C. 2 Automatiser la compilation : make make est un utilitaire présent dans toute les distribution de linux >
Tableaux et Pointeurs Chaînes de Caractères Programmation Impérative II.
CINI – Li115 1 Semaine 6 Les fonctions ● Pourquoi écrire des fonctions ? ● Définition de fonctions ● Fonction main ● Appels de fonctions ● Portée des variables.
A quoi sert la programmation? - indispensable pour plusieurs métiers. - passion. But du cours: - suite du cours Prog. Imp. I - fichiers, pointeurs, modularité.
1 Programmation en C++ C++ de base ● Programme C++ ● Variables, objets, types ● Types et opérations fondamentales ● Tests ● Boucles ● Pointeurs, références.
CINI – Li115 1 Semaine 11 Les pointeurs (suite) ● Tableaux et pointeurs ● Questions sur les pointeurs.
Mode noyau Appels Systèmes Interruptions Grégory Seront Institut Paul Lambin
Synthèse TP 2 Codeblock 1 Les objectifs de ce tp sont :
Comment corriger son code sans forcément appeler l’enseignant M2202
Cours de programmation en langage C (Norme ANSI)
Journée du Savoir 16 Avril 2017
Langage C Structure d'un programme Types Lire Ecrire Tester
Eléments d’Informatique Cours11 – Allocation dynamique, listes chaînées Catherine Recanati.
Allocation dynamique de mémoire
Pointeurs et langage C.
TP N°3 : Adressage IP Les classes IP
AO (Architecture des ordinateurs)
Principes de programmation (suite)
Semaine 11 Les pointeurs (suite)
La sécurité Pour les développeurs.
Buffer Overflow Anatomy of an exploit.
Arguments de la ligne de commande
Outils de production de code
Les chaînes de caractères et le langage C
Codage Indenter le code Limiter la portée des variables Traiter les erreurs en premier Utiliser le switch au delà de 3 tests en cascades Ne jamais utiliser.
Cours 8 5. Appels de fonctions Le matériel Concepts de pile
1 RECURSIVITE PRESENTATION Ch. PAUL ALGORITHMIQUE Présentation de la récursivité.
C Primer. Outline Overview comparison of C and Java Good evening Preprocessor Command line arguments Arrays and structures Pointers and dynamic.
Processus et threads: Programme et Processus
Int 10. Int 6.
Dépiler et mettre valeur dans RT (récup. paramètre)
Michaël HERVIEUX Thomas MEURISSE
Cours 8 5. Appels de fonctions Le matériel Concepts de pile
QCM Pointeurs 2 / Q1 On considère la déclaration suivante : char *ptc ; ptc peut contenir : 1) des valeurs de variables de type caractère 2) des adresses.
Introduction à la programmation orientée objet Module 1:Position du problème Michel Poriaux HEPH Condorcet.
Les Commandes de base Linux. 1 L’aide sur les commandes Linux ◦ help : obtenir de l’aide pour une commande interne du shell. Elle permet aussi d'afficher.
Transcription de la présentation:

Etat des lieux des systèmes de protection contre les buffer overflows sous Linux Sommaire Qu'est ce qu'un buffer overflow ? Stack Execute invalidation Address Space Layout Randomization (ASLR) Stack Smashing Protector Conclusion & questions Paul Rascagnères – RMLL 2011

Etat des lieux des systèmes de protection contre les buffer overflows sous Linux Qu'est ce qu'un bufer overflow ? Un simple bug Un dépassement de l'espace mémoire allouée Paul Rascagnères – RMLL 2011

Etat des lieux des systèmes de protection contre les buffer overflows sous Linux Qu'est ce qu'un bufer overflow ? Exemple : Paul Rascagnères – RMLL 2011 int vuln(char *variable) { char locale_variable[100]; strcpy(locale_variable, variable); return(0); } int main(int argc, char *argv[]) { if (argc <2) { printf("Usage: argument_1\n"); exit(1); } vuln(argv[1]); }

Etat des lieux des systèmes de protection contre les buffer overflows sous Linux Qu'est ce qu'un bufer overflow ? Exemple : Paul Rascagnères – RMLL 2011 gcc bof.c -o bof AAAA $(perl -e 'print ”A”x100') Segmentation fault

Etat des lieux des systèmes de protection contre les buffer overflows sous Linux Qu'est ce qu'un bufer overflow ? Que se passe-t-il ? Paul Rascagnères – RMLL 2011

Etat des lieux des systèmes de protection contre les buffer overflows sous Linux Qu'est ce qu'un bufer overflow ? Quels sont les risques de sécurités ? Execution de code arbitraire Utilisation des Shellcodes Paul Rascagnères – RMLL 2011

Etat des lieux des systèmes de protection contre les buffer overflows sous Linux Qu'est ce qu'un bufer overflow ? Qu'est ce qu'un Shellcode ? Chaines de charactères hexadecimales permettant l'execution de code Exemple : char shellcode[] = "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b" "\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd" "\x80\xe8\xdc\xff\xff\xff/bin/sh"; Paul Rascagnères – RMLL 2011

Etat des lieux des systèmes de protection contre les buffer overflows sous Linux Qu'est ce qu'un bufer overflow ? Exploitation $(perl -e 'print ”\x90”x50. ”\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b\x89\xf3\ x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd\x80\xe8\xdc\xff\xf f\xff/bin/sh". ”\x10\xf4\xff\xbf”') Paul Rascagnères – RMLL 2011

Etat des lieux des systèmes de protection contre les buffer overflows sous Linux Stack Execute Invalidation Principe Contournements Return-to-libc attaque... Paul Rascagnères – RMLL 2011

Etat des lieux des systèmes de protection contre les buffer overflows sous Linux Stack Execute Invalidation Return-to-libc Obtenir l'adresse d'un fonction particulière sur laquelle ”rebondir” Paul Rascagnères – RMLL 2011

Etat des lieux des systèmes de protection contre les buffer overflows sous Linux Stack Execute Invalidation Paul Rascagnères – RMLL 2011 int main(int argc,char **argv) { void *handle; long address; char *error; if(argc!=2) { fprintf(stderr,"Usage : %s function\n",argv[0]); exit(1); } address=(long)dlsym(handle,argv[1]); if((error=dlerror()) != NULL) { fprintf(stderr,"function %s() not found\n%s\n",argv[1], error); exit(1); } printf("function %s() address : 0x%lx\n",argv[1],address); } gcc get_address.c -ldl -o get_address execve function execve() address : 0xb77a9350

Etat des lieux des systèmes de protection contre les buffer overflows sous Linux Address Space Layout Randomization (ASLR) Interdire les Return-to-libc en empêchant de ”rebondir” vers une fonction specifique cat /proc/sys/kernel/randomize_va_space 2 Paul Rascagnères – RMLL 2011

Etat des lieux des systèmes de protection contre les buffer overflows sous Linux Address Space Layout Randomization (ASLR) Exemple : Paul Rascagnères – RMLL 2011 execve function execve() address : 0xb execve function execve() address : 0xb execve function execve() address : 0xb76f1350 execve function execve() address : 0xb76de350 execve function execve() address : 0xb76eb350

Etat des lieux des systèmes de protection contre les buffer overflows sous Linux Address Space Layout Randomization (ASLR) Limitation de l'entropie en 32bits Necessité de compiler les librairies avec certaines options (-fpie -pie) Une librairie ne profitant pas de l'ASLR peut mettre à mal tout un système Paul Rascagnères – RMLL 2011

Etat des lieux des systèmes de protection contre les buffer overflows sous Linux Stack Smashing Protector Principe Canary Etude complète sur Paul Rascagnères – RMLL 2011

Etat des lieux des systèmes de protection contre les buffer overflows sous Linux Stack Smashing Protector gcc --stack-protector-all bof.c -o bof $(perl -e 'print "A"x100') *** stack smashing detected ***:./bof terminated ======= Backtrace: ========= /lib/i386-linux-gnu/libc.so.6(__fortify_fail+0x50)[0xb765bdf0] /lib/i386-linux-gnu/libc.so.6(+0xe5d9a)[0xb765bd9a]./bof[0x80484b3] [0x ] ======= Memory map: ======== r-xp : /home/pol/RMLL/bof Aborted Paul Rascagnères – RMLL 2011

Etat des lieux des systèmes de protection contre les buffer overflows sous Linux Conclusion & questions Sources Paul Rascagnères – RMLL 2011