Linux examples of Buffer overflow attacks Prof. Stefano Bistarelli C Consiglio Nazionale delle Ricerche Iit Istituto di Informatica e Telematica - Pisa Università “G. d’Annunzio” Dipartimento di Scienze, Pescara
S. Bistarelli - Metodologie di Secure Programming Stack based overflow Vedi 0x270 Stack-Based Overflows buffer flag SFP* Indirizzo di ritorno (ret) a b memoria alta memoria bassa EBP' nuovo EBP S. Bistarelli - Metodologie di Secure Programming
S. Bistarelli - Metodologie di Secure Programming 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
S. Bistarelli - Metodologie di Secure Programming 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
S. Bistarelli - Metodologie di Secure Programming 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