Control-Flow Integrity (CFI) is an attractive security property with which most injected and code-reuse attacks can be defeated, including advanced attacking techniques like return-oriented programming.
CFI extracts a control-flow graph (CFG) for a given program, with checks inserted before indirect branch instructions. Before executed during runtime, the checks consult the CFG to ensure that the indirect branch is allowed to reach the intended target. Hence, any sort of control-flow hijacking can be prevented. This concise volume proposes novel solutions to handle the fundamental components of CFI enforcement: accurately recovering the policy (CFG); embedding the CFI policy securely; and efficiently enforcing the CFI policy.
Addressing the first component, the book systematically studies two methods that recover CFI policy based on function signature matching at the binary level, then offers a unique rule-and heuristic-based mechanism to more accurately recover function signature. To embed CFI policy securely, the book advocates a new platform that encodes the policy into the machine instructions directly without relying on consulting any read-only data structure. Finally, the work prescribes a mature dynamic-code-optimization platform called DynamoRIO to enforce the policy when needed.
Key features: