[论文解读] Execution Integrity with In-Place Encryption
Scylla 引入了一种新颖的就地加密方案,通过在基本块层面应用加密和代码多样化,增强了指令集随机化(ISR),以抵御代码重用攻击,实现执行完整性,且无需进行控制流图分析。它能抵抗高级攻击(如 JIT-ROP 和 CROP),同时在 x86_64 系统上保持 20% 的可行性能开销。
Instruction set randomization (ISR) was initially proposed with the main goal of countering code-injection attacks. However, ISR seems to have lost its appeal since code-injection attacks became less attractive because protection mechanisms such as data execution prevention (DEP) as well as code-reuse attacks became more prevalent. In this paper, we show that ISR can be extended to also protect against code-reuse attacks while at the same time offering security guarantees similar to those of software diversity, control-flow integrity, and information hiding. We present Scylla, a scheme that deploys a new technique for in-place code encryption to hide the code layout of a randomized binary, and restricts the control flow to a benign execution path. This allows us to i) implicitly restrict control-flow targets to basic block entries without requiring the extraction of a control-flow graph, ii) achieve execution integrity within legitimate basic blocks, and iii) hide the underlying code layout under malicious read access to the program. Our analysis demonstrates that Scylla is capable of preventing state-of-the-art attacks such as just-in-time return-oriented programming (JIT-ROP) and crash-resistant oriented programming (CROP). We extensively evaluate our prototype implementation of Scylla and show feasible performance overhead. We also provide details on how this overhead can be significantly reduced with dedicated hardware support.
研究动机与目标
- 应对代码重用攻击(CRAs)日益增长的威胁,如 ROP 和 CROP,这些攻击可绕过传统的防御机制(如 DEP 和 ASLR)。
- 通过将软件多样性、控制流完整性与信息隐藏的优势统一到一个单一、连贯的框架中,克服现有防御机制的局限性。
- 在存在完全内存泄露(包括对程序代码的恶意读取访问)的情况下实现安全执行,而不会暴露代码布局或控制流。
- 在合法基本块内实现实际的执行完整性,且不依赖静态或动态控制流图构建。
- 在真实系统中证明该防御方案的可行性与性能效率,包括对共享库和多任务环境的支持。
提出的方法
- 在二进制级别对每个基本块应用加密,以随机化并隐藏可执行代码的布局,确保仅经正确解密的指令可执行。
- 引入一种混合执行模型,将控制流限制在基本块的良性入口点,从而隐式实现控制流完整性,而无需 CFG 分析。
- 通过细粒度的代码多样化技术,改变基本块的顺序与结构,使攻击者无法可靠预测或重建代码布局。
- 实现一个执行包装器,负责运行时指令的解密与验证,确保仅授权的控制转移可发生。
- 利用硬件辅助解密支持以最小化性能开销,并在 x86_64 系统上对原型进行评估,包括对共享库的支持。
- 结合信息隐藏技术(如执行-不可读,XnR)和代码指针隔离,防止敏感控制结构的泄露。
实验结果
研究问题
- RQ1指令集随机化能否扩展以提供对现代代码重用攻击(如 JIT-ROP 和 CROP)的强保护?
- RQ2在完全内存读取访问下,每个基本块的加密与代码多样化在多大程度上能联合防止代码布局的泄露?
- RQ3是否可能在不依赖静态或动态控制流图构建的情况下,实现在基本块内的执行完整性?
- RQ4Scylla 的性能开销与现有防御方案相比如何?硬件支持能否显著降低此开销?
- RQ5Scylla 是否能抵御高级绕过技术(如抗崩溃内存预言机和时序侧信道泄露)?这些技术曾被用于先前的攻击。
主要发现
- Scylla 通过结合每个基本块的加密与代码多样化,成功抵御了最先进的代码重用攻击,包括 JIT-ROP、CROP 和 CFB。
- 原型实现仅在 SPEC CPU2006 基准测试套件上产生 20% 的平均性能开销,证明了其实际可行性。
- 硬件辅助解密支持可显著降低性能成本,主要开销从解密逻辑转移到代码多样化机制。
- 在完全内存泄露下,Scylla 完全隐藏了代码布局,即使攻击者知晓代码位置,也难以重建原始控制流。
- 该防御对时序侧信道攻击以及先前漏洞中使用的内存预言机(如针对 CPI 或 XnR 机制的攻击)具有鲁棒性。
- Scylla 支持复杂运行时环境,包括共享库和多任务系统,且不损害安全性或性能。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。