Hochschule Bonn-Rhein-Sieg FB Informatik, SS 2010 Penetration Testing III Bachelor in Computer Science (BCS) 6. Semester Exploit-Entwicklung mit Python von Daniel Baier und Demian Rosenkranz Penetration Testing III : Exploit-Entwicklung mit Python 1 / 20 Hochschule Bonn-Rhein-Sieg FB Informatik, SS 2010 Gliederung • Grundlagen Sicherheitslücken Prozess- und Speicherorganisation Funktionsaufruf • Schwachstelle identifizieren Buffer Overflow Disassemblieren • Entwicklung Auswahl der Umgebung Beispiel Python vs. Other • Fazit Penetration Testing III : Exploit-Entwicklung mit Python 2 / 20 Hochschule Bonn-Rhein-Sieg FB Informatik, SS 2010 Grundlagen: Sicherheitslücken -1• Fehlerhafte Implementierung • Methoden zum Auffinden Fuzzing: Zufällige Daten Eingabeschnittstelle Static Analyis Statisches Testverfahren Formale Prüfungen Codingstandards, Speicherlecks, Funktionen etc. Penetration Testing III : Exploit-Entwicklung mit Python 3 / 20 Hochschule Bonn-Rhein-Sieg FB Informatik, SS 2010 Grundlagen: Sicherheitslücken -2 Codereviews Während der Entwicklung Prüfung von Gutachtern Verbesserungen Debugging Während des Ausführens Haltepunkte Speicher bzw. Register modifizieren Penetration Testing III : Exploit-Entwicklung mit Python 4 / 20 Hochschule Bonn-Rhein-Sieg FB Informatik, SS 2010 Grundlagen: Prozess- und Speicherorganisation -1• X86/ i386 • Text Segment: Kompilierter Code • Data Segment: Statische und globale Daten Non Zero Initialisierte Daten • BSS (Block Startet by Symbol) Segment: Uninitialisierte Daten Per Default mit Null initialisiert Penetration Testing III : Exploit-Entwicklung mit Python 5 / 20 Hochschule Bonn-Rhein-Sieg FB Informatik, SS 2010 Grundlagen: Prozess- und Speicherorganisation -3• Heap: Beliebige Reihenfolge Wächst nach oben Dynamische Daten Malloc(), Realloc() etc. Globale und statische Variablen • Stack Oberes Speicherende (x86) Wächst nach unten Push, pop und top (%esp) Statische Variablen, Prozessregister Arrays in C/C++ wachsen nach oben Penetration Testing III : Exploit-Entwicklung mit Python 6 / 20 Hochschule Bonn-Rhein-Sieg FB Informatik, SS 2010 Grundlagen: Prozess- und Speicherorganisation -4• Stack Pointer (%esp): Top of the Stack: Funktionseintritt: %esp verkleinern Funktionsaustritt: %esp vergrößern Ungeeigneter Bezugspunkt • Base Pointer (%ebp) Bezugspunkt Funktionseintritt: %esp %ebp Rekursion beliebige Tiefen Penetration Testing III : Exploit-Entwicklung mit Python 7 / 20 Hochschule Bonn-Rhein-Sieg FB Informatik, SS 2010 Grundlagen: Prozess- und Speicherorganisation -5• Instruction Pointer(%eip): Adresse der nächsten Instruktion Codezweig Rücksprung durch Speichern auf Stack (call Unterfunktion) Ret Rücksprung in Register laden Penetration Testing III : Exploit-Entwicklung mit Python 8 / 20 Hochschule Bonn-Rhein-Sieg FB Informatik, SS 2010 Grundlagen: Funktionsaufruf • • • • • • • %ebp in Stack speichern %esp in %ebp speichern 4 Byte auf Stack reservieren Wert „5“ in Bereich + %eax schreiben <func +32>: %ebp %esp <func +34>: %ebp wiederherstellen <func +35>: %eip ändern und Unterfunktion verlassen • %eax: Rückgabewert der Unterfunktion Penetration Testing III : Exploit-Entwicklung mit Python 9 / 20 Hochschule Bonn-Rhein-Sieg FB Informatik, SS 2010 Schwachstelle identifizieren: Buffer Overflow Penetration Testing III : Exploit-Entwicklung mit Python 10 / 20 Hochschule Bonn-Rhein-Sieg FB Informatik, SS 2010 Schwachstelle identifizieren: Disassemblieren -1• Gnu Debugger (GDB): gdb pw • Alternativ: objdump –d –j .text pw Penetration Testing III : Exploit-Entwicklung mit Python 11 / 20 Hochschule Bonn-Rhein-Sieg FB Informatik, SS 2010 Schwachstelle identifizieren: Disassemblieren -2- Penetration Testing III : Exploit-Entwicklung mit Python 12 / 20 Hochschule Bonn-Rhein-Sieg FB Informatik, SS 2010 Entwicklung: Auswahl der Umgebung • Eclipse Kommandosubstitution Einfach zu installieren Plattformunabhängig Industrie-Standard • PyDev Eclipse PlugIn Einfach zu installieren Große Community Gute Dokumentation Penetration Testing III : Exploit-Entwicklung mit Python 13 / 20 Hochschule Bonn-Rhein-Sieg FB Informatik, SS 2010 Entwicklung: Beispiel -1Exploit in C: Penetration Testing III : Exploit-Entwicklung mit Python 14 / 20 Hochschule Bonn-Rhein-Sieg FB Informatik, SS 2010 Entwicklung: Beispiel -2Exploit in Python: Penetration Testing III : Exploit-Entwicklung mit Python 15 / 20 Hochschule Bonn-Rhein-Sieg FB Informatik, SS 2010 Entwicklung: Python vs. Other -1• Perl: Beliebt für Kommandozeile: ./vuln `perl –e ‘print “\x90“‘x202;‘``cat shellcode``perl –e ‘print “\x78\xf9\xff\xbf“‘x88;‘` Kryptische Programmierung Wenige Exploiting-Frameworks nutzen Perl • C: Aufwändige Programmierung Fehleranfällig • Python: Einfach zu Lernen und intuitiv Unterstützung von Exploiting-Frameworks (u.a. Metasploit und Core Impact) Penetration Testing III : Exploit-Entwicklung mit Python 16 / 20 Hochschule Bonn-Rhein-Sieg FB Informatik, SS 2010 Entwicklung: Python vs. Other -2Code Beispiel: (1) #include <stdio.h> (2) #include <string.h> (3) int main (int argc, char *argv[]){ (4) char buffer[500]; (5) strcpy(buffer, argv[1]); (6) return 0;} Python-Exploit: (1) shellcode = "\x31\xc0\xb0\x46\x31\xdb\x31\xc9\xcd\..“ (2) print "\x90"*202 + shellcode + "\x84\x0c\x88\xbf"*88 Penetration Testing III : Exploit-Entwicklung mit Python 17 / 20 Hochschule Bonn-Rhein-Sieg FB Informatik, SS 2010 Entwicklung: Python vs. Other -3C-Exploit: (1) (2) (3) (4) (5) #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> char shellcode[] = "\x31\xc0\xb0\x46\x31\xdb\x31\xc9\xcd\x80\xeb"; (6) unsigned long sp(void) { __asm__("movl %esp,%eax");} (7) int main(int argc, char *argv[]){ (8) …. (52)free(buffer); (53)Return 0; } Penetration Testing III : Exploit-Entwicklung mit Python 18 / 20 Hochschule Bonn-Rhein-Sieg FB Informatik, SS 2010 Fazit • Immer noch viele Vulnerabilities! Ausnutzen durch Exploits Gefahr für Anwender • Exploit-Entwicklung in vielen Sprachen, aber Python hat sich durch gesetzt! Intuitiv Große Community …. Penetration Testing III : Exploit-Entwicklung mit Python 19 / 20 Hochschule Bonn-Rhein-Sieg FB Informatik, SS 2010 Haben Sie noch Fragen? Vielen Dank für Ihre Aufmerksamkeit! Penetration Testing III : Exploit-Entwicklung mit Python 20 / 20