论文部分内容阅读
内核是构建操作系统的核心,它运行在系统的最高特权层,提供着对硬件访问的安全防护与上层应用的资源抽象,同时维护着用户与系统间的安全隔离,是整个操作系统安全运行的保障。然而,由于内核的代码数量庞大、攻击模式多样、数据结构复杂,越来越多的内核安全漏洞被挖掘。一旦攻击者通过内核漏洞突破操作系统的防护,便可以获得最高的系统权限,实施包括执行任意代码在内的多种攻击行为。对于内核的安全测试,现有的测试方法面临测试规模小、测试速率慢、测试例不准确、覆盖率低等问题,无法满足代码规模迅速增加的系统内核测试。针对现有方法测试规模小、测试速率慢等问题,本文提出一种基于覆盖率制导的并行内核灰盒测试模型,并进一步针对测试例不准确、覆盖率低等问题,提出一种序列驱动的输入生成模型,最后将两种模型融合,并利用QEMU-KVM提升测试性能。本文的主要研究内容包括:1)提出一种基于覆盖率制导的内核漏洞并行灰盒测试模型DisModel,模型包括并行模块、覆盖率制导模块、脆弱性监测模块。其中并行模块和覆盖率制导模块以代码覆盖率为导向,以计算节点和控制节点组成的星型结构作为并行模型,各计算节点通过代码覆盖率对系统内核持续测试,控制节点进行计算节点间代码覆盖率的收集与交互。脆弱性监测模块通过正则表达式对测试输出进行匹配,用于判断执行是否能够触发漏洞。与Syzkaller和TriforceAFL相比,该模型突破单台服务器计算资源的限制,并在执行速率、路径覆盖率、脆弱性数量上均有一定的提升,证明该模型能够应用于大规模场景并能在一定程度上提高测试效率。2)提出一种新颖的序列驱动的内核灰盒测试输入生成模型SeqModel,它利用语法规则自动生成高度结构化的输入,这些输入能够通过内核代码对函数参数的语法检测,为变异提供高质量的种子。该模型首先根据系统头文件中的函数结构和定义的函数语法规则生成函数描述文档,并利用函数描述文档生成符合语法规则的测试函数,接下来通过函数间的参数依赖生成短函数序列对内核进行测试,存储能够产生新覆盖率的短函数序列,最后利用马尔科夫链与短函数序列间的函数转移关系构成函数调用图,并从函数调用图中抽取长函数序列对系统内核进行测试,提高了测试链的准确性及完备性。与Syzkaller相比,该模型在测试例生成效率、覆盖率和崩溃数量上均有较高的提升,证明了该模型的有效性。3)结合1)与2)的研究内容,设计并实现了一个融合加速的内核测试模型Diskaller,该模型利用QEMU-KVM虚拟化加速测试进程,利用1)的模型对包含内核的虚拟系统进行并行化测试,利用2)构建的输入生成模型进行测试例的生成,最后通过实验证明该模型的有效性。