掌桥专利:专业的专利平台
掌桥专利
首页

基于IPT与虚拟机自省的API调用监控方法及系统

文献发布时间:2023-06-19 11:54:11


基于IPT与虚拟机自省的API调用监控方法及系统

技术领域

本发明属于虚拟化安全监控领域,具体涉及一种基于IPT与虚拟机自省的API调用监控方法及系统。

背景技术

近两年,随着虚拟化技术的发展和不断完善,云计算逐渐成了最重要的计算基础设施之一,国内云计算的规模不断扩大,越来越多的服务和软件部署在云服务器上,云服务和云应用在生产生活中发挥的作用日益显著;同时,其中涉及的隐私、安全问题就不可避免成为了云计算进一步发展的制约因素,虚拟化技术作为云计算底层支持技术,逐渐模糊了硬件和软件的分界线,面向传统实体计算机的安全防护手段也将失效。各方面对云服务和云应用安全性的关注度越来越高,如何对虚拟机内部的运行行为实施有效监控就成为当前的一个研究重点。虚拟机行为监控自虚拟化技术广泛应用以来,一直是研究人员追求的研究热点,尤其是主机行为监控分析。

传统的虚拟机行为监控主要通过在虚拟机内部安装代理,通过hook等方式在虚拟机内部获取虚拟机行为,然后将数据传出虚拟机外部,这种从虚拟机内部获取虚拟机行为的方式优点是获取速度快,对虚拟机的性能影响低,获取的数据较为详细;但是这种常规手段也有许多弊端,包括安装和维护代理复杂,容易被入侵者或者查杀工具发现并查杀从而失去监控能力,以及安全性相对较低等因素会使云计算的安全变得不可控。为使云服务商对云用户或者访问云服务用户的行为具有识别、取证、控制的能力,虚拟机域外监控技术被引用并且被广泛应用。相比于虚拟机内部获取主机行为,外部监控具有行为获取隐蔽性,不易被入侵者及查杀工具篡改或者屏蔽等优点,域外监控程序运行于具有更高权限的虚拟机管理层(VMM)或者安全虚拟机(Domain0)中,具有更好的安全性和透明性。因此在目前的云计算环境中,域外获取虚拟机行为依然是主流研究方向。

然而,域外获取虚拟机行为会干扰目标虚拟机的执行,会对虚拟机的性能产生一些影响,而且监控程序需要能够自动化解决语义鸿沟的问题,运行与虚拟机管理层的监控程序仅能访问到虚拟机底层运行信息,包括二进制、内存等,而监控程序需要高级语义才能实现对虚拟机的行为获取,这个语义差距被称之为语义鸿沟问题。目前,虚拟机自省技术(VirtualMachine Introspection)已经成为域外监控以解决云安全问题的关键技术,从原理上来看,恶意攻击通常在虚拟机内部,而VMI则工作在虚拟机管理层(VMM或Hypervisor),相对于虚拟机内部具有很强的隔离性,对虚拟机内部是不可见的,所以VMI技术自身的安全性很高;同时,由于虚拟机管理层具有完全管理和监视虚拟机的能力,这为VMI技术准备了充分条件。相对于虚拟机带内监控技术,VMI技术的优势在于更好的隔离性,能够提供纯净的虚拟机环境等,重点是该技术能够将从虚拟机获取到的低级语义信息(CPU寄存器状况、二进制内存、IO等)转换成为监控程序可理解的高级语义信息,可以从虚拟机外部通过语义重构等方式获取虚拟机详细运行状态信息,实现低级语义到高级语义的转换。

