Missing the Point(er): On the Effectiveness of Code Pointer Integrity

Memory corruption attacks continue to be a major vector of attack for compromising modern systems. Numerous defenses have been proposed against memory corruption attacks, but they all have their limitations and weaknesses. Stronger defenses such as complete memory safety for legacy languages (C/C++)...

Full description

Bibliographic Details
Main Authors: Evans, Isaac, Fingeret, Samuel (Samuel P.), González, Julián Armando, Otgonbaatar, Ulziibayar, Tang, Tiffany(Tiffany L.), Shrobe, Howard E, Sidiroglou, Stylianos, Rinard, Martin C, Okhravi, Hamed
Other Authors: Massachusetts Institute of Technology. Computer Science and Artificial Intelligence Laboratory
Format: Article
Language:English
Published: Institute of Electrical and Electronics Engineers (IEEE) 2020
Online Access:https://hdl.handle.net/1721.1/125963
_version_ 1826193441359396864
author Evans, Isaac
Fingeret, Samuel (Samuel P.)
González, Julián Armando
Otgonbaatar, Ulziibayar
Tang, Tiffany(Tiffany L.)
Shrobe, Howard E
Sidiroglou, Stylianos
Rinard, Martin C
Okhravi, Hamed
author2 Massachusetts Institute of Technology. Computer Science and Artificial Intelligence Laboratory
author_facet Massachusetts Institute of Technology. Computer Science and Artificial Intelligence Laboratory
Evans, Isaac
Fingeret, Samuel (Samuel P.)
González, Julián Armando
Otgonbaatar, Ulziibayar
Tang, Tiffany(Tiffany L.)
Shrobe, Howard E
Sidiroglou, Stylianos
Rinard, Martin C
Okhravi, Hamed
author_sort Evans, Isaac
collection MIT
description Memory corruption attacks continue to be a major vector of attack for compromising modern systems. Numerous defenses have been proposed against memory corruption attacks, but they all have their limitations and weaknesses. Stronger defenses such as complete memory safety for legacy languages (C/C++) incur a large overhead, while weaker ones such as practical control flow integrity have been shown to be ineffective. A recent technique called code pointer integrity (CPI) promises to balance security and performance by focusing memory safety on code pointers thus preventing most control-hijacking attacks while maintaining low overhead. CPI protects access to code pointers by storing them in a safe region that is protected by instruction level isolation. On x86-32, this isolation is enforced by hardware, on x86-64 and ARM, isolation is enforced by information hiding. We show that, for architectures that do not support segmentation in which CPI relies on information hiding, CPI's safe region can be leaked and then maliciously modified by using data pointer overwrites. We implement a proof-of-concept exploit against Nginx and successfully bypass CPI implementations that rely on information hiding in 6 seconds with 13 observed crashes. We also present an attack that generates no crashes and is able to bypass CPI in 98 hours. Our attack demonstrates the importance of adequately protecting secrets in security mechanisms and the dangers of relying on difficulty of guessing without guaranteeing the absence of memory leaks.
first_indexed 2024-09-23T09:39:17Z
format Article
id mit-1721.1/125963
institution Massachusetts Institute of Technology
language English
last_indexed 2024-09-23T09:39:17Z
publishDate 2020
publisher Institute of Electrical and Electronics Engineers (IEEE)
record_format dspace
spelling mit-1721.1/1259632022-09-26T12:52:55Z Missing the Point(er): On the Effectiveness of Code Pointer Integrity Evans, Isaac Fingeret, Samuel (Samuel P.) González, Julián Armando Otgonbaatar, Ulziibayar Tang, Tiffany(Tiffany L.) Shrobe, Howard E Sidiroglou, Stylianos Rinard, Martin C Okhravi, Hamed Massachusetts Institute of Technology. Computer Science and Artificial Intelligence Laboratory Lincoln Laboratory Memory corruption attacks continue to be a major vector of attack for compromising modern systems. Numerous defenses have been proposed against memory corruption attacks, but they all have their limitations and weaknesses. Stronger defenses such as complete memory safety for legacy languages (C/C++) incur a large overhead, while weaker ones such as practical control flow integrity have been shown to be ineffective. A recent technique called code pointer integrity (CPI) promises to balance security and performance by focusing memory safety on code pointers thus preventing most control-hijacking attacks while maintaining low overhead. CPI protects access to code pointers by storing them in a safe region that is protected by instruction level isolation. On x86-32, this isolation is enforced by hardware, on x86-64 and ARM, isolation is enforced by information hiding. We show that, for architectures that do not support segmentation in which CPI relies on information hiding, CPI's safe region can be leaked and then maliciously modified by using data pointer overwrites. We implement a proof-of-concept exploit against Nginx and successfully bypass CPI implementations that rely on information hiding in 6 seconds with 13 observed crashes. We also present an attack that generates no crashes and is able to bypass CPI in 98 hours. Our attack demonstrates the importance of adequately protecting secrets in security mechanisms and the dangers of relying on difficulty of guessing without guaranteeing the absence of memory leaks. Office of Naval Research (award N00014-14-1-0006) DARPA (Grant FA8650-11-C-7192) 2020-06-23T20:54:45Z 2020-06-23T20:54:45Z 2015-07 2019-07-02T16:06:01Z Article http://purl.org/eprint/type/ConferencePaper 978-1-4673-6949-7 1081-6011 2375-1207 https://hdl.handle.net/1721.1/125963 Evans, Isaac, et al. "Missing the Point(er): On the Effectiveness of Code Pointer Integrity." 2015 IEEE Symposium on Security and Privacy, San Jose, CA, 2015, pp. 781-796, doi: 10.1109/SP.2015.53. © 2015 Author(s) en 10.1109/SP.2015.53 IEEE Symposium on Security and Privacy Creative Commons Attribution-Noncommercial-Share Alike http://creativecommons.org/licenses/by-nc-sa/4.0/ application/pdf Institute of Electrical and Electronics Engineers (IEEE) MIT web domain
spellingShingle Evans, Isaac
Fingeret, Samuel (Samuel P.)
González, Julián Armando
Otgonbaatar, Ulziibayar
Tang, Tiffany(Tiffany L.)
Shrobe, Howard E
Sidiroglou, Stylianos
Rinard, Martin C
Okhravi, Hamed
Missing the Point(er): On the Effectiveness of Code Pointer Integrity
title Missing the Point(er): On the Effectiveness of Code Pointer Integrity
title_full Missing the Point(er): On the Effectiveness of Code Pointer Integrity
title_fullStr Missing the Point(er): On the Effectiveness of Code Pointer Integrity
title_full_unstemmed Missing the Point(er): On the Effectiveness of Code Pointer Integrity
title_short Missing the Point(er): On the Effectiveness of Code Pointer Integrity
title_sort missing the point er on the effectiveness of code pointer integrity
url https://hdl.handle.net/1721.1/125963
work_keys_str_mv AT evansisaac missingthepointerontheeffectivenessofcodepointerintegrity
AT fingeretsamuelsamuelp missingthepointerontheeffectivenessofcodepointerintegrity
AT gonzalezjulianarmando missingthepointerontheeffectivenessofcodepointerintegrity
AT otgonbaatarulziibayar missingthepointerontheeffectivenessofcodepointerintegrity
AT tangtiffanytiffanyl missingthepointerontheeffectivenessofcodepointerintegrity
AT shrobehowarde missingthepointerontheeffectivenessofcodepointerintegrity
AT sidirogloustylianos missingthepointerontheeffectivenessofcodepointerintegrity
AT rinardmartinc missingthepointerontheeffectivenessofcodepointerintegrity
AT okhravihamed missingthepointerontheeffectivenessofcodepointerintegrity