CN102231138B - 计算机内存数据准确采集系统及获取方法 - Google Patents
计算机内存数据准确采集系统及获取方法 Download PDFInfo
- Publication number
- CN102231138B CN102231138B CN2011101900865A CN201110190086A CN102231138B CN 102231138 B CN102231138 B CN 102231138B CN 2011101900865 A CN2011101900865 A CN 2011101900865A CN 201110190086 A CN201110190086 A CN 201110190086A CN 102231138 B CN102231138 B CN 102231138B
- Authority
- CN
- China
- Prior art keywords
- virtual machine
- monitor
- memory
- virtual
- internal memory
- 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.)
- Active
Links
Images
Landscapes
- Stored Programmes (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
一种计算机应用技术领域的计算机内存数据准确采集系统,该系统包括:后启动虚拟机模块和虚拟化内存获取模块。本发明基于硬件虚拟化技术,在操作系统和应用程序运行时动态加载虚拟机监控器,在物理机器正在运行时被转换为虚拟机主机处的虚拟机不致招致显著停机时间,通过控制虚拟机物理内存到真实物理内存的映射和权限管理完成对正在改写内存区域的识别和读取相应位置原来内存数据;可以准确获取指定时刻计算机内存中的数据并且对内存的改动较小且与已有操作系统和应用程序耦合度极低;可以在操作系统和应用程序运行时动态卸载虚拟机监控器,使得之前处于虚拟机主机处的虚拟机在运行时被转换为物理机器继续运行并不致招致显著的停机时间。
Description
技术领域
本发明涉及的是一种计算机应用技术领域的系统及方法,具体是一种计算机内存数据准确采集系统及获取方法。
背景技术
内存数据的获取常被用于软件调试和计算机取证过程中,已有内存数据的获取方法很难在获取大量数据时确保准确性。现有的获取方法分为软件获取和硬件获取两种,软件获取内存数据又可进一步分为基于虚拟机(Virtual Machine,VM)获取和本地获取两种手段。本地获取指在目标操作系统(Operating System,OS)内通过运行第三方用户态应用程序(User-modeApplication)或加载内核模块(Kernel Module)的方法来完成计算机内存数据的获取。
经过对现有的技术检索发现,中国专利文献号CN100414554.记载了一种“用于计算机的电子数据取证方法和系统”,该技术包括实时取证过程,也就是在目标机器运行时获取其中选定的内存数据并进而筛选出可能存在的证据,然而由于当前操作系统为多进程操作系统,内存数据在获取过程中会发生改变,因此包括该专利在内的本地获取内存数据方法均不能保证获得结果的准确率。
一种有效的改进是在内存获取过程中暂停目标机器的运行,在2009年3月份Computing inScience and Engineering期刊Volume 7 Issue 2中发表了一篇名为Live Analysis:Progress andChallenges的论文,其中明确提到很难用软件手段实现理想的暂停目标机器运行的手段,因此这种改进出现的可能性极低。
另一种软件获取手段一基于虚拟机获取内存内容可以准确获取目标机器的内存数据,这种方法在2007年11月29日的ICISC 2007会议中,Asynchronous Pseudo Physical MemorySnapshot and Forensics on Paravirtualized VMM Using Split Kernel Module提到通过构建虚拟机来获取预先装入虚拟机中的目标系统的物理内存数据。而在2008年5月22日的SADFE2008会议中,Towards the Virtual Memory Space Reconstruction for Windows Live ForensicPurposes论文提出了一种利用虚拟机准确获取装入虚拟机中的目标系统的虚拟内存数据方法,进而可以分辨和准确获取属于特定进程的内存内容。然而这种方法为了达到准确获取内存数据的目的,要求把目标系统装载入如VMWare Workstation、Xen或者KVM这样的虚拟机内,这就要求必须重新目标系统甚至于重新安装目标系统,从而导致完全摧毁目标机器的内存数据,从而在很多场合下不适用。
对于现有的基于硬件的内存获取技术,中国专利文献号CN101419536B记载了“一种计算机内存数据获取方法与系统”,其通过IEEE 1394接口模拟移动硬盘登录到待取证计算机并使待取证计算机开放DMA功能;进而完成内存的读取。其缺点是需要引入专门的硬件设备并且在2007年的Blackhat会议上Rutkowska Joanna的论文Beyond the CPU:Defeating hardwarebased RAM acquisition中指出可以通过重新配置I/O映射内存的方法来欺骗外接设备看到的内存区域,从而使得基于硬件的内存获取技术失效。
发明内容
本发明针对现有技术存在的上述不足,提供一种计算机内存数据准确采集系统及获取方法,基于硬件虚拟化技术,在操作系统和应用程序运行时动态构建虚拟机监控器,从而可在物理机器正在运行时被转换为虚拟机主机处的虚拟机(以下称为构建虚拟机)而不致招致显著的停机时间(仅需毫秒级停机时间),进而通过控制虚拟机物理内存到真实物理内存的映射和权限管理完成对正在改写内存区域的识别和读取相应和邻近或非邻近位置原始内存数据。这种方法或系统可以准确获取指定时刻计算机内存中的数据并且对内存的改动较小且与已有操作系统和应用程序耦合度极低。而在获取内存内容任务完成或需要卸载虚拟机监控器时,本发明描述的系统及方法可以在操作系统和应用程序运行时动态卸载虚拟机监控器,使得之前处于虚拟机主机处的虚拟机在运行时被转换为物理机器(以下称为卸载虚拟机)继续运行,同样不致招致显著的停机时间(仅需毫秒级停机时间)。
本发明不创建任何物理机器卷磁盘的快照的同时,由于将本地物理机器在运行时转化为虚拟机,因此本发明无需现有技术所述任何有关快照相关的传输。
本发明是通过以下技术方案实现的:
本发明涉及一种计算机内存数据准确采集系统,包括:后启动虚拟机模块和虚拟化内存获取模块,其中:虚拟化内存获取模块访问目标操作系统获得内存设备信息,后启动虚拟机模块与硬件系统相连接并在操作系统启动中或完成后驱动支持硬件虚拟化技术的硬件平台完成构建后启动虚拟机监控器和虚拟机或卸载已构建的后启动虚拟机监控器和虚拟机、加载或卸载虚拟化内存获取模块并驱动CPU拦截虚拟机内发生的虚拟机监控器指定的虚拟机事件、异常以及中断,后启动虚拟机模块与虚拟化内存获取系统相连接并传输内存获取控制指令和虚拟机中内存内容信息,虚拟化内存获取模块与后启动虚拟机模块相连接并接受内存获取控制指令和虚拟机中内存内容信息。
所述的后启动虚拟机模块包括:虚拟机创建卸载子模块、虚拟机事件拦截处理子模块,其中:虚拟机创建和卸载子模块驱动支持硬件虚拟化技术的硬件平台完成构建后启动虚拟机监控器和虚拟机或卸载已构建的后启动虚拟机监控器和虚拟机,以及加载/卸载虚拟化内存获取模块,虚拟机事件拦截处理子模块接收并处理硬件拦截到的虚拟机内发生的虚拟机监控器指定的虚拟机事件、异常以及中断并传输截获的内存获取控制指令和虚拟机中内存内容到虚拟化内存获取模块
所述的虚拟化内存获取模块包括:内存获取控制子模块、内存内容获取子模块、结果输出子模块,其中:内存获取控制子模块负责监听用户指令,反馈内存获取状态。内存内容获取子模块用于接收虚拟机中内存内容信息并控制虚拟机物理内存到真实物理内存的映射和权限管理。结果输出子模块利用操作系统提供的函数或自身实现的功能负责将接收到的内存数据保存到包括内存、硬盘、外接硬盘、闪存、网络和远程设备等外部设备。
本发明涉及上述系统的信息获取方法,通过后启动虚拟机模块构建后启动虚拟机监控器和虚拟机,将目标操作系统所在的物理机器在运行时转换为虚拟机主机处的虚拟机并提供虚拟机事件、异常以及中断拦截监测功能,虚拟化内存获取模块控制虚拟机物理内存到真实物理内存的映射和权限管理毫秒级暂停的完成对正在改写内存区域的识别和准确获得相应和邻近或非邻近位置原始内存数据。
所述信息获取方法的具体过程为:在操作系统启动过程中或完成后,通过加载驱动的方法由后启动虚拟机模块构建后启动虚拟机监控器和虚拟机并由虚拟化内存获取模块对本地系统内存信息进行登记并在需要准确获取计算机内存数据的时刻,客户发出内存获取指令,虚拟化内存获取模块在收到由后启动虚拟机模块转交的指令后开始获得相应位置原来内存数据并输出到外部设备或指定内存区域中。在获取内存内容任务完成或需要卸载虚拟化内存获取模块时,后启动虚拟机模块依次卸载已构建的后启动虚拟机监控器和虚拟机并卸载已加载的虚拟化内存获取模块,将目标操作系统所在的虚拟机在运行时转换为物理机器并卸载虚拟机事件、异常以及中断拦截监测功能。
所述的后启动虚拟机模块构建后启动虚拟机监控器和虚拟机是指:
步骤1.1,利用操作系统内核态、用户态或内核态混合用户态的API调用,来实现在各个CPU核心上建立虚拟机监控器,从而适用于多核硬件系统;
步骤1.2,保存寄存器内容,分配内存空间用于虚拟机监控器运行使用,包括但不限于堆栈空间,设置关键寄存器,配置辅助结构体,如Intel VT技术中的VMXON结构体并且修改相应MSR的内容启用硬件虚拟化支持;
步骤1.3,进行对Intel VT技术中的VMCS或AMD SVM的VMCB的配置,来建立虚拟机运行环境并将本地系统装入稍后运行的唯一存在的虚拟机中,同时配置虚拟机监控器环境和需要其处理的发生在虚拟机中的特殊事件并实现相应处理函数,在VMCS结构体中指定虚拟机启动后运行的第一条指令为后启动虚拟机模块初始化继续执行的指令;
步骤1.4,启动虚拟机并将处理器控制权交给虚拟机,使用配置的虚拟机运行环境并开启虚拟机运行;
步骤1.5,支持硬件虚拟化的处理器硬件会根据前述VMCS的配置信息,开始监控和拦截需要虚拟机监控器处理的敏感行为,保存虚拟机状态到VMCS以及虚拟机监控器的指定内存区域并调用指定的处理函数进行处理;
步骤1.6,虚拟机监控层完成对陷入事件的处理后,将处理器控制权重新转交到虚拟机,虚拟机中的操作系统继续运行,回到步骤1.5并循环执行。
所述的后启动虚拟机模块卸载已构建的后启动虚拟机监控器和虚拟机是指:
步骤a、卸载后启动虚拟机的命令从虚拟机中对每个CPU发出,在接收到卸载后启动虚拟机的命令后,虚拟机监控器接管控制权,虚拟机监控器所在的CPU的通用寄存器内容被保存,之后专门的卸载虚拟机监控器函数被调用;
步骤b、任何一个CPU卸载后启动虚拟机过程如下:
1)将虚拟机中该CPU的其余关键寄存器内容从VMCS中读出,然后在虚拟机监控器中写入CPU真实寄存器,使得虚拟机监控器中的环境和虚拟机中环境完全相同;
2)设置关键寄存器,关闭虚拟机模式;
步骤c、当所有CPU上的虚拟机监控器卸载后,调用操作系统函数释放创建虚拟机监控器过程中所申请的内存,卸载虚拟机监控器所在操作系统驱动。
所述的虚拟化内存获取模块通过以下方式进行加载:
步骤2.1,在后启动虚拟机模块构建后启动虚拟机监控器和虚拟机过程的步骤1.3之前开始加载虚拟化内存获取模块。
步骤2.2,获取虚拟机物理内存地址和输入输出设备占用内存物理地址的范围,依此对包括但不限于Intel VT技术中的嵌套页表技术(Extended Page Table。EPT)或AMD SVM的快速虚拟化索引(Rapid Virtualization Indexing,RVI)也称NPT(Nested Page Table)构建全等页表。需要注意的是,在不支持硬件嵌套页表翻译技术的机器上,全等页表的创建也可基于包括但不限于影子页表(Shadow Page Table,SPT)或直接使用系统当前页表的方法(以下将基于EPT、RVI、NPT、SPT或直接使用系统当前页表的页表统称为嵌套页表)。
所述的全等页表是指:操作系统物理地址与真实物理地址完全相等的一一映射,但访问权限上略有差异,页面大小为硬件支持的所有可能内存页大小。构建该页表使得在后续启动虚拟机后硬件自动完成从虚拟机虚拟地址到虚拟机物理地址到真实物理地址的翻译。页表项的创建或更新可以是通过每次创建或更新一项或多项的形式完成。
步骤2.3,在后启动虚拟机模块构建后启动虚拟机监控器和虚拟机过程的步骤1.3之中注册构建的嵌套页表的物理地址和嵌套页面异常处理函数。修改虚拟机监控器内处理虚拟机经常性或周期性发生事件的函数,如虚拟机写CR3寄存器事件的处理函数,使虚拟机在每次写CR3寄存器并且需要获取内存内容时执行获取内存方法。
所述的卸载已加载的虚拟化内存获取模块是指:
步骤3.1,在后启动虚拟机模块卸载后启动虚拟机监控器和虚拟机过程的步骤a之前开始卸载虚拟化内存获取模块。
步骤3.2,调用操作系统函数,释放为存储嵌套页表相关的页面结构所申请的内存。
步骤3.3,删除VMCS中嵌套页表的页表指针,清空VMCS中对嵌套页表的使用设置位。
所述的获得相应位置原来内存数据是指:
步骤4.1,在接收到获取内存内容的命令后,虚拟机监控器接管控制权。虚拟化内存获取模块的内存获取控制子模块接收到该获取内存内容的命令后指示内存内容获取子模块进行内存获取准备工作。虚拟化内存获取模块的内存内容获取子模块在嵌套页表中指向虚拟机待获取物理内存地址范围的页表项上去掉写权限位,使得虚拟机物理内存不可写。
步骤4.2,设置权限完成后,虚拟化内存获取模块请求虚拟机监控器将处理器控制权重新转交到虚拟机,虚拟机中的操作系统和应用程序继续运行。
步骤4.3,支持硬件虚拟化的处理器在虚拟机中尝试写虚拟机任何物理内存时会陷入虚拟机管理器中并且尚未修改目标内存内容。
步骤4.4,在虚拟机监控器中,虚拟机事件拦截处理子模块的嵌套页表处理函数首先获取该页内容并转发到内存内容获取子模块(也可由嵌套页表处理函数通知内存内容获取子模块可获取的内存内容地址而由内存内容获取子模块负责具体的内存内容获取过程)。内存内容获取子模块将该内容通过结果输出子模块利用操作系统提供的函数或自身实现的功能保存到外部设备或指定的内存区域中,然后获取该页临近或非临近的0个以上页面内容并通过结果输出子模块利用操作系统提供的函数或自身实现的功能保存到外部设备或指定的内存区域中,接着内存内容获取子模块查找关联到这些页面的嵌套页表页表项,恢复它们的写权限位确保不会重复陷入并更新已获取内存页列表。
步骤4.5,虚拟化内存获取模块请求虚拟机监控器将处理器控制权重新转交到虚拟机,虚拟机中的操作系统和应用程序继续运行。
步骤4.6,虚拟机发生写CR3寄存器事件并且获取内存内容过程未完成时(包括但不限于该事件,可以是任何经常性或周期性发生的事件,如HLT),该事件导致陷入虚拟机管理器中。虚拟机事件拦截处理子模块调用虚拟机写CR3寄存器事件的的处理函数(但不限于该函数,具体被调用函数与造成陷入的具体事件有关)。
步骤4.7,虚拟机写CR3寄存器事件的的处理函数首先处理写CR3寄存器事件,然后同步骤4.4和步骤4.5,其中步骤4.4为查找尚未被获取的1个或多个页,获取这些页的内容并通过结果输出子模块利用操作系统提供的函数或自身实现的功能保存到外部设备或指定的内存区域中。
步骤4.8,当虚拟机中待获取物理内存地址范围上的所有内存内容均已获取后,内存内容获取过程完成。处理器控制权重新转交到虚拟机,虚拟机中的操作系统和应用程序继续运行。用户可到指定的外部设备或内存区域中获取系统得到的内存内容结果。
本发明相对于现有技术具有以下优点:首先,建立了适用于已有商业操作系统的一个轻量级的虚拟机监控器,与已有系统不同的是,该虚拟机监控器能够将目标操作系统所在的物理机器在运行时被转换为虚拟机主机处的虚拟机并提供虚拟机事件/异常/中断拦截监测功能,以前同类型虚拟机监控器的安装需要先于操作系统启动完成并且不提供卸载功能,甚至于需要重新安装要支持的操作系统,而该虚拟机监控器的安装和卸载后于操作系统启动完成并且在操作系统运行期间可以多次安装/卸载该虚拟机监控器为毫秒级并且不招致显著的暂停时间,更无需重新安装操作系统。其次,在该虚拟机监控器的基础上,内存获取可以利用操纵虚拟机外额外地址翻译的能力,在无需暂停机器的情况下产生准确的结果而且不引起显著的性能影响。已有产品和方法则无法获得准确的内存获取结果,或者需要通过暂停机器运行的手段来保证结果准确性。最后,本系统独立于已有操作系统和上层应用软件的特性使得本系统易于部署在商业系统中,尤其适用于需要达到7×24小时可用性的商业服务器上。
附图说明
图1为本发明模块示意图。
图2为本发明架构示意图。
图3为虚拟机构建和事件处理示意图。
图4为虚拟化内存获取模块利用写保护来获取内存内容的原理图。
具体实施方式
下面对本发明的实施例作详细说明,本实施例在以本发明技术方案为前提下进行实施,给出了详细的实施方式和具体的操作过程,但本发明的保护范围不限于下述的实施例。
实施例
如图2所示,本实施例涉及的计算机内存数据采集系统,包括:后启动虚拟机模块和虚拟化内存获取模块,其中:后启动虚拟机模块与硬件系统相连接,按照所提供的硬件接口构建或卸载后启动虚拟机监控器和虚拟机,加载/卸载虚拟化内存获取模块并驱动CPU拦截虚拟机内发生的虚拟机监控器指定的虚拟机事件、异常以及中断,后启动虚拟机模块与虚拟化内存获取系统相连接并传输内存获取控制指令和虚拟机中内存内容信息,虚拟化内存获取模块与后启动虚拟机模块相连接并接受内存获取控制指令和虚拟机中内存内容信息,此外虚拟化内存获取模块访问目标操作系统获得内存设备信息(在本实施例中为物理内存地址范围信息)。
如图1所示,所述的后启动虚拟机模块包括:虚拟机创建和卸载子模块、虚拟机事件拦截处理子模块,其中:虚拟机创建和卸载子模块驱动支持硬件虚拟化技术的硬件平台完成构建或卸载后启动虚拟机监控器和虚拟机,以及加载虚拟化内存获取模块(在本实施例中卸载虚拟化内存获取模块包含在卸载后启动虚拟机监控器和虚拟机内完成)。虚拟机事件拦截处理子模块接收并处理硬件拦截到的虚拟机内发生的虚拟机监控器指定的虚拟机事件、异常以及中断并传输截获的内存获取控制指令和虚拟机中内存内容到虚拟化内存获取模块
如图1所示,所述的虚拟化内存获取模块包括:内存获取控制子模块、内存内容获取子模块、结果输出子模块,其中:内存获取控制子模块负责监听用户指令,反馈内存获取状态。内存内容获取子模块用于接收虚拟机中内存内容信息并控制虚拟机物理内存到真实物理内存的映射和权限管理。结果输出子模块负责将接收到的内存数据保存到外部设备和指定内存区域。
本实施例内部的后启动虚拟机模块和虚拟化内存获取模块的构建和运行过程如图3所示。在本实施例中使用Intel VT技术,采用的嵌套页表为EPT页表,虚拟化内存获取模块扩展虚拟机监控器中的虚拟机写CR3寄存器事件监控函数来获取未被获取的页面每次获取页面内容时,均采用批量获取临近8个页面的方式。
在操作系统启动完成之后插入虚拟机监控器层从而将物理机器在运行时被转换为虚拟机主机处的虚拟机。而如图3所示,通过如前文所示的虚拟机加载方法,可以完成物理机器到虚拟机的转换而不致招致显著的停机时间。从而达到易于部署的目的并为随后的内存内容准确获取提供基础。图4所示能够确保虚拟机任何内存内容在更新到获取区域之前,写入操作因为违反写保护而被拦截从而陷入到虚拟机监控器,从而任何被本系统捕捉和输出到外部设备或指定的内存区域中的内容都是写入发生前的内容,以此来保证内存内容的获取准确性。
本实施例通过以下方式进行工作:
步骤一,在操作系统启动完成后,以驱动的形式加载本系统,在特权模式下检测硬件是否支持硬件虚拟化技术并为每个CPU执行后续虚拟化监控器安装工作。
步骤二,保存当前物理机器运行状态。即保存通用硬件寄存器内容,然后从操作系统中分配内存用于虚拟机监控器的堆栈和VMXON、VMCS等关键结构体的使用。之后执行VMXON指令,进入虚拟机特权模式。
步骤三,通过解析内核数据结构的方法获得操作系统关于已安装物理内存的地址范围和输入输出设备在内存地址空间中的映射范围。以此信息为基础对EPT构建全等页表(也可不询问而对全部地址空间范围对EPT构建全等页表)。随后在VMCS中启用对EPT的支持并且保存EPT页表的起始位置到VMCS中的EPT Pointer域中,使得在启动虚拟机后硬件自动完成从虚拟机虚拟地址到虚拟机物理地址到真实物理地址的翻译。
步骤四,配置虚拟机环境,主要表现为设置VMCS结构体,填入虚拟机监控器和虚拟机接下来运行时需要的GDT、IDT、堆栈以及虚拟机监控器要监控的虚拟机内异常、中断和事件,包括虚拟机写CR3寄存器事件、中断处理事件和EPT缺页异常。其中特别注意虚拟机接下来运行的指令为后启动虚拟机模块初始化继续执行的指令。
步骤五,在虚拟机监控器中注册已实现的虚拟机写CR3寄存器事件处理函数、中断处理函数和EPT缺页异常处理函数,使得陷入后可根据相应的陷入原因来找到正确的处理函数。
步骤六,开启虚拟机,回到虚拟机模式。至此原来位于保护模式下的本地系统被置于虚拟机当中继续运行。在多核模式下,回到步骤二为下一个CPU安装虚拟机监控器。
通过以上步骤安装的虚拟机监控器可对之后用户发出的获取内存内容的命令进行响应。当之后某一时刻需要获取内存内容时,具体过程如下:
步骤1,用户使用位于虚拟机内用户态或者内核态的程序/模块发出可被虚拟机监控器拦截的特权指令,通知本系统开始获取目标操作系统的物理内存内容。
步骤2、在接收到获取内存内容的命令后,CPU陷入到root模式,虚拟机监控器接管控制权。虚拟化内存获取模块的内存获取控制子模块接收到该获取内存内容的命令后指示内存内容获取子模块进行内存获取准备工作。虚拟化内存获取模块的内存内容获取子模块在EPT上设置目标操作系统的物理内存空间为不可写。
步骤3、虚拟化内存获取模块请求虚拟机监控器将处理器控制权重新转交到虚拟机,虚拟机中的操作系统和应用程序继续运行。
步骤4、支持硬件虚拟化的处理器在虚拟机中尝试写虚拟机任何物理内存时陷入到虚拟机模式,并且尚未修改目标内存内容。在虚拟机监控器中,虚拟机事件拦截处理子模块的EPT缺页异常处理函数被调用并首先获取该页内容并转发到内存内容获取子模块。内存内容获取子模块将该内容通过结果输出子模块利用操作系统提供的函数保存到外部设备或指定的内存区域中,然启获取该页临近或非临近的0个以上页面内容并利用操作系统提供的函数保存到外部设备或指定的内存区域中。最后内存内容获取子模块将已获得的内存页相应写保护从EPT中去除。回到步骤3。
步骤5、如果虚拟机内发生写CR3寄存器事件并且获取内存内容过程未完成,该事件导致陷入虚拟机管理器中。虚拟机事件拦截处理子模块调用虚拟机写CR3寄存器事件的处理函数,该函数会帮助虚拟机填充新值到虚拟机的CR3寄存器中,此外,该函数会查找尚未被获取的1个或多个页,获取这些页面的内容并转发到内存内容获取子模块。内存内容获取子模块利用操作系统提供的函数将该内容通过结果输出子模块保存到外部设备或指定的内存区域中。最后内存内容获取子模块将已获得的内存页相应写保护从EPT中去除。回到步骤3。如果已经没有尚未被获取的页面,则获取内存内容过程结束,回到步骤3。
步骤6、用户到指定的外部设备或内存区域中获取系统得到的内存内容结果,至此获取内存内容过程完全结束。
后启动虚拟机模块具体卸载实施例如下:
步骤a,卸载后启动虚拟机的命令从虚拟机中对每一CPU发出。在接收到卸载后启动虚拟机的命令后,虚拟机监控器接管控制权。虚拟机监控器所在的CPU的通用寄存器内容被保存,之后专门的卸载虚拟机监控器函数被调用。
步骤b、任何一个CPU卸载后启动虚拟机过程如下:
1)分配数据内存,在其中写入汇编指令,使得将虚拟机中该CPU的其余关键寄存器内客从VMCS中读出,然后在虚拟机监控器中写入CPU真实寄存器。包括但不限于CR0、CR3、CR4、EFLAGS\RFLAGS、各个段寄存器、IDTR、GDTR等。需注意最后的返回地址为原来虚拟机中发出关闭指令程序的下一条指令。
2)设置关键寄存器(CR4寄存器),关闭虚拟机模式。
3)执行该数据内存包含的代码。
步骤c、当所有CPU上的虚拟机监控器卸载后,调用操作系统函数释放创建虚拟机监控器过程中所申请的内存,卸载虚拟机监控器所在操作系统驱动。
通过以上步骤,系统可以确保获得的内存内容结果是用户指定开始时刻的内存内容的准确结果,同时无论是在安装/卸载系统还是在获取内存内容过程当中均无需重新启动或暂停目标系统。
Claims (10)
1.一种计算机内存数据准确采集系统,其特征在于,包括:后启动虚拟机模块和虚拟化内存获取模块,其中:虚拟化内存获取模块访问目标操作系统获得物理内存地址范围,后启动虚拟机模块与硬件系统相连接并驱动支持硬件虚拟化技术的硬件平台完成构建或卸载后启动虚拟机监控器和虚拟机、加载或卸载虚拟化内存获取模块并驱动CPU拦截虚拟机内发生的后启动虚拟机监控器指定的虚拟机事件、异常以及中断,后启动虚拟机模块与虚拟化内存获取模块相连接并传输内存获取控制指令和虚拟机中内存内容信息,虚拟化内存获取模块与后启动虚拟机模块相连接并接受内存获取控制指令和虚拟机中内存内容信息;
所述的构建或卸载后启动虚拟机监控器和虚拟机、加载或卸载虚拟化内存获取模块中:
构建后启动虚拟机监控器和虚拟机包括以下步骤:
步骤1.1,利用操作系统内核态、用户态或内核态混合用户态的API调用,来实现在各个CPU核心上建立后启动虚拟机监控器,从而适用于多核硬件系统;
步骤1.2,保存寄存器内容,分配内存空间用于后启动虚拟机监控器运行使用,包括但不限于堆栈空间,设置关键寄存器,配置辅助结构体并且修改相应MSR的内容启用硬件虚拟化支持;
步骤1.3,进行对Intel VT技术中的VMCS或AMD SVM的VMCB的配置,来建立虚拟机运行环境并将本地系统装入稍后运行的唯一存在的虚拟机中,同时配置后启动虚拟机监控器环境和需要其处理的发生在虚拟机中的特殊事件并实现相应处理函数,在VMCS结构体中指定虚拟机启动后运行的第一条指令为后启动虚拟机模块初始化继续执行的指令;
步骤1.4,启动虚拟机并将处理器控制权交给虚拟机,使用配置的虚拟机运行环境并开启虚拟机运行;
步骤1.5,支持硬件虚拟化的处理器硬件会根据前述VMCS的配置信息,开始监控和拦截需要后启动虚拟机监控器处理的行为,保存虚拟机状态到VMCS以及后启动虚拟机监控器的指定内存区域并调用指定的处理函数进行处理;
步骤1.6,后启动虚拟机监控器完成对陷入事件的处理后,将处理器控制权重新转交到虚拟机,虚拟机中的操作系统继续运行,回到步骤1.5并循环执行;
卸载已构建的后启动虚拟机监控器和虚拟机包括以下步骤:
步骤a、卸载后启动虚拟机监控器的命令从虚拟机中对每个CPU发出,在接收到卸载后启动虚拟机监控器的命令后,后启动虚拟机监控器接管控制权,后启动虚拟机监控器所在的CPU的通用寄存器内容被保存,之后专门的卸载后启动虚拟机监控器函数被调用;
步骤b、任何一个CPU卸载后启动虚拟机监控器过程如下:
1)将虚拟机中该CPU的其余关键寄存器内容从VMCS中读出,然后在后启动虚拟机监控器中写入CPU真实寄存器,使得后启动虚拟机监控器中的环境和虚拟机中环境完全相同;
2)设置关键寄存器,关闭虚拟机模式;
步骤c、当所有CPU上的后启动虚拟机监控器卸载后,调用操作系统函数释放创建后启动虚拟机监控器过程中所申请的内存,卸载后启动虚拟机监控器所在操作系统驱动;
加载虚拟化内存获取模块包括以下步骤:
步骤2.1,在后启动虚拟机模块构建后启动虚拟机监控器和虚拟机过程的步骤1.3之前开始加载虚拟化内存获取模块;
步骤2.2,获取虚拟机物理内存地址和输入输出设备占用内存物理地址的范围,依此对包括但不限于Intel VT技术中的嵌套页表技术或AMD SVM的快速虚拟化索引构建全等页表;
步骤2.3,在后启动虚拟机模块构建后启动虚拟机监控器和虚拟机过程的步骤1.3之中注册构建的嵌套页表的物理地址和嵌套页面异常处理函数,修改虚拟机写CR3寄存器事件的处理函数,使虚拟机在每次写CR3寄存器并且需要获取内存内容时执行获取内存方法;
卸载已加载的虚拟化内存获取模块包括以下步骤:
步骤 3.1,在后启动虚拟机模块卸载后启动虚拟机监控器和虚拟机过程的步骤a之前开始卸载虚拟化内存获取模块;
步骤 3.2,调用操作系统函数,释放为存储嵌套页表相关的页面结构所申请的内存;
步骤 3.3,删除VMCS中嵌套页表的页表指针,清空VMCS中对嵌套页表的使用设置位。
2.根据权利要求1所述的计算机内存数据准确采集系统,其特征是,所述的后启动虚拟机模块包括:虚拟机创建和卸载子模块、虚拟机事件拦截处理子模块,其中:虚拟机创建和卸载子模块驱动支持硬件虚拟化技术的硬件平台完成构建或卸载后启动虚拟机监控器和虚拟机,以及加载/卸载虚拟化内存获取模块,虚拟机事件拦截处理子模块接收并处理硬件拦截到的虚拟机内发生的后启动虚拟机监控器指定的虚拟机事件、异常以及中断并传输截获的内存获取控制指令和虚拟机中内存内容到虚拟化内存获取模块。
3.根据权利要求1或2所述的计算机内存数据准确采集系统,其特征是,所述的虚拟化内存获取模块包括:内存获取控制子模块、内存内容获取子模块、结果输出子模块,其中:内存获取控制子模块负责监听用户指令,反馈内存获取状态,内存内容获取子模块用于接收虚拟机中内存内容信息并控制虚拟机物理内存到真实物理内存的映射和权限管理,结果输出子模块负责利用操作系统提供的函数将接收到的内存数据保存到外部设备或指定的内存区域。
4.一种根据上述任一权利要求所述系统的信息获取方法,其特征在于,通过后启动虚拟机模块构建后启动虚拟机监控器和虚拟机,将目标操作系统所在的物理机器在运行时转换为虚拟机主机处的虚拟机并提供虚拟机事件、异常以及中断拦截监测功能,虚拟化内存获取模块控制虚拟机物理内存到真实物理内存的映射和权限管理不招致显著的停机时间地完成对正在改写内存区域的识别和准确获得相应和邻近或非邻近位置原始内存数据。
5.根据权利要求4所述的信息获取方法,其特征是,所述方法具体过程为:在操作系统启动完成后,通过加载驱动的方法由后启动虚拟机模块构建后启动虚拟机监控器和虚拟机并由虚拟化内存获取模块对本地系统物理内存地址范围进行登记并在需要准确获取计算机内存数据的时刻,客户发出内存获取指令,虚拟化内存获取模块在收到由后启动虚拟机模块转交的指令后开始获得相应位置原来内存数据并输出到外部设备或指定内存区域中,在获取内存内容任务完成或需要卸载虚拟化内存获取模块时,后启动虚拟机模块依次卸载已构建的后启动虚拟机监控器和虚拟机并卸载已加载的虚拟化内存获取模块,将目标操作系统所在的虚拟机在运行时转换为物理机器并卸载虚拟机事件、异常以及中断拦截监测功能。
6.根据权利要求4或5所述的信息获取方法,其特征是,所述的后启动虚拟机模块构建后启动虚拟机监控器和虚拟机是指:
步骤1.1,利用操作系统内核态、用户态或内核态混合用户态的API调用,来实现在各个CPU核心上建立后启动虚拟机监控器,从而适用于多核硬件系统;
步骤1.2,保存寄存器内容,分配内存空间用于后启动虚拟机监控器运行使用,包括但不限于堆栈空间,设置关键寄存器,配置Intel VT技术中的VMXON结构体并且修改相应MSR的内容启用硬件虚拟化支持;
步骤1.3,进行对Intel VT技术中的VMCS或AMD SVM的VMCB的配置,来建立虚拟机运行环境并将本地系统装入稍后运行的唯一存在的虚拟机中,同时配置后启动虚拟机监控器环境和需要其处理的发生在虚拟机中的特殊事件并实现相应处理函数,在VMCS结构体中指定虚拟机启动后运行的第一条指令为后启动虚拟机模块初始化继续执行的指令;
步骤1.4,启动虚拟机并将处理器控制权交给虚拟机,使用配置的虚拟机运行环境并开启虚拟机运行;
步骤1.5,支持硬件虚拟化的处理器硬件会根据前述VMCS的配置信息,开始监控和拦截需要后启动虚拟机监控器处理的行为,保存虚拟机状态到VMCS以及后启动虚拟机监控器的指定内存区域并调用指定的处理函数进行处理;
步骤1.6,后启动虚拟机监控器完成对陷入事件的处理后,将处理器控制权重新转交到虚拟机,虚拟机中的操作系统继续运行,回到步骤1.5并循环执行。
7.根据权利要求5所述的信息获取方法,其特征是,所述的后启动虚拟机模块依次卸载已构建的后启动虚拟机监控器和虚拟机是指:
步骤a、卸载后启动虚拟机监控器的命令从虚拟机中对每个CPU发出,在接收到卸载后启动虚拟机监控器的命令后,后启动虚拟机监控器接管控制权,后启动虚拟机监控器所在的CPU的通用寄存器内容被保存,之后专门的卸载后启动虚拟机监控器函数被调用;
步骤b、任何一个CPU卸载后启动虚拟机监控器过程如下:
1)将虚拟机中该CPU的其余关键寄存器内容从VMCS中读出,然后在后启动虚拟机监控器中写入CPU真实寄存器,使得后启动虚拟机监控器中的环境和虚拟机中环境完全相同;
2)设置关键寄存器,关闭虚拟机模式;
步骤c、当所有CPU上的后启动虚拟机监控器卸载后,调用操作系统函数释放创建后启动虚拟机监控器过程中所申请的内存,卸载后启动虚拟机监控器所在操作系统驱动。
8.根据权利要求4或5所述的信息获取方法,其特征是,所述的虚拟化内存获取模块通过以下方式进行加载:
步骤2.1,在后启动虚拟机模块构建后启动虚拟机监控器和虚拟机过程的步骤1.3之前开始加载虚拟化内存获取模块;
步骤2.2,获取虚拟机物理内存地址和输入输出设备占用内存物理地址的范围,依此对Intel VT技术中的嵌套页表技术或AMD SVM的快速虚拟化索引构建全等页表;
步骤2.3,在后启动虚拟机模块构建后启动虚拟机监控器和虚拟机过程的步骤1.3之中注册构建的嵌套页表的物理地址和嵌套页面异常处理函数,修改虚拟机写CR3寄存器事件的处理函数,使虚拟机在每次写CR3寄存器并且需要获取内存内容时执行获取内存方法。
9.根据权利要求5所述的信息获取方法,其特征是,所述的卸载已加载的虚拟化内存获取模块是指:
步骤 3.1,在后启动虚拟机模块卸载后启动虚拟机监控器和虚拟机过程的步骤a之前开始卸载虚拟化内存获取模块;
步骤 3.2,调用操作系统函数,释放为存储嵌套页表相关的页面结构所申请的内存;
步骤 3.3,删除VMCS中嵌套页表的页表指针,清空VMCS中对嵌套页表的使用设置位。
10.根据权利要求5所述的信息获取方法,其特征是,所述的获得相应位置原来内存数据是指:
步骤4.1,在接收到获取内存内容的命令后,后启动虚拟机监控器接管控制权,虚拟化内存获取模块的内存获取控制子模块接收到该获取内存内容的命令后指示内存内容获取子模块进行内存获取准备工作,虚拟化内存获取模块的内存内容获取子模块在嵌套页表中指向虚拟机待获取物理内存地址范围的页表项上去掉写权限位,使得虚拟机物理内存不可写;
步骤4.2,设置权限完成后,虚拟化内存获取模块请求后启动虚拟机监控器将处理器控制权重新转交到虚拟机,虚拟机中的操作系统和应用程序继续运行;
步骤4.3,支持硬件虚拟化的处理器在虚拟机中尝试写虚拟机任何物理内存时会陷入后启动虚拟机监控器中并且尚未修改目标内存内容;
步骤4.4,在后启动虚拟机监控器中,虚拟机事件拦截处理子模块的嵌套页表处理函数首先获取该页表内容并转发到内存内容获取子模块,内存内容获取子模块将该内容通过结果输出子模块利用操作系统提供的函数或自身实现的功能保存到外部设备或指定的内存区域中,然后获取该页表临近或非临近的0个以上页面内容并通过结果输出子模块利用操作系统提供的函数或自身实现的功能保存到外部设备或指定的内存区域中,接着内存内容获取子模块查找关联到这些页面的嵌套页表页表项,恢复它们的写权限位确保不会重复陷入并更新已获取内存页列表;
步骤4.5,虚拟化内存获取模块请求后启动虚拟机监控器将处理器控制权重新转交到虚拟机,虚拟机中的操作系统和应用程序继续运行;
步骤4.6,虚拟机发生写CR3寄存器事件时,该事件导致陷入后启动虚拟机监控器中,虚拟机事件拦截处理子模块调用虚拟机写CR3寄存器事件的处理函数;
步骤4.7,虚拟机写CR3寄存器事件的的处理函数首先处理写CR3寄存器事件,然后同步骤4.4和步骤4.5,其中步骤4.4为查找尚未被获取的1个或多个页,获取这些页的内容并通过结果输出子模块利用操作系统提供的函数或自身实现的功能保存到外部设备或指定的内存区域中;
步骤4.8,当虚拟机中待获取物理内存地址范围上的所有内存内容获取完成后,获取过程结束,处理器控制权重新转交到虚拟机,虚拟机中的操作系统和应用程序继续运行。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011101900865A CN102231138B (zh) | 2011-07-08 | 2011-07-08 | 计算机内存数据准确采集系统及获取方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011101900865A CN102231138B (zh) | 2011-07-08 | 2011-07-08 | 计算机内存数据准确采集系统及获取方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102231138A CN102231138A (zh) | 2011-11-02 |
CN102231138B true CN102231138B (zh) | 2013-07-03 |
Family
ID=44843702
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2011101900865A Active CN102231138B (zh) | 2011-07-08 | 2011-07-08 | 计算机内存数据准确采集系统及获取方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102231138B (zh) |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102567217B (zh) * | 2012-01-04 | 2014-12-24 | 北京航空航天大学 | 一种面向mips平台的内存虚拟化方法 |
DE102012201225A1 (de) * | 2012-01-27 | 2013-08-01 | Continental Automotive Gmbh | Rechnersystem |
CN102917246B (zh) * | 2012-08-31 | 2015-01-14 | 北京视博云科技有限公司 | 一种基于虚拟机的应用数据提供方法、装置及系统 |
CN103870297B (zh) * | 2012-12-14 | 2016-12-21 | 北京华胜天成科技股份有限公司 | 云计算环境中虚拟机的性能数据采集系统和方法 |
CN103902310B (zh) * | 2012-12-27 | 2017-04-26 | 赛恩倍吉科技顾问(深圳)有限公司 | 虚拟机启动排程系统及方法 |
CN104182269B (zh) * | 2014-08-12 | 2017-04-26 | 山东省计算中心(国家超级计算济南中心) | 一种kvm虚拟机的物理内存取证方法 |
CN104182691B (zh) * | 2014-08-22 | 2017-07-21 | 国家电网公司 | 数据保密方法及装置 |
US9715453B2 (en) * | 2014-12-11 | 2017-07-25 | Intel Corporation | Computing method and apparatus with persistent memory |
WO2018103022A1 (zh) * | 2016-12-07 | 2018-06-14 | 深圳前海达闼云端智能科技有限公司 | 帧缓存实现方法、装置、电子设备和计算机程序产品 |
CN107450962B (zh) * | 2017-07-03 | 2020-04-24 | 北京东土科技股份有限公司 | 一种虚拟化运行环境下的异常处理方法、装置及系统 |
JP6994358B2 (ja) * | 2017-11-07 | 2022-01-14 | シャープ株式会社 | 再起動制御システム |
CN109241769B (zh) * | 2018-08-09 | 2020-05-15 | 福州瑞芯微电子股份有限公司 | 一种电子设备隐私安全预警方法和系统 |
CN109634721B (zh) * | 2018-12-17 | 2023-10-10 | 广东浪潮大数据研究有限公司 | 一种虚拟机与主机的启动通信方法及相关装置 |
CN112748987B (zh) * | 2021-01-19 | 2021-08-06 | 北京智仁智信安全技术有限公司 | 一种基于虚拟主机的行为安全处理方法及设备 |
CN116541250A (zh) * | 2023-06-19 | 2023-08-04 | 深圳富联富桂精密工业有限公司 | 监控方法及电子设备 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102096786A (zh) * | 2011-03-04 | 2011-06-15 | 上海交通大学 | 基于硬件虚拟化的跨平台安全保护系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DK2462507T3 (da) * | 2009-08-04 | 2019-09-23 | Univ Carnegie Mellon | Fremgangsmåder og apparater til brugerverificerbar sikker sti i tilstedeværelsen af malware |
-
2011
- 2011-07-08 CN CN2011101900865A patent/CN102231138B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102096786A (zh) * | 2011-03-04 | 2011-06-15 | 上海交通大学 | 基于硬件虚拟化的跨平台安全保护系统 |
Non-Patent Citations (3)
Title |
---|
Live and Trustworthy Forensic Analysis of Commodity Production Systems;Lorenzo Martignoni等;《Lecture notes in Computer Science》;20101231;第6307卷;全文 * |
Lorenzo Martignoni等.Live and Trustworthy Forensic Analysis of Commodity Production Systems.《Lecture notes in Computer Science》.2010,第6307卷全文. |
于淼.NewBluePill:深入理解硬件虚拟机.《NewBluePill:深入理解硬件虚拟机》.清华大学出版社,2011,(第一版),全文. * |
Also Published As
Publication number | Publication date |
---|---|
CN102231138A (zh) | 2011-11-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102231138B (zh) | 计算机内存数据准确采集系统及获取方法 | |
EP3652640B1 (en) | Method for dirty-page tracking and full memory mirroring redundancy in a fault-tolerant server | |
US10859289B2 (en) | Generating and using checkpoints in a virtual computer system | |
US8996468B1 (en) | Block status mapping system for reducing virtual machine backup storage | |
US9563513B2 (en) | O(1) virtual machine (VM) snapshot management | |
CN101681269B (zh) | 多虚拟化技术的自适应动态选择与应用 | |
Xiong et al. | Libvmi: a library for bridging the semantic gap between guest OS and VMM | |
US10521354B2 (en) | Computing apparatus and method with persistent memory | |
US20080022032A1 (en) | Concurrent virtual machine snapshots and restore | |
US20110167422A1 (en) | Virtualization apparatus | |
US20080065854A1 (en) | Method and apparatus for accessing physical memory belonging to virtual machines from a user level monitor | |
US20140297979A1 (en) | Live migration of virtual disks | |
US8881144B1 (en) | Systems and methods for reclaiming storage space from virtual machine disk images | |
US20160239321A1 (en) | Supporting multiple operating system environments in computing device without contents conversion | |
CN105511941B (zh) | 辅助计算机系统中多个管理程序的联合操作的系统和方法 | |
CN106020932B (zh) | 一种用于kvm虚拟机系统的安全防护方法及系统 | |
US7840790B1 (en) | Method and system for providing device drivers in a virtualization system | |
US7539986B2 (en) | Method for guest operating system integrity validation | |
US10565141B1 (en) | Systems and methods for hiding operating system kernel data in system management mode memory to thwart user mode side-channel attacks | |
US9880872B2 (en) | Post-copy based live virtual machines migration via speculative execution and pre-paging | |
US7546600B2 (en) | Method of assigning virtual process identifier to process within process domain | |
JP2005122334A (ja) | メモリダンプ方法、メモリダンプ用プログラム及び仮想計算機システム | |
US20200201618A1 (en) | Operating system update | |
EP3850479B1 (en) | Virtual machine update while keeping devices attached to the virtual machine | |
GB2537760A (en) | Computer, and resource scheduling method using hypervisor |
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 |