论文标题
对自动代码复制利用生成的方法调查
Survey of Methods for Automated Code-Reuse Exploit Generation
论文作者
论文摘要
本文提供了对自动代码复制利用生成的方法和工具的调查。这样的利用使用易受伤害程序中已包含的代码。代码复制方法允许在存在禁止数据存储器执行的操作系统保护的情况下利用漏洞。本文包含了各种代码复制方法的描述:返回到LIBC攻击,面向返回的编程,面向跳跃的编程等。我们定义了基本术语:小工具,小工具框架,小工具目录。此外,我们表明,实际上,小工具是一种指令,一组小工具定义了虚拟机。我们可以将利用创建问题减少到该虚拟机的代码生成。每个特定的可执行文件都定义了虚拟机指令集。我们提供了用于搜索和确定其语义(创建小工具目录)的小工具方法的调查。这些方法允许人们获得虚拟机指令集。如果一组小工具是图灵完成的,则编译器可以使用小工具目录作为目标体系结构。但是,某些说明可能不存在。因此,我们讨论了几种用多个小工具替换缺失指令的方法。利用生成工具可以通过模式搜索(正则表达式)或考虑使用小工具语义来链接小工具。此外,某些链式方法使用遗传算法,而另一些链接方法则使用SMT降低者。我们比较了现有的开源工具,并提出了一个测试系统ROP基准测试,该测试系统可用于验证生成的链是否成功打开外壳。
This paper provides a survey of methods and tools for automated code-reuse exploit generation. Such exploits use code that is already contained in a vulnerable program. The code-reuse approach allows one to exploit vulnerabilities in the presence of operating system protection that prohibits data memory execution. This paper contains a description of various code-reuse methods: return-to-libc attack, return-oriented programming, jump-oriented programming, and others. We define fundamental terms: gadget, gadget frame, gadget catalog. Moreover, we show that, in fact, a gadget is an instruction, and a set of gadgets defines a virtual machine. We can reduce an exploit creation problem to code generation for this virtual machine. Each particular executable file defines a virtual machine instruction set. We provide a survey of methods for gadgets searching and determining their semantics (creating a gadget catalog). These methods allow one to get the virtual machine instruction set. If a set of gadgets is Turing-complete, then a compiler can use a gadget catalog as a target architecture. However, some instructions can be absent. Hence we discuss several approaches to replace missing instructions with multiple gadgets. An exploit generation tool can chain gadgets by pattern searching (regular expressions) or considering gadgets semantics. Furthermore, some chaining methods use genetic algorithms, while others use SMT-solvers. We compare existing open-source tools and propose a testing system rop-benchmark that can be used to verify whether a generated chain successfully opens a shell.