论文部分内容阅读
软件执行迹分析是一种动态二进制分析技术,它通过动态追踪软件执行流程辅助漏洞诊断和分析。执行迹追踪技术常被应用于缺陷定位,污点分析,符号执行和确定性重放领域。其中确定性重放不仅能帮助研究人员提高程序分析能力,还能有效解决处理器多核架构下并行程序中不确定因素对程序分析的影响。但是该领域仍面临许多挑战,将执行迹追踪应用于确定性重放目前主要存在以下几个问题。首先,执行迹获取的程序行为信息不够全面,无法进行确定性重放;其次,重复分析同一程序时上下文环境不被保持,执行信息无法二次获取;最后,收集执行迹的时间开销巨大,这是导致确定性重放实现效率低的主要因素。为此本文以确定性重放为例,研究了对二进制漏洞分析通用的软件执行迹提取与分析方法。针对以上提出的问题,本论文的主要工作和创新点如下:首先,提出了面向确定性重放的离线执行迹追踪方法。本文采用纯软件的方式,以离线文件运行目标系统过程中动态插入分析指令以获取相应的执行信息,降低了插桩引擎与目标分析系统之间的耦合性。本文研究了重放的确定性程度对应的执行迹内容需求,以严格确定性作为标准分析了控制流和访存操作的信息。最后本文以数据库的形式将执行迹保存到本地供后续重放分析与研究。该方法有效提高重放分析的准确性,解决漏洞分析过程中访存不同步、存储竞争和数据竞争等问题。其次,提出了程序执行迹并行化提取方法。针对动态翻译、指令执行与程序分析一体化的传统二进制分析方法无法进行并行化的问题,本文研究了对传统一体化分析方法的改进。基于离线文件将动态翻译、指令执行和程序分析三个过程进行分离——动态翻译时得到离线文件,以离线文件驱动指令执行,最后进行程序分析。本文通过对离线文件研究发现,离线文件驱动指令执行过程是可分割的。在此基础上提出了执行迹并行化提取算法,大大提高了执行迹提取的效率。然后,提出了面向上下文保持的程序输入动态替换方法。本文对虚拟化技术的实现原理进行了深入研究,并提出了基于虚拟化的程序输入替换的两种方式。第一种方式是对模拟器源码进行分析,并研究了动态翻译机制,以源码插桩的方式实时监控客户机指令执行并做出文件替换操作。第二种方式研究了主机文件到客户机实时通信的方法,在客户机内部hook目标程序后通过实时文件传递进行替换。本文对模拟器的快照机制进行了分析,将其与输入替换进行整合分析,实现了动态替换。该方法解决了漏洞分析中上下文环境无法保持一致的问题,降低了硬条件匹配和反向污点分析等漏洞分析方法的难度。最后,本文设计了一个软件执行迹提取与分析系统,并通过实验验证了并行化提取软件执行迹和动态替换程序输入的能力,最后以真实软件为例证明了本系统对二进制漏洞分析的辅助能力。