Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
skip to main content
research-article

Buddy Stacks: Protecting Return Addresses with Efficient Thread-Local Storage and Runtime Re-Randomization

Published: 04 March 2022 Publication History

Abstract

Shadow stacks play an important role in protecting return addresses to mitigate ROP attacks. Parallel shadow stacks, which shadow the call stack of each thread at the same constant offset for all threads, are known not to support multi-threading well. On the other hand, compact shadow stacks must maintain a separate shadow stack pointer in thread-local storage (TLS), which can be implemented in terms of a register or the per-thread Thread-Control-Block (TCB), suffering from poor compatibility in the former or high performance overhead in the latter. In addition, shadow stacks are vulnerable to information disclosure attacks.
In this paper, we propose to mitigate ROP attacks for single- and multi-threaded server programs running on general-purpose computing systems by using a novel stack layout, called a buddy stack (referred to as Bustk), that is highly performant, compatible with existing code, and provides meaningful security. These goals are met due to three novel design aspects in Bustk. First, Bustk places a parallel shadow stack just below a thread’s call stack (as each other’s buddies allocated together), avoiding the need to maintain a separate shadow stack pointer and making it now well-suited for multi-threading. Second, Bustk uses an efficient stack-based thread-local storage mechanism, denoted STK-TLS, to store thread-specific metadata in two TLS sections just below the shadow stack in dual redundancy (as each other’s buddies), so that both can be accessed and updated in a lightweight manner from the call stack pointer rsp alone. Finally, Bustk re-randomizes continuously (on the order of milliseconds) the return addresses on the shadow stack by using a new microsecond-level runtime re-randomization technique, denoted STK-MSR. This mechanism aims to obsolete leaked information, making it extremely unlikely for the attacker to hijack return addresses, particularly against a server program that sits often tens of milliseconds away from the attacker.
Our evaluation using web servers, Nginx and Apache Httpd, shows that Bustk works well in terms of performance, compatibility, and security provided, with its parallel shadow stacks incurring acceptable memory overhead for real-world applications and its STK-TLS mechanism costing only two pages per thread. In particular, Bustk can protect the Nginx and Apache servers with an adaptive 1-ms re-randomization policy (without observable overheads when IO is intensive, with about 17,000 requests per second). In addition, we have also evaluated Bustk using other non-server applications, Firefox, Python, LLVM, JDK and SPEC CPU2006, to demonstrate further the same degree of performance and compatibility provided, but the protection provided for, say, browsers, is weaker (since network-access delays can no longer be assumed).

References

