Software obfuscation plays a crucial role in protecting intellectual property in software from reverse engineering attempts. While some obfuscation techniques originate from the obfuscation-reverse engineering arms race, others stem from different research areas, such as binary software exploitation. Return-oriented programming (ROP) gained popularity as one of the most effective exploitation techniques for memory error vulnerabilities. ROP interferes with our natural perception of a process control flow, inspiring us to repurpose ROP as a robust and effective form of software obfuscation. Although previous work already explores ROP's effectiveness as an obfuscation technique, evolving reverse engineering research raises the need for principled reasoning to understand the strengths and limitations of ROP-based mechanisms against man-at-the-end (MATE) attacks. To this end, we present ROPfuscator, a compiler-driven obfuscation pass based on ROP for any programming language supported by LLVM. We incorporate opaque predicates and constants and a novel instruction hiding technique to withstand sophisticated MATE attacks. More importantly, we introduce a realistic and unified threat model to thoroughly evaluate ROPfuscator and provide principled reasoning on ROP-based obfuscation techniques that answer to code coverage, incurred overhead, correctness, robustness, and practicality challenges.
翻译:软件混淆在保护软件知识产权免受反向工程尝试方面起着至关重要的作用。虽然一些混淆技术源于混淆-反向工程竞赛,但其他技术则源自不同的研究领域,如二进制软件利用。基于返回导向编程(ROP)的利用技术已成为最有效的针对内存错误漏洞的漏洞利用技术之一。ROP干扰了我们对过程控制流程的自然感知,启发我们将ROP重新用作一种强大而有效的软件混淆形式。虽然先前的工作已经探索了ROP作为混淆技术的有效性,但不断发展的反向工程研究提出了对原则性推理的需求,以了解基于ROP的机制在面对末端攻击(MATE)时的优势和局限性。为此,我们提出了ROPfuscator,这是一种基于任何LLVM支持的编程语言的ROP的编译器驱动的混淆传递。我们结合了不透明谓词和常量以及一种新的指令隐藏技术,以抵御复杂的MATE攻击。更重要的是,我们引入了一个现实和统一的威胁模型,以全面评估ROPfuscator并提供原则性推理,这些原则性推理涉及代码覆盖、产生的开销、正确性、鲁棒性和实用性等方面的挑战。