论文部分内容阅读
软件需求的急速增加促进了软件从业人员队伍的不断扩大,从业人员专业素质的参差不齐直接导致程序的质量下降,同时,由于软件的复杂度也在不断增加,这也导致软件出现错误的概率增加;此外,黑客的产业化给软件产业安全带来了更大的危害。长期以来,漏洞的挖掘一直是攻防双方争夺的高地,传统的漏洞挖掘工作基于人工逆向工程或者模糊测试:前者需要漏洞挖掘者具有较高的技术水平及实战经验;后者的开销较大并且没有明确的方向性,产生的很多畸形测试数据可能对漏洞挖掘工作都是无效的。如何改进现有方法一直吸引学术界的研究目光,污点传播技术是近年来在漏洞挖掘工作中做出的有效尝试之一,它通过二进制插桩工具跟踪不可信数据源的传播进而发现不安全的污点数据使用,该方法路径覆盖和准确率上都有较好的表现。漏洞作为一种特殊的执行序列,具有形态不一的特点,因此其描述方法需要能应对同一漏洞的不同执行序列,本文在污点传播技术的基础上提出基于进程代数的漏洞建模方法。该方法从一个新的角度——将指令的执行看作存储单元的通信——来描述二进制程序,通过将操作数和助记符分别看作进程和作用于其上的动作,对指令功能和污点传播进行描述;之后根据缓冲区溢出漏洞循环传输数据的特征,结合存储单元和标志寄存器的污染状态描述给出缓冲区溢出漏洞的描述。此外,根据漏洞执行序列的上下文敏感性,本文还提出了一种基于执行序列相似度的漏洞挖掘方法,该方法将执行序列的上下文关联特征加入到执行序列的相似度度量中,由于融合了执行序列整体操作信息,从而降低了漏洞多态性对分析的干扰。该方法在动态时间弯曲度量(DTW:dynamic time warping)的基础上,结合程序执行序列局部相似性与全局相似性对其功能的影响,对DTW的局部不相似度定义重新定义,可以对特征较为复杂需要利用程序的多种错误才可以被成功利用的漏洞进行有效挖掘。本文最后针对上述两种方法建立漏洞挖掘框架验证了漏洞建模的准确性和挖掘方法的高效性。