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