Stack Bounds Protection with Low Fat Pointers

被引:48
作者
Duck, Gregory J. [1 ]
Yap, Roland H. C. [1 ]
Cavallaro, Lorenzo [2 ]
机构
[1] Natl Univ Singapore, Dept Comp Sci, Singapore, Singapore
[2] Royal Holloway Univ London, Informat Secur Grp, Egham, Surrey, England
来源
24TH ANNUAL NETWORK AND DISTRIBUTED SYSTEM SECURITY SYMPOSIUM (NDSS 2017) | 2017年
基金
英国工程与自然科学研究理事会; 新加坡国家研究基金会;
关键词
D O I
10.14722/ndss.2017.23287
中图分类号
TP [自动化技术、计算机技术];
学科分类号
0812 ;
摘要
Object bounds overflow errors are a common source of security vulnerabilities. In principle, bounds check instrumentation eliminates the problem, but this introduces high overheads and is further hampered by limited compatibility against un-instrumented code. On 64-bit systems, low-fat pointers are a recent scheme for implementing efficient and compatible bounds checking by transparently encoding meta information within the native pointer representation itself. However, low-fat pointers are traditionally used for heap objects only, where the allocator has sufficient control over object location necessary for the encoding. This is a problem for stack allocation, where there exist strong constraints regarding the location of stack objects that is apparently incompatible with the low-fat pointer approach. To address this problem, we present an extension of low-fat pointers to stack objects by using a collection of techniques, such as pointer mirroring and memory aliasing, thereby allowing stack objects to enjoy bounds error protection from instrumented code. Our extension is compatible with common special uses of the stack, such as alloca, setjmp and longjmp, exceptions, and multi-threading, which rely on direct manipulation of the stack pointer. Our experiments show that we successfully extend the advantages of the low-fat pointer encoding to stack objects. The end result is a competitive bounds checking instrumentation for the stack and heap with low memory and runtime overheads, and high compatibility with un-instrumented legacy code.
引用
收藏
页数:15
相关论文
共 27 条
[1]  
Abadi M., 2005, CCS
[2]  
Akritidis P., 2009, USENIX SEC S USENIX
[3]  
[Anonymous], 2003, GCC DEV SUMMIIT
[4]  
[Anonymous], 2016, THE HEARTBLEED BUG
[5]  
Austin T.M., 1994, Programming Language Design and Implementation
[6]  
Castro M, 2006, Usenix Association 7th Usenix Symposium on Operating Systems Design and Implementation, P147
[7]  
Chen S., 2005, USENIX SEC S USENIX USENIX SEC S USENIX
[8]  
Chen X., 2015, NETWORK DISTRIBUTED
[9]  
Dang Thurston H.Y., 2015, P 10 ACM S INF COMP, P555, DOI [10.1145/2714576.2714635, DOI 10.1145/2714576.2714635]
[10]  
Ding B., 2012, INT S SOFTW REL ENG INT S SOFTW REL ENG