Buffer Overflow Anatomy of an exploit.

Slides:



Advertisements
Présentations similaires
Le Concept du programme enregistré
Advertisements

Introduction Langage très répandu Noyau Linux VLC … Des avantages indéniables mais aussi des contraintes ! Ceci nest quun rapide tour.
Introduction au langage C
ARCHITECTURE INTERNE d’un MICROPROCESSEUR
Algorithmique Résume.
SSTIC 2004: Détections Heuristiques en environnement Win32 Nicolas Brulez – Silicon Realms.
La pile un élément essentiel
C.
Le jeu d ’instructions Introduction Un jeu d ’instruction classique
TD 1 IJA Introduction Objet, méthode, attribut Classe, instance
Les structures de données
Introduction : Compilation et Traduction
PILE voir l'animation: Diaporama / Visualiser ...
Systèmes d’exploitation
Les bases de l’Algorithmique
Points importants de la semaine Les fonctions. La portée. La passage par copie. Les tableaux.
Cours 7 - Les pointeurs, l'allocation dynamique, les listes chaînées
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
Les piles Djamal Rebaïne.
RESUMES Module II1 SOMMAIRE CYCLE 1 : Saisir – Afficher – Données
8PRO100 Éléments de programmation Allocation dynamique de la mémoire.
Système d’exploitation
Course Critique Race Condition
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
Les Classes les structures en C (struct) regroupent des variables : structuration de l'analyse mais problèmes de cohérence problèmes de sécurité d'accès.
Quest-ce quune classe dallocation? Une classe dallocation détermine la portée et la durée de vie dun objet ou dune fonction.
Système d’exploitation : Assembleur
Les pointeurs Enormément utilisé en C/C++ ! Pourquoi? A quoi ça sert?
Programmation Initiation Aux Langages C et C++ (2) Bruno Permanne 2006.
Sixième cours Les chaînes de caractères et le passage de paramètres par référence Passage de paramètres par référence String.h.
Architecture et technologie des ordinateurs II
LIFI-Java 2004 Séance du Jeudi 9 sept. Cours 1. La notion de langage Décrire une tâche à effectuer –programme Écrire à un haut niveau –facile pour lutilisateur.
Méthode et Outils pour la Programmation
Types de données fondamentaux
Systèmes d’exploitation
Qu’est-ce qu’un système d’exploitation ?
L'Unité centrale (CPU) Le CPU doit être rapide (mesuré en temps de CPU) UNITE DE CONTROLE Générer les signaux de control/temps Contrôler le décodage/exécution.
Le langage C Rappel Pointeurs & Allocation de mémoire.
Programmer en langage c
JavaScript Nécessaire Web.
4 Introduction des objets. Les chaînes et tableaux
Analyse d’une attaque contre le systeme LPRng (groupe 7) - La vulnerabilite des format strings - Qu’est ce qu’une attaque de format strings? - Comment.
Cours Architecture des Systèmes Informatiques
Les Pointeurs et les Tableaux Statiques et Tableaux Dynamiques
Les pointeurs Suite.
Chapitre 9 : La machine MIASM
Restaurations : cas réel
SIF-1053 Architecture des ordinateurs
ALGORITHMIQUE IUT Vélizy – DUT Info - 1ère année Laurent Marsan
Cours d’ Algorithmique 2012 Algorithmique. Cours d’ Algorithmique 2012 Qu’est ce que l’Algorithmique ? Avez-vous déjà suivi une recette ? Avez-vous déjà.
Décomposition et paramétrage des algorithmes
LIBELIN Arnaud MATHEOSSIAN Dimitri TOURE Maurice.
Buffer Overflow When Data Become Instructions Vendredi, 1er mars 2002 : Sart-Tilman.
Tutorat en bio-informatique Le 14 novembre Au programme… Les objets –Propriétés (attributs) –Constructeurs –Méthodes.
Réaliser par: Sadok Amel Cheboui hassiba
Les Machines RAM.
Programmation Système et Réseau
Interprétation/Génération de code pour le langage Z minimal Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
CSI 3525, Implémentation des sous-programmes, page 1 Implémentation des sous-programmes L’environnement dans les langages structurés en bloc La structure.
1 École des Mines de Saint-Etienne. 158, cours Fauriel Saint-Etienne Cedex 2. Tél Fax Jean-Jacques Girardot
ISBN Chapitre 10 L'implémentation des sous- programmes.
1. Spoon Christophe Delagarde, septembre 1998 I.U.T., Université de la Méditerrainée 2.
Tour rapide d’un premier programme SPARC v9
1.1: notions de bases de l’informatique
Exercices sur les pointeurs. lireCar/remettreCar Lorsque l’on lit caractère par caractère, on ne peut pas savoir qu’on a atteint un caractère avant de.
CHAPITRE 10 Les sous-programmes 1. Sous-programme Suite d’instructions appelée de manière répétitive Par un programme Par plusieurs programmes distincts.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Correction du TD Chapitre 3.
Flash MX – Séance 2 Interactions & ActionScript David Rapin Si28 P06.
Buffer Overflow Anatomy of an exploit.
Transcription de la présentation:

