Mathias Payer - Why Memory Corruption is Hard
From Katie Gentilello
Memory corruption has plagued systems since the dawn of computing. With the rise of defense techniques (such as stack cookies, ASLR, and DEP), attacks have become much more complicated, yet control-flow hijack attacks are still prevalent. Attacks rely on code reuse, often leveraging some form of information disclosure. Stronger defense mechanisms have been proposed but none have seen wide deployment so far due to the time it takes to deploy a security mechanism, the incompatibility with systems/software, and most severely due to performance overhead. In this talk, we evaluate the security benefits and limitations of the status quo and look into upcoming defense mechanisms (and their attacks).Control-Flow Integrity (CFI) and Code-Pointer Integrity (CPI) are two of the hottest upcoming defense mechanisms. CFI guarantees that the runtime control flow follows the statically determined control-flow graph. An attacker may reuse any of the valid transitions at any control-flow transfer. CPI on the other hand is a dynamic property that enforces memory safety guarantees integrity of code pointers by separating code pointers from regular data. We will discuss differences and advantages/disadvantages of both approaches, especially considering their security guarantees and performance impacts, and look at strategies to defend against other attack vectors like type confusion.