[1]
Martín Abadi, Mihai Budiu, Ulfar Erlingsson, and Jay Ligatti. 2005. Control-flow integrity. In Proceedings of the 12th ACM SIGSAC Conference on Computer and Communications Security. ACM, New York, 340–353.
[2]
Adobe. 2021. Adobe Flash Player. https://get.adobe.com/flashplayer/.
[3]
Naif Saleh Almakhdhub, Abraham A. Clements, Saurabh Bagchi, and Mathias Payer. 2020. \(\mu\) RAI: Securing embedded systems with return address integrity. In Network and Distributed System Security Symposium. Internet Society, Reston, Virginia, USA, 1–18.
[4]
Michael Backes and Stefan Nürnberger. 2014. Oxymoron: Making fine-grained memory randomization practical by allowing code sharing. In Proceedings of the 23rd USENIX Security Symposium. USENIX, Berkeley, California, USA, 433–447.
[5]
David Bigelow, Thomas Hobson, Robert Rudd, William Streilein, and Hamed Okhravi. 2015. Timely rerandomization for mitigating memory disclosures. In Proceedings of the 22nd ACM SIGSAC Conference on Computer and Communications Security. ACM, New York, 268–279.
[6]
Andrea Bittau, Adam Belay, Ali Mashtizadeh, David Mazières, and Dan Boneh. 2014. Hacking blind. In Proceedings of the 2014 IEEE Symposium on Security and Privacy. IEEE Computer Society, Washington D.C., USA, 227–242.
[7]
Tyler Bletsch, Xuxian Jiang, Vince W. Freeh, and Zhenkai Liang. 2011. Jump-oriented programming: A new class of code-reuse attack. In Proceedings of the 6th ACM Symposium on Information, Computer and Communications Security. ACM, New York, 30–40.
[8]
Marcel Böhme, Van-Thuan Pham, Manh-Dung Nguyen, and Abhik Roychoudhury. 2017. Directed greybox fuzzing. In Proceedings of the 2017 ACM SIGSAC Conference on Computer and Communications Security. ACM, New York, 2329–2344.
[9]
Tegan Brennan, Nicolás Rosner, and Tevfik Bultan. 2020. JIT leaks: Inducing timing side channels through just-in-time compilation. In 2020 IEEE Symposium on Security and Privacy. IEEE Computer Society, Washington D.C., USA, 96–111.
[10]
Tegan Brennan, Seemanta Saha, and Tevfik Bultan. 2020. JVM fuzzing for JIT-induced side-channel detection. In Proceedings of the ACM/IEEE 42nd International Conference on Software Engineering. ACM, New York, 1011–1023.
[11]
Nathan Burow, Derrick McKee, Scott A. Carr, and Mathias Payer. 2018. CFIXX: Object type integrity for C++ virtual dispatch. In Network and Distributed System Security Symposium. Internet Society, Reston, Virginia, USA, 1–14.
[12]
Nathan Burow, Xinping Zhang, and Mathias Payer. 2019. SoK: Shining light on shadow stacks. In Proceedings of the 40th IEEE Symposium on Security and Privacy. IEEE Computer Society, Washington D.C., USA, 985–999.
[13]
Microsoft Security Response Center. 2018. The Evolution of CFI Attacks and Defenses. https://github.com/microsoft/MSRC-Security-Research/tree/master/presentations/2018_02_OffensiveCon.
[14]
Stephen Checkoway, Lucas Davi, Alexandra Dmitrienko, Ahmad-Reza Sadeghi, Hovav Shacham, and Marcel Winandy. 2010. Return-oriented programming without returns. In Proceedings of the 17th ACM Conference on Computer and Communications Security. ACM, New York, 559–572.
[15]
Karl Chen and David Wagner. 2007. Large-scale analysis of format string vulnerabilities in Debian Linux. In Proceedings of the 2007 Workshop on Programming Languages and Analysis for Security. ACM, New York, 75–84.
[16]
Yueqiang Cheng, Zongwei Zhou, Yu Miao, Xuhua Ding, and Robert H. Deng. 2014. ROPecker: A generic and practical approach for defending against ROP attack. In Network and Distributed System Security Symposium. Internet Society, Reston, Virginia, USA, 1–14.
[17]
Tzi-cker Chiueh and Fu-Hau Hsu. 2001. RAD: A compile-time solution to buffer overflow attacks. In Proceedings 21st International Conference on Distributed Computing Systems. IEEE, New York, 409–417.
[18]
Mauro Conti, Stephen Crane, Lucas Davi, Michael Franz, Per Larsen, Marco Negro, Christopher Liebchen, Mohaned Qunaibit, and Ahmad-Reza Sadeghi. 2015. Losing control: On the effectiveness of control-flow integrity under stack attacks. In Proceedings of the 22nd ACM SIGSAC Conference on Computer and Communications Security. ACM, New York, 952–963.
[19]
Crispin Cowan, Calton Pu, Dave Maier, Heather Hintony, Jonathan Walpole, Peat Bakke, Steve Beattie, Aaron Grier, Perry Wagle, and Qian Zhang. 1998. StackGuard: Automatic adaptive detection and prevention of buffer-overflow attacks. In Proceedings of the 7th USENIX Security Symposium. USENIX, Berkeley, California, USA, 1–16.
[20]
Hong-Ning Dai, Zibin Zheng, and Yan Zhang. 2019. Blockchain for Internet of Things: A survey. IEEE Internet of Things Journal 6, 5 (2019), 8076–8094.
[21]
Thurston H. Y. Dang, Petros Maniatis, and David Wagner. 2015. The performance cost of shadow stacks and stack canaries. In Proceedings of the 10th ACM Symposium on Information, Computer and Communications Security. ACM, New York, 555–566.
[22]
Lucas Davi, Ahmad-Reza Sadeghi, Daniel Lehmann, and Fabian Monrose. 2014. Stitching the gadgets: On the ineffectiveness of coarse-grained control-flow integrity protection. In Proceedings of the 23rd USENIX Security Symposium. USENIX, Berkeley, California, USA, 401–416.
[23]
Bram Debouvere. 2021. Bmark. https://www.wirple.com/bmark/.
[24]
Google Developers. 2021. Octane2.0 Javascript Benchmark. https://chromium.github.io/octane/.
[25]
JetStream2 Developers. 2021. JetStream2: JavaScript and Web Assembly benchmarks. https://browserbench.org/JetStream/.
[26]
Gregory J. Duck, Xiang Gao, and Abhik Roychoudhury. 2020. Binary rewriting without control flow recovery. In Proceedings of the 41st ACM SIGPLAN Conference on Programming Language Design and Implementation. ACM, New York, 151–163.
[27]
I. Evans, S. Fingeret, J. Gonzalez, U. Otgonbaatar, T. Tang, H. Shrobe, S. Sidiroglou-Douskos, M. Rinard, and H. Okhravi. 2015. Missing the point(er): On the effectiveness of code pointer integrity. In Proceedings of the 2015 IEEE Symposium on Security and Privacy. IEEE Computer Society, Washington D.C., USA, 781–796.
[28]
Xiaokang Fan, Yulei Sui, Xiangke Liao, and Jingling Xue. 2017. Boosting the precision of virtual call integrity protection with partial pointer analysis for C++. In Proceedings of the 26th ACM SIGSOFT International Symposium on Software Testing and Analysis. ACM, New York, 329–340.
[29]
Robert Gawlik, Benjamin Kollenda, Philipp Koppe, Behrad Garmany, and Thorsten Holz. 2016. Enabling client-side crash-resistance to overcome diversification and information hiding. In Network and Distributed System Security Symposium. Internet Society, Reston, Virginia, USA, 1–15.
[30]
Cristiano Giuffrida, Anton Kuijsten, and Andrew S. Tanenbaum. 2012. Enhanced operating system security through efficient and fine-grained address space randomization. In Proceedings of the 21st USENIX Security Symposium. USENIX, Berkeley, California, USA, 40–55.
[31]
Enes Göktaş, Elias Athanasopoulos, Michalis Polychronakis, Herbert Bos, and Georgios Portokalidis. 2014. Size does matter: Why using gadget-chain length to prevent code-reuse attacks is hard. In Proceedings of the 23rd USENIX Security Symposium. USENIX, Berkeley, California, USA, 417–432.
[32]
Enes Goktas, Angelos Oikonomopoulos, Robert Gawlik, Benjamin Kollenda, Elias Athanasopoulos, Georgios Portokalidis, Cristiano Giuffrida, and Herbert Bos. 2016. Bypassing clang’s SafeStack for fun and profit. In Black Hat Europe. Black Hat Conference, London, 1–76.
[33]
Hong Hu, Chenxiong Qian, Carter Yagemann, Simon Pak Ho Chung, William R. Harris, Taesoo Kim, and Wenke Lee. 2018. Enforcing unique code target property for control-flow integrity. In Proceedings of the 2018 ACM SIGSAC Conference on Computer and Communications Security. ACM, New York, 1470–1486.
[34]
Hong Hu, Shweta Shinde, Sendroiu Adrian, Zheng Leong Chua, Prateek Saxena, and Zhenkai Liang. 2016. Data-oriented programming: On the expressiveness of non-control data attacks. In 2016 IEEE Symposium on Security and Privacy. IEEE Computer Society, Washington D.C., USA, 969–986.
[36]
Intel. 2021. Intel 64 and IA-32 Architectures Software Developer’s Manuals. https://software.intel.com/content/www/us/en/develop/articles/intel-sdm.html.
[37]
Kyriakos K. Ispoglou, Bader AlBassam, Trent Jaeger, and Mathias Payer. 2018. Block oriented programming: Automating data-only attacks. In Proceedings of the 2018 ACM SIGSAC Conference on Computer and Communications Security. ACM, New York, 1868–1882.
[38]
Yuseok Jeon, Priyam Biswas, Scott Carr, Byoungyoung Lee, and Mathias Payer. 2017. HexType: Efficient detection of type confusion errors for C++. In Proceedings of the 2017 ACM SIGSAC Conference on Computer and Communications Security. ACM, New York, 2373–2387.
[39]
Gaurav S. Kc, Angelos D. Keromytis, and Vassilis Prevelakis. 2003. Countering code-injection attacks with instruction-set randomization. In Proceedings of the 10th ACM Conference on Computer and Communications Security. ACM, New York, 272–280.
[40]
Mustakimur Rahman Khandaker, Wenqing Liu, Abu Naser, Zhi Wang, and Jie Yang. 2019. Origin-sensitive control flow integrity. In Proceedings of the 28th USENIX Security Symposium. USENIX, Berkeley, California, USA, 195–211.
[41]
Chongkyung Kil, Jinsuk Jun, Christopher Bookholt, Jun Xu, and Peng Ning. 2006. Address space layout permutation (ASLP): Towards fine-grained randomization of commodity software. In Proceedings of the 22nd Annual Computer Security Applications Conference. Applied Computer Security Associates, Silver Spring, MD, USA, 339–348.
[42]
Hyungjoon Koo, Yaohui Chen, Long Lu, Vasileios P. Kemerlis, and Michalis Polychronakis. 2018. Compiler-assisted code randomization. In Proceedings of the 2018 IEEE Symposium on Security and Privacy. IEEE Computer Society, Washington D.C., USA, 461–477.
[43]
Volodymyr Kuznetsov, László Szekeres, Mathias Payer, George Candea, R. Sekar, and Dawn Song. 2014. Code-pointer integrity. In Proceedings of the 11th USENIX Conference on Operating Systems Design and Implementation. USENIX, Berkeley, California, USA, 147–163.
[44]
Jinfeng Li, Liwei Chen, Qizhen Xu, Linan Tian, Gang Shi, Kai Chen, and Dan Meng. 2020. Zipper stack: Shadow stacks without shadow. In European Symposium on Research in Computer Security. Springer, New York, 338–358.
[45]
Fangfei Liu, Yuval Yarom, Qian Ge, Gernot Heiser, and Ruby B. Lee. 2015. Last-level cache side-channel attacks are practical. In 2015 IEEE Symposium on Security and Privacy. IEEE Computer Society, Washington D.C., USA, 605–622.
[46]
Kangjie Lu and Hong Hu. 2019. Where does it go? Refining indirect-call targets with multi-layer type analysis. In Proceedings of the 2019 ACM SIGSAC Conference on Computer and Communications Security. ACM, New York, 1867–1881.
[47]
Kangjie Lu, Wenke Lee, Stefan Nürnberger, and Michael Backes. 2016. How to make ASLR win the clone wars: Runtime re-randomization. In Network and Distributed System Security Symposium. Internet Society, Reston, Virginia, USA, 1–15.
[48]
Kangjie Lu, Chengyu Song, Byoungyoung Lee, Simon P. Chung, Taesoo Kim, and Wenke Lee. 2015. ASLR-guard: Stopping address space leakage for code reuse attacks. In Proceedings of the 22nd ACM SIGSAC Conference on Computer and Communications Security. ACM, New York, 280–291.
[49]
Chi-Keung Luk, Robert Cohn, Robert Muth, Harish Patil, Artur Klauser, Geoff Lowney, Steven Wallace, Vijay Janapa Reddi, and Kim Hazelwood. 2005. Pin: Building customized program analysis tools with dynamic instrumentation. In Proceedings of the 2005 ACM SIGPLAN Conference on Programming Language Design and Implementation. ACM, New York, 190–200.
[50]
Matz Michael, Hubicka Jan, Jaeger Andreas, and Mark Mitchell. 2021. System V Application Binary Interface. https://uclibc.org/docs/psABI-×86_64.pdf.
[52]
[53]
Mozilla. 2021. Security vulnerabilities fixed in Firefox 70. https://www.mozilla.org/en-US/security/advisories/mfsa2019-34.
[54]
Mozilla. 2021. Stack-Based-Buffer Overflow when parsing specific URLs in Firefox 68.0. https://bugzilla.mozilla.org/show_bug.cgi?id=1565912.
[55]
Santosh Nagarakatte, Jianzhou Zhao, Milo M. K. Martin, and Steve Zdancewic. 2009. SoftBound: Highly compatible and complete spatial memory safety for C. In Proceedings of the 30th ACM SIGPLAN Conference on Programming Language Design and Implementation. ACM, New York, 245–258.
[56]
Santosh Nagarakatte, Jianzhou Zhao, Milo M. K. Martin, and Steve Zdancewic. 2010. CETS: Compiler enforced temporal safety for C. In ACM Sigplan Notices. ACM, New York, 31–40.
[58]
Ben Niu and Gang Tan. 2015. Per-input control-flow integrity. In Proceedings of the 22nd ACM SIGSAC Conference on Computer and Communications Security. ACM, New York, 914–926.
[59]
Angelos Oikonomopoulos, Elias Athanasopoulos, Herbert Bos, and Cristiano Giuffrida. 2016. Poking holes in information hiding. In Proceedings of the 25th USENIX Security Symposium. USENIX, Berkeley, California, USA, 121–138.
[60]
Aleph One. 1996. Smashing The Stack For Fun And Profit. http://phrack.org/issues/49/14.html.
[61]
Vasilis Pappas, Michalis Polychronakis, and Angelos D. Keromytis. 2012. Smashing the gadgets: Hindering return-oriented programming using in-place code randomization. In Proceedings of the 2012 IEEE Symposium on Security and Privacy. IEEE Computer Society, Washington D.C., USA, 601–615.
[62]
Vasilis Pappas, Michalis Polychronakis, and Angelos D Keromytis. 2013. Transparent ROP exploit mitigation using indirect branch tracing. In Proceedings of the 22nd USENIX Security Symposium. USENIX, Berkeley, California, USA, 447–462.
[63]
Soyeon Park, Sangho Lee, Wen Xu, Hyungon Moon, and Taesoo Kim. 2019. libmpk: Software abstraction for Intel memory protection keys. In Proceedings of the 2019 USENIX Annual Technical Conference. USENIX, Berkeley, California, USA, 241–254.
[64]
Aravind Prakash and Heng Yin. 2015. Defeating ROP through denial of stack pivot. In Proceedings of the 31st Annual Computer Security Applications Conference. Applied Computer Security Associates, Silver Spring, MD, USA, 111–120.
[65]
Hovav Shacham. 2007. The geometry of innocent flesh on the bone: Return-into-libc without function calls (on the ×86). In Proceedings of the 14th ACM Conference on Computer and Communications Security. ACM, New York, 552–561.
[67]
Stack Shield. 2000. A stack smashing technique protection tool for Linux. https://www.angelfire.com/sk/stackshield/info.html.
[68]
Kevin Z. Snow, Fabian Monrose, Lucas Davi, Alexandra Dmitrienko, Christopher Liebchen, and Ahmad-Reza Sadeghi. 2013. Just-in-time code reuse: On the effectiveness of fine-grained address space layout randomization. In Proceedings of the 2013 IEEE Symposium on Security and Privacy. IEEE Computer Society, Washington D.C., USA, 574–588.
[69]
Johannes Späth, Lisa Nguyen Quang Do, Karim Ali, and Eric Bodden. 2016. Boomerang: Demand-driven flow-and context-sensitive pointer analysis for Java. In 30th European Conference on Object-Oriented Programming (ECOOP 2016).
[71]
Yulei Sui, Peng Di, and Jingling Xue. 2016. Sparse flow-sensitive pointer analysis for multithreaded programs. In Proceedings of the 2016 International Symposium on Code Generation and Optimization. ACM, New York, 160–170.
[72]
Yulei Sui and Jingling Xue. 2016. On-demand strong update analysis via value-flow refinement. In Proceedings of the 24th ACM SIGSOFT International Symposium on Foundations of Software Engineering. Association for Computing Machinery, New York, 460–473.
[73]
Yulei Sui and Jingling Xue. 2016. SVF: Interprocedural static value-flow analysis in LLVM. In Proceedings of the 25th International Conference on Compiler Construction. ACM, New York, 265–266.
[74]
Laszlo Szekeres, Mathias Payer, Tao Wei, and Dawn Song. 2013. SoK: Eternal war in memory. In Proceedings of the 2013 IEEE Symposium on Security and Privacy. IEEE Computer Society, Washington D.C., USA, 48–62.
[75]
The PaX Team. 2001. Address Space Layout Randomization. https://pax.grsecurity.net/docs/aslr.txt.
[76]
Caroline Tice, Tom Roeder, Peter Collingbourne, Stephen Checkoway, Úlfar Erlingsson, Luis Lozano, and Geoff Pike. 2014. Enforcing forward-edge control-flow integrity in GCC & LLVM. In Proceedings of the 23rd USENIX Security Symposium. USENIX, Berkeley, California, USA, 941–955.
[77]
Drepper Ulrich. 2013. ELF Handling for Thread-Local Storage. https://akkadia.org/drepper/tls.pdf.
[78]
Yin Wang. 2019. PySonar2: An advanced semantic indexer for Python. https://github.com/yinwang0/pysonar2.
[79]
Richard Wartell, Vishwath Mohan, Kevin W. Hamlen, and Zhiqiang Lin. 2012. Binary stirring: Self-randomizing instruction addresses of legacy ×86 binary code. In Proceedings of the 2012 ACM Conference on Computer and Communications Security. ACM, New York, 157–168.
[82]
David Williams-King, Graham Gobieski, Kent Williams-King, James P. Blake, Xinhao Yuan, Patrick Colp, Michelle Zheng, Vasileios P Kemerlis, Junfeng Yang, and William Aiello. 2016. Shuffler: Fast and deployable continuous code re-randomization. In Proceedings of the 12th USENIX Symposium on Operating Systems Design and Implementation. USENIX, Berkeley, California, USA, 367–382.
[83]
David Williams-King, Hidenori Kobayashi, Kent Williams-King, Graham Patterson, Frank Spano, Yu Jian Wu, Junfeng Yang, and Vasileios P. Kemerlis. 2020. Egalito: Layout-agnostic binary recompilation. In Proceedings of the 25th International Conference on Architectural Support for Programming Languages and Operating Systems. ACM, New York, 133–147.
[84]
Jun Xu, Zbigniew Kalbarczyk, Sanjay Patel, and Ravishankar K. Iyer. 2002. Architecture support for defending against buffer overflow attacks. Coordinated Science Laboratory Report no. UILU-ENG-02-2205, CRHC-02-05 (2002), 1–8.
[85]
Xiaoyang Xu, Masoud Ghaffarinia, Wenhao Wang, Kevin W. Hamlen, and Zhiqiang Lin. 2019. CONFIRM: Evaluating compatibility and relevance of control-flow integrity protections for modern software. In Proceedings of the 28th USENIX Security Symposium. USENIX, Berkeley, California, USA, 1805–1821.
[86]
Yuval Yarom and Katrina Falkner. 2014. FLUSH+ RELOAD: A high resolution, low noise, L3 cache side-channel attack. In Proceedings of the 23rd USENIX Security Symposium. USENIX, Berkeley, California, USA, 719–732.
[87]
Michal Zalewski. 2021. American fuzzy lop (AFL) fuzzer. http://lcamtuf.coredump.cx/afl/.
[88]
Chao Zhang, Chengyu Song, Kevin Zhijie Chen, Zhaofeng Chen, and Dawn Song. 2015. VTint: Protecting virtual function tables’ integrity. In Network and Distributed System Security Symposium. Internet Society, Reston, Virginia, USA, 1–15.
[89]
Chao Zhang, Dawn Song, Scott A. Carr, Mathias Payer, Tongxin Li, Yu Ding, and Chengyu Song. 2016. VTrust: Regaining trust on virtual calls. In Network and Distributed System Security Symposium. Internet Society, Reston, Virginia, USA, 1–15.
[90]
Chao Zhang, Tao Wei, Zhaofeng Chen, Lei Duan, Laszlo Szekeres, Stephen McCamant, Dawn Song, and Wei Zou. 2013. Practical control flow integrity and randomization for binary executables. In Proceedings of the 2013 IEEE Symposium on Security and Privacy. IEEE Computer Society, Washington D.C., USA, 559–573.
[91]
Tong Zhang, Wenbo Shen, Dongyoon Lee, Changhee Jung, Ahmed M. Azab, and Ruowen Wang. 2019. Pex: A permission check analysis framework for Linux kernel. In Proceedings of the 28th Conference on USENIX Security Symposium. USENIX, Berkeley, California, USA, 1205–1220.
[92]
Zibin Zheng, Shaoan Xie, Hong-Ning Dai, Weili Chen, Xiangping Chen, Jian Weng, and Muhammad Imran. 2020. An overview on smart contracts: Challenges, advances and platforms. Future Generation Computer Systems 105 (2020), 475–491.
[93]
Jie Zhou, Yufei Du, Zhuojia Shen, Lele Ma, John Criswell, and Robert J. Walls. 2020. Silhouette: Efficient protected shadow stacks for embedded systems. In Proceedings of the 29th USENIX Security Symposium. USENIX, Berkeley, California, USA, 1219–1236.
[94]
Philipp Zieris and Julian Horsch. 2018. A leak-resilient dual stack scheme for backward-edge control-flow integrity. In Proceedings of the 2018 Asia Conference on Computer and Communications Security. ACM, New York, 369–380.
[95]
Changwei Zou, Yulei Sui, Hua Yan, and Jingling Xue. 2019. TCD: Statically detecting type confusion errors in C++ programs. In Proceedings of the 30th International Symposium on Software Reliability Engineering. IEEE, New York, 292–302.
[96]
Changwei Zou and Jingling Xue. 2020. Burn after reading: A shadow stack with microsecond-level runtime rerandomization for protecting return addresses. In Proceedings of the 42nd International Conference on Software Engineering. ACM, New York, 258–270.

