Memory Safety and Sanitizers

Memory Safety and Sanitizers

1 Memory Safety and Sanitizers Chengyu Song 2 Memory Errors • Spacial errors: out-of-bound memory access • Example: stack buffer overflow • Temporal errors • Use-before-initialization (UBI) • Use-after-free (UAF) 3 Eternal Was in Memory 4 Spacial Memory Errors • Q: how do we define bound? • A1: pointer as a capability → SoftBound • A2: undefined memory → AddressSanitizer 5 Pointer as a Capability (1) • Q: what are legitimate ways to create pointers? 6 Pointer as a Capability (2) • Q: what are legitimate ways to create pointers? • A1: allocation • Stack and global: declaration means allocation • Heap: explicit (e.g. malloc ) • A2: address taken • of code fp = &func • of data p = &d 7 Pointer as a Capability (3) • Q: what are legitimate ways to create pointers? • A3: propagation • p1 = p2 • A4: pointer arithmetic • p = &array[index] • p = &struct→field • A5: type casting • p1 = type_cast(p2) 8 How to track capabilities? • Fat pointer: p := {bounds, address} • Easy bounds lookup, but breaks binary compatibility • Lotfat pointer: p := {meta_addr, address} • Faster bounds lookup, but requires special memory layout • Decoupled: meta(p) = lookup(p) • Slow bounds lookup, but has good binary compatibility 9 Capability reduction • Q: what is the expected capability of a pointer? • Based on allocation size? • Based on type? • A: a combination of both: whichever is smaller 10 Challenges • Type casting: how to recover (allocation) capabilities • Type Casting Verification • Different capabilities for different operations • char *p = "abc"; *p; p++; • Atomicity • How to make sure capabilities are always synced with the pointer 11 Capability Forgery (1) • Recall our stack buffer overflow case, what we forged? bottom of top of memory memory buffer sfp ret *str <------ [AAAAAAAAAAAAAAAA][AAAA][AAAA][AAAA] top of bottom of stack stack 12 Capability Forgery (2) • How to prevent forgery? • Encryption: PointGuard, Pointer Authentication Code (PAC) • Usually not strong enough • Tagged memory: CHERI • Requires hardware changes • Decoupled: SoftBound 13 Capability Revocation (1) • When a memory object is freed, all pointers point to the region should become invalid • Dangling pointers: pointers point to freed memory objects ( the whole region ) • UAF: deference a dangling pointer • Dangling pointers are common, but UAF is much rare • How to exploit a UAF vulnerability? 14 Capability Revocation (2) • Nullification: p = NULL • Automated pointer nullification • Key/version invalidation: key(p) != key(m) • Each pointer and memory has a key/version • Delayed free • Conservative garbage collection 15 Use-before-Initialization • Uninitialized pointer • Simple: no associated capability, dereference is invalid • Uninitialized data • Hard: similar to dangling pointers • How to exploit UBI vulnerabilities? • How to mitigate UBI vulnerabilities? • Forced initialization 16 Why Memory Safety? 17 Why NOT Memory Safety? • Compatibility: C/C++ is too flexible so retrofitting memory safety into legacy code is likely to create compatibility problem • SoftBound can only compile a small subset of SPEC CPU benchmarks • Intel MPX is being abandoned by GCC and Linux • Performance overhead • Metadata lookup • Capability checks 18 Address Sanitizer (1) • Undefined memory (redzones) is not allowed to access • What regions are undefined? • Spatial: out-of-bound regions → insert redzones between allocated memory objects • Temporal: freed regions → mark freed objects as redzones 19 Address Sanitizer (2) • Advantages • Compatibility: user-mode programs, kernel, even binaries • Bypassable • Spatial safety demands infinite "gap" (redzone) between memory objects • Temporal safety demands freed regions should never be reused 20 Address Sanitizer (3).

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    20 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us