因特尔处理器追踪(Intel Processor Trace以下称IPT)技术是IntelCPU的一种全新特性,在Intel Core M和第五代Intel处理器中被引入,并且现在主流的Intel处理器中均有配备。IPT利用硬件辅助能够实现对软件执行信息的跟踪,它以最小的性能开销跟踪软件程序的执行流信息。确切的说,这些执行流信息是由IPT实时跟踪并且收集到数据包中,然后将数据包信息输出到内存缓冲区中或者利用其它输出方式进行处理。Intel手册定义了多种数据包,其中几种对于程序行为的记录和监控非常有用,包括Taken Not-TakenPacket(TNT)、Target IP Packet(TIP)、Flow Update Packet(FUP)、Pageing InformationPacket(PIP)4种数据包。其中TNT数据包收集条件分支的采用和未采用的指示;TIP数据包用于收集间接跳转、CALL、返回目标地址等目标指令地址,并且这些目标指令地址是高度压缩的;FUP数据包用来提供异常或中断的源指令地址;PIP数据包用来记录CR3寄存器值的修改,CR3寄存器记录了当前进程的页目录基址。IPT记录的包被存储在提前设置好的内存区域内,这块内存被设置为用户空间和内核空间的共享区域,当这块内存区域被填满时,硬件会发出一个中断,通知软件进行处理。由于IPT记录的包是经过高度压缩的,并直接写入物理内存,不经过TLB和缓存,所以IPT在运行时带来的额外性能开销非常小。正因为IPT在动态跟踪上有着低开销、低感知的优良特性,所以在程序行为记录和监控领域得到了越来越广泛的应用。

发明内容

针对现有技术中存在的技术问题,本发明的目的在于基于VMI技术与IPT技术,提供一种API序列调用监控方法及系统,对虚拟机内存的运行的进程展开行为监控。考虑到虚拟机监控器完全控制着运行于其上的所有虚拟机对硬件资源的访问,本发明结合了VMI技术以及IPT技术实现了无法被虚拟机内部感知的API函数调用行为监控;相对于其他方式的虚拟机行为监控,本发明能够实现带外获取虚拟机的API调用信息,不在虚拟机内部安装任何代理,保证虚拟机操作系统的纯净性和完整性;其部署在虚拟机管理层(VMM),保证了系统的透明性与完全性;相对于其他带外监控技术,本发明结合了IPT与VMI技术,不经过TLB与缓存,从而减少对虚拟机的性能损坏,更具有高效性。本发明具有的特点包括:

(1)API序列调用捕获

本发明能够捕获虚拟机内进程的API调用序列,通过VMI技术读取CR3寄存器,获得进程页目录表基地址,再配置IPT,将IPT追踪的数据结合VMI,得到进程API的调用,包括ring3的动态库API以及ring0的内核API。

(2)实时解码能力

本发明可以对IPT抓到的压缩数据进行实时的解码分析,能够将抓到的二进制数据包及时解析为TIP、TNT等需要的数据包,并且能够根据地址实时分析出API的调用以及程序分支控制等详细信息。

(3)多粒度监控能力

本发明可以针对进程的监控进行配置,能够支持单个进程行为监控,也能够支持多个进程API调用同时监控,监控的API能够配置为用户层API或者内核层API亦或者是用户层和内核层的API同时配置监控,根据需求合理配置。

(4)性能大幅提高

本发明利用IPT技术,使用硬件级特性,并且数据追踪绕过了TLB与缓存,VMI技术用来初始化接口,以及异步式监听更新,大大提高了监控能力,并且降低了虚拟机的性能损失。

(5)行为分析和处理

本发明建立高危进程的API序列的模型库,结合进程API序列监控,得到虚拟机是否正在运行高危进程,从而得出虚拟机的安全状态;本发明可以在Hypervisor层对每个监控的虚拟机建立安全状态分析,将监控所得数据与高危API库中的数据进行比对,从而得出虚拟机当前的安全状态。

本发明的技术方案为:

一种基于IPT与虚拟机自省的API调用监控方法,其步骤包括:

1)当创建虚拟机时,IPT配置模块根据收到的所创建虚拟机相关参数配置MSR寄存器启用追踪,当KVM进入虚拟机模式时,IPT开始进行追踪,执行步骤a)~b);当KVM退出虚拟机模式回到根模式的时候,IPT停止追踪;其中:a)获取虚拟机内部当前运行的进程,根据每一进程的进程结构体与进程页表的偏移,得到进程页目录基址CR3,然后遍历对应进程所有动态库,得到各进程对应动态库基地址,将所述动态库基地址与所监控的API偏移地址相加,得到所监控API的虚拟地址;b)将所监控API与该API虚拟地址的对应关系写入第一哈希表中,将进程CR3的值与对应进程间的映射关系写入第二哈希表中,并且监听进程CR3的值的变化;当虚拟机中一进程结束后,删除第二哈希表中对应进程的哈希条目,当新的进程创建,向第二哈希表中插入新创建进程与进程CR3的对应关系;

