Technische Universität Darmstadt Fachbereich Informatik System Security Lab Prof. Dr.-Ing. Ahmad-Reza Sadeghi M.Sc. Lucas Davi 4. Übungsblatt Vorlesung Embedded System Security SS 2011 Buer Overow Zusammenfassung In dieser Übung werden wir Grundlagen zu Buer Overow Angristechniken und zur Shellcode Analyse besprechen. Diese Übung dient hauptsächlich als Grundlage zur (praktischen) Übung 5, in welcher praktische Laufzeitangrie entwickelt werden sollen. Bitte beachtet, dass Übung 4 und 5 sich auf Buer Overow und Return-oriented Programming Angrie für Intel x86 konzentrieren. Im nächsten Sommersemester werden wir auch eine separate Übung für Laufzeitangrie auf ARM anbieten. 1 Buer Overow am Beispielprogramm Gegeben sei folgendes Programm: 1 2 3 4 5 6 7 8 9 10 11 12 void copy_string ( char char b u f f e r [ 1 6 ] ; { } strcpy ( buffer , str ) ; int { } * str ) main ( int argc , char * argv [ ] ) copy_string ( argv [ 1 ] ) ; 0; return a) Welche Elemente enthält ein Stack Frame grundsätzlich? Zeichnen Sie den speziellen Stack Frame für die copy_string Funktion und geben Sie für jedes Element die Länge in Bytes an (basierend auf der Intel 32 Bit x86 Architektur)! b) Das Programm ist anfällig für einen Buer Overow Angri. Welcher Input (in der Variable argv[1]) ist notwendig um Shellcode aufzurufen, der auf die Adresse 0x807201ac gemapped wurde? 1 2 Shellcode Analyse Gegeben sei folgender Shellcode (http://www.exploit-db.com/exploits/13444/): 1 2 3 4 5 6 7 8 9 10 11 xorl pushl pushl pushl movl cltd pushl pushl movl movb int %eax ,%eax %eax $0x68732f6e $0x69622f2f %esp ,%ebx %edx %ebx %esp ,% ecx $0xb ,% a l $0x80 Hinweis: Eine umfassende Referenz für Intel x86 Assembler Instruktionen bietet das Intel Instruction Set Reference Volume 2A and 2B: http://www.intel.com/products/processor/manuals/ a) Beschreiben Sie jeweils in einem Satz die Bedeutung jeder Instruktion! b) Fügen Sie in den unten abgebildeten Stack Frame die 5 Speicherwörter ein, die vom Shellcode auf dem Stack geschrieben werden! High memory addresses Low memory addresses Stack Abbildung 1: Stack Frame (Stack wächst nach unten) c) Welche Werte beinhalten die Register %eax bis %edx bevor die letzte Instruktion (int $0x80) ausgeführt wird! Gebe Sie konkrete Werte für die Register %eax und %edx an! Die Register %ebx und %ecx werden Adressen beinhalten die erst zur Laufzeit des Programms berechnet werden. Geben Sie jedoch mit Hilfe von Abbildung 1 an auf welche Worte Sie im Speicher zeigen! %eax: %ebx: %ecx: %edx: d) Was ist der Zweck der Instruktionen 2, 3 and 4? e) Welche Bedeutung hat der Hexwert 0xb in Instruktion 10? f) Welche Probleme entstehen wenn Instruktion 10 durch movl 0xb,%eax (Bytecode: b8 0b 00 00 00) ersetzt wird? 2