ANATOMY OF AN EXPLOIT BUFFER OVERFLOW. INTRODUCTION Le cas du Buffer Overflow Connu et documenté...

18
ANATOMY OF AN EXPLOIT BUFFER OVERFLOW

Transcript of ANATOMY OF AN EXPLOIT BUFFER OVERFLOW. INTRODUCTION Le cas du Buffer Overflow Connu et documenté...

Page 1: ANATOMY OF AN EXPLOIT BUFFER OVERFLOW. INTRODUCTION Le cas du Buffer Overflow Connu et documenté depuis 1978 Fonctionnement de la mémoire Corruption de.

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

BUFFER OVERFLOW

Page 2: ANATOMY OF AN EXPLOIT BUFFER OVERFLOW. INTRODUCTION Le cas du Buffer Overflow Connu et documenté depuis 1978 Fonctionnement de la mémoire Corruption de.

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: ANATOMY OF AN EXPLOIT BUFFER OVERFLOW. INTRODUCTION Le cas du Buffer Overflow Connu et documenté depuis 1978 Fonctionnement de la mémoire Corruption de.

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: ANATOMY OF AN EXPLOIT BUFFER OVERFLOW. INTRODUCTION Le cas du Buffer Overflow Connu et documenté depuis 1978 Fonctionnement de la mémoire Corruption de.

LA PILE

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

Page 5: ANATOMY OF AN EXPLOIT BUFFER OVERFLOW. INTRODUCTION Le cas du Buffer Overflow Connu et documenté depuis 1978 Fonctionnement de la mémoire Corruption de.

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: ANATOMY OF AN EXPLOIT BUFFER OVERFLOW. INTRODUCTION Le cas du Buffer Overflow Connu et documenté depuis 1978 Fonctionnement de la mémoire Corruption de.

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: ANATOMY OF AN EXPLOIT BUFFER OVERFLOW. INTRODUCTION Le cas du Buffer Overflow Connu et documenté depuis 1978 Fonctionnement de la mémoire Corruption de.

EXEMPLE

Page 8: ANATOMY OF AN EXPLOIT BUFFER OVERFLOW. INTRODUCTION Le cas du Buffer Overflow Connu et documenté depuis 1978 Fonctionnement de la mémoire Corruption de.

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: ANATOMY OF AN EXPLOIT BUFFER OVERFLOW. INTRODUCTION Le cas du Buffer Overflow Connu et documenté depuis 1978 Fonctionnement de la mémoire Corruption de.

EXEMPLE

• Avant

• Continue

• Apres

Page 10: ANATOMY OF AN EXPLOIT BUFFER OVERFLOW. INTRODUCTION Le cas du Buffer Overflow Connu et documenté depuis 1978 Fonctionnement de la mémoire Corruption de.

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: ANATOMY OF AN EXPLOIT BUFFER OVERFLOW. INTRODUCTION Le cas du Buffer Overflow Connu et documenté depuis 1978 Fonctionnement de la mémoire Corruption de.

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: ANATOMY OF AN EXPLOIT BUFFER OVERFLOW. INTRODUCTION Le cas du Buffer Overflow Connu et documenté depuis 1978 Fonctionnement de la mémoire Corruption de.

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: ANATOMY OF AN EXPLOIT BUFFER OVERFLOW. INTRODUCTION Le cas du Buffer Overflow Connu et documenté depuis 1978 Fonctionnement de la mémoire Corruption de.

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: ANATOMY OF AN EXPLOIT BUFFER OVERFLOW. INTRODUCTION Le cas du Buffer Overflow Connu et documenté depuis 1978 Fonctionnement de la mémoire Corruption de.

D’UN CODE MACHINE À UN SHELL-CODE

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

Page 15: ANATOMY OF AN EXPLOIT BUFFER OVERFLOW. INTRODUCTION Le cas du Buffer Overflow Connu et documenté depuis 1978 Fonctionnement de la mémoire Corruption de.

PROBLÈMES

• Ne fonctionne pas dans un buffer overflow

• Enlever les ‘NUL’ un à un

Page 16: ANATOMY OF AN EXPLOIT BUFFER OVERFLOW. INTRODUCTION Le cas du Buffer Overflow Connu et documenté depuis 1978 Fonctionnement de la mémoire Corruption de.

CODE SANS 0X00

Page 17: ANATOMY OF AN EXPLOIT BUFFER OVERFLOW. INTRODUCTION Le cas du Buffer Overflow Connu et documenté depuis 1978 Fonctionnement de la mémoire Corruption de.

AUTRES MAUVAIS CARACTÈRES

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

• Résultat :

Page 18: ANATOMY OF AN EXPLOIT BUFFER OVERFLOW. INTRODUCTION Le cas du Buffer Overflow Connu et documenté depuis 1978 Fonctionnement de la mémoire Corruption de.

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