Compiler-Enforced Buffer Overflow Elimination

Our research team is combining static and dynamic analysis to find language constructs that can result in out-of-bounds accesses and modify the compiler to eliminate potential buffer overflows.

C and C++ are prone to common programming errors that can lead to buffer overflows and other exploitable vulnerabilities. The C language is especially prominent in high-performance computing, embedded systems, and high-performance networking applications that are prone to attack. Buffer overflows cause security vulnerabilities, and their elimination in C is a significant technical problem because of C language features such as pointer arithmetic.

Our research approach to this area is to extend the LLVM open source compiler to eliminate buffer overflows using a hybrid approach consisting of static and dynamic methods as well as object- and pointer-based methods combined with pointer tables when necessary. Pointer metadata is carried in ways that do not break binary compatibility. In multi-threaded environments, updates of the metadata and pointer are synchronized so that they appear to change atomically.

Our team is developing a verification tool that traverses the intermediate representation to find all the potential loads and stores and make sure that the compiler has generated code to check them. The overhead of existing approaches has been an obstacle to adoption. Our team is working on ways to mitigate the run-time overhead and therefore lower the barrier to adoption.

Learn More About this Research

Performance of Compiler-Assisted Memory Safety Checking, an SEI report from July 2014, describes this research project.