虚拟机间安全通信方法
技术领域
本发明涉及虚拟化环境,尤其涉及一种在虚拟化环境下虚拟机间安全通信方法。
背景技术
虚拟化环境下同一物理机上可同时存在多个虚拟机。他们之间的通信可分为两类,包括特权虚拟机和普通虚拟机间的通信,及普通虚拟机和普通虚拟机之间的通信。目前比较普遍的特权虚拟机和普通虚拟机之间的通信方式主要是半虚拟化下的前后端通信方式和全虚拟化下的仿真设备模型方式。普通虚拟机不能直接和同一物理机上的其他非特权虚拟机进行通信,而必须通过特权虚拟机进行中转,这种情形造成了同一物理机上的非特权虚拟机间通信开销非常高。目前,也有一些针对上述通信方式的改进方法,比如利用同一物理机上的虚拟机共享物理资源的特性优化普通虚拟机间的通信方式。但上述各种虚拟机间通信方法中普通虚拟机的安全性均依赖于特权虚拟机的安全性,即虚拟化环境下安全可信基过大。并且在这些通信方式中,对共享内存的安全保障仅仅依靠授权表来保证,这在一定程度上也降低了虚拟机之间通信的安全性。
发明内容
本发明的目的在于提高普通虚拟机间通信的安全性。所述虚拟机内核模块既可以为Linux内核模块,也可以为Windows内核模块。所述虚拟机环境为Xen支持的虚拟化环境。
本发明公开一种虚拟机间安全通信方法,包括:
步骤1,Xen创建虚拟机时,为每台虚拟机分配两页内存及一个未使用的事件通道端口号,填充到共享信息页新增的变量中;
步骤2,创建虚拟机并启动,虚拟机装载内核模块,映射共享信息页以及所述两页内存,虚拟机之间通过内核模块将策略写入所述两页内存中,通过设备接口配置信息进行通信。
所述的虚拟机间安全通信方法,所述步骤2还包括:
步骤21,Xen创建虚拟机A并启动,A中装载内核模块:映射共享信息页及所述两页内存;为虚拟机A所分配的事件通道端口绑定处理函数handler;并输出设备接口;
步骤22,Xen创建虚拟机B,B启动完毕后,其中装载内核模块,内核模块的具体流程同步骤21。
所述的虚拟机间安全通信方法,所述步骤2还包括:
步骤31,A中应用通过设备接口配置与B通信的安全策略,并通过内核模块将策略写入所述两页内存中的其中一页内,之后应用等待读设备接口;
步骤32,B中应用分配一页内存后通过设备接口,其虚拟页框号为VFNb,请求内核模块与A建立通信通道,内核模块通过新增的超级调用向Xen请求与A建立连接。
所述的虚拟机间安全通信方法,所述步骤32还包括:
步骤41,Xen查阅步骤31中提供安全策略的内存页对此请求进行验证,若未通过则返回错误;
步骤42,Xen为B分配未使用的事件通道端口号pnewb;之后将B的虚拟机id,VFNb,pnewb写入步骤31中为虚拟机A分配的剩余一页内存中,之后返回pnewb给B中的内核模块及应用;
步骤43,B中应用等待读设备文件,等待pnewb上事件的到来;
步骤44,Xen给A的事件通道端口Ap发送通知。
所述的虚拟机间安全通信方法,所述步骤2还包括:
步骤51,收到事件通知后,A中的handler执行:读取内存页中的请求信息;为虚拟机A分配本地未使用的事件通道端口pnewa;并且映射VFNb;让pnewa与pnewb进行域间绑定;返回端口号pnewa及虚拟地址给A中的应用;
步骤52,对于小数据由B往VFNb中直接写入数据并通过域间事件通道通知A,A中应用通过映射后的虚拟地址读出数据;对于大数据,由B往VFNb中写入数据的地址并通过域间事件通道通知A,A中应用通过映射后的虚拟地址读出数据的地址,进而根据数据的地址读出数据。小数据指的是能在一页(通常是4K)内放下的数据,当然除了数据之外还需要放些描述数据的信息,所以小数据最好能小于1K。
本发明的有益效果为:
本发明实现了普通虚拟机间安全通信的方法,通过该方法避免了普通虚拟机间通信绕经特权虚拟机所带来的可信基过大问题,而且通过添加安全策略页增强了普通虚拟机间通信的安全性。
附图说明
图1为虚拟机间安全通信体系结构图;
图2为虚拟机间安全通信流程图。
具体实施方式
下面给出本发明的具体实施方式,结合附图对本发明做出了详细描述。
本发明的目的在于提高普通虚拟机间通信的安全性。虚拟机间安全通信的体系结构如图1所示。所述虚拟机内核模块既可以为Linux内核模块,也可以为Windows内核模块。所述虚拟机环境为Xen支持的虚拟化环境。
具体来说,如图2所示,本发明针对虚拟机间安全通信方法包括下列步骤:
步骤1,在Xen的共享信息页数据结构shared_info里添加两个机器页框号mfn1,mfn2成员变量和事件端口号成员变量port;在Xen中添加超级调用实现机器页框号到物理页框号的映射;在Xen中添加超级调用实现向虚拟机发送建立连接请求;Xen在创建虚拟机的过程中为每台虚拟机分配两页内存(机器页框号为m1,m2)及一个未使用事件通道端口号p,分别填充到步骤1中shared_info新增的变量中。
步骤2,虚拟机A启动完毕后,A中装载内核模块:映射shared_info页;调用步骤1提供的超级调用映射Xen为虚拟机A所分配的两页内存Am1,Am2;为虚拟机A所分配的事件通道端口Ap绑定处理函数handler;并向应用层输出设备接口/dev/privcmd。
步骤3,虚拟机B启动完毕后,B中装载内核模块,具体操作同步骤2。
以下步骤假设B需要同A通信:
步骤4,A中应用通过步骤2提供的设备接口配置与B通信的安全策略并通过内核模块将策略写到Am2中,之后应用等待读设备接口/dev/privcmd。
步骤5,B中应用分配一页内存(虚拟页框号为VFNb)后通过设备接口,请求内核模块与A建立通信通道,内核模块通过调用步骤1中提供的超级调用向Xen请求与A建立连接,具体操作为:
5.1,Xen查阅Am2对此请求进行验证,若未通过则返回错误。
5.2,Xen为B分配未使用的事件通道端口号pnewb;之后将B的虚拟机id号domid,VFNb,pnewb写入Am1;之后返回pnewb给B中的内核模块及应用。
5.3,B中应用读等待设备文件,等待pnewb上事件的到来。
5.4,Xen给A的端口Ap发送通知。
步骤6,收到事件通知后,A中的handler执行:读取Am1中的内容;分配本地未使用事件通道端口pnewa;映射VFNb;域间绑定pnewb;返回端口号及虚拟地址给A中的应用。
步骤7,对于小于1k的数据由B往VFNb中直接写入数据并通过域间事件通道通知A,A中应用通过映射后的虚拟地址读出数据;对于大于1k的数据,由B往VFNb中写入数据的地址并通过域间事件通道通知A,A中应用通过映射后的虚拟地址读出数据的地址,进而根据地址读出数据。
本发明实现了普通虚拟机间安全通信的方法,通过该方法避免了普通虚拟机间通信绕经特权虚拟机所带来的可信基过大问题,而且通过添加安全策略页增强了普通虚拟机间通信的安全性。
本领域的技术人员在不脱离权利要求书确定的本发明的精神和范围的条件下,还可以对以上内容进行各种各样的修改。因此本发明的范围并不仅限于以上的说明,而是由权利要求书的范围来确定的。