首页 / 专利库 / 软件 / 虚拟机监控器 / 基于虚拟化的应用可信保障方法

基于虚拟化的应用可信保障方法

阅读:244发布:2020-05-15

专利汇可以提供基于虚拟化的应用可信保障方法专利检索,专利查询,专利分析的服务。并且本 发明 公开了一种基于虚拟化的应用可信保障方法,监控 虚拟机 CPU寄存器变化,截获虚拟机中 内核 模 块 和 进程 加载事件;在模块和进程加载时进行完整性验证,截获加载事件过程中验证可执行代码的完整性;实时截获进程切换事件;在进程切换事件时,验证相应应用信息完整性;若上述过程中完整性验证不通过,则警报并终止系统运行。该方法首先实现虚拟机中内核模块和进程加载时的代码完整性验证;同时,在运行时实时截获应用切换事件,并在进程切换时,验证相应应用信息完整性。而且同时保持对被监控的虚拟机透明。保证了信息的完整,不易被篡改。,下面是基于虚拟化的应用可信保障方法专利的具体信息内容。

1.基于虚拟化的应用可信保障方法,其特征在于,
监控虚拟机CPU寄存器变化,截获虚拟机中内核进程加载事件;
在模块和进程加载时进行完整性验证,截获加载事件过程中验证可执行代码的完整性;
实时截获进程切换事件;
在进程切换事件时,验证相应应用信息完整性;
若上述过程中完整性验证不通过,则警报并终止系统运行。
2.根据权利要求1所述的基于虚拟化的应用可信保障方法,其特征在于,所述截获加载事件过程中验证可执行代码的完整性的过程,为验证可执行代码是否发生变化,以第一次被加载为标准,并且记录每次可执行代码被加载时其散列值,读取虚拟机中文件采用加载文件系统驱动程序的方式读取。
3.根据权利要求2所述的基于虚拟化的应用可信保障方法,其特征在于,截获加载事件过程中验证可执行代码的完整性包括:
S1.通过系统调用第一个参数中存储的字符串地址;
S2.通过S1步骤的地址,读取字符串内容,获得需要加载内容的文件目录信息;
S3.通过虚拟机监控器打开文件,并计算文件摘要信息;
S4.与预事先存储在可信数据中的摘要信息对比,若摘要信息一致,说明加载内容未经篡改,可以安全加载,若摘要信息不一致,则报警。
4.根据权利要求1所述的基于虚拟化的应用可信保障方法,其特征在于,在所述截获进程切换事件时,获取虚拟机进程列表以及计算进程CPU利用率。
5.根据权利要求4所述的基于虚拟化的应用可信保障方法,其特征在于,所述截获进行切换事件,操作系统包括两个步骤:
S11.切换页面全局目录地址以安装一个新的地址空间,CR3寄存器是保存进程全局目录地址的寄存器,新的进程地址写入CR3寄存器;
S22.后切换内核堆栈和硬件上下文,进程的内核堆栈地址写入ESP寄存器,跟踪CR3寄存器变换实现截获进程切换事件。
6.根据权利要求5所述的基于虚拟化的应用可信保障方法,其特征在于,所述应用相关信息保存在数据类型为struct task_struct的进程描述符里,所述进程描述符中包含进程的PID和进程名称,以及下一个进程的进程描述符地址。
7.根据权利要求6所述的基于虚拟化的应用可信保障方法,其特征在于,所述获取当前进程的描述符包括:操作系统为每个进程单独分配一个存储空间,在所述存储空间里保存两个不同的数据结构,一个是内核态的进程堆栈,另一个是进程信息,所述进程堆栈自上而下增长,发生进程切换时ESP寄存器指示当前进程堆栈的地址。
8.根据权利要求7所述的基于虚拟化的应用可信保障方法,其特征在于,通过esp获取进程信息thread_info结构体的地址thread_info_addr;
根据task在进程信息thread_info结构体中偏移量计算出进程描述符的地址task_addr;
通过读取虚拟机内存获取当前进程描述符,通过进程描述符中保持的数据,获取进程PID以及进程名称等信息。
9.根据权利要求8所述的基于虚拟化的应用可信保障方法,其特征在于,所述获取虚拟机进程列表包括:操作系统采用双向链表的方式将所有进程链接起来,所述进程描述符中包含两个指针:prev指向前一个进程描述符,next指向下一个进程描述符,在进程切换时通过节描述方法获取当前进程描述符,通过next指针就遍历所有当前系统中的进程,获取当前进程的列表,以及每个进程的信息。
10.根据权利要求4所述的基于虚拟化的应用可信保障方法,其特征在于,所述获取进程CPU利用率包括:通过进程切换获取进程CPU执行时间,计算进程CPU利用率。