2)数据解码模块对产生的IPT追踪数据进行解码,然后根据第一哈希表、第二哈希表从解码数据中获取进程的API序列调用;

3)行为管控模块将进程的API调用序列与设定高危进程的API序列进行匹配,根据匹配结果确定虚拟机的安全状态。

进一步的,获取所监控API的虚拟地址的方法为:

a1)利用VMI技术遍历虚拟机内存,获取正在运行的进程,得到一进程列表;从该进程列表中查找需要监控的进程,若没有则与配置文件中的进程相匹配,如若需要监控的进程没有运行或配置文件中的进程未运行则返回,否则进行步骤a2);

a2)根据进程对于进程头的偏移,计算进程的基地址,根据进程的基地址和页目录基址的偏移,计算进程的页目录基址值,得到页目录基址与进程名的对应关系;

a3)继续根据进程的基地址找到动态库头的偏移量查找进程调用的动态库列表,找到该进程的进程结构体所属动态库链表,遍历所述动态库链表,获取动态库的基址,然后根据动态库函数导出表找到API相对于动态库基址的偏移,计算后得到对应API的虚拟地址。

进一步的,步骤b)中,利用VMI技术结合KVM为PspInsertProcess以及PspProcessDelete两个函数下断点,实现动态监控虚拟机内部进程的创建和销毁。

进一步的,所述虚拟机相关参数包括监控地址范围、页目录进程基址。

进一步的,对产生的IPT追踪数据进行解码的方法为:首先读取数据包头,判断数据包的类型;如果是PIP数据包,则解析出PIP数据包记录的进程CR3值,根据第二哈希表判断出当前解析的进程并缓存进PIP包进程数据结构;如果是TNT数据包,则解析TNT数据包的分支个数,并将其存入TNT包缓存;如果是TIP数据包,则解压缩计算出指令的下一个跳转地址,记录下一个跳转的地址,若跳转地址为API入口地址,则将该API缓存进最近的PIP包记录的进程的相关数据结构;如果是其他类型数据包则不进行解析处理;追踪数据中的数据包解析完成后,遍历PIP包进程数据结构缓存,针对PIP包进程数据结构缓存中的每一进程,遍历该进程的TIP包缓存,如果TIP包为函数地址,则记录为该进程的API调用,遍历完毕后生成该进程的API调用序列。

一种基于IPT与虚拟机自省的API调用监控系统,其特征在于,包括VMI初始化模块、动态更新模块、IPT配置模块、数据解码模块、行为管控模块;其中

VMI初始化模块,用于获取虚拟机内部当前运行的进程,根据每一进程的进程结构体与进程页表的偏移,得到进程页目录基址CR3,然后遍历对应进程所有动态库,得到各进程对应动态库基地址,将所述动态库基地址与所监控的API偏移地址相加,得到所监控API的虚拟地址;

动态更新模块,用于将所监控API与该API虚拟地址的对应关系写入第一哈希表中,将进程CR3的值与对应进程间的映射关系写入第二哈希表中,并且监听进程CR3的值的变化;当虚拟机中一进程结束后,删除第二哈希表中对应进程的哈希条目,当新的进程创建,向第二哈希表中插入新创建进程与进程CR3的对应关系;

IPT配置模块,用于当创建虚拟机时,根据收到的所创建虚拟机相关参数配置MSR寄存器启用追踪,当KVM进入虚拟机模式时,IPT开始进行追踪;当KVM退出虚拟机模式回到根模式的时候,IPT停止追踪;

数据解码模块,对产生的IPT追踪数据进行解码,然后根据第一哈希表、第二哈希表从解码数据中获取进程的API序列调用;

行为管控模块,将进程的API调用序列与设定高危进程的API序列进行匹配,根据匹配结果确定虚拟机的安全状态。

本发明公开的基于IPT与虚拟机自省的API调用监控系统架构如图1所示,包括VMI初始化模块、动态更新模块、IPT配置模块、数据解码模块、行为管控模块,涉及到qemu用户层、KVM内核层、VM客户层。其中VMI初始化模块一是利用VMI技术找到虚拟机中正在运行的进程以及该进程的页目录基地址,二是结合配置文件找到API及对应虚拟地址;动态更新模块负责维护以页目录基地址为健、进程名为值的哈希表,以及API虚拟地址为键、API名称为值的哈希表,以及监听进程与函数的地址变化;IPT配置模块负责提供文件操作接口以及根据虚拟地址范围、系统权限等参数配置MSR寄存器以启用IPT硬件追踪特性;数据解码模块提供对IPT产生的数据包提供实时解码功能,并生成进程的API调用序列;行为管控模块将生成的API调用序列与高危进程模型进行对比,判断虚拟机的安全状态,对虚拟机安全状态给予评估。

