CSE-Section Sécurité
Buffer Overflow
Exploitation
The Basics
SMAHI Zakaria <z_smahi@esi.dz>
Système et CPU
CPU

Unité de contôle: Charger et décoder les instructions, charger
et stocker les données.

Unité de traitement: l'endroit d'exécution des instructions.

Les registres: cases mémoires internes au processeur.

Les flags : indicateur d'une panoplie d'évènement lors de
l'éxcution.
C'est quoi un
Buffer Overflow ?
 Buffer : un buffer est un espace de donnée
temporaire dans la mémoire.
 Buffer Overflow : un buffer overflow ou
dépassement du tampon survient lorsque la
taille de la donnée stockée dans le buffer
dépasse l'espace du buffer lui-même.
 Ce phénomème agit sur les cases mémoires
adjacentes.
Les registres

EIP (Instruction Pointer): C'est un pointeur
contenant l'offset de la prochaine instruction à
exécuter.

ESP (Stack Pointer): Pointeur sur le sommet de
la pile.

EBP (Base Pointer): Sert à pointer sur une
donnée dans la pile.
Mémoire virtuelle

Chaque processus est aménagé dans le même
espace de mémoire virtuelle indépendamment
de l'emplacemnt de mémoire physique.

Chaque processus estime qu'il est seul dans le
système ; qu'il jouit de toute la mémoire et
qu'aucun autre processus n'existe.

L'OS et le CPU maintiennent cette abstraction.
Programme
Programme en assembleur
Stack et
Passage de paramétres

Int Add (int a, intb)
{
int c ;
c = a+b ;
return c ;
}

Main()
{
Add(10,20) ;
print() ;
}
Exploit the BufferOverflow

« Talk is Cheap, Show me the Code ».
Linus Torvalds
Comment se protéger ?

Bon sens: Ecrire un code sécurisé en controlant la taille
des arguments que le programme accepte.

NX(Non Executable Memory): Les instructions contenues
dans la mémoire ne peuvent pas être exécutée.

ASLR(Address Space Layout Randomize) : A chaque
exécution, les zones mémoires allouées pour le
programme changent d'une façon aléatoire.

Stack Canaries: placer un int avant l'adresse RET ainsi
pour changer le RET(EIP) on doit changer la valeur de ce
int, une fois cette valeur est changée, le programme
s'arrétera.
Prochainement

Partie pratique : Remote Buffer Overflow.

Exploiter une faille buffer Overflow pour
contrôler un système complét.
____________________________ A suivre ...

"Introduction aux exploits et à la faille BufferOverflow"

  • 1.
    CSE-Section Sécurité Buffer Overflow Exploitation TheBasics SMAHI Zakaria <z_smahi@esi.dz>
  • 2.
  • 3.
    CPU  Unité de contôle:Charger et décoder les instructions, charger et stocker les données.  Unité de traitement: l'endroit d'exécution des instructions.  Les registres: cases mémoires internes au processeur.  Les flags : indicateur d'une panoplie d'évènement lors de l'éxcution.
  • 4.
    C'est quoi un BufferOverflow ?  Buffer : un buffer est un espace de donnée temporaire dans la mémoire.  Buffer Overflow : un buffer overflow ou dépassement du tampon survient lorsque la taille de la donnée stockée dans le buffer dépasse l'espace du buffer lui-même.  Ce phénomème agit sur les cases mémoires adjacentes.
  • 5.
    Les registres  EIP (InstructionPointer): C'est un pointeur contenant l'offset de la prochaine instruction à exécuter.  ESP (Stack Pointer): Pointeur sur le sommet de la pile.  EBP (Base Pointer): Sert à pointer sur une donnée dans la pile.
  • 6.
    Mémoire virtuelle  Chaque processusest aménagé dans le même espace de mémoire virtuelle indépendamment de l'emplacemnt de mémoire physique.  Chaque processus estime qu'il est seul dans le système ; qu'il jouit de toute la mémoire et qu'aucun autre processus n'existe.  L'OS et le CPU maintiennent cette abstraction.
  • 7.
  • 8.
  • 9.
    Stack et Passage deparamétres  Int Add (int a, intb) { int c ; c = a+b ; return c ; }  Main() { Add(10,20) ; print() ; }
  • 10.
    Exploit the BufferOverflow  «Talk is Cheap, Show me the Code ». Linus Torvalds
  • 11.
    Comment se protéger?  Bon sens: Ecrire un code sécurisé en controlant la taille des arguments que le programme accepte.  NX(Non Executable Memory): Les instructions contenues dans la mémoire ne peuvent pas être exécutée.  ASLR(Address Space Layout Randomize) : A chaque exécution, les zones mémoires allouées pour le programme changent d'une façon aléatoire.  Stack Canaries: placer un int avant l'adresse RET ainsi pour changer le RET(EIP) on doit changer la valeur de ce int, une fois cette valeur est changée, le programme s'arrétera.
  • 12.
    Prochainement  Partie pratique :Remote Buffer Overflow.  Exploiter une faille buffer Overflow pour contrôler un système complét. ____________________________ A suivre ...