SoK: Shining Light on Shadow Stacks
Speaker/Bio
Nathan Burow is a Technical Staff Member at MIT Lincoln Laboratory. His research focuses both on securing legacy C/C++ code through memory safety, control-flow integrity, and shadow stacks, as well as new technologies for building tomorrow's secure system, in particular the combination of safe languages like Rust and new tagged or capability based architectures. When not in front of a computer, Nathan can be found cycling or skiing. He completed his PhD in 2019 at Purdue under Mathias Payer in the HexHive group.
Abstract
Control-Flow Hijacking attacks are the dominant
attack vector against C/C++ programs. Control-Flow Integrity
(CFI) solutions mitigate these attacks on the forward edge,
i.e., indirect calls through function pointers and virtual calls.
Protecting the backward edge is left to stack canaries, which are
easily bypassed through information leaks. Shadow Stacks are
a fully precise mechanism for protecting backwards edges, and
should be deployed with CFI mitigations.
We present a comprehensive analysis of all possible shadow
stack mechanisms along three axes: performance, compatibil-
ity, and security. For performance comparisons we use SPEC
CPU2006, while security and compatibility are qualitatively
analyzed. Based on our study, we renew calls for a shadow
stack design that leverages a dedicated register, resulting in
low performance overhead, and minimal memory overhead,
but sacrifices compatibility. We present case studies of our
implementation of such a design, Shadesmar, on Phoronix and
Apache to demonstrate the feasibility of dedicating a general
purpose register to a security monitor on modern architectures,
and Shadesmar’s deployability. Our comprehensive analysis,
including detailed case studies for our novel design, allows
compiler designers and practitioners to select the correct shadow
stack design for different usage scenarios.
Shadow stacks belong to the class of defense mechanisms
that require metadata about the program’s state to enforce
their defense policies. Protecting this metadata for deployed
mitigations requires in-process isolation of a segment of the
virtual address space. Prior work on defenses in this class has
relied on information hiding to protect metadata. We show that
stronger guarantees are possible by repurposing two new Intel
x86 extensions for memory protection (MPX), and page table
control (MPK). Building on our isolation efforts with MPX
and MPK, we present the design requirements for a dedicated
hardware mechanism to support intra-process memory isolation,
and discuss how such a mechanism can empower the next wave of
highly precise software security mitigations that rely on partially
isolated information in a process
Reference
- N. Burow, X. Zhang, M. Payer. "SoK: Shining Light on Shadow Stacks". SP'19