说明书全文

基于虚拟化的应用可信保障方法

技术领域

[0001] 本发明属于通信可靠性领域,涉及应用可信保障方法,尤其是一种基于虚 拟化的应用可信保障方法。

背景技术

[0002] 恶意软件是网络犯罪的一种常用的工具,包括trojans和backdoors。恶意 软件入侵计算系统后,往往破坏系统正常运行,导致系统性能下降,一些主要 文件和隐私文件存在被窃取的险,对计算机使用者构成严重威胁。在各种利 益的驱动下,恶意软件不断发展与更新,融合了多种主要的安全攻击技术。目 前大部分恶意软件具有了抵御可信防护系统的能,如AgoBot对105种防护系 统免疫。因此安全监控系统必须保证对于恶意软件透明。
[0003] 传统可信防护系统根据部署位置可分为两类,第一类基于主机的可信防护 系统,第二类是基于网络的防护系统。其中第一类可信防护系统与被监控计算 机系统部署在一起,这种方式能够获取充分的监控信息,但是对于恶意软件可 见,易受到攻击。第二类系统与被监控系统部署在不同的主机上,通过网络传 输方式获取监控信息,具有良好的透明性,但是获取信息量少,而且网络状态 构成系统瓶颈。这两类系统都有不足之处,无法同时满足既可以获取充分监控 信息,又可以保证可信防护系统透明性。

发明内容

[0004] 本发明所要达到的目的就是提供一种基于虚拟化的应用可信保障方法,该 方法基于硬件虚拟化技术,改善传统可信防护系统。
[0005] 为了达到上述目的,本发明采用如下技术方案:一种基于虚拟化的应用可 信保障方法,其中,
[0006] 监控虚拟机CPU寄存器变化,截获虚拟机中内核进程加载事件;
[0007] 在模块和进程加载时进行完整性验证,截获加载事件过程中验证可执行代 码的完整性;
[0008] 实时截获进程切换事件;
[0009] 在进程切换事件时,验证相应应用信息完整性;
[0010] 若上述过程中完整性验证不通过,则警报并终止系统运行。
[0011] 进一步的,所述截获加载事件过程中验证可执行代码的完整性的过程,为 验证可执行代码是否发生变化,以第一次被加载为标准,并且记录每次可执行 代码被加载时其散列值,读取虚拟机中文件采用加载文件系统驱动程序的方式 读取。
[0012] 进一步的,截获加载事件过程中验证可执行代码的完整性包括:
[0013] S1.通过系统调用第一个参数中存储的字符串地址;
[0014] S2.通过S1步骤的地址,读取字符串内容,获得需要加载内容的文件目录 信息;
[0015] S3.通过虚拟机监控器打开文件,并计算文件摘要信息;
[0016] S4.与预事先存储在可信数据中的摘要信息对比,若摘要信息一致,说明加 载内容未经篡改,可以安全加载,若摘要信息不一致,则报警。
[0017] 进一步的,在所述截获进程切换事件时,获取虚拟机进程列表以及计算进程 CPU利用率。
[0018] 进一步的,所述截获进行切换事件,操作系统包括两个步骤:
[0019] S11.切换页面全局目录地址以安装一个新的地址空间,CR3寄存器是保存进 程全局目录地址的寄存器,新的进程地址写入CR3寄存器;
[0020] S22.后切换内核堆栈和硬件上下文,进程的内核堆栈地址写入ESP寄存器, 跟踪CR3寄存器变换实现截获进程切换事件。
[0021] 进一步的,所述应用相关信息保存在数据类型为struct task_struct的进 程描述符里,所述进程描述符中包含进程的PID和进程名称,以及下一个进程 的进程描述符地址。
[0022] 进一步的,所述获取当前进程的描述符包括:操作系统为每个进程单独分配 一个存储空间,在所述存储空间里保存两个不同的数据结构,一个是内核态的 进程堆栈,另一个是进程信息,所述进程堆栈自上而下增长,发生进程切换时 ESP寄存器指示当前进程堆栈的地址。
[0023] 进一步的,通过esp获取进程信息thread_info结构体的地址 thread_info_addr;
[0024] 根据task在进程信息thread_info结构体中偏移量计算出进程描述符的地 址task_addr;
[0025] 通过读取虚拟机内存获取当前进程描述符,通过进程描述符中保持的数据, 获取进程PID以及进程名称等信息。
[0026] 进一步的,所述获取虚拟机进程列表包括:操作系统采用双向链表的方式将 所有进程链接起来,所述进程描述符中包含两个指针:prev指向前一个进程描 述符,next指向下一个进程描述符,在进程切换时通过节描述方法获取当前进 程描述符,通过next指针就遍历所有当前系统中的进程,获取当前进程的列表, 以及每个进程的信息。
[0027] 进一步的,所述获取进程CPU利用率包括:通过进程切换获取进程CPU执 行时间,计算进程CPU利用率。
[0028] 采用上述技术方案后,本发明具有如下优点:该方法首先实现虚拟机中内 核模块和进程加载时的代码完整性验证;同时,在运行时实时截获应用切换事 件,并在进程切换时,验证相应应用信息完整性。而且同时保持对被监控的虚 拟机透明。基于硬件虚拟化技术,通过分析虚拟机CPU寄存器变化,获取虚拟 机内部系统调用和进程切换信息,这种基于虚拟机硬件底层信息的监控,保证 了信息的完整,不易被篡改。而且本文将安全监控系统实现为Linux系统模块, 可以根据需求安装和卸载。并且开发了一组获取虚拟机底层信息的API,可以供 其他开发者使用。并且安全监控信息全面,可以作为其他安全系统的基础数据。
[0029] 同时与现有技术相比,后者在进行系统内核加载和应用加载时代码可信验 证主要采用基于内核的方法,即在被测系统内核中添加一个新的内核模块或代 码。从而实现对系统操作内核加载及应用加载事件的截获,并在截获中进行验 证。该方法透明性差,会改变被测系统的状态,造成二次开发的成本。另外, 修改的部分对恶意攻击可见,容易成为明确的攻击目标。本技术中,验证模块 处于虚拟机监控器层面中,基于虚拟机监控器截获系统的方法,取得对应效果。 该方法不需要修改被测系统,同时对被测系统不可见。
[0030] 与另一现有技术相比,如基于虚拟机的文件完整性监控系统,其实质是通 过虚拟机监控器层实现文件的完整性保护,访问控制等功能。该类系统主要通 过截获虚拟机的IO操作进行,也就是对所有文件操作进行截获和监控。总体开 销大。而本技术方案的目的是内核加载和应用加载完整性验证,因此截获点是 系统加载事件而不是IO,从而可以保证系统的性能。附图说明
[0031] 下面结合附图对本发明作进一步说明:
[0032] 图1为本发明中系统整体框架示意图;
[0033] 图2为本发明中本地认证方法示意图。

