buffer overflow

18
ANATOMY OF AN EXPLOIT BUFFER OVERFLOW

Upload: gabi

Post on 23-Feb-2016

82 views

Category:

Documents


0 download

DESCRIPTION

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. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Buffer  Overflow

A N AT O M Y O F A N E X P LO I T

BUFFER OVERFLOW

Page 2: Buffer  Overflow

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’

Page 3: Buffer  Overflow

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

Page 4: Buffer  Overflow

LA PILE

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

Page 5: Buffer  Overflow

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

Page 6: Buffer  Overflow

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.

Page 7: Buffer  Overflow

EXEMPLE

Page 8: Buffer  Overflow

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.

Page 9: Buffer  Overflow

EXEMPLE

• Avant

• Continue

• Apres

Page 10: Buffer  Overflow

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

Page 11: Buffer  Overflow

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

Page 12: Buffer  Overflow

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

Page 13: Buffer  Overflow

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 )

Page 14: Buffer  Overflow

D’UN CODE MACHINE À UN SHELL-CODE

• Peut-on encore définir des variables au milieu du code ?

Page 15: Buffer  Overflow

PROBLÈMES

• Ne fonctionne pas dans un buffer overflow

• Enlever les ‘NUL’ un à un

Page 16: Buffer  Overflow

CODE SANS 0X00

Page 17: Buffer  Overflow

AUTRES MAUVAIS CARACTÈRES

• 0x0a retour à la ligne• 0x09 tabulation• Remplaçable par 0x0d ( pas tout le temps )

• Résultat :

Page 18: Buffer  Overflow

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