Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

1 Buffer Overflow Markus Hennecke Thomas Richter 11.12.2002.

Ähnliche Präsentationen


Präsentation zum Thema: "1 Buffer Overflow Markus Hennecke Thomas Richter 11.12.2002."—  Präsentation transkript:

1 1 Buffer Overflow Markus Hennecke Thomas Richter

2 Buffer OverflowHennecke / Richter 2 Übersicht Arten der Buffer Overflow Stack Overflow Heap Overflow Programmierfehler und deren Vermeidung Unsichere C-Funktionen Sichere Funktionen am Beispiel strlcpy Möglichkeiten zur Vermeidung von Programmierfehlern

3 Buffer OverflowHennecke / Richter 3 Übersicht Struktur eines Exploits Verhinderung von Buffer Overflow Hinzulinken von Bibliotheken Sprachen wie ADA, JAVA, etc. Änderungen am C-Compiler Performanceänderung vs. Sicherheitsgewinn

4 Buffer OverflowHennecke / Richter 4 Betriebssystemdesign Non-Executable Stack Unterstützung durch den Prozessor Übersicht

5 Buffer OverflowHennecke / Richter 5 Arten des Buffer Overflow Speicherorganisation moderner Rechner

6 Buffer OverflowHennecke / Richter 6 Arten des Buffer Overflow Stack Overflow Stack Overflow Typischer Unterprogrammaufruf in C: pushl $3 pushl $2 pushl $1 call function 1.Argumente in umgekehrter Reihenfolge auf den Stack legen 2.IP auf Stack legen und an Adresse von function springen

7 Buffer OverflowHennecke / Richter 7 Arten des Buffer Overflow Stack Overflow Ausführen eines Unterprogramms: 1. Platz für Lokale Variablen schaffen (BP = SP; SP –= benötigte Größe) 2. Programmtext ausführen 3. Stackpointer anpassen 4. RET holt die Rücksprungadresse die das Hauptprogramm auf den Stack legte

8 Buffer OverflowHennecke / Richter 8 Arten des Buffer Overflow Stack Overflow Organisation Lokaler Variablen: Überschreiben von Variablen Überschreiben der Rücksprungadresse Durch überschreiben der Rücksprungadresse kann an eine beliebige Stelle im Speicher gesprungen werden!

9 Buffer OverflowHennecke / Richter 9 Arten des Buffer Overflow Heap Overflow Heap – dyn. allozierter Speicher wächst nach oben( lower Addr higher Addr)

10 Buffer OverflowHennecke / Richter 10 Überschreiben der Speichergrenze Lösung: Einfügen von canary-values (Stackguard) Überschreiben von Function Pointern Einfügen eigenen Shellcodes Adresse einer bestimmten Funktion nutzen Nutzung der PLT (Procedur Linking Table) Arten des Buffer Overflow Heap Overflow

11 Buffer OverflowHennecke / Richter 11 Programmierfehler und ihre Vermeidung unsichere C-Funktionen

12 Buffer OverflowHennecke / Richter 12 Programmierfehler und ihre Vermeidung strlcpy und strlcat größenbegrenztes Stringkopieren Stringabschluß mit \0 in Stringgröße einplanen strlcpy kopiert zeichenweise src dst strlcpy gibt total length von src zurück

13 Buffer OverflowHennecke / Richter 13 Struktur eines Exploits Konstruktion des Exploits: 1.Erstellen des benötigten Codes 2.Optimieren des Exploits und Anpassung das System 3.Konstruktion des überlangen Strings Beispiel für Shell-Code: char shellcode[] = \xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b \x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd \x80\xe8\xdc\xff\xff\xff/bin/sh;

14 Buffer OverflowHennecke / Richter 14 Struktur eines Exploits Generierung des Codes #include void main() { char *name[2]; name[0] = "/bin/sh"; name[1] = NULL; execve(name[0], name, NULL); } jmp 0x2a popl %esi movl %esi,0x8(%esi) movb $0x0,0x7(%esi) movl $0x0,0xc(%esi) movl $0xb,%eax movl %esi,%ebx leal 0x8(%esi),%ecx leal 0xc(%esi),%edx int $0x80 movl $0x1, %eax movl $0x0, %ebx int$0x80 call-0x2f.string \"/bin/sh\" 1.Adresse des Strings unbekannt 2.Null Bytes im Exploit Code 3.Begrenzter Platz für Buffer Overflow

