[论文解读] Lockdown: Dynamic Control-Flow Integrity
Lockdown 是一种动态控制流完整性(CFI)机制,通过利用受信任的动态加载器提供的符号信息,在运行时重建控制流图,对遗留的仅二进制可执行文件实施细粒度的、按库的 CFI 保护。它通过动态二进制翻译、影子栈保护以及对间接控制转移的模块感知强制执行,实现了强安全性和低性能开销(在 SPEC CPU2006 上平均为 32.49%)。
Applications written in low-level languages without type or memory safety are especially prone to memory corruption. Attackers gain code execution capabilities through such applications despite all currently deployed defenses by exploiting memory corruption vulnerabilities. Control-Flow Integrity (CFI) is a promising defense mechanism that restricts open control-flow transfers to a static set of well-known locations. We present Lockdown, an approach to dynamic CFI that protects legacy, binary-only executables and libraries. Lockdown adaptively learns the control-flow graph of a running process using information from a trusted dynamic loader. The sandbox component of Lockdown restricts interactions between different shared objects to imported and exported functions by enforcing fine-grained CFI checks. Our prototype implementation shows that dynamic CFI results in low performance overhead.
研究动机与目标
- 解决遗留的、仅二进制的应用程序在内存破坏和控制流劫持攻击下的安全缺口。
- 在无需源代码或重新编译的情况下,实现精确的、按库的控制流完整性(CFI)。
- 通过使用运行时信息对间接调用、跳转和返回实施严格、动态的 CFI 策略,减少攻击面。
- 在支持动态加载、线程和共享库的实际环境中,提供实用且低开销的保护。
- 通过一种新型指标——动态平均间接目标减少率(DAIR),对 CFI 强度进行实证评估。
提出的方法
- 通过受信任的动态加载器,利用共享库和可执行文件中的符号表,在运行时动态重建控制流图。
- 采用动态二进制翻译器(DBT)对所有间接控制转移实施细粒度的 CFI 检查。
- 使用影子栈保护返回指令,防止返回导向编程(ROP)攻击。
- 实施模块感知的 CFI 策略:调用仅限于同一模块内的有效函数或来自其他库的导入函数。
- 采用启发式方法检测并保护非导出的回调函数、异常处理和尾递归模式。
- 强制执行系统调用策略检查,并确保所有信号均由 DBT 拦截,以防御信号导向编程攻击。
实验结果
研究问题
- RQ1是否可以在不重新编译或静态分析的情况下,有效在遗留的、仅二进制的可执行文件上强制实施动态 CFI?
- RQ2在真实世界二进制文件(有和无调试符号)上应用时,动态 CFI 的精度与静态 CFI 相比如何?
- RQ3在实际、类似生产环境的场景中,强制实施细粒度、按库的 CFI 所带来的性能开销是多少?
- RQ4所提出的 DAIR 指标在真实应用程序中是否能有效反映 CFI 保护随时间推移的抗性?
- RQ5在缺乏源代码或精确重定位信息的情况下,Lockdown 是否能有效防止 ROP 和其他控制流劫持攻击?
主要发现
- Lockdown 在 SPEC CPU2006 基准测试套件上实现了平均 32.49% 的性能开销,证明了其实际可行性。
- 动态平均间接目标减少率(DAIR)指标显示,在程序终止时,可能的间接目标位置平均减少了 99.71%,表明 CFI 精度极强。
- 即使在符号信息缺失的剥离库中,Lockdown 仍保持高 CFI 强度,平均 DAIR 达到 95.39%,在缺少符号信息的情况下依然有效。
- 影子栈通过始终保护返回指令指针,有效防止了所有 ROP 攻击。
- Lockdown 的模块化强制机制确保只有显式导入或内部有效函数才能被调用,显著减少了攻击面。
- 使用符号文件(例如来自 Ubuntu 12.04.4 的符号文件)可提高 CFI 精度,当存在调试符号时,DAIR 平均达到 99.71%。
更好的研究,从现在开始
从论文设计到论文写作,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。