Title :
Efficiently Securing Systems from Code Reuse Attacks
Author :
Kayaalp, Mehmet ; Ozsoy, Meltem ; Ghazaleh, Nael Abu ; Ponomarev, Dmitry
Author_Institution :
Comput. Sci. Dept., Binghamton Univ., Binghamton, NY, USA
Abstract :
Code reuse attacks (CRAs) are recent security exploits that allow attackers to execute arbitrary code on a compromised machine. CRAs, exemplified by return-oriented and jump-oriented programming approaches, reuse fragments of the library code, thus avoiding the need for explicit injection of attack code on the stack. Since the executed code is reused existing code, CRAs bypass current hardware and software security measures that prevent execution from data or stack regions of memory. While software-based full control flow integrity (CFI) checking can protect against CRAs, it includes significant overhead, involves non-trivial effort of constructing a control flow graph, relies on proprietary tools and has potential vulnerabilities due to the presence of unintended branch instructions in architectures such as x86-those branches are not checked by the software CFI. We propose branch regulation (BR), a lightweight hardware-supported protection mechanism against the CRAs that addresses all limitations of software CFI. BR enforces simple control flow rules in hardware at the function granularity to disallow arbitrary control flow transfers from one function into the middle of another function. This prevents common classes of CRAs without the complexity and run-time overhead of full CFI enforcement. BR incurs a slowdown of about 2% and increases the code footprint by less than 1% on the average for the SPEC 2006 benchmarks.
Keywords :
flow graphs; security of data; software architecture; software libraries; software reusability; BR; CRA; SPEC 2006 benchmarks; arbitrary code; arbitrary control flow transfers; attack code; branch regulation; code reuse attacks; compromised machine; control flow graph; executed code; function granularity; hardware security measures; jump-oriented programming approaches; library code; lightweight hardware-supported protection mechanism; nontrivial effort; return-oriented programming approaches; reuse fragments; security exploits; software CFI; software security measures; software-based full control flow integrity checking; system security; unintended branch instructions; x86; Benchmark testing; Computer architecture; Hardware; Libraries; Programming; Security; Software; Security; code reuse attacks; microarchitecture;
Journal_Title :
Computers, IEEE Transactions on
DOI :
10.1109/TC.2012.269