论文部分内容阅读
内核数据结构取证技术就是在已知内核数据结构的定义下,依据目标数据结构的先验知识构造出对应的Signatures,然后依靠Signatures从内存镜像中识别出目标数据结构在内存中的实例。该技术在安全领域具有非常重要的价值,广泛应用于各种安全和取证应用中。通常情况下,目标数据结构实例识别结果依赖于Signatures的选择。如果Signatures能够恰当地标示目标数据结构的特征,与目标数据结构在内存中的实例集合具有良好的匹配度,并且不易被内核模式rootkit绕过,那么识别的结果将具有很高的可信度。内核数据结构取证技术已广泛被安全研究者研究,当前存在的技术根据Signatures的特点大致分为两类。第一类是基于域值不变量作为Signatures的取证技术,而第二类是基于指针指向拓扑结构图作为Signatures的取证技术。虽然这些技术在一定范围内能够有效识别内核数据结构,但仍然存在一些不足之处。比如,域值不变量取证方法存在误报率高、鲁棒性差等缺陷,指针指向拓扑结构图取证技术由于难于准确区分指针变量与类指针变,存在void指针、NULL指针等问题,影响识别结果的准确性。另外指针域也易于被攻击者窜改,鲁棒性也不是很好。本文针对现有取证技术的不足,提出了一种链表导向的指向图内核数据结构取证技术。我们的取证技术的核心是使用了一种新的内核数据结构Signatures,选择该Signatures源于Linux内核链表对象的先验知识,即链表对象对应的实例在内存中易于识别,并且广泛存在和难以被窜改,非常适合生成良好的Signatures。总体上看,我们选择的新Signatures分为两类,一类是以链表域偏移值序列作为Signatures,另一类是以数据结构中的链表域和指针域两种特征生成的指向图作为Signatures。如果数据结构的链表域偏移值序列能够充分标示其实例的特征,则优先选择这类Signatures。否则的话,为其构造包含尽可能多的链表对象、尽可能少的其他类型指针的指向图Signatures。由于在构造数据结构的Signatures中充充分利用了具有良好特性的链表对象,因此与以前的工作相比,基于这种新的Signatures的取证技术具有识别正确性高、鲁棒性强、识别速度快等优点。