Buffer Overflow Anatomy of an exploit

Introduction Le cas du Buffer Overflow Connu et documenté depuis 1978 Fonctionnement de la mémoire Corruption de la mémoire Création d’un ‘Shell-code’

Fonctionnement de la mémoire Le buffer est une quantité de mémoire réservée pour être rempli par des données Le pointer est une adresse qui sert à référencer un endroit de la mémoire. La mémoire plate est un espace de mémoire continu (virtuel) qui permet au programme de n’avoir qu’un seul emplacement mémoire

La pile A chaque appel de fonction, la place est réservée et le pointeur se déplace

Fonctionnement de la mémoire Registres : nSP (rsp) = Stack Pointer ( haut de la pile ) nIP = Instruction Pointer ( point d’éxécution) Big endian Vs Little endian NUL Terminated Strings 0x00 « Texte » = 0x54 0x65 0x78 0x74 0x65 0x00 Le programme écrit jusqu’à arriver au NUL contenu dans la String

Prise de contrôle Test des limites non effectués Ecriture sur les données suivantes dont les pointeurs. But est de faire pointer sur un endroit sur lequel l’attaquant peut écrire.

Exemple

Exemple On veut voir ce qu’il se passe lors du déroulement On met un break point avant l’allocation de mémoire et on compare.

Exemple Avant Continue Apres

Stack Smaching Corruption de variables La variable loggedin est initialisé avant la string password La valeur de loggedin est sous la string password dans la pile. loggedin Pointeur retour

Stack Smaching Corruption des pointeurs Pointeur de retour sauvé en fin de fonction Idée : Repointer vers un endroit ou l’on peut écrire, par exemple l’espace alloué à password Sous unix, utiliser les variables d’environnement En pratique on ne pointe pas directement sur le code malicieux

NOP sled NOP = No-Operation Permet de déplacer le pointeur d’instruction vers le code à exécuter. Exemple : On ne sait pas ou l’on commence : 1 : continue 6 : continue 2 : continue 7 : continue 3 : continue 8 : continue 4 : continue 9 : continue 5 : Exécuter 10 : Aller en 1

Shell-code Shell-code généralement écrit en assembleur pour obtenir des OPCODES But : Faire apparaitre un root shell. Contraintes : Caractères non utilisables ( 0x00 ) Taille restreinte ( souvent par le ou les buffers )

D’un code machine à un shell-code Peut-on encore définir des variables au milieu du code ?

Problèmes Ne fonctionne pas dans un buffer overflow Enlever les ‘NUL’ un à un

Code sans 0x00

Autres mauvais caractères 0x0a retour à la ligne 0x09 tabulation Remplaçable par 0x0d ( pas tout le temps ) Résultat :

conclusion Marche a suivre en 4 points : Identification des vulnérabilités Découverte des emplacements des objets et stabilisation Construction du payload Exploitation Faille propre à l’utilisation de la mémoire