Compiler-Assisted Code Randomization
Title | Compiler-Assisted Code Randomization |
Publication Type | Conference Paper |
Year of Publication | 2018 |
Authors | Koo, H., Chen, Y., Lu, L., Kemerlis, V. P., Polychronakis, M. |
Conference Name | 2018 IEEE Symposium on Security and Privacy (SP) |
Date Published | may |
Keywords | address space layout randomization, applied code transformation, CCR, code randomization, code uniformity, compiler level protection, compiler security, compiler-assisted code randomization, compiler-rewriter cooperation, composability, compositionality, fine-grained code randomization, fine-grained code transformation, Hardware, Human Behavior, LLVM compiler toolchain, metadata, Metrics, program compilers, Prototypes, pubcrawl, randomized variants, Resiliency, return oriented programming, return-oriented programming, Robustness, Runtime, Scalability, security, security of data, Software, software distribution models, software distribution norms, software diversification, software engineering, transformation-assisting metadata |
Abstract | Despite decades of research on software diversification, only address space layout randomization has seen widespread adoption. Code randomization, an effective defense against return-oriented programming exploits, has remained an academic exercise mainly due to i) the lack of a transparent and streamlined deployment model that does not disrupt existing software distribution norms, and ii) the inherent incompatibility of program variants with error reporting, whitelisting, patching, and other operations that rely on code uniformity. In this work we present compiler-assisted code randomization (CCR), a hybrid approach that relies on compiler-rewriter cooperation to enable fast and robust fine-grained code randomization on end-user systems, while maintaining compatibility with existing software distribution models. The main concept behind CCR is to augment binaries with a minimal set of transformation-assisting metadata, which i) facilitate rapid fine-grained code transformation at installation or load time, and ii) form the basis for reversing any applied code transformation when needed, to maintain compatibility with existing mechanisms that rely on referencing the original code. We have implemented a prototype of this approach by extending the LLVM compiler toolchain, and developing a simple binary rewriter that leverages the embedded metadata to generate randomized variants using basic block reordering. The results of our experimental evaluation demonstrate the feasibility and practicality of CCR, as on average it incurs a modest file size increase of 11.46% and a negligible runtime overhead of 0.28%, while it is compatible with link-time optimization and control flow integrity. |
DOI | 10.1109/SP.2018.00029 |
Citation Key | koo_compiler-assisted_2018 |
- Scalability
- Prototypes
- pubcrawl
- randomized variants
- Resiliency
- return oriented programming
- return-oriented programming
- Robustness
- Runtime
- program compilers
- security
- security of data
- Software
- software distribution models
- software distribution norms
- software diversification
- software engineering
- transformation-assisting metadata
- composability
- applied code transformation
- CCR
- code randomization
- code uniformity
- compiler level protection
- compiler-assisted code randomization
- compiler-rewriter cooperation
- compiler security
- address space layout randomization
- Compositionality
- fine-grained code randomization
- fine-grained code transformation
- Hardware
- Human behavior
- LLVM compiler toolchain
- metadata
- Metrics