系统运行的具体步骤如下:

(1)系统开启后利用VMI初始化模块获取取虚拟机内部正在运行的进程,根据进程结构体与进程页表的偏移得到进程页目录基址CR3,然后遍历该进程所有动态库,得到对应动态库基地址,将基地址与所要监控的API偏移地址相加,得到API的虚拟地址。

(2)动态更新模块将API与该API虚拟地址的对应关系写入到哈希表中,将CR3的值与对应进程间的映射关系也写入哈希表中,并且利用VMI技术动态监听进程CR3的值的变化,当进程结束之后,动态删除对应进程的哈希条目,当新的进程创建,系统会向哈希表动态插入此进程与CR3的对应关系,达到动态更新进程CR3以及API地址的目的。

(3)当创建虚拟机时,应用程序会访问IPT配置模块文件接口,向IPT配置模块传输监控地址范围、页目录进程基址等参数,IPT配置模块根据这些参数配置MSR寄存器启用追踪,当KVM进入虚拟机模式时候,IPT开始进行追踪,当KVM退出虚拟机模式回到根模式的时候,IPT停止追踪,系统将产生的IPT追踪数据进行解码。

(4)数据解码模块从缓冲区读取内存数据进行实时解码,根据数据包的规则定义对数据包进行分析,还原出系统需要的PIP、TIP、TNT数据包,结合前面的API与地址的映射关系以及CR3值与进程的对应关系,推导出进程的API序列调用。

(5)行为管控模块根据数据解码模块生成的API调用序列,将该序列与高危进程的API序列进行匹配,如果序列相似度大于设定阈值,则做出进一步处理,一次评估虚拟机安全状态。

与现有技术相比,本发明具有如下优点:

1)监控的API覆盖范围较广,能够根据用户的需求实现用户层以及内核层的多数API的监控,弥补了一般带外监控范围广度不够的问题,实现进程对API调用的复现;

2)细粒度多角度提供监控能力,能够根据用户需求针对单个进程或多进程,也能够监控ring3的API或者ring0的API;

3)实时的解码能力,快速解码是本系统能够可靠运行的前提;

4)结合IPT技术,利用硬件特性的特点,极大提高效率,降低虚拟机性能损失;

5)建立高危进程API序列调用模型,评估虚拟机的安全状态。

附图说明

图1为基于IPT与虚拟机自省的API调用监控系统架构图;

图2为VMI初始化流程图;

图3为动态更新流程图;

图4为IPT配置流程图;

图5为数据解码过程流程图;

图6为行为管控流程图。

具体实施方式

下面结合具体的实施例对本发明进行详细说明。

本发明同时公开了一种基于IPT与虚拟机自省的API调用监控系统,主要包括VMI初始化模块、动态更新模块、IPT配置模块、数据解码模块、行为管控模块等5部分。

图2给出了VMI初始化模块的流程图,寻址方法的具体实施步骤如下:

(1)利用VMI技术遍历虚拟机内存,获取正在运行的进程。从正在运行的进程列表中查找需要监控的进程,如若没有需要监控的进程则与配置文件中的进程相匹配,配置文件中的进程用来将API加载进内存,如若需要监控的进程没有运行,或者配置文件中的进程未运行则返回,否则进入下一步;

(2)找到所需要的进程之后,根据进程对于进程头的偏移,计算进程的基地址,根据进程的基地址和页目录基址(directory_table_base)的偏移,计算进程的页目录基址值,得到页目录基址与进程名的对应关系。

(3)继续根据进程的基地址找到动态库头的偏移量,进而查找进程调用的动态库列表,找到该进程的进程结构体所属动态库链表,动态库链表中记录了该进程所加载的所有动态库模块相关信息,遍历动态库链表,获取动态库的基址,随后根据动态库函数导出表找到API相对于动态库基址的偏移,计算后得到对应的虚拟地址。