具体实施方式

[0034] 实施例
[0035] 如图1所示,本发明涉及一种基于虚拟化的应用可信保障方法,监控虚拟 机CPU寄存器变化,截获虚拟机中内核模块和进程加载事件;在模块和进程加 载时进行完整性验证,截获加载事件过程中验证可执行代码的完整性;实时截 获进程切换事件;在进程切换事件时,验证相应应用信息完整性;若上述过程 中完整性验证不通过,则警报并终止系统运行。
[0036] 通过硬件虚拟化技术,监控虚拟机CPU寄存器变化,首先实现截获虚拟机 中内核模块和进程加载事件,并在截获过程中实现可执行代码完整性验证;同 时,在运行时实时截获进程切换事件,并在进程切换时,验证相应应用信息完 整性。若过程中完整性验证不通过,则警报并终止系统运行,从而实现整个系 统的可信。本发明对于虚拟机的性能损耗小于10%;而且不需要与虚拟机中操作 系统交互,实现被监控系统的完全透明,保证了监控系统的抗感染能力;另外, 本发明可以根据监控需求安装和卸载,避免不在需要安全监控时,对虚拟机性 能产生无用的浪费。
[0037] 在本实施例中具体的,模块加载及应用加载时完整性验证包括:
[0038] 模块加载和进程加载时完整性验证是验证可执行代码是否发生变化,也就 是说,所述截获加载事件过程中验证可执行代码的完整性的过程,为验证可执 行代码是否发生变化,以第一次被加载为标准,并且记录每次可执行代码被加 载时其散列值,读取虚拟机中文件采用加载文件系统驱动程序的方式读取。
[0039] Linux操作系统通过execv系统调用实现应用程序加载(windows通过 CreateProcess系统调用实现进程加载),该系统调用的系统调用号时11,其第 一个参数是可执行代码的路径;同理,Linux系统通过init_module系统调用实 现模块加载,系统调用号为175,第一个参数是可执行代码路径。
[0040] 以上两种事件都根据下述流程实现模块和应用加载时完整性验证。截获加 载事件过程中验证可执行代码的完整性包括:
[0041] S1.通过系统调用第一个参数中存储的字符串地址;
[0042] S2.通过S1步骤的地址,读取字符串内容,获得需要加载内容的文件目录 信息;
[0043] S3.通过虚拟机监控器打开文件,并计算文件摘要信息;
[0044] S4.与预事先存储在可信数据中的摘要信息对比,若摘要信息一致,说明加 载内容未经篡改,可以安全加载,若摘要信息不一致,则报警。
[0045] 其中加载内容的摘要信息的保存在HASH链表中,搜索某个执行代码的散列 值操作(find_md5)的时间复杂度为O(1),保存某个执行代码的散列值操作 (save_md5)的时间复杂的也是O(1),所以其时间复杂度只有文件的大小N成 正比,因此上述算法的时间复杂度为O(N)。
[0046] 在本实施例中具体的,运行时应用完整性验证包括:
[0047] 运行时应用完整性验证主要通过截获进程切换,在进程切换过程中,获取 虚拟机中的当前应用的信息并与白名单中的可信信息进行比对,若一致,则验 证完整,若不一致则不完整。下面介绍如何基于硬件虚拟化技术截获进程切换, 获取虚拟机进程列表以及计算进程CPU利用率。
[0048] 所述截获进行切换事件,操作系统包括两个步骤:
[0049] S11.切换页面全局目录地址以安装一个新的地址空间,CR3寄存器是保存进 程全局目录地址的寄存器,新的进程地址写入CR3寄存器;
[0050] S22.后切换内核堆栈和硬件上下文,进程的内核堆栈地址写入ESP寄存器, 跟踪CR3寄存器变换实现截获进程切换事件。
[0051] 首先切换页面全局目录地址以安装一个新的地址空间,CR3寄存器是保存进 程全局目录地址的寄存器,新的进程地址写入CR3寄存器。然后切换内核堆栈 和硬件上下文,进程的内核堆栈地址写入ESP寄存器。进程切换的第一步需要 写入CR3寄存器,产生VmExit事件,CPU控制权交给虚拟机监控器,因此可以 通过跟踪CR3寄存器变换实现截获进程切换。虽然截获了进程切换,但是此时 并没有获取任何与进程相关的信息。所述应用相关信息保存在数据类型为 struct task_struct的进程描述符里,所述进程描述符中包含进程的PID和进 程名称,以及下一个进程的进程描述符地址。Linux操作系统中进程的相关信息 保存在数据类型为struct task_struct的进程描述符里。进程描述符中包含进 程的PID和进程名称,以及下一个进程的描述符地址。获取当前进程的描述符 就能够获取当前进程的基本信息。
[0052] 下面两个小节介绍如果在截获进程切换时获取当前进程信息以及当前进程 列表。
[0053] 获取当前进程的描述符:
[0054] 操作系统为每个进程单独分配一个存储空间,在所述存储空间里保存两个不 同的数据结构,一个是内核态的进程堆栈,另一个是进程信息,所述进程堆栈 自上而下增长,发生进程切换时ESP寄存器指示当前进程堆栈的地址。
[0055] 如图2所示,Linux操作系统为每个进程单独分配一个存储空间buffer,这 个存储空间大小一般是8k,占据连续的两个页框,buffer起始地址是的213倍数。 在这个存储空间里保存两个不同的数据结构,一个是内核态的进程堆栈,另一 个是进程信息struct thread_info结构体,thread_info的属性task是进程描 述符的地址。thread_info位于这个存储空间的起始位置,进程堆栈自上而下增 长,发生进程切换时ESP寄存器指示当前进程堆栈的地址。
[0056] 上面介绍了进程当前进程堆栈地址与进程描述符地址的关系,通过ESP寄存 器可以获取ESP值esp。利用下面公式计算进程的描述符地址。
[0057] 通过esp获取进程信息thread_info结构体的地址thread_info_addr;根据 task在进程信息thread_info结构体中偏移量计算出进程描述符的地址 task_addr;通过读取虚拟机内存获取当前进程描述符,通过进程描述符中保持 的数据,获取进程PID以及进程名称等信息。
[0058] 首先通过esp获取进程信息thread_info结构体的地址thread_info_addr。
[0059] thread_info_addr=esp&0xfffe0000;
[0060] 然后根据task在进程信息thread_info结构体中偏移量计算出进程描述符 的地址task_addr。
[0061] task_addr=thread_info_addr
[0062] +offset(thread_info,task)。
[0063] 最后通过读取虚拟机内存获取当前进程描述符,通过进程描述符中保持的数 据,获取进程PID以及进程名称等信息。
[0064] 所述获取虚拟机进程列表:
[0065] 操作系统采用双向链表的方式将所有进程链接起来,所述进程描述符中包含 两个指针:prev指向前一个进程描述符,next指向下一个进程描述符,在进程 切换时通过节描述方法获取当前进程描述符,通过next指针就遍历所有当前系 统中的进程,获取当前进程的列表,以及每个进程的信息。
[0066] Linux操作系统采用双向链表的方式将所有进程链接起来,进程描述符中包 含两个指针:prev指向前一个进程描述符,next指向下一个进程的描述符。在 进程切换时可以通过节描述方法获取当前进程描述符,然后通过next指针就遍 历所有当前系统中的进程,即获取当前进程的列表,以及每个进程的信息。
[0067] 获取进程CPU利用率:
[0068] 所述获取进程CPU利用率包括:通过进程切换获取进程CPU执行时间,计算 进程CPU利用率。
[0069] CPU利用率突变进程往往存在一些异常,这些进程可能是恶意代码。下面介 绍如何通过进程切换信息获取进程的CPU利用率。
[0070] 通过进程切换获取进程CPU执行时间,计算进程CPU利用率。下面是具体的 计算方法。
[0071] tstart是进程开始时间,now是现在时间,trun是进程CPU使用时间总和,那 么进程的CPU利用率rate=trun/(now-tstart)。操作系统中存在多个进程同时运 行,进程之间抢占CPU,每个进程的CPU使用时间等于每次抢占时间的总和。ti为进程第i次抢占CPU后时间,所以 两次进程切换之间时间即 进程抢占CPU运行时间。发生进程切换时系统记录将要运行进程Pnext、上次运行 进程Plast以及进程切换时间,然后对比上次进程切换的时间可以计算进程Plast抢占CPU时间。
[0072] 通过硬件虚拟化技术,监控虚拟机CPU寄存器变化,首先实现截获虚拟机 中内核模块和进程加载事件,并在截获过程中实现可执行代码完整性验证;同 时,在运行时实时截获进程切换事件,并在进程切换时,验证相应应用信息完 整性。若过程中完整性验证不通过,则警报并终止系统运行,从而实现整个系 统的可信。本发明对于虚拟机的性能损耗小于10%;而且不需要与虚拟机中操作 系统交互,实现被监控系统的完全透明,保证了监控系统的抗感染能力;另外, 本发明可以根据监控需求安装和卸载,避免不在需要安全监控时,对虚拟机性 能产生无用的浪费。
[0073] 该方法首先实现虚拟机中内核模块和进程加载时的代码完整性验证;同时, 在运行时实时截获应用切换事件,并在进程切换时,验证相应应用信息完整性。 而且同时保持对被监控的虚拟机透明。基于硬件虚拟化技术,通过分析虚拟机 CPU寄存器变化,获取虚拟机内部系统调用和进程切换信息,这种基于虚拟机硬 件底层信息的监控,保证了信息的完整,不易被篡改。而且本文将安全监控系 统实现为Linux系统模块,可以根据需求安装和卸载。并且开发了一组获取虚 拟机底层信息的API,可以供其他开发者使用。并且安全监控信息全面,可以作 为其他安全系统的基础数据。
[0074] 同时与现有技术相比,后者在进行系统内核加载和应用加载时代码可信验 证主要采用基于内核的方法,即在被测系统内核中添加一个新的内核模块或代 码。从而实现对系统操作内核加载及应用加载事件的截获,并在截获中进行验 证。该方法透明性差,会改变被测系统的状态,造成二次开发的成本。另外, 修改的部分对恶意攻击可见,容易成为明确的攻击目标。本技术中,验证模块 处于虚拟机监控器层面中,基于虚拟机监控器截获系统的方法,取得对应效果。 该方法不需要修改被测系统,同时对被测系统不可见。
[0075] 与另一现有技术相比,如基于虚拟机的文件完整性监控系统,其实质是通 过虚拟机监控器层实现文件的完整性保护,访问控制等功能。该类系统主要通 过截获虚拟机的IO操作进行,也就是对所有文件操作进行截获和监控。总体开 销大。而本技术方案的目的是内核加载和应用加载完整性验证,因此截获点是 系统加载事件而不是IO,从而可以保证系统的性能。
[0076] 除上述优选实施例外,本发明还有其他的实施方式,本领域技术人员可以 根据本发明作出各种改变和变形,只要不脱离本发明的精神,均应属于本发明 所附权利要求所定义的范围。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