Preventing Exploits Against Memory-Corruption Vulnerabilities

Preventing Exploits Against Memory-Corruption Vulnerabilities

Preventing exploits against memory-corruption vulnerabilities Chengyu Song Georgia Tech Agenda • Memory corruption vulnerability • Thesis Statement • Approaches • SDCG • Kenali • HDFI • Conclusion Memory corruption vulnerability • One of most prevalent vulnerabilities • Very common for C/C++ programs • One of most devastating vulnerabilities • Highly exploitable, e.g., arbitrary code execution • One of most widely exploited vulnerabilities Root causes • Spatial errors • Missing bound check, incorrect bound check, format string, type confusion, integer overflow, etc. • Temporal errors • Use-after-free, uninitialized data Exploit techniques • Code injection (modification) attacks • Control flow hijacking attacks • Data-oriented attacks • Information leak • Uninitialized data use Defense mechanisms (1) • Memory error detector • Spatial: adding bound checks for memory accesses • Software-based: CCured, Cyclone, SoftBound, etc. • Hardware-based: HardBound, CHERI, WatchDog[Lite], MPX, etc. • Temporal: tracking initialization/liveness • Software-based: memory sanitizer, CETS, DangNull • Hardware-based: SafeProc, WatchDogLite Defense mechanisms (2) • Exploit prevention techniques • Code corruption/injection: W^X, ret2usr protection • Control flow hijacking: stack cookies, CFI, vtable pointer protection, etc. • Data-oriented attacks: SFI, DFI • Code pointers leak: PointerGuard, ASLR-Guard • Code leak: execute-only memory • Generic information leak: DFI, DIFT Summary of existing mechanisms • Memory error detectors • Pros: fundamentally solves the problem • Cons: high performance overhead, even with hardware • Exploit prevention techniques • Pros: lower performance overhead • Cons: bypassable Problem Statement • How to build principled and practical defense techniques against memory-corruption-based exploits • Two goals • Principled: cannot be easily bypassed • Practical: low performance overhead, easy to adopt Approaches • Preventing code injection attacks: SDCG [NDSS’15] • Preventing data-oriented attacks: Kenali [NDSS’16] • Improving security and performance: HDFI [SP’16] Approaches • Preventing code injection attacks: SDCG [NDSS’15] • Preventing data-oriented attacks: Kenali [NDSS’16] • Improving security and performance: HDFI [SP’16] Code Injection Attacks ?! • Dates back to the Morris worm • Used to be the most popular exploit technique • Should have been eliminated by data execution prevention (DEP) Rising from dead • Dynamic code generation • Creates native code at runtime • Widely used by • Just-in-time (JIT) compilers and dynamic binary translators (DBT) • The confliction • Code cache must be both writable and executable A $50k attack • Mobile Pwn2Own Autumn 2013 – Chrome browser on Android 1) Exploited an integer overflow vulnerability to overwrite the size attribute of a WFT::ArrayBuffer object à arbitrary memory read/write capability 2) Leverage the arbitrary memory read capability to traverse memory and locate the code cache; 3) Leverage the arbitrary memory write capability to overwrite a JavaScript function with shellcode that allows attackers to invoke any function with any argument; 4) Leverage the arbitrary code execution capability to take out next attack step. A simple idea Code Cache Code Cache Code Cache (RX) (WR) (RX) Thread Code Generator Running t1 t2 Generated Code Running • Enforce that code pages can never be both writable and executable at the same time • Has been adopted by some JIT compilers • Mobile Safari, Internet Explorer, Firefox Exploiting race condition Code Cache Code Cache Code Cache (RX) (WR) (RX) Thread A 2 3 4 1 Thread B Code Generator Running t1 t2 Generated Code Running 1) Synchronization 2) Thread-A triggers the code generation 3) Thread-B attacks thread-A’s code cache 4) Thread-A execute injected shell code How realistic is the attack • Multi-thread programming is widely supported • Thread synchronization latencies are usually smaller than the attack window • Page access permission change can enlarge the attack window • Our preliminary experiment had 91% success rate Design principles • Only the code generator can write to the code cache • W^X policy should always be enforced • including temporal: WR à RX SDCG: overview • A multi-process-based protection scheme SDT = software dynamic translator Implementation challenges Untrusted Trusted SDT Thread Thread Thread • Memory map mem sync synchronization • Remote procedure call RPC (RPC) • Access permission enforcement syscall filtering Two Prototypes • Sharable infrastructure (~500 LoC) • Seccomp-sandbox (from Google Chrome) • Shared memory pool • System call filtering • SDT-specific modification • Strata (~1000 LoC) • V8 (~2500 LoC) Performance overhead (micro) • RPC latency • Average roundtrip: 8 – 9 µs • Requires stack copy: < 24% • Cache coherency overhead • 3x – 4x slower if the execution thread and the translation thread is not on the same core Performance overhead (macro) • SPEC CINT 2006 (Strata) • 1.46% for pinned schedule • 2.05% for free schedule • JavaScript benchmarks • 6.9% for 32-bit build, 5.65% for 64-bit build • Comparison: NaCl-JIT 79% for 32-bit build Summary • Target exploit technique • Code inject attack • Defense principle • W^X policy (including temporal) • Practical criteria • Performance overhead: low • Adoption difficulty: low Approaches • Preventing code injection attacks: SDCG [NDSS’15] • Preventing data-oriented attacks: Kenali [NDSS’16] • Preventing illegal data-flow: HDFI [SP’16] • Remaining tasks Why kernel • The de-facto trusted computing base (TCB) • Foundation of upper level security mechanisms (e.g., app sandbox) • Kernel vulnerabilities are not rare • Written in C • Heavy optimizations Why privilege escalation attacks • One of the most powerful attacks • Most popular attack against kernel • Sandbox bypassing • Jailbreak / rooting • Hard to prevent Challenge 1: hard to prevent 1 static int acl_permission_check 2 (struct inode *inode, int mask) Code Injection3. Evaluation. Attack Evaluate on the Linux kernel. Early 3 { Disable theMay. check 4 unsigned int mode = inode->i_mode; 5 References 6 if (likely(uid_eq(current_fsuid(), inode->i_uid))) Control-flow hijacking 7 mode >>= 6; http: Bypass[1] theOverview check of linux kernel security features. 8 else if (in_group_p(inode->i_gid)) //www.linux.com/learn/docs/727873-overview- 9 mode >>= 3; of-linux-kernel-security-features/, 2013. 10 11 if ((mask & ~mode & Data-oriented[2] M. Abadi, attacks M. Budiu, U. Erlingsson, and J. Ligatti. Control- 12 (MAY_READ | MAY_WRITE | MAY_EXEC)) == 0) ManipulateFlow the Integrity.check In ACM Conference on Computer and Commu- 13 return 0; nications Security, 2005. 14 return -EACCES; [3] T. Bletsch, X. Jiang, and V. Freeh. Mitigating Code-reuse 15 } Attacks with Control-flow Locking. In Annual Computer Security Applications Conference (ACSAC), 2011. Example 1: The decision making function of the Linux [4] S. Chen, J. Xu, E. C. Sezer, P. Gauriar, and R. K. Iyer. Non- DAC subsystem. control-data attacks are realistic threats. In Usenix Security Symposium (Security), 2005. 3.2 Proposal [5] C. Cowan, C. Pu, D. Maier, J. Walpole, P. Bakke, S. Beattie, A. Grier, P. Wagle, Q. Zhang, and H. Hinton. Stackguard: Au- To solve the problem, I plan to leverage the power of tomatic adaptive detection and prevention of buffer-overflow program analysis. Specifically, for each access control attacks. In Usenix Security Symposium (Security), 1998. mechanism, I want to [6] J. Criswell, N. Dautenhahn, and V. Adve. KCoFI: Complete Control-Flow Integrity for Commodity Operating System Ker- 1. Build an abstract model based on data and control nels. In IEEE Symposium on Security and Privacy (Oakland), dependencies; 2014. [7] M. Kerrisk. Lce: The failure of operating systems and how we 2. Manually annotate some seed data; can fix it. http://lwn.net/Articles/524952/, 2012. [8] M. Kerrisk. Namespaces in operation, part 1: namespaces 3. Use program analysis to map concrete program overview. http://lwn.net/Articles/531114/, 2013. data structures to the abstractions in the model. [9] V. Kuznetsov, L. Szekeres, M. Payer, G. Candea, R. Sekar, and D. Song. Code-pointer integrity. In Symposium on Operating Example 1 shows the decision making process of the Systems Design and Implementation (OSDI), 2014. DAC subsystem. In this example, the fsuid and fsgid [10] Microsoft Visual Studio 2005. Image has safe exception han- are subject IDs; the i_uid and i_gid are object IDs; dlers. http://msdn.microsoft.com/en-us/library/ 9a89h429%28v=vs.80%29.aspx. and the i_mode is the policy. So one possible abstrac- [11] S. Nagarakatte, J. Zhao, M. M. Martin, and S. Zdancewic. tion is: (1) object id has data depend (bind by compare SoftBound: Highly Compatible and Complete Spatial Memory operation) on subject id; (2) policy has control depend Safety for C. In ACM SIGPLAN Conference on Programming on subject ID and object ID; and (3) return value has Language Design and Implementation, 2009. control depend on mode. [12] S. Nagarakatte, J. Zhao, M. M. Martin, and S. Zdancewic. Since the subject ID is relatively easy to annotate, we CETS: Compiler Enforced Temporal Safety for C. In Interna- can first manually assign fsuid and fsgid as subject IDs. tional Symposium on Memory Management (ISMM), 2010. Then the system to be built will automatically identify [13] J. Newsome and D. Song. Dynamic Taint Analysis for Auto- matic Detection, Analysis, and Signature Generation of Ex- inode->i_uid and inode->i_gid as object IDs; and ploits on Commodity Software. In Annual Network and Dis- inode->i_mode

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    72 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