1 / 18

Buffer Overflow

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.

gabi
Download Presentation

Buffer Overflow

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Buffer Overflow Anatomy of an exploit

  2. 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’

  3. 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

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

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

  6. 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.

  7. Exemple

  8. 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.

  9. Exemple • Avant • Continue • Apres

  10. StackSmachingCorruption 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

  11. StackSmachingCorruption 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

  12. 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

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

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

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

  16. Code sans 0x00

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

  18. 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

More Related