Cited By

View all
  • (2024)VALIDATEInformation and Software Technology10.1016/j.infsof.2024.107448170:COnline publication date: 1-Jun-2024
  • (2023)Implementation of Thread Local Storage Optimization Method Based on LoongArch2023 42nd Chinese Control Conference (CCC)10.23919/CCC58697.2023.10240668(2104-2109)Online publication date: 24-Jul-2023
  • (2022)Practical Software-Based Shadow Stacks on x86-64ACM Transactions on Architecture and Code Optimization10.1145/355697719:4(1-26)Online publication date: 7-Oct-2022

Index Terms

  1. Buddy Stacks: Protecting Return Addresses with Efficient Thread-Local Storage and Runtime Re-Randomization

    Recommendations

    Comments

    Information & Contributors

    Information

    Published In

    cover image ACM Transactions on Software Engineering and Methodology
    ACM Transactions on Software Engineering and Methodology  Volume 31, Issue 2
    April 2022
    789 pages
    ISSN:1049-331X
    EISSN:1557-7392
    DOI:10.1145/3492439
    • Editor:
    • Mauro Pezzè
    Issue’s Table of Contents

    Publisher

    Association for Computing Machinery

    New York, NY, United States

    Publication History

    Published: 04 March 2022
    Accepted: 01 October 2021
    Revised: 01 September 2021
    Received: 01 March 2021
    Published in TOSEM Volume 31, Issue 2

    Permissions

    Request permissions for this article.

    Check for updates

    Author Tags

    1. Shadow stack
    2. buddy stack
    3. runtime re-randomization
    4. CFI
    5. ROP

    Qualifiers

    • Research-article
    • Refereed

    Funding Sources

    • Australian Research Council

    Contributors

    Other Metrics

    Bibliometrics & Citations

    Bibliometrics

    Article Metrics

    • Downloads (Last 12 months)124
    • Downloads (Last 6 weeks)5
    Reflects downloads up to 15 Oct 2024

    Other Metrics

    Citations

    Cited By

    View all
    • (2024)VALIDATEInformation and Software Technology10.1016/j.infsof.2024.107448170:COnline publication date: 1-Jun-2024
    • (2023)Implementation of Thread Local Storage Optimization Method Based on LoongArch2023 42nd Chinese Control Conference (CCC)10.23919/CCC58697.2023.10240668(2104-2109)Online publication date: 24-Jul-2023
    • (2022)Practical Software-Based Shadow Stacks on x86-64ACM Transactions on Architecture and Code Optimization10.1145/355697719:4(1-26)Online publication date: 7-Oct-2022

    View Options

    Get Access

    Login options

    Full Access

    View options

    PDF

    View or Download as a PDF file.

    PDF

    eReader

    View online with eReader.

    eReader

    Full Text

    View this article in Full Text.

    Full Text

    HTML Format

    View this article in HTML Format.

    HTML Format

    Media

    Figures

    Other

    Tables

    Share

    Share

    Share this Publication link

    Share on social media