enhancing memory error detection for large scale
play

Enhancing Memory Error Detection for Large-Scale Applications and - PowerPoint PPT Presentation

Enhancing Memory Error Detection for Large-Scale Applications and Fuzz testing Wookhyun Han , Byunggil Joe, Byoungyoung Lee * , Chengyu Song , Insik Shin KAIST, * Purdue, UCR 1 Memory error glibc: getaddrinfo Heartbleed Shellshock


  1. Enhancing Memory Error Detection for Large-Scale Applications and Fuzz testing Wookhyun Han , Byunggil Joe, Byoungyoung Lee * , Chengyu Song † , Insik Shin KAIST, * Purdue, † UCR 1

  2. Memory error glibc: getaddrinfo Heartbleed Shellshock stack-based buffer overflow • Information leakage – Heartbleed • Privilege escalation – Shellshock • Remote code execution – Shellshock, glibc, Conficker 2

  3. Memory error detection • Pointer-based [SoftBound+CETS, Intel MPX] • Hardware support (cannot detect temporal memory errors) • Challenges to support complex applications • Redzone-based [AddressSanitizer (ASan)] • Compatible to complex applications • Most popular in practice  Google Chrome, Mozilla Firefox, Linux Kernel  American Fuzzy Lop (AFL), ClusterFuzz, OSS-Fuzz 3

  4. Redzone-based memory error detection • Buffer overflow (spatial memory errors) ptrX Shadow memory: a bitmap to validate all addresses objX Check before access Shadow memory Accessible 4

  5. Redzone-based memory error detection • Buffer overflow (spatial memory errors) ptrX Shadow memory: a bitmap to validate all addresses objX Check before Redzone: inaccessible access region between objects Shadow memory Accessible Inaccessible (redzone) 4

  6. Redzone-based memory error detection • Buffer overflow (spatial memory errors) ptrX Shadow memory: a bitmap to validate all addresses objX Redzone: inaccessible Error! region between objects Shadow memory Accessible Inaccessible (redzone) 4

  7. Redzone-based memory error detection • Use-after-free (temporal memory errors) ptrX objX Accessible Inaccessible Shadow memory 5

  8. Redzone-based memory error detection • Use-after-free (temporal memory errors) ptrX ptrX free(ptrX) objX Region is invalidated Quarantined and quarantined, but not actually deallocated Accessible Inaccessible Shadow memory 5

  9. Redzone-based memory error detection • Use-after-free (temporal memory errors) ptrX ptrX Hold the free(ptrX) objX region until Quarantined quarantine zone is full (FIFO) Accessible Inaccessible Shadow memory 5

  10. Redzone-based memory error detection • Use-after-free (temporal memory errors) ptrX ptrY ptrX ptrY = malloc() free(ptrX) objX objY Quarantined The region is actually deallocated, and can be allocated to a new object Accessible Inaccessible Shadow memory 5

  11. Limitations of redzone-based approach 1. What if a pointer accesses beyond redzone? ptrX objX objY 6

  12. Limitations of redzone-based approach 1. What if a pointer accesses beyond redzone? objX ptrX objY Spatial memory error 6

  13. Limitations of redzone-based approach 1. What if a pointer 2. What if a dangling pointer accesses beyond accesses after another object redzone? is allocated in the region? objX ptrX ptrX objX objY Spatial memory error 6

  14. Limitations of redzone-based approach 1. What if a pointer 2. What if a dangling pointer accesses beyond accesses after another object redzone? is allocated in the region? objX ptrX ptrX ptrX objX objZ objY Temporal memory error Spatial memory error 6

  15. Limitations of redzone-based approach 1. What if a pointer 2. What if a dangling pointer accesses beyond accesses after another object redzone? is allocated in the region? objX ptrX ptrX Cannot detect! ptrX objX objZ objY Temporal memory error Spatial memory error 6

  16. Motivation P1 • To enhance detectability of redzone- obj1 based memory error detection • P1. Large gap to detect spatial memory errors P1 • P2. Large quarantine zone to detect temporal memory errors obj1 P1 7

  17. Motivation P1 • To enhance detectability of redzone- P2 obj1 obj1 based memory error detection • P1. Large gap to detect spatial memory errors P1 • P2. Large quarantine zone to detect temporal memory errors P2 obj1 obj2 P1 7

  18. Motivation P1 • To enhance detectability of redzone- P2 obj1 obj1 based memory error detection • P1. Large gap to detect spatial memory errors P1 • P2. Large quarantine zone to detect temporal memory errors P2 obj1 obj2 Huge physical memory P1 required 7

  19. MEDS overview • Enhances detectability of redzone-based memory error detection • Idea: Fully utilize 64-bit virtual address space to support • P1. Large gap to detect spatial error • P2. Large quarantine zone to detect temporal error • Approach : minimize physical memory use • Page aliasing allocator and page protection • Hierarchical memory error detection 8

  20. Page aliasing (P1) • Maps multiple virtual pages to single physical page Virtual obj1 A memory page obj2 Allocated Redzone Page aliasing obj4 9

  21. Page aliasing (P1) • Maps multiple virtual pages to single physical page Virtual obj1 Physical obj1 obj2 A memory page obj3 obj2 obj4 Allocated Redzone Page aliasing obj4 9

  22. Page aliasing (P1) • Maps multiple virtual pages to single physical page Virtual obj1 Redzone itself does not occupy physical memory Physical obj1 obj2 A memory page obj3 obj2 obj4 Allocated Redzone Page aliasing obj4 9

  23. Page protection (P1) • Redzone only pages are unmapped Virtual obj1 Physical obj1 A memory page obj2 obj3 Unmapped page obj4 obj2 Allocated Redzone Page aliasing 10

  24. Page protection (P1) • Redzone only pages are unmapped Do not occupy shadow memory and physical Virtual memory obj1 Physical obj1 A memory page obj2 obj3 Unmapped page obj4 obj2 Allocated Redzone Page aliasing 10

  25. Page aliasing & Page protection (P2) Virtual obj1 Physical obj1 obj2 A memory page obj3 obj4 Unmapped page obj4 Allocated Redzone Page aliasing 11

  26. Page aliasing & Page protection (P2) Virtual Virtual obj1 Quarantined Physical Physical obj1 obj2 obj2 A memory page obj3 obj3 obj4 obj4 Unmapped page obj4 obj4 Allocated Redzone Page aliasing 11

  27. Page aliasing & Page protection (P2) Virtual Virtual obj1 Quarantined Physical Physical obj1 objX obj2 obj2 A memory page obj3 obj3 obj4 obj4 Unmapped page obj4 obj4 Allocated objX Redzone Page aliasing 11

  28. Page aliasing & Page protection (P2) Virtual Virtual Reuse physical obj1 memory immediately, Quarantined while not reusing virtual addresses Physical Physical obj1 objX obj2 obj2 A memory page obj3 obj3 obj4 obj4 Unmapped page obj4 obj4 Allocated objX Redzone Page aliasing 11

  29. Hierarchical memory error detection • Many different ways to represent redzones  Further optimizing physical memory uses ptr 12

  30. Hierarchical memory error detection • Many different ways to represent redzones  Further optimizing physical memory uses ptr #1. Shadow memory is invalid 12

  31. Hierarchical memory error detection • Many different ways to represent redzones  Further optimizing physical memory uses ptr #1. Shadow memory is invalid #2. Virtual page is unmapped 12

  32. Hierarchical memory error detection • Many different ways to represent redzones  Further optimizing physical memory uses ptr #1. Shadow memory is invalid #2. Virtual page is unmapped #3. Shadow memory is unmapped 12

  33. Evaluation • Configuration ASan MEDS Improv. Redzone 8-1024 bytes 4MB 16,384x Quarantine 128MB 80TB 65,536x • ASan cannot use configuration for MEDS (lack of memory) • Compatibility • Performance: 2 times slowdown • Detection (fuzz testing): 68% more detection 13

  34. Compatibility • Unit tests from real-world applications • Test cases in Chrome, Firefox, Nginx • All Passed • Memory error unit tests • ASan unit tests • All Passed • NIST Juliet test suites • All Passed except random access tests  ASan: 35% vs. MEDS: 98% 14

  35. Micro-scale performance overhead • TLB misses • 5 times more than ASan (more virtual pages with page aliasing ) • Number of system calls • mmap(), munmap(), and mremap() • 32 times more than ASan ( page aliasing and page protection ) • Memory footprint • 218% more than baseline • 68% more than ASan (much larger redzone and quarantine ) 15

  36. End-to-end performance overhead • 108% compared to baseline, 86% to ASan 4 3 2 1 Baseline 0 Chrome Firefox Apache Nginx ASan MEDS 16

  37. End-to-end performance overhead • 108% compared to baseline, 86% to ASan 4 41% to baseline 3 22% to ASan 2 1 Baseline 0 Chrome Firefox Apache Nginx ASan MEDS 16

  38. End-to-end performance overhead Large number of • 108% compared to baseline, 86% to ASan small objects on 4 stack 41% to baseline 3 243% to baseline 22% to ASan 211% to ASan 2 1 Baseline 0 Chrome Firefox Apache Nginx ASan MEDS 16

  39. Detection (fuzz testing) • Run AFL (8 cores, 6 hours) • Despite the performance overhead, explore 68.3% more unique crashes than ASan 4 3.5 3 2.5 2 1.5 ASan 1 0.5 0 17

  40. Detection (fuzz testing) • Run AFL (8 cores, 6 hours) • Despite the performance overhead, explore 68.3% more unique crashes than ASan MEDS finds more unique crashes in 4 3.5 initial phase, but saturated in the end 3 2.5 2 1.5 ASan 1 0.5 0 17

  41. Detection (fuzz testing) • Number of unique crashes with time spent (metacam) 70 Saturated 60 Found crashes 50 40 30 20 10 0 1 2 3 4 5 6 7 8 Time spent (hrs) ASan MEDS 18

Recommend


More recommend