UNIVERSITÀ DI PERUGIA
DIPARTIMENTO DI MATEMATICA E INFORMATICA
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
Linux examples of
Buffer overflow attacks
Prof. Stefano Bistarelli
Università “G. d’Annunzio”
Dipartimento di Scienze, Pescara
C
Consiglio Nazionale delle
Ricerche
Iit
Istituto di Informatica e Telematica - Pisa
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
Stack based overflow
Vedi 0x270 Stack-Based Overflows
memoria
bassa
buffer
flag
SFP*
Indirizzo di ritorno (ret)
EBP'
nuovo
EBP
a
b
memoria
alta
S. Bistarelli - Metodologie di Secure
Programming
2
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
Uno dei problemi da risolvere nello stack based
overflow attack e’ capire dove far saltare il
programma attaccato (scrivendo l’indirizzo nello
stack (che verra’ poi copiato nel ret address).
Infatti i programmi vengono caricati dinamicamente
in memoria e non so a che indirizzo dello stack sara’
memorizzato il mio buffer (con la shell code)
A che indirizzo ??
NOP sled
bytecode
Indirizzo di ritorno ripetuto
S. Bistarelli - Metodologie di Secure
Programming
3
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
In gcc e’ possibile conoscere indirizzo inizio
stack (valore esp) cosi:
unsigned long sp(void)
// This is just a little function
{ __asm__("movl %esp, %eax");}
// used to return the stack pointer
offset = 0;
// Use an offset of 0
esp = sp();
// Put the current stack pointer into
esp
ret = esp - offset;
// We want to overwrite the ret
address
S. Bistarelli - Metodologie di Secure
Programming
4
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
NOP sled
bytecode
Indirizzo di ritorno ripetuto
ESP ESP
Ambiente
procedura che
chiama
programma da
attaccare
Ambiente programma da attaccare
S. Bistarelli - Metodologie di Secure
Programming
5