15 Buffer OverflowHennecke / Richter 15 Struktur eines Exploits Optimieren des Exploits jmp 0x1f popl %esi movl %esi,0x8(%esi) xorl %eax,%eax movb %eax,0x7(%esi) movl %eax,0xc(%esi) movb $0xb,%al movl %esi,%ebx leal 0x8(%esi),%ecx leal 0xc(%esi),%edx int $0x80 xorl %ebx,%ebx movl %ebx,%eax inc %eax int $0x80 call -0x24.string \"/bin/sh\" Problem: Finden der Adresse des Exploit-Codes Lösung: Puffer mit NOP Befehlen auffüllen Ungefähre Einsprung- adresse

16 Buffer OverflowHennecke / Richter 16 Struktur eines Exploits Fazit Vorgestellter Lösungsansatz nur für Local Root Exploits Komplizierter Aufbau bei Remote-Exploits (Verbiegen von stdin / stdout Interaktive Shell ) Manchmal ungünstige Verhältnisse Probleme mit der Stackgröße Überschriebene Variablen

17 Buffer OverflowHennecke / Richter 17 Verhindern von Buffer Overflow durch Entwicklungswerkzeuge Libsafe Erweiterung der libc Schlüsselidee: Puffergröße automatisch absichern Prüfung Speichergröße bei C-Programmen kritischer Punkt Libsafe Festlegung d. MaxBufferSize Ersetzung unsicherer C-Funktionen

18 Buffer OverflowHennecke / Richter 18 Verhindern von Buffer Overflow durch Entwicklungswerkzeuge Programmiersprachen die auf Pufferüberläufe achten Laufzeitumgebungen wie JAVA oder Perl (Solange der Interpreter fehlerfrei ist) Runtime-Checks wie in ADA, Pascal, etc. Geschwindigkeitseinbußen gegenüber üblichen C-Compilern

19 Buffer OverflowHennecke / Richter 19 Verhindern von Buffer Overflow durch Entwicklungswerkzeuge Stack-Smashing Protection ProPolice Stack-Smashing Protector für den GCC (Version und 3.2) Implementierung von Buffer Overflow Detection von Hiroaki Etoh (IBM Research Labs) Grundidee StackGuard Geringerer Leistungsverlust als andere Lösungen

20 Buffer OverflowHennecke / Richter 20 Verhindern von Buffer Overflow durch Entwicklungswerkzeuge Verfügbarkeit Processor GCC GCC-3.2 Intel x86bootstrapped & checked powerpcbootstrapped & checked sparcbootstrapped & checkednot tested VAXbootstrappednot tested mipsbootstrappednot tested Motolora 68k bootstrapped & checkednot tested alphabootstrappednot tested sparc64bootstrappednot tested

21 Buffer OverflowHennecke / Richter 21 Verhindern von Buffer Overflow durch Entwicklungswerkzeuge Ausführungszeiten

22 Buffer OverflowHennecke / Richter 22 Verhindern von Buffer Overflow durch Entwicklungswerkzeuge Ausführungszeiten

23 Buffer OverflowHennecke / Richter 23 Open Wall Project Linux Kernel Patch Sammlung sicherheitsrelevanter Features Non – Executable - Stack Restricted Links in /temp Restricted FIFOs in /temp Restricted /proc Special Handling of fd 0, 1 und 2 Einschränkung RLIMIT_NPROC Betriebssystemdesign Linux

24 Buffer OverflowHennecke / Richter 24 Einschränkung Speichergröße je Prozess Privilegierte IP-Aliases Problem Webhoster mit Shell/CGI- Access Betriebssystemdesign Linux

25 Buffer OverflowHennecke / Richter 25 Betriebssystemdesign Prozessoreigenschaften Unterstützung durch den Prozessor bzw die MMU Stackseiten werden als Non-Executable markiert Code-Seiten sind als nicht Veränderbar markiert Heap sollte auch Non-Executable sein, Limitierungen in aktuellen Prozessoren

26 Buffer OverflowHennecke / Richter 26 Betriebssystemdesign Prozessoreigenschaften Umgehung von Non-Executable Beschränkungen durch Sprünge in legale Code Bereiche möglich Erschwerung der Entwicklung eines sinnvollen Exploits Sicherheitsprobleme bei GUI- Implementierung im OS

27 Buffer OverflowHennecke / Richter 27 Quellen A Buffer Overflow Study - Attacks & Defenses by Pierre-Alain FAYOLLE, Vincent GLAUME


Herunterladen ppt "1 Buffer Overflow Markus Hennecke Thomas Richter 11.12.2002."

Ähnliche Präsentationen


Google-Anzeigen