MESH: A Memory-Efficient Safe Heap for C/C++ Emanuel Q. Vintila Philipp Zieris Julian Horsch
[email protected] [email protected] [email protected] Fraunhofer AISEC Fraunhofer AISEC Fraunhofer AISEC Garching, near Munich, Germany Garching, near Munich, Germany Garching, near Munich, Germany ABSTRACT 1 INTRODUCTION While memory corruption bugs stemming from the use of unsafe The C and C++ programming languages are preferred for system programming languages are an old and well-researched problem, programming because they are efficient and offer low-level control. the resulting vulnerabilities still dominate real-world exploitation These advantages come at the cost of memory safety, requiring the today. Various mitigations have been proposed to alleviate the programmer to manually manage heap memory and ensure the problem, mainly in the form of language dialects, static program legality of memory accesses. Incorrect handling by the programmer analysis, and code or binary instrumentation. Solutions like Adress- can lead to serious issues [43] such as buffer overflows or use-after- Sanitizer (ASan) and Softbound/CETS have proven that the latter free bugs, which can be exploited by attackers to hijack the control- approach is very promising, being able to achieve memory safety flow (causing the program to inadvertently change its course of without requiring manual source code adaptions, albeit suffering execution) [6, 11, 35, 39] or to leak information [18, 40]. Even though substantial performance and memory overheads. While perfor- memory vulnerabilities are long-known issues, they are still very mance overhead can be seen as a flexible constraint, extensive common in mainstream programs: Out of all the vulnerabilities memory overheads can be prohibitive for the use of such solutions reported in the Common Vulnerabilities and Exposures (CVE) data- in memory-constrained environments.