论文部分内容阅读
程序漏洞是网络安全的根源问题之一,如何快速发现程序漏洞是目前安全领域的一个研究热点,特别是基于二进制程序的漏洞发现技术研究由于其广泛的适用性和难度更是目前研究的前沿领域。目前,已有的程序发现技术包括静态分析技术、动态分析技术和渗透测试技术,其中动态分析技术中的模糊测试方法因为其高性价比:简单的思想、出色的漏洞发现数量,成为安全研究人员和黑客使用最广泛的漏洞发现技术。然而,传统的模糊测试存在两个关键问题:(1)生成的测试数据质量不高,表现为测试深度和广度不够(2)漏洞确认阶段需要大量的人工参与。针对模糊测试的数据生成问题,本文将其归约为逻辑领域的公式可满足性问题,使用动态符号执行作为归约实现手段。本文基于中间语言BIL介绍了动态符号执行用于测试数据生成的基本理论和作为动态符号执行重要性能优化措施的动态污点分析理论,包括符号引入、符号演算、搜索策略、SMT求解器、污点分析策略和主要的难题。在此基础上,本文设计并实现了一个离线动态符号执行引擎DSEE, DSEE首先将主体是汇编指令序列的轨迹翻译成BIL程序,然后基于BIL程序做符号执行,其间,由原是系统调用帧和污点引入帧翻译过来的BIL语句引入初始符号变量,依据BIL语句和表达式操作语义进行符号演算,生成由BIL表达式描述的路径公式,之后该公式被翻译成SMT求解器Z3支持的SMT2格式并被求解,该解将作为一个新的输入被继续测试,而关于下一个测试输入的选择问题则使用了改进的分代搜索算法。另外,本文还设计并实现了一个带污点分析的轨迹记录引擎TLET,设计内容包括:参照动画模型的轨迹模型设计、随机读取轨迹帧的序列化容器设计、会引入污点的linux系统调用建模、基于数据依赖的污点传播规则建模。本文对DSEE和TLET进行了实验测试和验证,结果显示,两者能达到之前的设计要求。针对漏洞确认问题,本文通过将栈溢出漏洞利用生成归约为逻辑公式可满足性求解实现了栈溢出漏洞的自动确认和利用自动生成。本文的主要贡献有:(1)设计实现了离线符号执行引擎DSEE和作为其基础的轨迹记录引擎TLET,实验证明两者能正确工作,这两者将是该领域后续继续研究工作的平台基础;(2)改进了分代搜索算法,加入启发因子,以期使搜索尽快朝高代码覆盖率方向前进,测试分析显示,改进后的算法能达到预期的目的;(3)使用动态污点分析和死码移除作为DSEE的性能优化措施,结果显示,能很大程度上减少需要符号执行的BIL语句数量,从而很大程度上减小了路径公式尺寸,是有效的优化措施;(4)将栈溢出漏洞归约为逻辑公式的可满足性问题,使用DSEE实现了该类漏洞的利用自动生成。