Return-Oriented Programming: Systems, Languages, and Applications

  • Authors:
  • Ryan Roemer;Erik Buchanan;Hovav Shacham;Stefan Savage

  • Affiliations:
  • University of California, San Diego;University of California, San Diego;University of California, San Diego;University of California, San Diego

  • Venue:
  • ACM Transactions on Information and System Security (TISSEC) - Special Issue on Computer and Communications Security
  • Year:
  • 2012

Quantified Score

Hi-index 0.02

Visualization

Abstract

We introduce return-oriented programming, a technique by which an attacker can induce arbitrary behavior in a program whose control flow he has diverted, without injecting any code. A return-oriented program chains together short instruction sequences already present in a program’s address space, each of which ends in a “return” instruction. Return-oriented programming defeats the W⊕X protections recently deployed by Microsoft, Intel, and AMD; in this context, it can be seen as a generalization of traditional return-into-libc attacks. But the threat is more general. Return-oriented programming is readily exploitable on multiple architectures and systems. It also bypasses an entire category of security measures---those that seek to prevent malicious computation by preventing the execution of malicious code. To demonstrate the wide applicability of return-oriented programming, we construct a Turing-complete set of building blocks called gadgets using the standard C libraries of two very different architectures: Linux/x86 and Solaris/SPARC. To demonstrate the power of return-oriented programming, we present a high-level, general-purpose language for describing return-oriented exploits and a compiler that translates it to gadgets.