一种实现虚拟机与管理域进程间通信的方法
【技术领域】
[0001]本发明涉及虚拟机技术领域,尤其涉及一种实现虚拟机与管理域进程间通信的方法。
【背景技术】
[0002]在虚拟化技术中,虚拟化引擎在物理机上创建并运行多个虚拟机。根据虚拟化引擎架构的不同,通常将虚拟化引擎分为两类:类型一(Type One)和类型二(Type Two)。其中类型一虚拟化引擎直接运行在硬件上,虚拟化引擎会创建一个特权虚拟机,该虚拟机对外提供整个虚拟化环境的操作接口并向虚拟化引擎发出相关指令;类型二虚拟化引擎需要运行在已有的操作系统上,不能直接运行在硬件上,这类虚拟化引擎在所依赖操作系统中以内核模块或进程的方式存在,对这类虚拟化引擎的相关操作在其所依赖的操作系统中实现。本发明中的“管理域”是指类型一虚拟化中的特权虚拟机或类型二中虚拟化引擎依赖的操作系统。
[0003]随着虚拟化和云计算技术的发展,虚拟机在IT系统中发挥着越来越重要的作用。同时,为了方便系统的管理等相关操作,需要在管理域和控制虚拟机之间建立进程间通信信道。
[0004]现有的虚拟化环境中,实现虚拟机和管理域进程间通信的方式主要有以下两种:
1.网络通信,既虚拟机与管理域进程间建立直接的网络连接。这种通信方式与非虚拟化环境下的通信方式一致。该类通信方式要求管理域和虚拟机间有联通网络。但是在虚拟化环境下,考虑到安全等因素,在很多场景下管理域和虚拟机间的网络是隔离的。同时,由于该通信方式需要使用网络资源,会被现有的防火墙等设备拦截,同时很容易被运行在虚拟机或管理域上的程序发现。
[0005]2.设备通信,既利用加载在虚拟机中的虚拟设备实现通信。这类技术通常由虚拟化引擎给虚拟机添加一个虚拟设备。管理域直接操控该设备内部数据,同时虚拟机中的进程与该设备进行通信,从而建立一个由管理域到虚拟机的间接的进程间通信机制。这种通信方式相比上一种方法不需要依赖网络资源。但是由于这类通信方式需要在虚拟机中添加一个设备,这种操作也可以被其它安全软件或是恶意软件感知并拦截。同时,一些虚拟化引擎没有对外提供虚拟机设备增添以及虚拟设备数据修改的接口,这使得该方法使用范围受到很大限制。
【发明内容】
本发明针对现有技术的不足,提出一种实现虚拟机与管理域进程间通信的方法,该方法可以在没有联通网络的情况下,实现安全软件与恶意软件无法感知或管控的虚拟机和管理域的进程间通信。
[0006]一种实现虚拟机与管理域进程间通信的方法,包括如下步骤:
a.获取需要分析程序的符号信息; b.约定待通信进程名称、通信使用协议、魔数以及标记位置;
C.为虚拟机中需要通信的进程开辟一段独立内存空间,作为通信缓存区;在所述独立内存空间的标记位置写入b步骤约定的魔数,之后虚拟机轮询通信缓存区,根据约定通信协议读写所述通信缓存区;
d.管理域进程利用虚拟化引擎或操作系统提供的程序接口获取虚拟机内存和寄存器原始数据;
e.管理域进程利用符号信息分析获取的虚拟机内存和寄存器信息,从原始数据中提取出虚拟机操作系统或应用程序中变量的数值、结构体内容以及函数地址;
f.管理域进程在虚拟机语义信息中找到需要通信进程的信息的数据结构,保存所述数据结构,搜索所述数据结构,找到用于描述所述进程独立内存空间信息的数据结构;
g.管理域进程根据f步骤中获取的数据结构,搜索所述进程中每个独立内存空间,检查每个独立内存空间内标记位置是否有魔数;如果标记位置有魔数,则判定所述独立内存空间为通信缓存区,利用所述通信缓存区和约定的通信协议读写数据。
[0007]进一步地,所述的步骤a中,所述符号信息是指可执行文件中变量、结构体或函数与内存地址或可执行文件偏移地址的对应关系。
[0008]进一步地,所述的步骤b中,所述通信使用协议为任意公开或私有的通信协议;所述魔数是指一个或多个事先定义好的数值,所述标记位置是指用于写入和读取魔数的位置,用于标记某一独立内存空间是否为通信用缓存区。
[0009]进一步地,所述的步骤c中,在Windows操作系统中,所述每个独立内存空间用一个VAD结构体标识,在Linux操作系统中,所述每个独立内存空间用一个VMA结构体标识。所述结构体名称随着系统版本更迭发生变化。
[0010]进一步地,所述的步骤f中,在Windows操作系统中,所述数据结构为eprocess结构体中vadroot字段指向的结构体,在Linux操作系统中,所述数据结构为task_struct结构体中mm字段指向结构体;所述f步骤中获取的进程信息数据结构是某个或某几个进程的结构体,也可以是当前所有进程的结构体;如果是当前所有进程的结构体,则无需约定进程名称。所述结构体名称随着系统版本更迭发生变化。
[0011 ] 进一步地,所述步骤a、所述步骤b、所述步骤c及所述步骤d四个步骤的顺序在步骤e之前进行任意更换步骤顺序。
[0012]本发明的有益效果在于:该发明是在管理域中直接获取虚拟机中的内存和相关寄存器的数据并对这些数据进行分析,不要与虚拟机建立网络连接,也不需要在虚拟机中进行任何操作;这使得本发明可以在没有联通网络的情况下,实现安全软件与恶意软件无法感知或管控的虚拟机和管理域的进程间通信。
【附图说明】
[0013]图1是本发明实施例一的方法流程图。
[0014]图2是本发明的实施例二的方法流程图。
【具体实施方式】
[0015]下面结合说明书附图来说明本发明的【具体实施方式】。
[0016]实施例一
参照图1,示出了根据本申请实施例一的一种实现虚拟机与管理域进程间通信的方法,管理域是指类型一虚拟化中的特权虚拟机,
包括如下步骤:
a.获取需要分析程序的符号信息;
b.约定待通信进程名称、通信使用协议、魔数以及标记位置;
c.为虚拟机中需要通信的进程开辟一段独立内存空间,作为通信缓存区;在所述独立内存空间的标记位置写入b步骤约定的魔数,之后虚拟机轮询通信缓存区,根据约定通信协议读写该缓存区;
d.管理域进程利用类型一虚拟化中的特权虚拟机获取虚拟机内存和寄存器原始数据;
e.管理域进程利用符号信息分析获取的虚拟机内存和寄存器信息,从原始数据中提取出虚拟机操作系统或应用程序中变量的数值、结构体内容以及函数地址;
f.管理域进程在虚拟机语义信息中找到保存需要通信进程信息的数据结构,搜索所述数据结构,找到用于描述所述进程独立内存空间信息的数据结构;
g.管理域进程根据f步骤中获取的数据结构,搜索所述进程中每个独立内存空间,检查每个独立内存空间内标记位置是否有魔数;如果标记位置有魔数,则判定所述独立内存空间为通信缓存区,利用该缓存区和约定的通信协议读写数据。
[0017]进一步地,所述的步骤a中,所述符号信息是指可执行文件中变量、结构体或函数与内存地址或可执行文件偏移地址的对应关系。
[0018]进一步地,所述的步骤b中,所述通信使用协议为任意公开或私有的通信协议;所述魔数是指一个或多个事先定义好的数值,所述标记位置是指用于写入和读取魔数的位置,用于标记某一独立内存空间是否为通信用缓存区。
[0019]进一步地,所述的步骤c中,在Windows操作系统中,所述每个独立内存空间用一个VAD结构体标识,在Linux操作系统中,所述每个独立内存空间用一个VMA结构体标识。所述结构体名称随着系统版本更迭发生变