论文部分内容阅读
软件漏洞使系统容易受到攻击,影响系统的可用性。软件漏洞中,复杂数据类型相关的漏洞占了较大的比例。在可执行程序中实现对此类漏洞有效检测,复杂数据类型的识别是关键。由于程序中对此类变量的访问是通过指针实现的,故对其识别大多采用指针分析的方法,然而现有的指针分析方法,由于缺乏指针连通性分析等缺陷,导致在程序较为复杂时算法对基地址的分析会产生遗漏和错误,从而影响复杂数据类型识别的精确性。本文主要针对数据类型识别技术进行研究,特别是针对复杂数据类型识别技术的改进与实现:(1)从程序分析对数据类型识别的需求出发,研究、总结了当前数据类型识别工作。根据分析环境的不同,将类型识别方法分为静态的识别方法和动态的识别方法,总结各自的优势与局限性。分析、概括目前数据类型识别工作的三个热点研究问题,通过热点研究问题对比分析现有工作的优缺点。(2)调研现有的程序漏洞库,发现部分漏洞是内嵌结构相关的,此类内嵌信息的缺失使得漏洞检测变得困难,从而表明了内嵌结构识别的重要性。(3)针对在目前的指针分析方法中,当指针的偏移地址没有被显式的计算时无法正确分析指针基地址的问题,提出通过分析指令的寻址方式获得指令基地址的方法,并且利用该基址分析方法识别出内嵌结构。(4)针对现实程序中一个变量存在多个实例,而对每个变量实例只能识别出部分的类型信息的问题,提出基于指针联通性的指针分析方法,利用指针集合收集同类型的指针,合并集合中指针的类型信息,进而把多个实例的类型信息结合起来,提高类型识别的精确度。(5)基于上述方法,在Valgrind插桩平台上实现了原型工具dataStuRec。利用该工具对9个Linux下常见的程序进行测试,通过将实验结果与现有工作、工具不同版本间以及与源文件中类型信息的比较,表明两个改进方法可以提高类型识别的数量和精确性。