中文

面向块的编程:自动化数据攻击

密码学与安全 2019-11-26 v2

摘要

随着控制流完整性 (CFI) 的广泛部署,控制流劫持攻击以及随之而来的代码重用攻击变得困难得多。CFI 将控制流限制在已知位置,严重限制了任意代码执行。在 CFI 和影子栈等高级控制流劫持防御下,评估应用程序的剩余攻击面仍是一个未解决的问题。我们引入了 BOPC,一种自动评估攻击者是否能在加固了 CFI/影子栈防御的二进制程序上执行任意代码的机制。BOPC 根据用一种名为 SPL 的图灵完备高级语言编写的负载规范,为目标程序计算利用方法,该语言抽象了架构和程序特定的细节。SPL 负载被编译为程序轨迹,在目标二进制程序之上执行所需行为。BOPC 的输入是一个 SPL 负载、一个起始点(例如来自模糊测试崩溃)以及一个允许应用程序状态损坏的任意内存写原语。为了将 SPL 负载映射到程序轨迹,BOPC 引入了面向块的编程 (BOP),这是一种新的代码重用技术,将程序中有效执行路径上的整个基本块作为 gadget 使用,即不违反 CFI 或影子栈策略。我们发现将负载映射到程序轨迹的问题是 NP 困难的,因此 BOPC 首先通过修剪不可行路径来缩小搜索空间,然后使用启发式方法引导搜索至可能路径。BOPC 将 BOP 负载编码为一组内存写操作。我们执行了应用于 10 个流行应用程序的 13 个 SPL 负载。BOPC 成功找到了负载和复杂的执行轨迹——这些很可能是通过手动分析无法找到的——同时在 81% 的情况下遵循了理想 CFI 策略下目标的控制流图。

关键词

引用

@article{arxiv.1805.04767,
  title  = {Block Oriented Programming: Automating Data-Only Attacks},
  author = {Kyriakos Ispoglou and Bader AlBassam and Trent Jaeger and Mathias Payer},
  journal= {arXiv preprint arXiv:1805.04767},
  year   = {2019}
}