1 Bu er Over ow am Beispielprogramm

Werbung
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
Herunterladen