论文摘要
随着计算机在社会应用的日益增多,计算机安全逐渐成为关注的焦点。人们提出了许多技术来发掘软件的漏洞,污点分析和符号执行是其中两种有效的方法。污点分析是一种数据流分析方法,它将来自于可疑渠道的信息标记为“被污染”,并通过分析每条指令确定哪些数据被可疑数据影响,将这些数据也标记为“被污染”,最后通过一定的检测规则查找软件漏洞。符号执行是采用符号对变量进行表示,并用符号代替实际的数值进行程序执行的方法。目前存在的污点分析工具存在三个问题,其一是存在检测盲点,即无法检测仅仅改变了程序的某些数据,而并没有改变控制流的漏洞;其二是无法进行位分析,即无法判断输入数据的哪些字节触发了系统漏洞;其三是路径覆盖率低,仅能对一条路径进行分析,而不能指导生成可以测试其他路径的测试用例。本文根据目前污点分析技术存在的问题,提出了采用第三种污染状态“受控污染”来丰富检测手段的方案,并通过对漏洞特征的总结,提出了六种漏洞检测规则,解决了检测盲区的问题,并且可以发现潜在的漏洞。针对污点分析固有的无法进行位分析和路径覆盖率低的缺点,本文提出了借助符号执行的完善方法:为每个内存字节分配符号,并记录内存地址与符号之前的对应关系以便进行字节级的数据跟踪;记录每次执行的路径条件,根据路径条件指导可以选择其他路径的测试用例生成。为了验证所提出的针对污点分析的完善技术是否有效,本文提出了基于上文原理的动态污点分析工具DsVD(Dynamic Software Vulnerability Detector)和它的符号执行扩展版本DsVD-SE(Dynamic Software Vulnerability Detector– Symbolic Execution)。DsVD采用三种污染状态及新归纳的六条检测规则来发掘漏洞。DsVD-SE采用了符号化的内存污点管理模型,从而可以进行细粒度的分析,具体确定是输入的哪些字节触发了软件的漏洞,同时可以记录路径信息,指导测试用例生成。为了保证DsVD和DsVD-SE的运行效率,本文采用了两种优化方法,无关API过滤和基本块处理,来减少系统开销。实验表明,DsVD和DsVD-SE可以有效的检测软件漏洞,通过对五款现实存在的软件的检测,我们共发现63个漏洞。受益于两种优化方法,加载DsVD后目标软件运行时间仅增多3.1倍,相对于其他工具,如LIFT3.6倍,TaintCheck约20倍,DsVD具有最小的系统开销。DsVD-SE的系统开销为17.34倍,慢于LIFT而优于Taintcheck。