图3给出了动态更新模块的工作流程图,策略更新方法的具体实施步骤如下:

(1)根据API与虚拟地址的对应关系,创建哈希表,将映射关系插入哈希表;

(2)创建进程名称与CR3值的哈希表,将对应关系插入哈希表;

(3)利用VMI技术结合KVM为PspInsertProcess以及PspProcessDelete两个函数下断点,实现动态监控虚拟机内部进程的创建和销毁;

(4)实时监听进程的创建和销毁,当有新的进程创建的时,系统会最终调用到PspInsertProcess函数,获取此函数的调用参数,此函数的第一个参数中包含了被创建进程的基本信息,从获取的信息中找到进程名以及进程的页目录基址,并同时动态更新哈希表,当有进程结束的时候,系统会最终调用PspProcessDelete函数,同理销毁哈希表中相对应的进程和页目录基址。

图4给出了IPT配置模块工作的流程图,其具体实施步骤如下:

(1)IPT初始化,查看CPU特性,根据中央处理器编号(CPUID)计算检查系统是否支持IPT;

(2)IPT追踪过程会产生大量数据,若支持IPT,则需要注册缓冲区溢出的中断处理程序,以处理内存缓冲区溢出的情况;

(3)提供IPT操作文件接口,用户层利用ioctrl接口配置IPT的监控地址范围、页目录进程基址、缓冲区大小等参数;

(4)系统进入虚拟机模式(非根模式)将配置写入MSR寄存器开始追踪,系统退出虚拟机模式(根模式)读取MSR寄存器参数待下次配置。若下次进入虚拟机模式之前,上层应用程序传入参数,则配置新的参数,若没有传入参数而又启用IPT则使用上次退出虚拟机模式的参数。

图5给出了数据解码模块的流程图,环形事件缓冲区存储方法的具体实施步骤如下:

(1)操作KVM设备,传入IPT配置参数,根据参数配置MSR寄存器启用IPT特性;

(2)系统进入虚拟机模式,IPT开启进行数据追踪,系统退出虚拟机模式,IPT关闭并将数据导入内存缓冲区,系统进行解码;

(3)读取数据缓冲区,停止缓冲区为空停止,读取数据包头,判断是哪种类型的数据包,系统只需要TIP、TNT、PIP三种类型数据包,其他的可跳过;

(4)数据包解析为PIP数据包,解析出PIP包记录的进程CR3值,根据前面的进程名与CR3的哈希表,判断出当前解析的是哪个进程,并缓存进PIP包进程数据结构缓存,然后回到步骤3;

(5)数据包解析为TNT数据包,解析TNT包的分支个数,并将其存入TNT包缓存,然后回到步骤3;

(6)数据包解析为TIP数据包,解析TIP数据包,解压缩计算出指令的下一个跳转地址,记录下一个跳转的地址,若跳转地址为API入口地址,则将该API缓存进最近的PIP包记录的进程的相关数据结构,然后回到步骤3;

(7)缓冲区的数据包解析完毕,遍历PIP包进程数据结构缓存,针对PIP包进程数据结构缓存中的每一进程,遍历该进程的TIP包缓存,如果TIP包为函数地址,则记录为该进程的API调用,遍历完毕后生成该进程的API调用序列,然后结合行为管控模块,验证该进程是否为高危进程,若一切正常则回到步骤1;

图6给出了行为管控模块工作的流程图,行为管控模块的具体实施步骤如下:

(1)读取配置文件,建立高危进程API序列模型;

(2)读取IPT追踪生成的API调用序列并与模型进行比对;

(3)如果比对相似度过高,则取出高危进程做进一步处理,并扩充高危进程API序列调用模型;

(4)如果所有进程的API调用序列都属于正常的话,则暂时认为虚拟机状态安全,返回进行下一次检测。

以上所述仅是本发明的一种优选方案,应当指出,对于本技术领域的普通人员来说,在不脱离本发明的原理前提下,还可以做出若干修饰和润色,在不脱离本发明的精神和范围内,各种替换、变化和修改都是可能的。本发明不应局限于本说明书的实施例和附图所公开的内容,本发明的保护范围以权利要求书界定的范围为准。

相关技术
  • 基于IPT与虚拟机自省的API调用监控方法及系统
  • 一种基于虚拟机自省技术的API动态监控方法及系统
技术分类

06120113098865