CN102938035B - 一种在虚拟机内部的驱动隔离系统与方法 - Google Patents
一种在虚拟机内部的驱动隔离系统与方法 Download PDFInfo
- Publication number
- CN102938035B CN102938035B CN201210442752.4A CN201210442752A CN102938035B CN 102938035 B CN102938035 B CN 102938035B CN 201210442752 A CN201210442752 A CN 201210442752A CN 102938035 B CN102938035 B CN 102938035B
- Authority
- CN
- China
- Prior art keywords
- driving
- isolated
- virtual machine
- driver
- kernel
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Landscapes
- Memory System Of A Hierarchy Structure (AREA)
- Storage Device Security (AREA)
Abstract
本发明公开了一种在虚拟机内部的驱动隔离系统与方法,涉及计算机容错技术,通过被隔离驱动程序的授权表,实现简单、有效、兼容已有操作系统和驱动程序架构的基于全虚拟化技术在虚拟机内部隔离驱动程序的系统,一种在虚拟机内部的驱动隔离系统包括运行于虚拟机用户态的驱动隔离加载模块、虚拟机内核态的内存信息监视模块以及虚拟机管理器内部的内存访问控制模块,所述虚拟机内核态的内存信息监视模块包括:包装函数库、隔离控制子模块以及消息通信子模块。
Description
技术领域
本发明属于计算机科学领域,涉及计算机容错技术,特别涉及一种在虚拟机内部的驱动隔离系统与方法。
背景技术
对于高可靠计算机系统来说,操作系统的可靠性显得至关重要,但是由于操作系统的高度复杂性,使得其可靠性仍然是一个至关重要却仍未解决的问题。通过可操作系统的可扩展机制,大量第三方开发的驱动程序可被加载进内核。同时传统操作系统的宏内核架构,使得驱动与内核将运行在相同的地址空间和特权级下,任何驱动程序的故障都可轻易的传递到内核其他部分,严重削弱了系统的可靠性。由于驱动程序所占内核代码量的比例巨大,且常常缺乏完善的测试,使得驱动程序故障成为操作系统崩溃的主要原因。相关研究表明,Linux操作系统中驱动程序的故障是内核其他部分故障的三到七倍,在Windows操作系统下也有类似的结论。
近年来,虚拟机技术也被作为解决驱动程序可靠性问题的方法。传统方法是将驱动及其内核都隔离到独立的虚拟机实例中,利用虚拟机实例本身的隔离性来隔离驱动程序。然而,这种方法只是利用虚拟机替代整机来承受可能出现的系统崩溃,从而换取整机的可靠性提高,对于虚拟机中的驱动程序的可靠性并没有提高。如果虚拟机中的驱动程序发生故障则会造成虚拟机实例的故障或崩溃,从而造成虚拟机实例所提供的所有服务中断。另外,每个被隔离的驱动程序运行一个独立的客户机操作系统,同样也造成了较多的性能损失。
发明内容
针对上述缺陷或不足,本发明提供了通过被隔离驱动程序的授权表,实现简单、有效、兼容已有操作系统和驱动程序架构的一种在虚拟机内部的驱动隔离系统与方法。
为达到上述目的,本发明提供的在虚拟机内部的驱动隔离系统:
包括运行于虚拟机用户态的驱动隔离加载模块、虚拟机内核态的内存信息监视模块以及虚拟机管理器内部的内存访问控制模块,其中,
所述运行于虚拟机用户态的驱动隔离加载模块:将驱动模块文件中监视未定义符号与内存信息监视模块中监视包装函数建立联系,使得驱动以隔离方式运行,并向内存信息监视模块中的隔离控制子模块发出被隔离驱动程序提醒消息,以使得进入内核的驱动为被隔离驱动程序;所述监视未定义符号包括内存管理函数的未定义符号和驱动注册函数的未定义符号;
所述虚拟机内核态的内存信息监视模块包括:包装函数库、隔离控制子模块以及消息通信子模块,其中,
所述包装函数库:为虚拟机内核中所监控的函数建立内核包装函数,并为虚拟机内核中驱动接口中的接口函数建立驱动包装函数,以使得被隔离驱动与内核和驱动包装函数链接,并进入隔离运行模式;所述内核包装函数包括内存包装函数和注册包装函数,所述内存包装函数是指内核中内存管理函数的包装函数,所述注册包装函数是指内核中驱动注册函数的包装函数;
所述隔离控制子模块:接收运行于虚拟机用户态的驱动隔离加载模块发出的被隔离驱动程序提醒消息,建立被隔离驱动程序的相关信息,并指示消息通信子模块向所述虚拟机管理器内部的内存访问控制模块发送设置被隔离驱动授权表的指令,同时,根据需要获取可信任的虚拟机内核的地址范围,注入到内存访问控制模块,并发出设置虚拟机管理器中影子页表的指令;所述可信任的虚拟机内核的地址范围包括虚拟机内核代码和未被隔离的驱动程序代码的内存起始地址及其大小;
所述消息通信子模块:向内存访问控制模块实时报告被隔离驱动所使用内存信息、可信任的虚拟机内核的地址范围、及发送建立被隔离驱动授权表的指令;所述消息通信子模块被所述包装函数库和所述隔离控制子模块调用;
所述内存访问控制模块:用于控制被隔离驱动程序写操作,包括:授权表管理子模块、页面设置子模块以及缺页处理子模块,其中,
所述授权表管理子模块:接收所述内存信息监视模块发出的设置被隔离驱动授权表的指令后,设置被隔离驱动程序可写内存范围的授权表,并负责确认写操作地址是否在授权表中;
所述页面设置子模块:接收所述内存信息监视模块发出的设置虚拟机管理器中影子页表的指令,并根据所述被隔离驱动所在虚拟机的内核空间在虚拟机管理器中所对应的影子页表,将影子页表设置为只读另外,当缺页处理子模块允许写操作时,还接收所述缺页处理子模块发出的允许写操作段的指令,并设置写操作目标地址对应的影子页表,在写操作结束后,重新将影子页表设置为只读;
所述缺页处理子模块:当被隔离驱动所在虚拟机内核出现写操作时,根据写操作指令的来源和被隔离驱动对应的授权表,判断和控制是否允许进行写操作。
运行于虚拟机用户态的驱动隔离加载模块具体用于:
运行于虚拟机用户态的驱动隔离加载模块,将驱动模块文件中的内存管理函数的未定义符号和驱动注册函数的未定义符号替换为对应的所述内存包装函数和注册包装函数的符号及其符号名;
调用虚拟机内核的原模块加载方式加载驱动程序模块,以使驱动程序模块中包装函数符号将自动链接到所述虚拟机内存信息监视模块中的所监控的包装函数,从而完成与内核包装函数建立联系;
虚拟机内核的原模块加载方式会调用驱动模块的初始化函数,执行驱动注册,驱动会自动调用已经链接到注册包装函数的驱动注册函数,完成与驱动包装函数建立联系。
所述隔离运行模式是指被隔离驱动程序使用的所有内存信息都被实时的捕获,并建立对应的授权表,实现驱动程序隔离运行模式具体包括:
驱动在加载时,执行驱动注册函数向内核的驱动接口注册驱动程序,将内核中驱动模块各个功能函数的地址赋予驱动接口中的接口函数指针,通过所述驱动隔离加载模块,驱动实际将执行驱动注册函数对应的包装函数,即注册包装函数,从而实现内核对驱动调用过程的监视;所述注册包装函数执行所述虚拟机内核中的原驱动注册函数,并执行驱动接口中接口函数指针的替换操作;所述接口函数指针的替换操作是指将接口函数指针赋值成驱动包装函数的地址,代替原驱动功能函数的地址;
驱动程序加载后,驱动接口中的接口函数指针已被驱动包装函数所替换,当内核调用驱动函数时,将执行驱动包装函数,获得驱动所使用的被赋予内存信息和栈内存信息;驱动包装函数记录被赋予内存信息和栈内存信息,并将被赋予内存信息和栈内存信息注入到虚拟机管理器的授权表管理子模块,执行被隔离驱动中的原驱动函数;所述被赋予内存信息包括:内核授权驱动操作的内核数据结构的内存起始地址及其大小;所述栈内存信息包括:执行驱动程序的进程的栈的内存起始地址及其大小;
驱动在运行过程中,调用内存管理函数来分配或释放内存,通过所述驱动隔离加载模块,驱动实际将执行内存管理函数对应的包装函数,即内存包装函数,实现向内核申请分配或释放内存;所述内存包装函数执行所述虚拟机内核中的原内存管理函数,并记录分配或释放的堆内存信息,并将堆内存信息注入到虚拟机管理器的授权表管理子模块;所述堆内存信息包括:驱动程序向所述虚拟机内核申请分配或释放的内存起始地址及其大小。
所述内存信息监视模块中的隔离控制子模块具体用于:
1)当接收运行于虚拟机用户态的驱动隔离加载模块发出的被隔离驱动程序提醒消息时,将执行以下操作:
向内存访问控制模块中的授权表管理子模块,发出建立被隔离驱动程序对应授权表的指令;
当被隔离驱动是所述虚拟机中第一个被隔离的驱动时,向内存访问控制模块中的页面设置子模块,发出设置虚拟机管理器中影子页表为成只读模式的指令;
当被隔离驱动是所述虚拟机中第一个被隔离的驱动时,向内存访问控制模块中的缺页处理子模块,注入所述被隔离驱动所在虚拟机的可信任内核空间的地址范围;
2)当捕获驱动进入内核的消息,但没有接收到进入内核的驱动为被隔离驱动的消息时,将执行以下操作:
向内存访问控制模块中的缺页处理子模块,更新所述被隔离驱动所在虚拟机的可信任内核空间的地址范围;
3)当捕获驱动卸载出内核的消息时,查询已有的被隔离驱动信息,如果发现卸载出的驱动为被隔离驱动,将执行以下操作:
向内存访问控制模块中的授权表管理子模块,发出销毁被隔离驱动程序对应授权表的指令;
当被隔离驱动是所述虚拟机中最后一个被隔离的驱动时,向内存访问控制模块中的页面设置子模块,发出设置虚拟机管理器中影子页表为成可写入模式的指令;
4)当捕获驱动卸载出内核的消息时,查询已有的被隔离驱动信息,如果发现卸载出的驱动不是被隔离驱动,将执行以下操作:
向内存访问控制模块中的缺页处理子模块,更新所述被隔离驱动所在虚拟机的可信任内核空间的地址范围。
所述内存访问控制模块中的授权表管理子模块具体用于:
当被隔离驱动程序加载完成时,接收所述虚拟机中所述隔离管理子模块发出的建立被隔离驱动授权表的指令,并建立被隔离驱动程序可写内存范围的初始授权表;
当被隔离驱动程序运行过程中时,接收所述虚拟机所述包装函数库发出的更新被隔离驱动授权表的指令,并根据所述包装函数实时捕捉的驱动程序所使用的内存信息,更新对应的所述驱动授权表;
当被隔离驱动程序运行过程中,发生写操作缺页异常时,接收所述缺页处理子模块的查询授权表指令,并查询写操作地址是否在驱动授权表中;
当被隔离驱动程序卸载完成时,接收所述虚拟机中所述隔离管理子模块发出的销毁被隔离驱动授权表的指令,销毁被隔离驱动授权表。
所述内存访问控制模块中的页面设置子模块具体用于:
接收所述内存信息监视模块发出的设置影子页表的只读指令,并根据被隔离驱动为所述虚拟机中第一个被隔离的驱动,将被隔离驱动程序所在虚拟机内核空间对应的虚拟机管理器中的影子页表中的所有页表设置为只读;
接收所述内存信息监视模块发出的设置影子页表的可写指令,并根据最后一个被隔离驱动被卸载出所述虚拟机内核,将被隔离驱动程序所在虚拟机内核空间对应的虚拟机管理器中的影子页表中的所有页表设置为可写,防止不必要的缺页异常;
当被隔离驱动不是所述虚拟机中第一个加载的被隔离驱动,或最后一个卸载出的被隔离驱动时,直接运行所述驱动程序,不进行整个虚拟机内核空间对应的所有影子页表的设置;
当所述缺页处理子模块允许进行写操作时,所述页面设置子模块将写操作地址对应的影子页表的相应页表项改为可写,并且执行写操作,在写操作结束后,重新将写操作地址对应的影子页表的相应页表项改为只读。
所述内存访问控制模块中的缺页处理子模块还用于:
当写操作是来自可信任的虚拟机内核时,则通知页面设置子模块,将写操作地址对应的影子页表的相应页表项改为可写,并且执行写操作,在写操作结束后,重新将写操作地址对应的影子页表的相应页表项改为只读;
当写操作是来自虚拟机中被隔离的驱动程序,且写操作的地址范围在被隔离驱动程序对应的授权表中时,则通知页面设置子模块,将写操作地址对应的影子页表的相应页表项改为可写,并且执行写操作,在写操作结束后,重新将写操作地址对应的影子页表的相应页表项改为只读;
当写操作是来自虚拟机中被隔离的驱动程序,且写操作的地址范围不在被隔离驱动程序对应的授权表中时,跳过写操作指令,结束所述驱动程序并报告错误。
一种在虚拟机内部的驱动隔离方法,包括以下步骤:
在需要隔离驱动程序的虚拟机中加载虚拟机内核态的内存信息监视模块;
内存信息监视模块通过所述驱动隔离加载模块加载被隔离驱动程序,将被隔离驱动程序模块中未定义符号与内存信息监视模块中监视包装函数建立联系,使得被隔离驱动在加载之后以隔离方式运行;并向内存信息监视模块中的隔离控制子模块发出被隔离驱动程序提醒消息,以使得进入内核的驱动为被隔离驱动程序;所述监视未定义符号包括内存管理函数的未定义符号和驱动注册函数的未定义符号;
隔离控制子模块接收运行于虚拟机用户态的驱动隔离加载模块发出的被隔离驱动程序提醒消息,建立被隔离驱动程序的相关信息,并指示消息通信子模块向所述虚拟机管理器内部的内存访问控制模块发送设置被隔离驱动授权表的指令,同时,根据需要获取可信任的虚拟机内核的地址范围,注入到内存访问控制模块,并发出设置虚拟机管理器中影子页表的指令;所述可信任的虚拟机内核的地址范围包括虚拟机内核代码和未被隔离的驱动程序代码的内存起始地址及其大小;
授权表管理子模块接收到隔离管理子模块发出的建立被隔离驱动授权表的指令后,设置驱动程序可写内存范围的授权表;
页面设置子模块接收所述内存信息监视模块发出的设置虚拟机管理器中影子页表的指令,并根据所述被隔离驱动所在虚拟机的内核空间在虚拟机管理器中所对应的影子页表,将影子页表设置为接收所述缺页处理子模块发出的允许写操作段的指令,并设置写操作目标地址对应的影子页表;
所述缺页处理子模块接收所述隔离管理子模块发出的可信任内核的地址范围的信息,记录所述虚拟机的可信任内核的地址范围,判断和控制是否允许进行写操作。
本发明虚拟机内部的驱动隔离方法如下:
将被隔离驱动程序模块中未定义符号与内存信息监视模块中监视包装函数建立联系具体包括:
将运行于虚拟机用户态的驱动模块文件中的内存管理函数的未定义符号和驱动注册函数的未定义符号替换为对应的所述内存包装函数和注册包装函数的符号及其符号名;
调用虚拟机内核的原模块加载方式加载驱动程序模块,以使得虚拟机用户态中修改过所监控未定义符号的驱动模块文件在加载之后自动链接到所述虚拟机内存信息监视模块中的所监控的包装函数,从而完成与内核包装函数建立联系;
虚拟机内核的原模块加载方式会调用驱动模块的初始化函数,执行驱动注册,驱动会自动调用已经链接到注册包装函数的驱动注册函数,完成与驱动包装函数建立联系;
所述实现驱动程序隔离运行模式具体包括:
驱动在加载时,执行驱动注册函数向内核的驱动接口注册驱动程序,将内核中驱动模块各个功能函数的地址赋予驱动接口中的接口函数指针,通过所述驱动隔离加载模块,驱动实际将执行驱动注册函数对应的包装函数,即注册包装函数,从而实现内核对驱动调用过程的监视;所述注册包装函数执行所述虚拟机内核中的原驱动注册函数,并执行驱动接口中接口函数指针的替换操作;所述接口函数指针的替换操作是指将接口函数指针赋值成驱动包装函数的地址,代替原驱动功能函数的地址;
驱动程序加载后,驱动接口中的接口函数指针已被驱动包装函数所替换,当内核调用驱动函数时,将执行驱动包装函数,获得驱动所使用的被赋予内存信息和栈内存信息;驱动包装函数记录被赋予内存信息和栈内存信息,并将被赋予内存信息和栈内存信息注入到虚拟机管理器的授权表管理子模块,执行被隔离驱动中的原驱动函数;所述被赋予内存信息包括:内核授权驱动操作的内核数据结构的内存起始地址及其大小;所述栈内存信息包括:执行驱动程序的进程的栈的内存起始地址及其大小;
驱动在运行过程中,调用内存管理函数来分配或释放内存,通过所述驱动隔离加载模块,驱动实际将执行内存管理函数对应的包装函数,即内存包装函数,实现向内核申请分配或释放内存;所述内存包装函数执行所述虚拟机内核中的原内存管理函数,并记录分配或释放的堆内存信息,并将堆内存信息注入到虚拟机管理器的授权表管理子模块;所述堆内存信息包括:驱动程序向所述虚拟机内核申请分配或释放的内存起始地址及其大小;
指示消息通信子模块向所述虚拟机管理器内部的内存访问控制模块发送设置被隔离驱动授权表的指令具体包括:
1)当接收运行于虚拟机用户态的驱动隔离加载模块发出的被隔离驱动程序提醒消息时,将执行以下操作:
向内存访问控制模块中的授权表管理子模块,发出建立被隔离驱动程序对应授权表的指令;
当被隔离驱动是所述虚拟机中第一个被隔离的驱动时,向内存访问控制模块中的页面设置子模块,发出设置虚拟机管理器中影子页表为成只读模式的指令;
当被隔离驱动是所述虚拟机中第一个被隔离的驱动时,向内存访问控制模块中的缺页处理子模块,注入所述被隔离驱动所在虚拟机的可信任内核空间的地址范围;
2)当捕获驱动进入内核的消息,但没有接收到进入内核的驱动为被隔离驱动的消息时,将执行以下操作:
向内存访问控制模块中的缺页处理子模块,更新所述被隔离驱动所在虚拟机的可信任内核空间的地址范围;
3)当捕获驱动卸载出内核的消息时,查询已有的被隔离驱动信息,如果发现卸载出的驱动为被隔离驱动,将执行以下操作:
向内存访问控制模块中的授权表管理子模块,发出销毁被隔离驱动程序对应授权表的指令;
当被隔离驱动是所述虚拟机中最后一个被隔离的驱动时,向内存访问控制模块中的页面设置子模块,发出设置虚拟机管理器中影子页表为成可写入模式的指令;
4)当捕获驱动卸载出内核的消息时,查询已有的被隔离驱动信息,如果发现卸载出的驱动不是被隔离驱动,将执行以下操作:向内存访问控制模块中的缺页处理子模块,更新所述被隔离驱动所在虚拟机的可信任内核空间的地址范围;
所述设置驱动程序可写内存范围的授权表,具体包括:
当被隔离驱动程序加载完成时,接收所述虚拟机中所述隔离管理子模块发出的建立被隔离驱动授权表的指令,并建立被隔离驱动程序可写内存范围的初始授权表;
当被隔离驱动程序运行过程中,接收所述虚拟机所述包装函数库发出的更新被隔离驱动授权表的指令,并根据所述包装函数实时捕捉的驱动程序所使用的内存信息,更新对应的所述驱动授权表;
当被隔离驱动程序运行过程中,发生写操作缺页异常时,接收所述缺页处理子模块的查询授权表指令,并查询写操作地址是否在驱动授权表中;
当被隔离驱动程序卸载完成时,接收所述虚拟机中所述隔离管理子模块发出的销毁被隔离驱动授权表的指令,销毁被隔离驱动授权表;
根据所述被隔离驱动所在虚拟机内核空间在虚拟机管理器中所对应影子页表,进行页表设置,具体包括:
接收所述内存信息监视模块发出的设置影子页表的只读指令,并根据被隔离驱动为所述虚拟机中第一个被隔离的驱动,将被隔离驱动程序所在虚拟机内核空间对应的虚拟机管理器中的影子页表中的所有页表设置为只读;
接收所述内存信息监视模块发出的设置影子页表的可写指令,并根据最后一个被隔离驱动被卸载出所述虚拟机内核,将被隔离驱动程序所在虚拟机内核空间对应的虚拟机管理器中的影子页表中的所有页表设置为可写,防止不必要的缺页异常;
当被隔离驱动不是所述虚拟机中第一个加载进的被隔离驱动,或最后一个卸载出的被隔离驱动时,直接运行所述驱动程序,不进行整个虚拟机内核空间对应的所有影子页表的设置;
当所述缺页处理子模块允许进行写操作时,所述页面设置子模块将写操作地址对应的影子页表的相应页表项改为可写,并且执行写操作,在写操作结束后,重新将写操作地址对应的影子页表的相应页表项改为只读;
根据写操作指令的来源和被隔离驱动对应的授权表,判断和控制是否允许进行写操作具体包括:
当写操作是来自可信任的虚拟机内核时,则通知页面设置子模块,将写操作地址对应的影子页表的相应页表项改为可写,并且执行写操作,在写操作结束后,重新将写操作地址对应的影子页表的相应页表项改为只读;
当写操作是来自虚拟机中被隔离的驱动程序,且写操作的地址范围在被隔离驱动程序对应的授权表中时,则通知页面设置子模块,将写操作地址对应的影子页表的相应页表项改为可写,并且执行写操作,在写操作结束后,重新将写操作地址对应的影子页表的相应页表项改为只读;
当进行写操作,且写操作的地址范围不在被隔离驱动程序对应的授权表中时,跳过写操作指令,结束所述驱动程序并报告错误。
本发明提供了一种在虚拟机内部的驱动隔离系统与方法,通过提供监控虚拟机内部驱动运行情况的内存信息监控模块,该内存信息监控模块以模块形式加载进虚拟机中,无需修改虚拟机内核和虚拟机中的驱动程序,保证本发明与已有内核架构和驱动程序的兼容性。只需通过运行于虚拟机用户态的驱动监视加载模块以隔离加载方式加载被隔离的驱动程序,就可将被隔离驱动和内存信息监视模块建立联系,从而确保虚拟机中被隔离驱动程序内存使用情况被实时获取。
本发明利用内存信息监视模块报告的虚拟机内部驱动内存使用情况建立授权表,并设置虚拟机内核空间在虚拟机管理器中所对应影子页表的写保护,建立起驱动程序的隔离运行环境。在虚拟机进行写操作时,结合授权表判断被隔离驱动程序是否具有写权限。通过隔离驱动程序可以避免驱动程序故障破坏虚拟机内核,防止虚拟机内核的崩溃,从而保证虚拟机内核所提供的其他服务(除被隔离驱动程序所提供的服务外)的正常运行。
由于本发明中每个被隔离的驱动程序都有一个对应的授权表,使得可在同一虚拟机内部隔离多个驱动程序,无需为每一个被隔离的驱动程序提供一个独立的虚拟机实例,从而降低系统的性能损失。同时,如果驱动以正常方式加载进虚拟机,该驱动将被认为是可信任内核的一部分,并不影响其正常运行,保证了兼容性。
附图说明:
图1是一种在虚拟机内部的驱动隔离系统的架构;
图2是一种在虚拟机内部的驱动隔离系统的隔离管理子模块的流程图;
图3是一种在虚拟机内部的驱动隔离方法建立隔离运行环境的流程图;
图4是一种在虚拟机内部的驱动隔离方法写操作缺页异常处理流程图。
具体实施方式:
下面结合附图对本发明做详细描述。
参考图1所示,一种在虚拟机内部的驱动隔离系统包括:运行于虚拟机用户态的驱动隔离加载模块、虚拟机内核态的内存信息监视模块以及虚拟机管理器内部的内存访问控制模块,其中,
所述运行于虚拟机用户态的驱动隔离加载模块:将驱动模块中监视未定义符号与内存信息监视模块中监视包装函数建立联系,使得驱动以隔离方式运行,并向内存信息监视模块中的隔离控制子模块发出被隔离驱动程序提醒消息,以使得进入内核的驱动为被隔离驱动程序;所述监视未定义符号包括内存管理函数的未定义符号和驱动注册函数的未定义符号;
所述虚拟机内核态的内存信息监视模块包括:包装函数库、隔离控制子模块以及消息通信子模块,其中,
所述包装函数库:为虚拟机内核中所监控的函数建立内核包装函数,并为虚拟机内核中驱动接口中的接口函数建立驱动包装函数,以使得被隔离驱动与内核和驱动包装函数链接,并进入隔离运行模式;所述内核包装函数包括内存包装函数和注册包装函数,所述内存包装函数是指内核中内存管理函数的包装函数,所述注册包装函数是指内核中驱动注册函数的包装函数;
所述隔离控制子模块:接收运行于虚拟机用户态的驱动隔离加载模块发出的被隔离驱动程序提醒消息,建立被隔离驱动程序的相关信息,并指示消息通信子模块向所述虚拟机管理器内部的内存访问控制模块发送设置被隔离驱动授权表的指令,同时,根据需要获取可信任的虚拟机内核的地址范围,注入到内存访问控制模块,并发出设置虚拟机管理器中影子页表的指令;所述可信任的虚拟机内核的地址范围包括虚拟机内核代码和未被隔离的驱动程序代码的内存起始地址及其大小;
所述消息通信子模块:向内存访问控制模块实时报告被隔离驱动所使用内存信息、可信任的虚拟机内核的地址范围、及发送建立被隔离驱动授权表的指令;所述消息通信子模块被所述包装函数库和所述隔离控制子模块调用;
所述内存访问控制模块:用于控制被隔离驱动程序写操作,包括:授权表管理子模块、页面设置子模块以及缺页处理子模块,其中,
所述授权表管理子模块:接收所述内存信息监视模块发出的设置被隔离驱动授权表的指令后,设置被隔离驱动程序可写内存范围的授权表,并负责确认写操作地址是否在授权表中;
所述页面设置子模块:接收所述内存信息监视模块发出的设置虚拟机管理器中影子页表的指令,并根据所述被隔离驱动所在虚拟机的内核空间在虚拟机管理器中所对应的影子页表,将影子页表设置为接收所述缺页处理子模块发出的允许写操作段的指令,并设置写操作目标地址对应的影子页表;
所述缺页处理子模块:当被隔离驱动所在虚拟机内核出现写操作时,根据写操作指令的来源和被隔离驱动对应的授权表,判断和控制是否允许进行写操作。
本发明实施例中,包装函数包括内核包装函数和驱动包装函数,内核包装函数又包括内存包装函数和注册包装函数。驱动包装函数是对驱动接口中的接口函数的包装,注册包装函数是对驱动注册内核函数的包装,内存包装函数内存管理内核函数的包装。对包装函数的命名形式为“包装函数前缀+原函数名”。例如,高端内存的分配函数“vmalloc”对应的包装函数为“monitor_vmalloc”。包装函数与原函数的参数和返回值一致。
加载被隔离驱动程序重要是通过查找监视模块中带前缀的包装函数,将驱动模块中的内存管理函数的符号及其符号名替换成带前缀的包装函数的符号及其符号名,然后再加载修改过符号的驱动模块,就可避免驱动模块中的内存管理函数的符号与原函数地址的链接,如图1中VM1的内存管理函数部分的连接线,实箭头表示链接到包装函数地址,空箭头表示链接到原函数地址。例如,驱动程序中的高端内存分配“vmalloc”符号及其符号名,在加载之前会被替换成包装函数“monitor_vmalloc”的符号及其符号名,这样在加载时,驱动程序会就被自动链接到包装函数“monitor_vmalloc”的地址,而不是原函数“vmalloc”的地址。而被隔离驱动中其他内核函数的符号无需修改,并仍按原方式链接。通过监视模块的监视加载方式加载驱动程序,可在无需修改虚拟机内核和驱动程序的情况下监视驱动程序的内存使用情况。
通过驱动隔离加载模块处理后,驱动模块中的驱动注册函数和内存管理函数的未定义符号就被链接到注册包装函数和内存包装函数中。但是,驱动接口中的驱动函数还未链接到驱动包装函数,这需要注册包装函数的辅助。注册包装函数并不直接监视驱动所使用的内存信息,其目的就是为了替换驱动接口中的接口函数指针,使其指向驱动包装函数。在驱动隔离加载模块调用内核原驱动加载方式加载驱动模块时,会调用驱动注册函数,此时已经链接到了注册包装函数,执行完注册包装函数,驱动接口中的接口函数就会被链接到驱动包装函数。
这样,驱动开始运行后,内核对驱动的所有调用都会被驱动包装函数监视,并记录驱动使用的被授予内存信息和栈内存信息。同样,驱动对内核的内存管理函数的调用,也会被内存包装函数监视,从而记录驱动使用的堆内存信息。其中,需要监视的内存管理函数包括:页面的分配/释放函数、内存高速缓存的分配/释放函数、高端内存的分配/释放函数以及其他的专用数据结构的分配/释放函数等。
建立虚拟机内被隔离驱动程序对应授权表,是指驱动程序对内存空间所具有的写访问权限的地址集合。授权表记录了驱动程序所具写权限的所有内存起始地址以其大小。授权表在被隔离驱动程序被加载进虚拟机内核时建立,并在驱动运行过程中不断更新。为了加快授权表的查找速度,授权表的各个表项(即被隔离驱动程序可写的各个内存区域),同时以升序链表以及红黑树的形式组织起来。
所述消息通信子模块具体会在前两种子模块中被调用。例如,当驱动分配/释放内存时,对应的包装函数就会捕捉到该信息,并通过该子模块实时的报告给内存访问控制模块,以便更新被隔离驱动对应的授权表。另外,对应已经存在被隔离驱动的情况下,又按普通方式加载了其他驱动,即新加载驱动不被隔离,则该子模块会向内存访问控制模块更新可信任的虚拟机内核范围,即将新加载驱动被当作可信任内核的一部分。
将运行于虚拟机用户态的驱动隔离加载模块中的内存管理函数的未定义符号和驱动注册函数的未定义符号替换为对应的所述内存包装函数和注册包装函数的符号及其符号名;
调用虚拟机内核的原模块加载方式加载驱动程序模块,以使得运行于虚拟机用户态的驱动隔离加载模块驱动程序模块中包装函数符号将自动链接到所述虚拟机内存信息监视模块中的所监控的包装函数,从而完成与内核包装函数建立联系;
虚拟机内核的原模块加载方式会调用驱动模块的初始化函数,执行驱动注册,驱动会自动调用已经链接到注册包装函数的驱动注册函数,完成与驱动包装函数建立联系。
需要说明的是,除包装过的内存管理函数外的其他具有未定义标志的函数符号无需修改,在加载过程中,并仍按原方式链接到对应的原内核函数。
进一步的,所述隔离运行模式是指被隔离驱动程序使用的所有内存信息都被实时的捕获,并建立对应的授权表,实现驱动程序隔离运行模式具体包括:
驱动在加载时,执行驱动注册函数向内核的驱动接口注册驱动程序,将内核中驱动模块各个功能函数的地址赋予驱动接口中的接口函数指针,通过所述驱动隔离加载模块,驱动实际将执行驱动注册函数对应的包装函数,即注册包装函数,从而实现内核对驱动调用过程的监视;所述注册包装函数执行所述虚拟机内核中的原驱动注册函数,并执行驱动接口中接口函数指针的替换操作;所述接口函数指针的替换操作是指将接口函数指针赋值成驱动包装函数的地址,代替原驱动功能函数的地址;
驱动程序加载后,驱动接口中的接口函数指针已被驱动包装函数所替换,当内核调用驱动函数时,将执行驱动包装函数,获得驱动所使用的被赋予内存信息和栈内存信息;驱动包装函数记录被赋予内存信息和栈内存信息,并将被赋予内存信息和栈内存信息注入到虚拟机管理器的授权表管理子模块,执行被隔离驱动中的原驱动函数;所述被赋予内存信息包括:内核授权驱动操作的内核数据结构的内存起始地址及其大小;所述栈内存信息包括:执行驱动程序的进程的栈的内存起始地址及其大小;
驱动在运行过程中,调用内存管理函数来分配或释放内存,通过所述驱动隔离加载模块,驱动实际将执行内存管理函数对应的包装函数,即内存包装函数,实现向内核申请分配或释放内存;所述内存包装函数执行所述虚拟机内核中的原内存管理函数,并记录分配或释放的堆内存信息,并将堆内存信息注入到虚拟机管理器的授权表管理子模块;所述堆内存信息包括:驱动程序向所述虚拟机内核申请分配或释放的内存起始地址及其大小。
这样,被隔离驱动程序以隔离模式运行,被隔离驱动程序与内核的交互中所有内存相关的调用都会被所述包装函数库中的包装函数监视,并实时得捕捉驱动程序所使用的内存信息,通知所述授权表管理子模块更新对应的所述驱动授权表。
进一步的,所述内存信息监视模块中的隔离控制子模块,捕获驱动进出内核的消息,并接收进入内核驱动为被隔离驱动程序的消息,并向内存访问控制模块发出相应的指令,这些相应的指令具体用于:
1)当接收运行于虚拟机用户态的驱动隔离加载模块发出的被隔离驱动程序提醒消息时,将执行以下操作:
向内存访问控制模块中的授权表管理子模块,发出建立被隔离驱动程序对应授权表的指令;
当被隔离驱动是所述虚拟机中第一个被隔离的驱动时,向内存访问控制模块中的页面设置子模块,发出设置虚拟机管理器中影子页表为成只读模式的指令;
当被隔离驱动是所述虚拟机中第一个被隔离的驱动时,向内存访问控制模块中的缺页处理子模块,注入所述被隔离驱动所在虚拟机的可信任内核空间的地址范围;
2)当捕获驱动进入内核的消息,但没有接收到进入内核的驱动为被隔离驱动的消息时,将执行以下操作:
向内存访问控制模块中的缺页处理子模块,更新所述被隔离驱动所在虚拟机的可信任内核空间的地址范围;
3)当捕获驱动卸载出内核的消息时,查询已有的被隔离驱动信息,如果发现卸载出的驱动为被隔离驱动,将执行以下操作:
向内存访问控制模块中的授权表管理子模块,发出销毁被隔离驱动程序对应授权表的指令;
当被隔离驱动是所述虚拟机中最后一个被隔离的驱动时,向内存访问控制模块中的页面设置子模块,发出设置虚拟机管理器中影子页表为成可写入模式的指令;
4)当捕获驱动卸载出内核的消息时,查询已有的被隔离驱动信息,如果发现卸载出的驱动不是被隔离驱动,将执行以下操作:
向内存访问控制模块中的缺页处理子模块,更新所述被隔离驱动所在虚拟机的可信任内核空间的地址范围。
另外,所述授权表是指被隔离驱动程序对虚拟机内核地址空间所具有的写访问权限的地址集合,授权表里的这些地址集合包括三类:
所述被赋予内存信息,即内核授权驱动操作的内核数据结构的内存起始地址及其大小;
所述栈内存信息,即执行驱动程序的进程的栈的内存起始地址及其大小;
所述堆内存信息,即驱动程序向所述虚拟机内核申请分配或释放的内存起始地址及其大小。
进一步的,所述内存访问控制模块中的授权表管理子模块,提供授权表的建立、更新、查询和销毁等功能,具体包括:
当被隔离驱动程序加载完成时,接收所述虚拟机中所述隔离管理子模块发出的建立被隔离驱动授权表的指令,并建立被隔离驱动程序可写内存范围的初始授权表;
当被隔离驱动程序运行过程中时,接收所述虚拟机所述包装函数库发出的更新被隔离驱动授权表的指令,并根据所述包装函数实时捕捉的驱动程序所使用的内存信息,更新对应的所述驱动授权表;
当被隔离驱动程序运行过程中,发生写操作缺页异常时,接收所述缺页处理子模块的查询授权表指令,并查询写操作地址是否在驱动授权表中;
被隔离驱动程序卸载完成时,接收所述虚拟机中所述隔离管理子模块发出的销毁被隔离驱动授权表的指令后,销毁被隔离驱动授权表。
所述内存访问控制模块中的页面设置子模块,根据所述被隔离驱动所在虚拟机内核空间在虚拟机管理器中所对应影子页表,进行页表设置具体包括:
接收所述内存信息监视模块发出的设置影子页表的只读指令,并根据被隔离驱动为所述虚拟机中第一个被隔离的驱动,将被隔离驱动程序所在虚拟机内核空间对应的虚拟机管理器中的影子页表中的所有页表设置为只读;
接收所述内存信息监视模块发出的设置影子页表的可写指令,并根据最后一个被隔离驱动被卸载出所述虚拟机内核,将被隔离驱动程序所在虚拟机内核空间对应的虚拟机管理器中的影子页表中的所有页表设置为可写,防止不必要的缺页异常;
当被隔离驱动不是所述虚拟机中第一个加载的被隔离驱动,或最后一个卸载出的被隔离驱动时,直接运行所述驱动程序,不进行整个虚拟机内核空间对应的所有影子页表的设置;
当所述缺页处理子模块允许进行写操作时,所述页面设置子模块将写操作地址对应的影子页表的相应页表项改为可写,并且执行写操作,在写操作结束后,重新将写操作地址对应的影子页表的相应页表项改为只读。
所述内存访问控制模块中的缺页处理子模块,接收并保存所述隔离管理子模块注入的所述虚拟机可信内核空间的地址范围,还用于处理所述虚拟机写操作的缺页异常,具体包括:
当所述写操作是来自虚拟机中可信任内核,则通知页面设置子模块,将写操作地址对应的影子页表的相应页表项改为可写,并且执行写操作,在写操作结束后,重新将写操作地址对应的影子页表的相应页表项改为只读;
当所述写操作是来自虚拟机中被隔离的驱动程序,且所述写操作的地址范围在被隔离驱动程序对应的授权表中时,则通知页面设置子模块,将写操作地址对应的影子页表的相应页表项改为可写,并且执行写操作,在写操作结束后,重新将写操作地址对应的影子页表的相应页表项改为只读;
当所述写操作,且所述写操作的地址范围不在被隔离驱动程序对应的授权表中时,跳过写操作指令,结束所述驱动程序并报告错误。
一种在虚拟机内部的驱动隔离方法,包括以下步骤:
第一步,在需要隔离驱动程序的虚拟机中加载虚拟机内核态的内存信息监视模块;
第二步,内存信息监视模块通过所述驱动隔离加载模块加载被隔离驱动程序,将被隔离驱动程序模块中未定义符号与内存信息监视模块中监视包装函数建立联系,使得被隔离驱动在加载之后以隔离方式运行;并向内存信息监视模块中的隔离控制子模块发出被隔离驱动程序提醒消息,以使得进入内核的驱动为被隔离驱动程序;所述监视未定义符号包括内存管理函数的未定义符号和驱动注册函数的未定义符号;
其中,使得被隔离驱动在加载之后以隔离方式运行具体包括:
将运行于虚拟机用户态的驱动隔离加载模块中的内存管理函数的未定义符号和驱动注册函数的未定义符号替换为对应的所述内存包装函数和注册包装函数的符号及其符号名;
调用虚拟机内核的原模块加载方式加载驱动程序模块,以使得运行于虚拟机用户态的驱动隔离加载模块驱动程序模块中包装函数符号将自动链接到所述虚拟机内存信息监视模块中的所监控的包装函数,从而完成与内核包装函数建立联系;
虚拟机内核的原模块加载方式会调用驱动模块的初始化函数,执行驱动注册,驱动会自动调用已经链接到注册包装函数的驱动注册函数,完成与驱动包装函数建立联系。
另外,所述实现驱动程序隔离运行模式具体包括:
驱动在加载时,执行驱动注册函数向内核的驱动接口注册驱动程序,将内核中驱动模块各个功能函数的地址赋予驱动接口中的接口函数指针,通过所述驱动隔离加载模块,驱动实际将执行驱动注册函数对应的包装函数,即注册包装函数,从而实现内核对驱动调用过程的监视;所述注册包装函数执行所述虚拟机内核中的原驱动注册函数,并执行驱动接口中接口函数指针的替换操作;所述接口函数指针的替换操作是指将接口函数指针赋值成驱动包装函数的地址,代替原驱动功能函数的地址;
驱动程序加载后,驱动接口中的接口函数指针已被驱动包装函数所替换,当内核调用驱动函数时,将执行驱动包装函数,获得驱动所使用的被赋予内存信息和栈内存信息;驱动包装函数记录被赋予内存信息和栈内存信息,并将被赋予内存信息和栈内存信息注入到虚拟机管理器的授权表管理子模块,执行被隔离驱动中的原驱动函数;所述被赋予内存信息包括:内核授权驱动操作的内核数据结构的内存起始地址及其大小;所述栈内存信息包括:执行驱动程序的进程的栈的内存起始地址及其大小;
驱动在运行过程中,调用内存管理函数来分配或释放内存,通过所述驱动隔离加载模块,驱动实际将执行内存管理函数对应的包装函数,即内存包装函数,实现向内核申请分配或释放内存;所述内存包装函数执行所述虚拟机内核中的原内存管理函数,并记录分配或释放的堆内存信息,并将堆内存信息注入到虚拟机管理器的授权表管理子模块;所述堆内存信息包括:驱动程序向所述虚拟机内核申请分配或释放的内存起始地址及其大小。
第三步,隔离控制子模块接收运行于虚拟机用户态的驱动隔离加载模块发出的被隔离驱动程序提醒消息,建立被隔离驱动程序的相关信息,并指示消息通信子模块向所述虚拟机管理器内部的内存访问控制模块发送设置被隔离驱动授权表的指令,同时,根据需要获取可信任的虚拟机内核的地址范围,注入到内存访问控制模块,并发出设置虚拟机管理器中影子页表的指令;所述可信任的虚拟机内核的地址范围包括虚拟机内核代码和未被隔离的驱动程序代码的内存起始地址及其大小;
具体的,指示消息通信子模块向所述虚拟机管理器内部的内存访问控制模块发送设置被隔离驱动授权表的指令具体包括:
1)当接收运行于虚拟机用户态的驱动隔离加载模块发出的被隔离驱动程序提醒消息时,将执行以下操作:
向内存访问控制模块中的授权表管理子模块,发出建立被隔离驱动程序对应授权表的指令;
当被隔离驱动是所述虚拟机中第一个被隔离的驱动时,向内存访问控制模块中的页面设置子模块,发出设置虚拟机管理器中影子页表为成只读模式的指令;
当被隔离驱动是所述虚拟机中第一个被隔离的驱动时,向内存访问控制模块中的缺页处理子模块,注入所述被隔离驱动所在虚拟机的可信任内核空间的地址范围;
2)当捕获驱动进入内核的消息,但没有接收到进入内核的驱动为被隔离驱动的消息时,将执行以下操作:
向内存访问控制模块中的缺页处理子模块,更新所述被隔离驱动所在虚拟机的可信任内核空间的地址范围;
3)当捕获驱动卸载出内核的消息时,查询已有的被隔离驱动信息,如果发现卸载出的驱动为被隔离驱动,将执行以下操作:
向内存访问控制模块中的授权表管理子模块,发出销毁被隔离驱动程序对应授权表的指令;
当被隔离驱动是所述虚拟机中最后一个被隔离的驱动时,向内存访问控制模块中的页面设置子模块,发出设置虚拟机管理器中影子页表为成可写入模式的指令;
4)当捕获驱动卸载出内核的消息时,查询已有的被隔离驱动信息,如果发现卸载出的驱动不是被隔离驱动,将执行以下操作:
向内存访问控制模块中的缺页处理子模块,更新所述被隔离驱动所在虚拟机的可信任内核空间的地址范围。
第四步,授权表管理子模块接收到隔离管理子模块发出的建立被隔离驱动授权表的指令后,设置驱动程序可写内存范围的授权表;
所述设置驱动程序可写内存范围的授权表,具体包括:
当被隔离驱动程序加载完成时,接收所述虚拟机中所述隔离管理子模块发出的建立被隔离驱动授权表的指令,并建立被隔离驱动程序可写内存范围的初始授权表;
当被隔离驱动程序运行过程中,接收所述虚拟机所述包装函数库发出的更新被隔离驱动授权表的指令,并根据所述包装函数实时捕捉的驱动程序所使用的内存信息,更新对应的所述驱动授权表;
当被隔离驱动程序运行过程中,发生写操作缺页异常时,接收所述缺页处理子模块的查询授权表指令,并查询写操作地址是否在驱动授权表中。
被隔离驱动程序卸载完成时,接收所述虚拟机中所述隔离管理子模块发出的销毁被隔离驱动授权表的指令后,销毁被隔离驱动授权表。
第五步,页面设置子模块接收所述内存信息监视模块发出的设置虚拟机管理器中影子页表的指令,并根据所述被隔离驱动所在虚拟机的内核空间在虚拟机管理器中所对应的影子页表,将影子页表设置为接收所述缺页处理子模块发出的允许写操作段的指令,并设置写操作目标地址对应的影子页表;
根据所述被隔离驱动所在虚拟机内核空间在虚拟机管理器中所对应影子页表,进行页表设置,具体包括:
接收所述内存信息监视模块发出的设置影子页表的只读指令,并根据被隔离驱动为所述虚拟机中第一个被隔离的驱动,将被隔离驱动程序所在虚拟机内核空间对应的虚拟机管理器中的影子页表中的所有页表设置为只读;
接收所述内存信息监视模块发出的设置影子页表的可写指令,并根据最后一个被隔离驱动被卸载出所述虚拟机内核,将被隔离驱动程序所在虚拟机内核空间对应的虚拟机管理器中的影子页表中的所有页表设置为可写,防止不必要的缺页异常;
当被隔离驱动不是所述虚拟机中第一个加载进的被隔离驱动,或最后一个卸载出的被隔离驱动时,直接运行所述驱动程序,不进行整个虚拟机内核空间对应的所有影子页表的设置;
当所述缺页处理子模块允许进行写操作时,所述页面设置子模块将写操作地址对应的影子页表的相应页表项改为可写,并且执行写操作,在写操作结束后,重新将写操作地址对应的影子页表的相应页表项改为只读。
第六步,所述缺页处理子模块接收所述隔离管理子模块发出的可信任内核的地址范围的信息,记录所述虚拟机的可信任内核的地址范围,判断和控制是否允许进行写操作。
根据写操作指令的来源和被隔离驱动对应的授权表,判断和控制是否允许进行写操作具体包括:
当写操作是来自可信任的虚拟机内核时,则通知页面设置子模块,将写操作地址对应的影子页表的相应页表项改为可写,并且执行写操作,在写操作结束后,重新将写操作地址对应的影子页表的相应页表项改为只读;
当写操作是来自虚拟机中被隔离的驱动程序,且写操作的地址范围在被隔离驱动程序对应的授权表中时,则通知页面设置子模块,将写操作地址对应的影子页表的相应页表项改为可写,并且执行写操作,在写操作结束后,重新将写操作地址对应的影子页表的相应页表项改为只读;
当进行写操作,且写操作的地址范围不在被隔离驱动程序对应的授权表中时,跳过写操作指令,结束所述驱动程序并报告错误。
参考图2所示,一种在虚拟机内部的驱动隔离系统的隔离管理子模块的流程图,包括下述步骤:
(1)首先,隔离管理子模块捕捉到驱动进出内核的消息。如果为加载进内核的消息,则执行步骤(2);否则,执行步骤(7)。
(2)如果隔离管理子模块还捕捉到标志进入内核的驱动为被隔离驱动的消息,则执行步骤(3);否则,执行步骤(12)。
(3)向虚拟机管理器中的授权表管理子模块发出建立被隔离驱动初始授权表的指令。如果被隔离驱动为第一个被隔离的驱动,则执行步骤(4);否则,执行步骤(6)。
(4)向虚拟机管理器中的页面设置子模块发出将被隔离驱动程序所在的VM内核空间对应的所有影子页表设置为只读的指令。
(5)向虚拟机管理器中的缺页处理子模块注入被隔离驱动所在虚拟机的可信内核的地址范围。
(6)建立被隔离驱动的相关隔离信息。
(7)查询所有被隔离驱动信息,判断卸载出的驱动是否为被隔离驱动。
(8)如果被卸载出的驱动为被隔离驱动的消息,则执行步骤(9);否则,执行步骤(12)。
(9)向虚拟机管理器中的授权表管理子模块发出销毁被隔离驱动初始授权表的指令。如果被隔离驱动为最后一个被隔离的驱动,则执行步骤(10);否则,执行步骤(11)。
(10)向虚拟机管理器中的页面设置子模块发出将被隔离驱动程序所在的VM内核空间对应的所有影子页表设置为可写的指令,避免不必要的写操作缺页异常。
(11)销毁被隔离驱动的相关隔离信息。
(12)向虚拟机管理器中的缺页处理子模块更新被隔离驱动所在虚拟机的可信内核的地址范围。
进一步的,参考图3所示,是一种在虚拟机内部的驱动隔离方法建立隔离运行环境的流程图的隔离运行环境的方法,包括下述步骤:
(1)首先,在需要隔离驱动的VM(虚拟机)中,加载上述的内存信息监视模块。
(2)利用上述驱动隔离加载模块,加载被隔离驱动程序,使被隔离驱动程序与内存信息监视模块中的包装函数库建立联系,从而使驱动以隔离方式运行。
(3)内存信息监视模块的隔离管理子模块,通知VMM(内存访问控制模块)相对于VM中被隔离的驱动程序,VMM可信任VM内核的地址范围。
(4)内存信息监视模块的隔离管理子模块,通知VMM建立被隔离驱动程序对应的初始内存授权表。
(5)内存访问控制模块的授权表管理子模块,在接收到VM发出的建立被隔离驱动授权表的指令后,VMM建立记录驱动程序可写内存范围的授权表。如果被隔离驱动是VM中第一个被隔离的驱动,执行步骤(6);否则,跳转到步骤(7)。
(6)内存访问控制模块的页面设置子模块,在接收到VM发出的设置影子页表的指令后,在VMM的影子页表中,将保护被隔离驱动程序所在的VM内核空间对应的所有影子页表设置为只读。这样当VM执行写操作时,就会陷入VMM的缺页异常程序,从而就可判断被隔离驱动程序的写操作是否正确。
(7)运行驱动程序,并通过VM内核内存管理函数的包装函数实时得捕捉并通知VMM更新对应的内存授权表。
在虚拟机中,被隔离驱动程序仍按照原来的方式运行,无需任何改变,即隔离方式对虚拟机内核和驱动透明。而在内存访问控制模块中,被隔离驱动程序对应内存访问控制模块中的授权表,以及内存访问控制模块中设置的页面写保护,相当于在内存访问控制模块建立起一个被隔离驱动环境的隔离运行环境。隔离运行环境是一种限制权限的环境,它只提供驱动正常运行的最小内存资源。如果被隔离驱动程序出现故障,违反了隔离环境限制,就将触发错误报告。
需要说明的是,对其他不包含被隔离驱动的虚拟机实例(如图1中的VM2),本发明不影响它们原有的运行方式。其虚拟机中无需加载任何额外模块,且其内存访问控制模块中对应的影子页表也不会被修改。
进一步的,一种在虚拟机内部的驱动隔离方法写操作缺页异常处理流程图,参考图4所示,包括下述步骤:
(1)当VM执行写操作时,由于VM所对应的VMM的影子页表的写保护,将触发VMM的缺页异常程序。
(2)VMM的缺页异常程序判断执行的写操作是来自VM内核还是来自VM中被隔离的驱动程序。如果来自被隔离的驱动程序,跳转到步骤(3);否则,执行步骤(5)。
(3)判断写操作的地址范围是否在驱动程序对应的授权表中,如果不是,则执行步骤(4);否则,执行步骤(5)。
(4)此时驱动程序的写操作越界,跳过写操作指令,结束并报告错误。
(5)如果可以进行写操作,则将写操作地址对应的VMM的影子页表的相应页表项设置为可写。
(6)执行写操作。
(7)写操作结束后,重新将写操作地址对应的VMM的影子页表的相应页表项设置为只读。
由于保护被隔离驱动程序的虚拟机所对应的影子页表都被设置成了写保护,该虚拟机中的任何写操作都将触发内存访问控制模块的缺页异常。内存访问控制模块的缺页异常将根据虚拟机中隔离管理子模块报告的可信任内核的地址范围来判断写指令的来源。如果来自可信任的虚拟机内核,则允许写操作;如果不是,还需结合被隔离驱动程序的授权表来判断;若在授权表中,则允许,否则,报告错误。当内存访问控制模块允许写操作之后,会开放写操作地址对应的内存访问控制模块的影子页表的相应页表项的写权限,并在数个CPU周期后,重新关闭相应页表项的写权限。
Claims (9)
1.一种在虚拟机内部的驱动隔离系统,其特征在于:包括运行于虚拟机用户态的驱动隔离加载模块、虚拟机内核态的内存信息监视模块以及虚拟机管理器内部的内存访问控制模块,其中,
所述运行于虚拟机用户态的驱动隔离加载模块:将驱动模块文件中监视未定义符号与内存信息监视模块中监视包装函数建立联系,使得驱动以隔离方式运行,并向内存信息监视模块中的隔离控制子模块发出被隔离驱动程序提醒消息,以使得进入内核的驱动为被隔离驱动程序;所述监视未定义符号包括内存管理函数的未定义符号和驱动注册函数的未定义符号;
所述虚拟机内核态的内存信息监视模块包括:包装函数库、隔离控制子模块以及消息通信子模块,其中,
所述包装函数库:为虚拟机内核中所监控的函数建立内核包装函数,并为虚拟机内核中驱动接口中的接口函数建立驱动包装函数,以使得被隔离驱动与内核和驱动包装函数链接,并进入隔离运行模式;所述内核包装函数包括内存包装函数和注册包装函数,所述内存包装函数是指内核中内存管理函数的包装函数,所述注册包装函数是指内核中驱动注册函数的包装函数;
所述隔离控制子模块:接收运行于虚拟机用户态的驱动隔离加载模块发出的被隔离驱动程序提醒消息,建立被隔离驱动程序的相关信息,并指示消息通信子模块向所述虚拟机管理器内部的内存访问控制模块发送设置被隔离驱动授权表的指令,同时,根据需要获取可信任的虚拟机内核的地址范围,注入到内存访问控制模块,并发出设置虚拟机管理器中影子页表的指令;所述可信任的虚拟机内核的地址范围包括虚拟机内核代码和未被隔离的驱动程序代码的内存起始地址及其大小;
所述消息通信子模块:向内存访问控制模块实时报告被隔离驱动所使用内存信息、可信任的虚拟机内核的地址范围、及发送建立被隔离驱动授权表的指令;所述消息通信子模块被所述包装函数库和所述隔离控制子模块调用;
所述内存访问控制模块:用于控制被隔离驱动程序写操作,包括:授权表管理子模块、页面设置子模块以及缺页处理子模块,其中,
所述授权表管理子模块:接收所述内存信息监视模块发出的设置被隔离驱动授权表的指令后,设置被隔离驱动程序可写内存范围的授权表,并负责确认写操作地址是否在授权表中;
所述页面设置子模块:接收所述内存信息监视模块发出的设置虚拟机管理器中影子页表的指令,并根据所述被隔离驱动所在虚拟机的内核空间在虚拟机管理器中所对应的影子页表,将影子页表设置为只读;另外,当缺页处理子模块允许写操作时,还接收所述缺页处理子模块发出的允许写操作段的指令,并设置写操作目标地址对应的影子页表,在写操作结束后,重新将影子页表设置为只读;
所述缺页处理子模块:当被隔离驱动所在虚拟机内核出现写操作时,根据写操作指令的来源和被隔离驱动对应的授权表,判断和控制是否允许进行写操作。
2.根据权利要求1所述的一种在虚拟机内部的驱动隔离系统,其特征在于,运行于虚拟机用户态的驱动隔离加载模块具体用于:
运行于虚拟机用户态的驱动隔离加载模块,将驱动模块文件中的内存管理函数的未定义符号和驱动注册函数的未定义符号替换为对应的所述内存包装函数和注册包装函数的符号及其符号名;
调用虚拟机内核的原模块加载方式加载驱动程序模块,以使驱动程序模块中包装函数符号将自动链接到所述虚拟机内存信息监视模块中的所监控的包装函数,从而完成与内核包装函数建立联系;
虚拟机内核的原模块加载方式会调用驱动模块的初始化函数,执行驱动注册,驱动会自动调用已经链接到注册包装函数的驱动注册函数,完成与驱动包装函数建立联系。
3.根据权利要求1所述的一种在虚拟机内部的驱动隔离系统,其特征在于,所述隔离运行模式是指被隔离驱动程序使用的所有内存信息都被实时的捕获,并建立对应的授权表,实现驱动程序隔离运行模式具体包括:
驱动在加载时,执行驱动注册函数向内核的驱动接口注册驱动程序,将内核中驱动模块各个功能函数的地址赋予驱动接口中的接口函数指针,通过所述驱动隔离加载模块,驱动实际将执行驱动注册函数对应的包装函数,即注册包装函数,从而实现内核对驱动调用过程的监视;所述注册包装函数执行所述虚拟机内核中的原驱动注册函数,并执行驱动接口中接口函数指针的替换操作;所述接口函数指针的替换操作是指将接口函数指针赋值成驱动包装函数的地址,代替原驱动功能函数的地址;
驱动程序加载后,驱动接口中的接口函数指针已被驱动包装函数所替换,当内核调用驱动函数时,将执行驱动包装函数,获得驱动所使用的被赋予内存信息和栈内存信息;驱动包装函数记录被赋予内存信息和栈内存信息,并将被赋予内存信息和栈内存信息注入到虚拟机管理器的授权表管理子模块,执行被隔离驱动中的原驱动函数;所述被赋予内存信息包括:内核授权驱动操作的内核数据结构的内存起始地址及其大小;所述栈内存信息包括:执行驱动程序的进程的栈的内存起始地址及其大小;
驱动在运行过程中,调用内存管理函数来分配或释放内存,通过所述驱动隔离加载模块,驱动实际将执行内存管理函数对应的包装函数,即内存包装函数,实现向内核申请分配或释放内存;所述内存包装函数执行所述虚拟机内核中的原内存管理函数,并记录分配或释放的堆内存信息,并将堆内存信息注入到虚拟机管理器的授权表管理子模块;所述堆内存信息包括:驱动程序向所述虚拟机内核申请分配或释放的内存起始地址及其大小。
4.根据权利要求1所述的一种在虚拟机内部的驱动隔离系统,其特征在于,所述内存信息监视模块中的隔离控制子模块具体用于:
1)当接收运行于虚拟机用户态的驱动隔离加载模块发出的被隔离驱动程序提醒消息时,将执行以下操作:
向内存访问控制模块中的授权表管理子模块,发出建立被隔离驱动程序对应授权表的指令;
当被隔离驱动是所述虚拟机中第一个被隔离的驱动时,向内存访问控制模块中的页面设置子模块,发出设置虚拟机管理器中影子页表为成只读模式的指令;
当被隔离驱动是所述虚拟机中第一个被隔离的驱动时,向内存访问控制模块中的缺页处理子模块,注入所述被隔离驱动所在虚拟机的可信任内核空间的地址范围;
2)当捕获驱动进入内核的消息,但没有接收到进入内核的驱动为被隔离驱动的消息时,将执行以下操作:
向内存访问控制模块中的缺页处理子模块,更新所述被隔离驱动所在虚拟机的可信任内核空间的地址范围;
3)当捕获驱动卸载出内核的消息时,查询已有的被隔离驱动信息,如果发现卸载出的驱动为被隔离驱动,将执行以下操作:
向内存访问控制模块中的授权表管理子模块,发出销毁被隔离驱动程序对应授权表的指令;
当被隔离驱动是所述虚拟机中最后一个被隔离的驱动时,向内存访问控制模块中的页面设置子模块,发出设置虚拟机管理器中影子页表为成可写入模式的指令;
4)当捕获驱动卸载出内核的消息时,查询已有的被隔离驱动信息,如果发现卸载出的驱动不是被隔离驱动,将执行以下操作:
向内存访问控制模块中的缺页处理子模块,更新所述被隔离驱动所在虚拟机的可信任内核空间的地址范围。
5.根据权利要求1所述的一种在虚拟机内部的驱动隔离系统,其特征在于,所述内存访问控制模块中的授权表管理子模块具体用于:
当被隔离驱动程序加载完成时,接收所述虚拟机中所述隔离管理子模块发出的建立被隔离驱动授权表的指令,并建立被隔离驱动程序可写内存范围的初始授权表;
当被隔离驱动程序运行过程中时,接收所述虚拟机所述包装函数库发出的更新被隔离驱动授权表的指令,并根据所述包装函数实时捕捉的驱动程序所使用的内存信息,更新对应的所述驱动授权表;
当被隔离驱动程序运行过程中,发生写操作缺页异常时,接收所述缺页处理子模块的查询授权表指令,并查询写操作地址是否在驱动授权表中;
当被隔离驱动程序卸载完成时,接收所述虚拟机中所述隔离管理子模块发出的销毁被隔离驱动授权表的指令,销毁被隔离驱动授权表。
6.根据权利要求1所述的一种在虚拟机内部的驱动隔离系统,其特征在于,所述内存访问控制模块中的页面设置子模块具体用于:
接收所述内存信息监视模块发出的设置影子页表的只读指令,并根据被隔离驱动为所述虚拟机中第一个被隔离的驱动,将被隔离驱动程序所在虚拟机内核空间对应的虚拟机管理器中的影子页表中的所有页表设置为只读;
接收所述内存信息监视模块发出的设置影子页表的可写指令,并根据最后一个被隔离驱动被卸载出所述虚拟机内核,将被隔离驱动程序所在虚拟机内核空间对应的虚拟机管理器中的影子页表中的所有页表设置为可写,防止不必要的缺页异常;
当被隔离驱动不是所述虚拟机中第一个加载的被隔离驱动,或最后一个卸载出的被隔离驱动时,直接运行所述驱动程序,不进行整个虚拟机内核空间对应的所有影子页表的设置;
当所述缺页处理子模块允许进行写操作时,所述页面设置子模块将写操作地址对应的影子页表的相应页表项改为可写,并且执行写操作,在写操作结束后,重新将写操作地址对应的影子页表的相应页表项改为只读。
7.根据权利要求1所述的一种在虚拟机内部的驱动隔离系统,其特征在于,所述内存访问控制模块中的缺页处理子模块还用于:
当写操作是来自可信任的虚拟机内核时,则通知页面设置子模块,将写操作地址对应的影子页表的相应页表项改为可写,并且执行写操作,在写操作结束后,重新将写操作地址对应的影子页表的相应页表项改为只读;
当写操作是来自虚拟机中被隔离的驱动程序,且写操作的地址范围在被隔离驱动程序对应的授权表中时,则通知页面设置子模块,将写操作地址对应的影子页表的相应页表项改为可写,并且执行写操作,在写操作结束后,重新将写操作地址对应的影子页表的相应页表项改为只读;
当写操作是来自虚拟机中被隔离的驱动程序,且写操作的地址范围不在被隔离驱动程序对应的授权表中时,跳过写操作指令,结束所述驱动程序并报告错误。
8.基于权利要求3所述的一种在虚拟机内部的驱动隔离系统的驱动隔离方法,其特征在于,包括以下步骤:
在需要隔离驱动程序的虚拟机中加载虚拟机内核态的内存信息监视模块;
内存信息监视模块通过所述驱动隔离加载模块加载被隔离驱动程序,将被隔离驱动程序模块中未定义符号与内存信息监视模块中监视包装函数建立联系,使得被隔离驱动在加载之后以隔离方式运行;并向内存信息监视模块中的隔离控制子模块发出被隔离驱动程序提醒消息,以使得进入内核的驱动为被隔离驱动程序;所述监视未定义符号包括内存管理函数的未定义符号和驱动注册函数的未定义符号;
隔离控制子模块接收运行于虚拟机用户态的驱动隔离加载模块发出的被隔离驱动程序提醒消息,建立被隔离驱动程序的相关信息,并指示消息通信子模块向所述虚拟机管理器内部的内存访问控制模块发送设置被隔离驱动授权表的指令,同时,根据需要获取可信任的虚拟机内核的地址范围,注入到内存访问控制模块,并发出设置虚拟机管理器中影子页表的指令;所述可信任的虚拟机内核的地址范围包括虚拟机内核代码和未被隔离的驱动程序代码的内存起始地址及其大小;
授权表管理子模块接收到隔离管理子模块发出的建立被隔离驱动授权表的指令后,设置驱动程序可写内存范围的授权表;
页面设置子模块接收所述内存信息监视模块发出的设置虚拟机管理器中影子页表的指令,并根据所述被隔离驱动所在虚拟机的内核空间在虚拟机管理器中所对应的影子页表,将影子页表设置为接收所述缺页处理子模块发出的允许写操作段的指令,并设置写操作目标地址对应的影子页表;
所述缺页处理子模块接收所述隔离管理子模块发出的可信任内核的地址范围的信息,记录所述虚拟机的可信任内核的地址范围,判断和控制是否允许进行写操作。
9.根据权利要求8所述的一种在虚拟机内部的驱动隔离方法,其特征在于,所述将被隔离驱动程序模块中未定义符号与内存信息监视模块中监视包装函数建立联系具体包括:
将运行于虚拟机用户态的驱动模块文件中的内存管理函数的未定义符号和驱动注册函数的未定义符号替换为对应的所述内存包装函数和注册包装函数的符号及其符号名;
调用虚拟机内核的原模块加载方式加载驱动程序模块,以使得虚拟机用户态中修改过所监控未定义符号的驱动模块文件在加载之后自动链接到所述虚拟机内存信息监视模块中的所监控的包装函数,从而完成与内核包装函数建立联系;
虚拟机内核的原模块加载方式会调用驱动模块的初始化函数,执行驱动注册,驱动会自动调用已经链接到注册包装函数的驱动注册函数,完成与驱动包装函数建立联系;
所述实现驱动程序隔离运行模式具体包括:
驱动在加载时,执行驱动注册函数向内核的驱动接口注册驱动程序,将内核中驱动模块各个功能函数的地址赋予驱动接口中的接口函数指针,通过所述驱动隔离加载模块,驱动实际将执行驱动注册函数对应的包装函数,即注册包装函数,从而实现内核对驱动调用过程的监视;所述注册包装函数执行所述虚拟机内核中的原驱动注册函数,并执行驱动接口中接口函数指针的替换操作;所述接口函数指针的替换操作是指将接口函数指针赋值成驱动包装函数的地址,代替原驱动功能函数的地址;
驱动程序加载后,驱动接口中的接口函数指针已被驱动包装函数所替换,当内核调用驱动函数时,将执行驱动包装函数,获得驱动所使用的被赋予内存信息和栈内存信息;驱动包装函数记录被赋予内存信息和栈内存信息,并将被赋予内存信息和栈内存信息注入到虚拟机管理器的授权表管理子模块,执行被隔离驱动中的原驱动函数;所述被赋予内存信息包括:内核授权驱动操作的内核数据结构的内存起始地址及其大小;所述栈内存信息包括:执行驱动程序的进程的栈的内存起始地址及其大小;
驱动在运行过程中,调用内存管理函数来分配或释放内存,通过所述驱动隔离加载模块,驱动实际将执行内存管理函数对应的包装函数,即内存包装函数,实现向内核申请分配或释放内存;所述内存包装函数执行所述虚拟机内核中的原内存管理函数,并记录分配或释放的堆内存信息,并将堆内存信息注入到虚拟机管理器的授权表管理子模块;所述堆内存信息包括:驱动程序向所述虚拟机内核申请分配或释放的内存起始地址及其大小;
指示消息通信子模块向所述虚拟机管理器内部的内存访问控制模块发送设置被隔离驱动授权表的指令具体包括:
1)当接收运行于虚拟机用户态的驱动隔离加载模块发出的被隔离驱动程序提醒消息时,将执行以下操作:
向内存访问控制模块中的授权表管理子模块,发出建立被隔离驱动程序对应授权表的指令;
当被隔离驱动是所述虚拟机中第一个被隔离的驱动时,向内存访问控制模块中的页面设置子模块,发出设置虚拟机管理器中影子页表为成只读模式的指令;
当被隔离驱动是所述虚拟机中第一个被隔离的驱动时,向内存访问控制模块中的缺页处理子模块,注入所述被隔离驱动所在虚拟机的可信任内核空间的地址范围;
2)当捕获驱动进入内核的消息,但没有接收到进入内核的驱动为被隔离驱动的消息时,将执行以下操作:
向内存访问控制模块中的缺页处理子模块,更新所述被隔离驱动所在虚拟机的可信任内核空间的地址范围;
3)当捕获驱动卸载出内核的消息时,查询已有的被隔离驱动信息,如果发现卸载出的驱动为被隔离驱动,将执行以下操作:
向内存访问控制模块中的授权表管理子模块,发出销毁被隔离驱动程序对应授权表的指令;
当被隔离驱动是所述虚拟机中最后一个被隔离的驱动时,向内存访问控制模块中的页面设置子模块,发出设置虚拟机管理器中影子页表为成可写入模式的指令;
4)当捕获驱动卸载出内核的消息时,查询已有的被隔离驱动信息,如果发现卸载出的驱动不是被隔离驱动,将执行以下操作:
向内存访问控制模块中的缺页处理子模块,更新所述被隔离驱动所在虚拟机的可信任内核空间的地址范围;
所述设置驱动程序可写内存范围的授权表,具体包括:
当被隔离驱动程序加载完成时,接收所述虚拟机中所述隔离管理子模块发出的建立被隔离驱动授权表的指令,并建立被隔离驱动程序可写内存范围的初始授权表;
当被隔离驱动程序运行过程中,接收所述虚拟机所述包装函数库发出的更新被隔离驱动授权表的指令,并根据所述包装函数实时捕捉的驱动程序所使用的内存信息,更新对应的所述驱动授权表;
当被隔离驱动程序运行过程中,发生写操作缺页异常时,接收所述缺页处理子模块的查询授权表指令,并查询写操作地址是否在驱动授权表中;
当被隔离驱动程序卸载完成时,接收所述虚拟机中所述隔离管理子模块发出的销毁被隔离驱动授权表的指令,销毁被隔离驱动授权表;
根据所述被隔离驱动所在虚拟机内核空间在虚拟机管理器中所对应影子页表,进行页表设置,具体包括:
接收所述内存信息监视模块发出的设置影子页表的只读指令,并根据被隔离驱动为所述虚拟机中第一个被隔离的驱动,将被隔离驱动程序所在虚拟机内核空间对应的虚拟机管理器中的影子页表中的所有页表设置为只读;
接收所述内存信息监视模块发出的设置影子页表的可写指令,并根据最后一个被隔离驱动被卸载出所述虚拟机内核,将被隔离驱动程序所在虚拟机内核空间对应的虚拟机管理器中的影子页表中的所有页表设置为可写,防止不必要的缺页异常;
当被隔离驱动不是所述虚拟机中第一个加载进的被隔离驱动,或最后一个卸载出的被隔离驱动时,直接运行所述驱动程序,不进行整个虚拟机内核空间对应的所有影子页表的设置;
当所述缺页处理子模块允许进行写操作时,所述页面设置子模块将写操作地址对应的影子页表的相应页表项改为可写,并且执行写操作,在写操作结束后,重新将写操作地址对应的影子页表的相应页表项改为只读;
根据写操作指令的来源和被隔离驱动对应的授权表,判断和控制是否允许进行写操作具体包括:
当写操作是来自可信任的虚拟机内核时,则通知页面设置子模块,将写操作地址对应的影子页表的相应页表项改为可写,并且执行写操作,在写操作结束后,重新将写操作地址对应的影子页表的相应页表项改为只读;
当写操作是来自虚拟机中被隔离的驱动程序,且写操作的地址范围在被隔离驱动程序对应的授权表中时,则通知页面设置子模块,将写操作地址对应的影子页表的相应页表项改为可写,并且执行写操作,在写操作结束后,重新将写操作地址对应的影子页表的相应页表项改为只读;
当进行写操作,且写操作的地址范围不在被隔离驱动程序对应的授权表中时,跳过写操作指令,结束所述驱动程序并报告错误。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210442752.4A CN102938035B (zh) | 2012-11-08 | 2012-11-08 | 一种在虚拟机内部的驱动隔离系统与方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210442752.4A CN102938035B (zh) | 2012-11-08 | 2012-11-08 | 一种在虚拟机内部的驱动隔离系统与方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102938035A CN102938035A (zh) | 2013-02-20 |
CN102938035B true CN102938035B (zh) | 2015-05-27 |
Family
ID=47696931
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210442752.4A Expired - Fee Related CN102938035B (zh) | 2012-11-08 | 2012-11-08 | 一种在虚拟机内部的驱动隔离系统与方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102938035B (zh) |
Families Citing this family (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103279367A (zh) * | 2013-05-07 | 2013-09-04 | 浪潮电子信息产业股份有限公司 | 一种内核驱动隔离系统 |
CN103413071B (zh) * | 2013-07-09 | 2016-03-23 | 北京深思数盾科技有限公司 | 一种保护软件中数据的方法 |
CN103605557A (zh) * | 2013-10-25 | 2014-02-26 | 普华基础软件股份有限公司 | 一种虚拟器件管理系统及管理方法 |
CN104951694B (zh) * | 2014-03-24 | 2018-04-10 | 华为技术有限公司 | 一种管理虚拟机的隔离方法及装置 |
CN103914332B (zh) * | 2014-04-14 | 2017-01-18 | 中国人民解放军国防科学技术大学 | 虚拟机客户操作系统内真实进程信息的探测方法 |
CN104468307B (zh) * | 2014-10-27 | 2017-08-29 | 中国运载火箭技术研究院 | 一种基于虚拟机的实时通信系统 |
CN106502759B (zh) * | 2015-09-06 | 2019-11-15 | 华为技术有限公司 | 一种数据访问方法、代码调用方法及虚拟机监视器 |
CN105573852B (zh) * | 2016-02-03 | 2018-11-30 | 南京大学 | 一种虚拟地址隔离环境下超高速数据对象通信的方法 |
CN108228333A (zh) * | 2016-12-14 | 2018-06-29 | 中国航空工业集团公司西安航空计算技术研究所 | 一种多核系统的核间资源隔离方法 |
CN108256320B (zh) * | 2017-12-27 | 2020-04-28 | 北京梆梆安全科技有限公司 | 微分域动态检测方法及装置、设备和存储介质 |
CN108491249B (zh) * | 2018-03-16 | 2020-11-10 | 中国人民解放军战略支援部队信息工程大学 | 一种基于模块权能的内核模块隔离方法及系统 |
CN108579093B (zh) * | 2018-05-10 | 2023-11-03 | 腾讯科技(上海)有限公司 | 目标进程的运行保护方法、装置及可读介质 |
CN110445580B (zh) * | 2019-08-09 | 2022-04-19 | 浙江大华技术股份有限公司 | 数据发送方法及装置、存储介质、电子装置 |
CN112464221A (zh) * | 2019-09-09 | 2021-03-09 | 北京奇虎科技有限公司 | 内存访问行为的监控方法及系统 |
CN112988508B (zh) * | 2021-03-04 | 2022-03-18 | 浙江中控研究院有限公司 | 一种基于内存隔离的可信plc嵌入式系统 |
CN115599448A (zh) * | 2021-06-28 | 2023-01-13 | 深圳市中兴微电子技术有限公司(Cn) | 一种基于linux内核ko模块的加载方法及装置 |
CN113835917A (zh) * | 2021-09-03 | 2021-12-24 | 支付宝(杭州)信息技术有限公司 | 内存记账异常检测方法、装置、电子设备及存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101071387A (zh) * | 2006-09-08 | 2007-11-14 | 华南理工大学 | 一种基于虚拟机的驱动程序加固方法 |
CN101488113A (zh) * | 2008-11-25 | 2009-07-22 | 华为技术有限公司 | 一种设备驱动域的实现方法、系统及装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7797707B2 (en) * | 2005-03-02 | 2010-09-14 | Hewlett-Packard Development Company, L.P. | System and method for attributing to a corresponding virtual machine CPU usage of a domain in which a shared resource's device driver resides |
US8032882B2 (en) * | 2006-07-26 | 2011-10-04 | Hewlett-Packard Development Company, L.P. | System and method for controlling aggregate CPU usage by virtual machines and driver domains |
-
2012
- 2012-11-08 CN CN201210442752.4A patent/CN102938035B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101071387A (zh) * | 2006-09-08 | 2007-11-14 | 华南理工大学 | 一种基于虚拟机的驱动程序加固方法 |
CN101488113A (zh) * | 2008-11-25 | 2009-07-22 | 华为技术有限公司 | 一种设备驱动域的实现方法、系统及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN102938035A (zh) | 2013-02-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102938035B (zh) | 一种在虚拟机内部的驱动隔离系统与方法 | |
CN1834950B (zh) | 具有活动和非活动执行核心的多核处理器 | |
CN100375060C (zh) | 一种嵌入式系统及其实时内存监控处理方法 | |
CN103064784B (zh) | 面向Xen环境的运行时内存泄漏检测方法及其实现系统 | |
US9405515B1 (en) | Computing systems utilizing controlled dynamic libraries and isolated execution spaces | |
CN102298529B (zh) | 为系统提供硅集成代码 | |
CN100432931C (zh) | 嵌入式系统动态补丁长跳转的实现方法 | |
CN109558211A (zh) | 保护可信应用与普通应用的交互完整性和保密性的方法 | |
US20070240171A1 (en) | Device, Method, And Computer Program Product For Accessing A Non-Native Application Executing In Virtual Machine Environment | |
CN103440457B (zh) | 基于进程模拟的二进制程序分析系统 | |
CN111651778A (zh) | 基于risc-v指令架构的物理内存隔离方法 | |
CN101226577A (zh) | 基于可信硬件与虚拟机的微内核操作系统完整性保护方法 | |
CN104885057A (zh) | 虚拟化计算系统中隔离的客创建 | |
CN104321748A (zh) | 用于捕捉轻量虚拟机管理器中的错误条件的方法、系统和装置 | |
CN101446918A (zh) | 一种实现用户态调试器调试单个函数的方法及系统 | |
US20070083792A1 (en) | System and method for error detection and reporting | |
CN107450964B (zh) | 一种用于发现虚拟机自省系统中是否存在漏洞的方法 | |
CN102830990A (zh) | 一种计算机系统启动方法及计算机终端 | |
CN104461876A (zh) | 一种基于运行快照序列的并行程序重现调试方法 | |
CN104090788B (zh) | 一种基于载荷的星载软件配置和运行方法及系统 | |
CN103631712B (zh) | 一种基于内存管理的模式化软件关键行为跟踪方法 | |
CN104657258A (zh) | 一种向目标进程内注入Java字节码的方法及装置 | |
CN107766069A (zh) | 一种嵌入式系统热补丁实现方法 | |
CN104714834B (zh) | 一种空间确定的任务调度方法 | |
CN103425563A (zh) | 基于虚拟化技术的在线i/o电子取证系统及其取证方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20150527 Termination date: 20181108 |