Matthias Hanreich - TheGreyKnight Grundlagen Code Injection Beispiel: Buffer Overflow Gegenmaßnahmen Code Injection Return Oriented Programming (ROP) Gegenmaßnahmen ROP Demonstration CVE-2012-4969 Hands On: ROP-Challenge Aktueller Forschungsstand Einschleusen von fremdem Programmcode um Verhalten von Software zu ändern Ausnutzen von Programmier- oder Designfehlern (auch Hardware) Wird zur Laufzeit ausgeführt Manipulierte Dateien (PDFs, Webseiten, Word Dokumente, MP3s… ) Installation von Hintertüren System Hijacking (Metasploit Reverse Session) Privilege Escalation (Jailbreak) Temporäre Manipulation schreibbarer Speicherbereich + zugreifbare Speicheradresse Nicht initialisierter Speicher Buffer/Heap/Stack Overflow Dangling Pointer (Use-After-Free) Memory leaks Open root-shell on linux 0x1000ffff 0xAAAAAAAA StackFrame Main char* input 0x1000bbaa 0x1000aaaa Input = 100 x A AAAAAAAAAAA … AAAAAAAAAAA Return Adresse AAAAAAAAAAA Saved ESP AAAAAAAAAAA Buffer[80] AAAAAAAA … Parameter von foo Lokale Variablen von foo 0x1000ffff StackFrame Main char* input … Parameter von foo Return Adresse 0x100bbaa Saved ESP Padding 0x1000bbaa Buffer[80] Exploit Code 0x1000aaaa Input = „Exploit Code + Padding + Jump Address“ … Lokale Variablen Von foo Buffer Overflow: ◦ ◦ ◦ ◦ ◦ Vermeidung von Programmierfehlern (haha!) Typsichere Sprachen Überprüfung der Buffergrenzen (fgets) Canary Kopie der Return Adresse Code Injection: ◦ Control Flow Integrity (CFI) ◦ Data Execution Prevention (DEP) 0x1000ffff StackFrame Main char* input … Parameter von foo Return Adresse Saved ESP Zusätzlicher Speicherbereich mit zufällig gewählter Größe Canary exploit code Buffer[80] 0x1000aaaa … Lokale Variablen von foo 0x1000ffff StackFrame Main char* input … Parameter von foo Return Address Saved ESP exploit code Buffer[80] 0x1000aaaa Kopierte Return Adr Lokale Variablen von foo main() foo() foo2() foo3() foo4() Bei Abweichung vom Control Flow: Abbruch Synonyme: NX-Bit, XD-Bit, W+X protection Speicherseite bekommt zusätzlichen Flag „ausführbar“ Ziel: Code soll entweder nur geschrieben/gelesen oder nur ausgeführt werden Injected Code wird nicht ausgeführt Virtual Address Space Page 1 0x10000000 Page 2 Page 3 … 0xffffffff Physical Memory 32bit Architektur nur mit Physical Address Extention Verwendung von bereits existierendem Programmcode Verkettung von Speicheraddressen (ROP-Chain) Turing-complete (theoretisch jedes Programmverhalten abbildbar) Shacham 2008: When good instructions go bad: Generalizing return-oriented programming to RISC „ge-ROP-te“ Plattformen: Intel x86, SPARC, PowerPC, ARM, Z80 Return-to-LibC: Verkettung von Funktionen aus LibC Generalized ROP: Verkettung von Assembler Instruktionen Reverse Engineering zum finden von GadgetAddressen LibC ROP Chain … Gadget 3 Gadget 2 Gadget 1 Function 3 0x2b4ac89e 0x2b4acd62 0x2b4a334f retn retn Function 2 Function 1 Random Library ROP Chain Gadget 3 0x66666667 Gadget 2 Gadget 1 call EBX retn 0x2b4ac89e retn 0x2b4acd62 0x2b4a334f retn pop EBX retn xchg EAX, ESP retn Code Injection + Code Reuse Memory Page RW X Exploit ROP Chain Exploit Code Address Space Layout Randomization (ASLR) Trampolining Control Flow Integrity Heuristiken, Forward Simulation Überwachung kritischen Funktionen: Register Value Checking (z.b. ESP im Speicherbereich des aktuellen Threads) Verschleierung der Basisaddressen von Libraries, Heap, Stack Fine Grained ASLR: Randomisierung von Funktionsadressen Libraries werden zu BlackBoxen Nur Trampolin-Funktion nach außen sichtbar Trampolin-Funktion leitet Funktionsaufruf innerhalb der Library weiter LibC Trampolin Microsoft EMET ROPGuard ROPecker kBouncer CFI for COTS binaries Sicherheitslücke in Internet Explorer 6 – 9 System Hijacking möglich Use-After-Free Heap Spray ◦ ROP Chain ◦ Exploit Code (Metasploit Reverse Session) CMshtmlEd CMshtmlEd CMshtmlEd CMshtmlEd CMshtmlEd CMshtmlEd CMshtmlEd CMshtmlEd CMshtmlEd Exploit CMshtmlEd Code <body onselect=„TestArray()“> document.execCommand(“selectAll”) document.write(“L”) parent.ARRR[L].src = „Exploit Code“ CMshtmlEd::Exec Heap 0x8fffffff NOPs Exploit Code NOPs Exploit Code NOPs Exploit Code NOPs Exploit Code NOPs 0x80000000 Exploit Code NOP-Sled Payload 0x8fffcccc NOPs ROP Code Metasploit Reverse Session 0x8fffaaaa Exploit Code RW Memory Page of Heap Internet Explorer NOPs ROP Code Redirect Code CMshtmlEd CMshtmlEd::Exec EAX = 0x0C0C0C0C call EAX + 8 Metasploit Reverse Session X Demonstration defcon 2015 Quals: r0pbaby ◦ https://www.dropbox.com/sh/jl00jd4u51ek72l/AA DP5y-atHs-6eJF2-jDzFNsa?dl=0 picoCTF 2014: Hardcore ROP ◦ https://github.com/ubuntor/picoctf-2014writeups/tree/master/hardcore_rop ROP immer noch ein Problem – viele vorgestellten Gegenmaßnahmen/Tools wurden gebrochen ASLR / CFI sind aktuelle Forschungsthemen FuzzySecurity http://www.fuzzysecurity.com/tutorials/expDev/7.ht ml Corelian ◦ https://www.corelan.be/index.php/2010/06/16/ex ploit-writing-tutorial-part-10-chaining-dep-withrop-the-rubikstm-cube/ Shacham 2008: When good instructions go bad: Generalizing return-oriented programming to RISC Davi, Lehman 2014: Stitching the Gadgets: On the Ineffectiveness of Coarse-Grained Control-Flow Integrity Protection Davi, Liebchen 2015: Isomeron: Code Randomization Resilient to (Just-In-Time) Return-Oriented Programming Arias, Davi, Hanreich 2015: HAFIX: HardwareAssisted Flow Integrity Extension
© Copyright 2025 ExpyDoc