heaptherapy efficient handling of almost all heap
play

HeapTherapy+: Efficient Handling of (Almost) All Heap - PowerPoint PPT Presentation

HeapTherapy+: Efficient Handling of (Almost) All Heap Vulnerabilities Using Targeted Calling-Context Encoding Qiang Zeng , Golam Kayas, Emil Mohammed, Lannan Luo, Xiaojiang Du, and Junghwan Rhee DSN 2019 2 Trend of Memory Vulnerability


  1. HeapTherapy+: Efficient Handling of (Almost) All Heap Vulnerabilities Using Targeted Calling-Context Encoding Qiang Zeng , Golam Kayas, Emil Mohammed, Lannan Luo, Xiaojiang Du, and Junghwan Rhee DSN 2019

  2. 2 Trend of Memory Vulnerability Exploitation • Memory vulnerability exploitation • Stack-based • Heap-based • Many effective protection for call stacks • Stack canaries • Reordering local variables • Safe SEH (Structured Exception Handling) • Heap vulnerability exploitation becomes the trend • Heartbleed : heap buffer overread • WannaCry : heap buffer overwrite • Popular ROP (return oriented programming) attack [1] : Heap overflow => overwrite a function pointer => stack pivoting [1] McAfee, “Emerging ‘Stack Pivoting’ Exploits Bypass Common Security”, 2013

  3. 3 “Because the success of stack-based exploits has been reduced by the numerous security measures, heap-based attacks are now common” [Ratanaworabhan 2009] [Ratanaworabhan 2009] Ratanaworabhan, et al.."NOZZLE: A Defense Against Heap-spraying Code Injection Attacks." USENIX Security . 2009.

  4. 4 Types of Heap Vulnerabilities • Uninitialized read str = (char*) malloc(128); … // str is not initialized • Information leakage; … cout << str;

  5. 5 Types of Heap Vulnerabilities • Uninitialized read (1) D *p = new D(); … • Information leakage; … (2) delete p; • Use-after-free // buffer re-allocated and used (3) … (4) p->foo(); // use-after-free • Control-flow hijacking; … Virtual function this p table foo() bar() “More than 50% of known attacks targeting Windows 7 exploit use-after-free” [Zhang 2016] malicious virtual function table [Zhang 2016] Zhang, Chao, et al. "VTrust: Regaining Trust on Virtual Calls." NDSS . 2016.

  6. 6 Types of Heap Vulnerabilities • Uninitialized read • Information leakage; … • Use-after-free • Control-flow hijacking; … • Buffer overflow Ø Over-write • Manipulating data; control-flow hijacking; … Ø Over-read • Information leakage; …

  7. 7 Existing Measures • Checking every buffer access is great … but expensive • SoftBound (handle overflow and use-after-free): 67% • AddressSanitizer (handle overflow and use-after-free): 73% • MemorySanitizer (handle uninitialized read): 2.5x • SFI (software fault isolation), CFI (control-flow integrity), XFI, CPI (code pointer integrity), … • Challenges when working with existing shared libs (legacy code) • Some (like XFI) are still very expensive • Our previous work • Cruiser [PLDI’11], Kruiser [NDSS’12]: only handle overwrite • HeapTherapy [DSN’15]: only handle overwrite and overread

  8. 8 A Patching Perspective • Patching is an indispensable step throughout the life of a software system; however, • 153 days on average for delivering a patch [1] • Only 65% of vulnerabilities have patches available [2] • Fresh patches break systems frequently • Our goals • Handle heap overflow, uninitialized read, and use-after-free • Generate patches instantly with zero manual diagnosis efforts • Install patches without altering code, i.e., code-less patching • A very small overhead [1] S. Frei, “The Known Unknowns,” 2013. [2] S. frei, “” “End-point security failures, insight gained from secunia psi scans,” 2011.

  9. 9 Hypotheses Given a heap buffer overflow bug, the vulnerable buffers share the same calling context when they are allocated More generally, for a use-after-free or uninitialized-read vulnerability, the vulnerable buffers share the same calling context when they are allocated

  10. 10 → Verifying Hypotheses clone Given this vulnerability, many different exploits were collected and replayed start_thread handle_one_connection do_handle_one_connection thd_prepare_connection do_command MDL_key::mdl_key_init my_malloc malloc stpcpy Pathogen buffers are allocated. Vulnerable buffers are allocated Pathogen buffers are overflowed. Vulnerable buffers are exploited

  11. 11 Main Approach Using allocation-time calling context to characterize vulnerable buffers 1. When replaying the attack, record the allocation-time calling context of each buffer. When the offending operation (e.g., overflow) is detected, output the allocation-time calling context of the vulnerable buffer 2. During runtime, if a buffer being allocated has that allocation-time calling context, enhance it

  12. 12 Challenges • How to retrieve and compare calling contexts efficiently? • Retrieving calling context via stack walking is too expensive • ASLR makes the collected RAs useless • How to bridge offline attack analysis and online defense generation? • How to achieve code-less patching? • How to handle the diverse vulnerabilities in a uniform way?

  13. 13 • Targeted Calling Context Encoding • Offline Attack Analysis and Patch Generation • Online Defense Generation

  14. 14 Calling Context Encoding • Using an integer (or very few integers) to encode the calling context The integer is updated at each function call and return ; using • simple arithmetic operations • <3% slowdown; concise representation • Wide applications: testing coverage, anomaly detection, compilation optimization, logging, … PCC PCCE DeltaPath [Bond 2007] [Sumner 2010 ] [Zeng 2014] Support Object-Oriented ✔ ✗ ✔ Decoding ✗ ✔ ✔ Scalability ✗ ✗ ✔

  15. 15 Example: PCC • Goal: each unique ID represents a unique calling context ID = 0 t = ID 1 B() { 2 C(); ID = t * 3 + 2 B 3 D(); 4 } ID = t * 3 + 3 5 C 6 C() { t = ID ID = 2 7 D(); D 8 } ID = t * 3 + 7 9 ID = 3 ID = 13 10 D() { 11 Sensitive API! // calling context? 12 } Answer: Read the variable “ID” to get the calling context ID

  16. 16 Targeted Calling Context Encoding • A set of ideas that can minimize the encoding overhead • Key insight : When the target functions , whose calling contexts are of interest, are known, many call sites do no need to be instrumented • E.g., some functions never appear in the calling contexts that lead to the target functions • Target functions in our work: • malloc, calloc, realloc, memalign, aligned_alloc

  17. 17 (a) FCS (full-call-site instrumentation): original PCC encoding (b) TCS (targeted-call-site): H and I cannot reach the targets T1 and T2 (c) Slim: B , E and G each has only one out-going edge that reaches the targets (d) Incremental: F-T 1 and F-G-T 2 can be distinguished through the target

  18. 18 Encoding overhead • Implementation: added an LLVM pass for instrumentation • Evaluation: SPEC CPU2006 Integer • Size overhead • PCC: 12% • Targeted Calling context Encoding: 4.4% • 2.7x of improvement • Speed overhead • PCC: 2.4% • Targeted Calling Context Encoding: 0.4% • 6x of speed up

  19. 19 • Targeted Calling Context Encoding • Offline Attack Analysis and Patch Generation • Online Defense Generation

  20. 20 One-time program Patch generation instrumentation Program Attack inputs Program Instrumentation Tool Instrumented Offline Patch Generator program Patches Patched program execution Online Defense Configuration file Generator

  21. 21 Application Byte 1 Byte 2 Byte 2 ………… .. Byte n Memory … Shadow Shadow Shadow Shadow Shadow ………… .. Memory Information Information Information Information 1 0 A bit A bit V bits 1 1 1 1 1 1 1 1 V bits 0 0 0 0 0 0 0 0 • Accessibility-bit (A-bit): whether the byte can be accessed • If a buffer has been free-ed, all its A-bits are 0 … … … • Each buffer is surrounded by two red zones (16B each), whose A-bits are 0 • Validity-bit (V-bit): whether the bit is initialized • When a fresh buffer is malloc-ed, all it V-bits are 0 • Each buffer’s alloc-API and CCID are recorded (1) Detect overflow: an overflow will touch the inaccessible red zone (2) Detect use-after-free: a free-ed buffer is set as inaccessible and then added to a queue to delay the space reuse (3) Detect uninitialized read: more complex, but mainly relies on V-bits

  22. 22 Patches as a configuration file • Each patch is simply a tuple <alloc-API, CCID, vul-type> • Code-less patching: to “install” a patch, just add one line in the config file Configuration file <API, CCID, Vulnerability> ………… <memalign, 1854955292, OVERFLOW> <calloc, 8643565443, USE-AFTER-FREE> <malloc, 2598251483, UNINITIALIZED-READ> … ... ………… Read by Online … … …

  23. 23 • Targeted Calling Context Encoding • Offline Attack Analysis and Patch Generation • Online Defense Generation

  24. 24 Patches read into a hash table Configuration file <API, CCID, Vulnerability> ………… <memalign, 1854955292, OVERFLOW> <calloc, 8643565443, USE-AFTER-FREE> <malloc, 2598251483, UNINITIALIZED-READ> … ... ………… Read by Online Defense Generator Hash table Key Value A shared lib <MEMALIGN, 1854955292> (001) 2 <CALLOC, 8643565443> (010) 2 <MALLOC, 2598251483> (100) 2 … .. … …

  25. 25 Vulnerability Handling • Handle overflow • Append a guard page to each vulnerable buffer • Handle use-after-free • Delay the deallocation of the free-ed vulnerable buffers • Handle uninitialized read • Initialize the newly allocated vulnerable buffer with zeros

  26. 26

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend