Buffer Overflow Anatomy of an exploit.

Slides:



Advertisements
Présentations similaires
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.
Advertisements

Buffer Overflow Anatomy of an exploit.
Buffer Overflow When Data Become Instructions Vendredi, 1er mars 2002 : Sart-Tilman.
Le débogage Semaine 12 Version A15. Plan de leçon - Débogage  Commentaire javadoc  Définition  Fonctionnement  Point d’arrêt  Exécution  Contrôler.
C++ Les fonctions. Présentation Utilité : Dès qu'un programme dépasse la centaine de lignes de code, il est pratique de pouvoir le décomposer en plusieurs.
CINI – Li115 1 Semaine 9 Algorithmes de tri ● Introduction ● Tri à bulle ● - principe ● - algorithme ● - efficacité ● Tri par sélection ● - principe, algorithme,
Des commandes plus avancées I. Les processus Lister des processus : ps & top Arrêter des processus : kill II. Recherche Rechercher des fichiers : find.
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.
1 Programmation en C++ C++ de base ● Programme C++ ● Variables, objets, types ● Fonctions ● Namespace ● Tests ● Boucles ● Pointeurs, références.
1 Programmation en C++ C++ de base ● Programme C++ ● Variables, objets, types ● Types et opérations fondamentales ● Tests ● Boucles ● Pointeurs, références.
Comment utiliser le débogueur de Visual Studio /8/2015 INF145 1 Créé par Julien Galarneau Allaire, révisé par Eric Thé S.E.G.
Synthèse TP 2 Codeblock 1 Les objectifs de ce tp sont :
Ajouter le code dans une page html
Environnement de développement des BD
Les Instructions Itératives (Les Boucles)
Introduction au Langage Pascal
03/02/2018.
Quelques Termes INFORMATIQUE ? ORDINATEUR ( Système Informatique)?
Pas de variable globale
« Un langage de programmation est une convention pour donner des ordres à un ordinateur. Ce n’est pas censé être obscur, bizarre et plein de pièges subtils.
Pointeurs et langage C.
TRAVAIL DE L'ÉQUIPE EN BINÔME
Opérateurs Toute donnée informatique est stockée en mémoire sous la forme d'une combinaison de bits (mot machine). Les opérateurs bits permettent de modifier.
Semaine #1 INF130 par Frédérick Henri.
Algorithmique Avancée et Complexité Chap2:Complexité et Optimalité
Javadoc et débogueur Semaine 03 Version A17.
AO (Architecture des ordinateurs)
Collecte de données CAPI
AO (Architecture des ordinateurs)
Fonctionnement de l'unité centrale
Principes de programmation (suite)
Les fonctions.
Les fonctions.
SIF-1053 Architecture de ordinateurs
Javadoc et débogueur Semaine 03 Version A16.
Les chaînes de caractères et le langage C
Ce videoclip produit par l’Ecole Polytechnique Fédérale de Lausanne
Classification des archtecutres paralleles
Programmation en C++ IO en C++/SL
Introduction à l’assembleur ARM: variables et accès mémoire
L ES I NSTRUCTIONS I TÉRATIVES (L ES B OUCLES ) Réalisé par : OUZEGGANE Redouane Département de Technologie Faculté de Technologie – Université A.Mira,
Cours N°9: Algorithmiques Les Tableaux 1
Cours 8 5. Appels de fonctions Le matériel Concepts de pile
Programmation en C++ C++ de base
REVUE DE LITTERATURE. Introduction Première partie majeure dans la rédaction du mémoire, la réalisation d’une revue de littérature consiste à effectuer.
1 RECURSIVITE PRESENTATION Ch. PAUL ALGORITHMIQUE Présentation de la récursivité.
Assembleur ARM: Séquence d’exécution et branchements
Plus de 4000 langages....
Architecture de machines Le microprocesseur Cours
Bus et adressage GIF-1001: Ordinateurs: Structure et Applications
Calcul Scientifique Initiation à SCILB
Entrer dans Excel Cliquer sur le bouton Démarrer Glisser sur Microsoft Office Glisser sur Microsoft Excel ou Cliquer sur le Raccourci qui est sur le bureau.
B.Shishedjiev - Informatique
Les points que nous avons retenus
Transition vers l’assignation automatique des stages à la résidence
ENSEIGNER L’ALGORITHMIQUE ET LA PROGRAMMATION AU COLLÈGE
Dépiler et mettre valeur dans RT (récup. paramètre)
RABAH M ed Ali 2018/2019
Flowchart Itération Cours 04.
Principes de programmation (suite)
Cours 8 5. Appels de fonctions Le matériel Concepts de pile
Assembleur
Encadré par : M. Mohammad EL GHABZOURI Elaboré par : - AZEGAMOUT Mohamed - ABOULKACEM abdelouahed - GOUN Ayoub EXPOSÉ Sous le thème : SER 2018 Parallélisme.
STREAMS (et fichiers).
GEOMETRIE VECTORIELLE
Fonctionnement de l'unité centrale (rappels ? de 1ère Année)
Structure de données Les listes.
DONNÉE DE BASE QM Manuel de formation. Agenda 2  Introduction  Objectif de la formation  Données de base QM: Caractéristique de contrôle Catalogue.
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:

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