应用于虚拟化场景的安全通信方法及设备与流程

文档序号:11156213阅读:382来源:国知局
应用于虚拟化场景的安全通信方法及设备与制造工艺

本申请涉及计算机领域,尤其涉及一种应用于虚拟化场景的安全通信方法及设备。



背景技术:

在UNIX/Linux类操作系统下,用户空间进程的网络通信一般是通过本机内核协议栈提供的套接字(socket)抽象接口完成。一般来说是在创建套接字描述符时决定选择使用哪种通信协议。多数情况下,在读写数据前还会执行一系列控制操作以选择网络通信的对端、建立连接以及设置其它参数。

在没有使用虚拟化技术的条件下,限制网络通信的一般性做法要么基于系统调用过滤或者基于报文过滤,再辅以用IPC(Inter Process Communication,进程间通信)机制控制指定进程的网络操作。一种可能的限制子进程进行网络通信的方法如下:

a)父进程先准备好与子进程的进程间通信通道A。

b)父进程创建子进程。

c)限制子进程只能使用收发数据的系统调用。

d)父进程创建若干个套接字描述符,设置好所有通信参数。

e)父进程通过通道A将套接字描述符传递给子进程。

f)子进程使用父进程提供的套接字描述符进行网络通信。

但是虚拟化场景下,以上方式中的父进程通常运行于物理机上,而子进程则通常运行于对应的虚拟机内,而虚拟机和物理机具有各自独立的操作系统内核(Kernel)。由于套接字描述符是由各个操作系统内核独立维护的,因此不能跨越不同的操作系统内核直接传递,因此无法直接实现套接字描述符在父进程和子进程之间的直接传递。此外,由于有些系统调用可能同时用于收发数据或者进行系统控制,因此简单的系统调用过滤无法达到很好的限制效果,系统性能和通信安全性不高。



技术实现要素:

本申请的目的是提供一种应用于虚拟化场景的安全通信方法及设备,以解决现有技术中系统性能和通信安全性不高的问题。

为实现上述目的,本申请提供了一种应用于虚拟化场景的安全通信方法,该方法包括:

在虚拟机的子进程执行系统调用时,判断所述系统调用的属性;

若所述系统调用为数据平面的系统调用,则所述虚拟机的子进程使用物理机的父进程提供的套接字描述符执行所述数据平面的系统调用;

若所述系统调用为控制平面的系统调用,则所述虚拟机的子进程禁止执行所述控制平面的系统调用,请求物理机的父进程执行所述控制平面的系统调用或者返回伪造的系统调用结果。

进一步地,所述虚拟机的子进程使用物理机的父进程提供的套接字描述符执行所述数据平面的系统调用,包括:

虚拟机的子进程获取物理机的父进程提供的物理机内部标识,其中所述物理机内部标识为用于表示基于物理机内核的套接字描述符的标识;

所述虚拟机的子进程根据所述映射关系由所述物理机内部标识获取虚拟机内部标识,其中所述虚拟机内部标识为用于表示基于虚拟机内核的套接字描述符的标识;

所述虚拟机的子进程根据所述虚拟机内部标识获取套接字描述符,并使用该套接字描述符执行所述数据平面的系统调用。

进一步地,所述虚拟机的子进程使用物理机的父进程提供的套接字描述符执行所述数据平面的系统调用,包括:

若所述数据平面的系统调用为读写数据的系统调用,所述虚拟机的子进程在使用物理机的父进程提供的套接字描述符执行所述读写数据的系统调用时,采用批处理的方式将数据由虚拟机的内核空间传输至物理机的内核空间。

进一步地,所述虚拟机的子进程禁止执行所述控制平面的系统调用、请求物理机的父进程执行所述控制平面的系统调用或者返回伪造的系统 调用结果,包括:

若所述控制平面的系统调用为影响全局配置或者导致信息泄露的系统调用,则所述虚拟机的子进程禁止执行所述控制平面的系统调用;否则,所述虚拟机的子进程请求物理机的父进程执行所述控制平面的系统调用或者返回伪造的系统调用结果。

进一步地,所述虚拟机的子进程请求物理机的父进程执行所述控制平面的系统调用之后,还包括:

获取物理机的父进程向所述虚拟机的子进程返回的所述控制平面的系统调用的执行结果。

进一步地,在判断所述系统调用的属性之前,还包括:

创建用于标识所述虚拟机的子进程与网络通信对端之间的信道的套接字描述符。

进一步地,创建用于标识所述虚拟机的子进程与网络通信对端之间的信道的套接字描述符,包括:

虚拟机的子进程向物理机的父进程发送套接字描述符的创建请求,其中所述创建请求包括虚拟机内部标识、套接字参数和进程控制信息,所述虚拟机内部标识为用于表示基于虚拟机内核的套接字描述符的标识;

所述物理机的父进程根据套接字参数和进程控制信息创建所述套接字描述符,执行信道连接操作,并记录物理机内部标识与所述虚拟机内部标识的映射关系,其中所述物理机内部标识为用于表示基于物理机内核的套接字描述符的标识;

所述物理机的父进程向所述虚拟机的子进程返回所述套接字描述符的创建成功响应,其中,所述创建成功响应包括物理机内部标识;

所述虚拟机的子进程根据所述创建成功响应创建所述套接字描述符,记录所述物理机内部标识与所述虚拟机内部标识映射关系,设置套接字抽象层的配置。

进一步地,虚拟机的子进程向物理机的父进程发送套接字描述符的创建请求之前,还包括:

确定所述虚拟机的子进程与网络通信对端之间的信道为受限通信信 道。

基于本申请的另一方面,还提供了一种应用于虚拟化场景的安全通信设备,该设备包括:

判断装置,用于在虚拟机的子进程执行系统调用时,判断所述系统调用的属性;

数据处理装置,用于在所述系统调用为数据平面的系统调用时,控制所述虚拟机的子进程使用物理机的父进程提供的套接字描述符执行所述数据平面的系统调用;

控制处理装置,用于在所述系统调用为控制平面的系统调用时,控制所述虚拟机的子进程禁止执行所述控制平面的系统调用,请求物理机的父进程执行所述控制平面的系统调用或者返回伪造的系统调用结果。

进一步地,所述数据处理装置,用于在所述系统调用为数据平面的系统调用时,控制虚拟机的子进程获取物理机的父进程提供的物理机内部标识,其中所述物理机内部标识为用于表示基于物理机内核的套接字描述符的标识;控制所述虚拟机的子进程根据所述映射关系由所述物理机内部标识获取虚拟机内部标识,其中所述虚拟机内部标识为用于表示基于虚拟机内核的套接字描述符的标识;以及控制所述虚拟机的子进程根据所述虚拟机内部标识获取套接字描述符,并使用该套接字描述符执行所述数据平面的系统调用。

进一步地,所述数据处理装置,用于在所述数据平面的系统调用为读写数据的系统调用时,控制所述虚拟机的子进程在使用物理机的父进程提供的套接字描述符执行所述读写数据的系统调用时,采用批处理的方式将数据由虚拟机的内核空间传输至物理机的内核空间。

进一步地,所述控制处理装置,用于在所述控制平面的系统调用为影响全局配置或者导致信息泄露的系统调用时,控制所述虚拟机的子进程禁止执行所述控制平面的系统调用;否则,控制所述虚拟机的子进程请求物理机的父进程执行所述控制平面的系统调用或者返回伪造的系统调用结果。

进一步地,所述控制处理装置,还用于控制所述虚拟机的子进程在请 求物理机的父进程执行所述控制平面的系统调用之后,获取物理机的父进程向所述虚拟机的子进程返回的所述控制平面的系统调用的执行结果。

进一步地,该设备还包括:

创建装置,用于在判断所述系统调用的属性之前,创建用于标识所述虚拟机的子进程与网络通信对端之间的信道的套接字描述符。

进一步地,所述创建装置,用于控制虚拟机的子进程向物理机的父进程发送套接字描述符的创建请求,其中所述创建请求包括虚拟机内部标识、套接字参数和进程控制信息,所述虚拟机内部标识为用于表示基于虚拟机内核的套接字描述符的标识;控制所述物理机的父进程根据套接字参数和进程控制信息创建所述套接字描述符,执行信道连接操作,并记录物理机内部标识与所述虚拟机内部标识的映射关系,其中所述物理机内部标识为用于表示基于物理机内核的套接字描述符的标识;控制所述物理机的父进程向所述虚拟机的子进程返回所述套接字描述符的创建成功响应,其中,所述创建成功响应包括物理机内部标识;以及控制所述虚拟机的子进程根据所述创建成功响应创建所述套接字描述符,记录所述物理机内部标识与所述虚拟机内部标识映射关系,设置套接字抽象层的配置。

进一步地,所述创建装置,还用于在控制虚拟机的子进程向物理机的父进程发送套接字描述符的创建请求之前,确定所述虚拟机的子进程与网络通信对端之间的信道为受限通信信道。

与现有技术相比,本申请的技术方案通过将系统调用分割为数据平面的系统调用和控制平面的系统调用,使得虚拟机内的子进程只能执行数据平面的套接字操作,而物理机中的父进程则负责控制平面的套接字操作,由此达到数据收发与系统控制的分割,使得子进程与网络通信对端之间的通信过程不会影响系统的全局配置,同时借助于虚拟化技术带来的安全优势,提供更加安全可靠的受限通信,提高系统性能。

此外,通过内部标识的方式传递套接字描述符,克服了无法在不同操作系统内核之间直接传递套接字描述符的问题,为方案的实现提供了便捷,减少了系统开销,使得系统性能得到了提高。

附图说明

通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:

图1为本申请实施例提供的应用于虚拟化场景的安全通信方法的流程图;

图2为本申请实施例提供的应用于虚拟化场景的安全通信方法中传递套接字描述符的具体处理流程图;

图3为本申请实施例提供的应用于虚拟化场景的安全通信方法中创建套接字描述符的具体处理流程图;

图4为本申请实施例提供的一种应用于虚拟化场景的安全通信设备的结构示意图;

图5为本申请实施例提供的一种优选的应用于虚拟化场景的安全通信设备的结构示意图;

图6为本申请实施例中建立虚拟机子进程与网络通信对端的TCP连接的流程图;

附图中相同或相似的附图标记代表相同或相似的部件。

具体实施方式

下面结合附图对本申请作进一步详细描述。

在本申请一个典型的配置中,终端、服务网络的设备和可信方均包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电 可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。

图1示出了本申请实施例提供的应用于虚拟化场景的安全通信方法,该方法包括以下步骤:

步骤S101,在虚拟机的子进程执行系统调用时,判断所述系统调用的属性;

步骤S102,若所述系统调用为数据平面的系统调用,则所述虚拟机的子进程使用物理机的父进程提供的套接字描述符执行所述数据平面的系统调用。

步骤S103,若所述系统调用为控制平面的系统调用,则所述虚拟机的子进程禁止执行所述控制平面的系统调用、请求物理机的父进程执行所述控制平面的系统调用或者返回伪造的系统调用结果。

通过将系统调用分割为数据平面的系统调用和控制平面的系统调用,使得虚拟机内的子进程只能执行数据平面的套接字操作,而物理机中的父进程则负责控制平面的套接字操作,由此达到数据收发与系统控制的分割,使得子进程与网络通信对端之间的通信过程不会影响系统的全局配置,同时借助于虚拟化技术带来的安全优势,提供更加安全可靠的受限通信,提高系统性能。

在此,本领域技术人员应当理解,上述方法的执行主体可以包括但不限于用户设备、网络设备或用户设备与网络设备通过网络相集成所构成的设备。所述用户设备包括但不限于个人计算机、触控终端等实现;所述网络设备包括但不限于如网络主机、单个网络服务器、多个网络服务器集或基于云计算的计算机集合等实现。在此,云由基于云计算(Cloud Computing)的大量主机或网络服务器构成,其中,云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个虚拟计算机。

为了保证数据平面和控制平面的分割,在操作系统实现的层面上,这种分割可以用两个系统调用的功能子集表示。多数系统调用只属于特定平面,但也有些系统调用横跨两个平面,需要做进一步的功能细分。以下分别对常用的数据平面和控制平面的系统调用及其相应的功能进行了说明,具体如下:

数据平面:

控制平面:

对于横跨两个平面的系统调用,例如getsockopt()、setsockopt()和ioctl()等,对于涉及数据平面的操作,可以由虚拟机的子进程来执行,而对于涉及控制平面的操作,则直接由所述虚拟机的子进程禁止其执行或者请求物理机的父进程来执行。此外,对于getsockname()或者getpeername()这两个系统调用,还可能由虚拟机的子进程向物理机的父进程返回伪造的系统调用结果。

在虚拟化场景下,父进程通常运行于物理机上,而子进程则通常运行于对应的虚拟机内,虚拟机和物理机具有各自独立的操作系统内核。由于套接字描述符是由各个操作系统内核独立维护的,因此不能跨越不同的操作系统内核直接传递,因此无法直接实现套接字描述符在父进程和子进程之间的直接传递。为解决上述问题,本申请实施例提供的应用于虚拟化场景的安全通信方法中通过内部标识的方式传递套接字描述符。具体地,所述步骤S102中虚拟机的子进程使用物理机的父进程提供的套接字描述符执行所述数据平面的系统调用,包括以下步骤:

步骤S201,虚拟机的子进程获取物理机的父进程提供的物理机内部标识,其中所述物理机内部标识为用于表示基于物理机内核的套接字描述符的标识;

步骤S202,所述虚拟机的子进程根据所述映射关系由所述物理机内部标识获取虚拟机内部标识,其中所述虚拟机内部标识为用于表示基于虚拟机内核的套接字描述符的标识;

步骤S203,所述虚拟机的子进程根据所述虚拟机内部标识获取套接字描述符,并使用该套接字描述符执行所述数据平面的系统调用。

操作系统中套接字描述符是VFS(Virtual File System,虚拟文件系统)架构中的一个文件描述符(File Descriptor,fd),它对某种网络协议的一条通信信道,用于标识本机的某一进程与网络通信对端之间的信道。以TCP(Transmission Control Protocol,传输控制协议)为例,套接字描述符即表示一个TCP连接,该套接字描述符表示的信息可以通过IP(Internet Protocol,网间互联协议)地址、端口和协议来表示,即采用以下5元组 来(源IP、源端口、目标IP、目标端口、TCP协议号)。相应地,对于其它的协议,也可以采用类似的表示方式。

但是,这种表示方式仅适用于已经建立好的TCP连接,在建立好连接之后套接字会被分配一个对应的文件描述符。而对于还未建立好的TCP连接,套接字还未对应到具体协议上,因此无法采用上述的方式来表示对应的套接字描述符。因此,可以使用基于相应操作系统内核的内部标识来表示对应的套接字描述符。在实际应用中,所述内部标示的一种可行的实现方式为sockfs(套接字伪文件系统)中的inode号,这种数字编号在操作系统内能够唯一标识一个连接的信道,无论当前有多少个进程在使用这条信道。

但是,由于在物理机和虚拟机的操作系统内核不同,因此需要在信道建立时生成物理机内部标识和虚拟机内部标识的映射关系。即,物理机操作系统中的套接字数据结构上记录有对应的虚拟机内部标识,反之,虚拟机操作系统中的套接字数据结构上同样记录有对应的物理机内部标识。例如,虚拟机的子进程获取物理机的父进程提供的物理机内部标识之后,根据映射关获取虚拟机内部标识,通过该虚拟机内部标识即可查找到对应的文件描述符,即套接字描述符,从而确定唯一的信道。由此,在虚拟机的子进程和物理机的父进程之间,仅需要传递两者的内部标识即可实现在不同操作系统内核之间的传递套接字描述符。

对于特定的数据平面的系统调用,例如读写数据的系统调用,出于性能考虑,数据不会再每次复制到虚拟机内核中就立即传输给物理机内核,而是以一个批处理的方式将数据发送给物理机内核,具体实现方式与TCP栈的发送逻辑类似。具体地,在步骤S102中,若所述数据平面的系统调用为读写数据的系统调用,所述虚拟机的子进程在使用物理机的父进程提供的套接字描述符执行所述读写数据的系统调用时,采用批处理的方式将数据由虚拟机的内核空间传输至物理机的内核空间。通过批处理的方式,可以降低系统开销,提高数据传输的效率。

进一步地,步骤S103中所述虚拟机的子进程禁止执行所述控制平面的系统调用、请求物理机的父进程执行所述控制平面的系统调用或者返回 伪造的系统调用结果,具体包括:若所述控制平面的系统调用为影响全局配置或者导致信息泄露的系统调用,则所述虚拟机的子进程禁止执行所述控制平面的系统调用;否则,所述虚拟机的子进程请求物理机的父进程执行所述控制平面的系统调用或者返回伪造的系统调用结果。

在实际应用中,虚拟机的子进程在执行各种系统调用时,若系统调用属于控制平面,则会对其进行安全检查。基于安全检查的结果,由三种可能的结果:1、禁止执行,例如影响全局配置或者导致信息泄露的系统调用,如某些ioctl()调用。2、允许执行,向物理机的父进程发送消息,请求父进程执行所述控制平面的系统调用,如一些不会影响全局配置或者导致信息泄露的系统调用。3、返回伪造的结果,主要包括用于获取本端地址以及网络通信对端地址的getsockname()和getpeername()调用。上述结果,除了受到系统调用本身的功能的影响,还可能受到为虚拟机的子进程所设置的权限,以及操作系统的其它配置的影响。

在前述第二种情况下,虚拟机的子进程向物理机的父进程发送消息,请求父进程执行所述控制平面的系统调用之后,还包括:获取物理机的父进程向所述虚拟机的子进程返回的所述控制平面的系统调用的执行结果,使得子进程能够根据执行结果执行相关的配置,保证受限通信的安全性。

在一次完整的安全通信过程中,在执行其它的系统调用之前,会首先执行socket()调用来创建套接字描述符用以标识所述虚拟机的子进程与网络通信对端之间的信道。因此,所述应用于虚拟化场景的安全通信方法在判断所述系统调用的属性之前,还包括:创建用于标识所述虚拟机的子进程与网络通信对端之间的信道的套接字描述符。由于其中涉及信道连接的建立,其处理过程与其它系统调用存在区别,其具体步骤如图3所示,包括:

步骤S301,虚拟机的子进程向物理机的父进程发送套接字描述符的创建请求,其中所述创建请求包括虚拟机内部标识、套接字参数和进程控制信息。所述虚拟机内部标识为用于表示基于虚拟机内核的套接字描述符的标识,可以是虚拟机操作系统的sockfs的inode号;所述套接字参数包括虚拟机的子进程需要建立连接的网络通信对端的地址,如IP地址和端口 号;所述进程控制信息是出于限制特定进程的通信的设计,可以是子进程的PID(Process Identification,进程识别号),通过PID来识别该进程是有相应的权限(例如是否允许与特定的网络通信对端建立连接),从而特定进程进行限制。

步骤S302,所述物理机的父进程根据套接字参数和进程控制信息创建所述套接字描述符,执行信道连接操作,并记录物理机内部标识与所述虚拟机内部标识映射关系。所述物理机内部标识为用于表示基于物理机内核的套接字描述符的标识,可以是物理机操作系统的sockfs的inode号,所述信道的连接参数包括信道两端的地址,以TCP连接为例,即源IP、源端口、目标IP和目标端口等;所述执行信道连接操作,包括向指定目标地址建立TCP连接、设置信道的各种连接参数等。

步骤S303,所述物理机的父进程向所述虚拟机的子进程返回所述套接字描述符的创建成功响应,其中所述创建成功响应包括物理机内部标识。

步骤S304,所述虚拟机的子进程根据所述创建成功响应创建所述套接字描述符,记录所述物理机内部标识与所述虚拟机内部标识映射关系,设置套接字抽象层的配置。通过在虚拟机的VFS中为该套接字分配一个文件描述符从而完成套接字描述符的创建。在虚拟机中,由此获取到物理机内部标识,与虚拟机中的套接字数据结构已有的虚拟机内部标识匹配获得物理机内部标识和虚拟机内部标识的映射关系,用于后续执行系统调用时通过内部标识传递套接字描述符。所述设置套接字抽象层的配置是指设置该套接字发送队列、接收队列等套接字抽象层的各种必要配置。

此外,在虚拟机的子进程向物理机的父进程发送套接字描述符的创建请求之前,还包括:确定所述虚拟机的子进程与网络通信对端之间的信道为受限通信信道。本实施例中采用的方式为:设置sock_dataplane标志位,在创建套接字描述符时,若创建请求中指定了sock_dataplane标志位,则表示希望建立一个受限通信信道,因此通过读取该sock_dataplane标志位的值即可确定所述虚拟机的子进程与网络通信对端之间的信道是否为受限通信信道。

基于本申请的另一方面图,还提供了一种应用于虚拟化场景的安全通 信设备,该设备的结构如图4所示,包括判断装置410、数据处理装置420和控制处理装置430。具体地,所述判断装置410用于在虚拟机的子进程执行系统调用时,判断所述系统调用的属性;所述数据处理装置420用于在所述系统调用为数据平面的系统调用时,控制所述虚拟机的子进程使用物理机的父进程提供的套接字描述符执行所述数据平面的系统调用;所述控制处理装置430用于在所述系统调用为控制平面的系统调用时,控制所述虚拟机的子进程禁止执行所述控制平面的系统调用、请求物理机的父进程执行所述控制平面的系统调用或者返回伪造的系统调用结果。

通过将系统调用分割为数据平面的系统调用和控制平面的系统调用,使得虚拟机内的子进程只能执行数据平面的套接字操作,而物理机中的父进程则负责控制平面的套接字操作,由此达到数据收发与系统控制的分割,使得子进程与网络通信对端之间的通信过程不会影响系统的全局配置,同时借助于虚拟化技术带来的安全优势,提供更加安全可靠的受限通信,提高系统性能。

在此,本领域技术人员应当理解,所述安全通信设备可以包括但不限于用户设备、网络设备或用户设备与网络设备通过网络相集成所构成的设备。所述用户设备包括但不限于个人计算机、触控终端等实现;所述网络设备包括但不限于如网络主机、单个网络服务器、多个网络服务器集或基于云计算的计算机集合等实现。在此,云由基于云计算(Cloud Computing)的大量主机或网络服务器构成,其中,云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个虚拟计算机。

为了保证数据平面和控制平面的分割,在操作系统实现的层面上,这种分割可以用两个系统调用的功能子集表示。多数系统调用只属于特定平面,但也有些系统调用横跨两个平面,需要做进一步的功能细分。系统调用的具体属性划分可参考前文表格。

对于横跨两个平面的系统调用,例如getsockopt()、setsockopt()和ioctl()等,对于涉及数据平面的操作,可以由虚拟机的子进程来执行,而对于涉及控制平面的操作,则直接由所述虚拟机的子进程禁止其执行或者请求物理机的父进程来执行。此外,对于getsockname()或者getpeername()这两个 系统调用,还可能由虚拟机的子进程向物理机的父进程返回伪造的系统调用结果。

在虚拟化场景下,父进程通常运行于物理机上,而子进程则通常运行于对应的虚拟机内,虚拟机和物理机具有各自独立的操作系统内核。由于套接字描述符是由各个操作系统内核独立维护的,因此不能跨越不同的操作系统内核直接传递,因此无法直接实现套接字描述符在父进程和子进程之间的直接传递。为解决上述问题,本申请实施例提供的应用于虚拟化场景的安全通信设备中通过内部标识的方式传递套接字描述符。具体地,所述数据处理装置420用于在所述系统调用为数据平面的系统调用时,控制虚拟机的子进程获取物理机的父进程提供的物理机内部标识,其中所述物理机内部标识为用于表示基于物理机内核的套接字描述符的标识;控制所述虚拟机的子进程根据所述映射关系由所述物理机内部标识获取虚拟机内部标识,其中所述虚拟机内部标识为用于表示基于虚拟机内核的套接字描述符的标识;以及控制所述虚拟机的子进程根据所述虚拟机内部标识获取套接字描述符,并使用该套接字描述符执行所述数据平面的系统调用。

操作系统中套接字描述符是VFS(Virtual File System,虚拟文件系统)架构中的一个文件描述符(File Descriptor),它对某种网络协议的一条通信信道,用于标识本机的某一进程与网络通信对端之间的信道。以TCP(Transmission Control Protocol,传输控制协议)为例,套接字描述符即表示一个TCP连接,该套接字描述符表示的信息可以通过IP(Internet Protocol,网间互联协议)地址、端口和协议来表示,即采用以下5元组来(源IP、源端口、目标IP、目标端口、TCP协议号)。相应地,对于其它的协议,也可以采用类似的表示方式。

但是,这种表示方式仅适用于已经建立好的TCP连接,在建立好连接之后套接字会被分配一个对应的文件描述符。而对于还未建立好的TCP连接,套接字还未对应到具体协议上,因此无法采用上述的方式来表示对应的套接字描述符。因此,可以使用基于相应操作系统内核的内部标识来表示对应的套接字描述符。在实际应用中,所述内部标示的一种可行的实现方式为sockfs(套接字伪文件系统)中的inode号,这种数字编号在操 作系统内能够唯一标识一个连接的信道,无论当前有多少个进程在使用这条信道。

但是,由于在物理机和虚拟机的操作系统内核不同,因此需要在信道建立时生成物理机内部标识和虚拟机内部标识的映射关系。即,物理机操作系统中的套接字数据结构上记录有对应的虚拟机内部标识,反之,虚拟机操作系统中的套接字数据结构上同样记录有对应的物理机内部标识。例如,虚拟机的子进程获取物理机的父进程提供的物理机内部标识之后,根据映射关获取虚拟机内部标识,通过该虚拟机内部标识即可查找到对应的文件描述符,即套接字描述符,从而确定唯一的信道。由此,在虚拟机的子进程和物理机的父进程之间,仅需要传递两者的内部标识即可实现在不同操作系统内核之间的传递套接字描述符。

对于特定的数据平面的系统调用,例如读写数据的系统调用,出于性能考虑,数据不会再每次复制到虚拟机内核中就立即传输给物理机内核,而是以一个批处理的方式将数据发送给物理机内核,具体实现方式与TCP栈的发送逻辑类似。具体地,所述数据处理装置420用于在所述数据平面的系统调用为读写数据的系统调用时,控制所述虚拟机的子进程在使用物理机的父进程提供的套接字描述符执行所述读写数据的系统调用时,采用批处理的方式将数据由虚拟机的内核空间传输至物理机的内核空间。通过批处理的方式,可以降低系统开销,提高数据传输的效率。

进一步地,所述控制处理装置430用于在所述控制平面的系统调用为影响全局配置或者导致信息泄露的系统调用时,控制所述虚拟机的子进程禁止执行所述控制平面的系统调用;否则,控制所述虚拟机的子进程请求物理机的父进程执行所述控制平面的系统调用或者返回伪造的系统调用结果。

在实际应用中,虚拟机的子进程在执行各种系统调用时,若系统调用属于控制平面,则会对其进行安全检查。基于安全检查的结果,由三种可能的结果:1、禁止执行,例如影响全局配置或者导致信息泄露的系统调用,如某些ioctl()调用。2、允许执行,向物理机的父进程发送消息,请求父进程执行所述控制平面的系统调用,如一些不会影响全局配置或者导致 信息泄露的系统调用。3、返回伪造的结果,主要包括用于获取本端地址以及网络通信对端地址的getsockname()和getpeername()调用。上述结果,除了受到系统调用本身的功能的影响,还可能受到为虚拟机的子进程所设置的权限,以及操作系统的其它配置的影响。

在前述第二种情况下,所述控制处理装置430还用于控制所述虚拟机的子进程在请求物理机的父进程执行所述控制平面的系统调用之后,获取物理机的父进程向所述虚拟机的子进程返回的所述控制平面的系统调用的执行结果,使得子进程能够根据执行结果执行相关的配置,保证受限通信的安全性。

在一次完整的安全通信过程中,在执行其它的系统调用之前,会首先执行socket()调用来创建套接字描述符用以标识所述虚拟机的子进程与网络通信对端之间的信道。因此,本申请实施例还提供了一种优选的应用于虚拟化场景的安全通信设备,其结构如图5所示,除图4所示的判断装置410、数据处理装置420和控制处理装置430之外,还包括创建装置440。具体地,所述创建装置440用于在判断所述系统调用的属性之前,创建用于标识所述虚拟机的子进程与网络通信对端之间的信道的套接字描述符。由于其中涉及信道连接的建立,其处理过程与其它系统调用存在区别,因此所述创建装置,具体用于:

控制虚拟机的子进程向物理机的父进程发送套接字描述符的创建请求,其中所述创建请求包括虚拟机内部标识、套接字参数和进程控制信息。所述虚拟机内部标识为用于表示基于虚拟机内核的套接字描述符的标识,可以是虚拟机操作系统的sockfs的inode号;所述套接字参数包括虚拟机的子进程需要建立连接的网络通信对端的地址,如IP地址和端口号;所述进程控制信息是出于限制特定进程的通信的设计,可以是子进程的PID(Process Identification,进程识别号),通过PID来识别该进程是有相应的权限(例如是否允许与特定的网络通信对端建立连接),从而特定进程进行限制。

控制所述物理机的父进程根据套接字参数和进程控制信息创建所述套接字描述符,执行信道连接操作,并记录物理机内部标识与所述虚拟机 内部标识映射关系。所述物理机内部标识为用于表示基于物理机内核的套接字描述符的标识,可以是物理机操作系统的sockfs的inode号,所述信道的连接参数包括信道两端的地址,以TCP连接为例,即源IP、源端口、目标IP和目标端口等;所述执行信道连接操作,包括向指定目标地址建立TCP连接、设置信道的各种连接参数等。

控制所述物理机的父进程向所述虚拟机的子进程返回所述套接字描述符的创建成功响应,其中所述创建成功响应包括物理机内部标识。

控制所述虚拟机的子进程根据所述创建成功响应创建所述套接字描述符,记录所述物理机内部标识与所述虚拟机内部标识映射关系,设置套接字抽象层的配置。通过在虚拟机的VFS中为该套接字分配一个文件描述符从而完成套接字描述符的创建。在虚拟机中,由此获取到物理机内部标识,与虚拟机中的套接字数据结构已有的虚拟机内部标识匹配获得物理机内部标识和虚拟机内部标识的映射关系,用于后续执行系统调用时通过内部标识传递套接字描述符。所述设置套接字抽象层的配置是指设置该套接字发送队列、接收队列等套接字抽象层的各种必要配置。

此外,所述创建装置440还用于在虚拟机的子进程向物理机的父进程发送套接字描述符的创建请求之前,确定所述虚拟机的子进程与网络通信对端之间的信道为受限通信信道。本实施例中采用的方式为:设置sock_dataplane标志位,在创建套接字描述符时,若创建请求中指定了sock_dataplane标志位,则表示希望建立一个受限通信信道,因此通过读取该sock_dataplane标志位的值即可确定所述虚拟机的子进程与网络通信对端之间的信道是否为受限通信信道。

下面以TCP连接为例,对建立子进程与网络通信对端之间的连接的过程进行详细说明,其中虚拟机侧和物理机侧的处理过程如图6所示:

步骤S601,虚拟机侧根据应用的请求开始执行socket()系统调用,以创建socket描述符。

步骤S602,虚拟机侧根据sock_dataplane标志位确定是否需要创建特殊的socket描述符,以创建一个受限通信信道,对子进程的通信进行限制。若为是,则执行下一步,若为否,则按照正常socket的创建流程进行后续 处理。

步骤S603,虚拟机侧将包含socket的内部标识、socket参数和进程控制信息发送给物理机的创建请求。在发送请求后,虚拟机将其当前的子进程置于休眠状态,等待物理机侧的响应。

步骤S604,物理机侧在接收到创建请求之后,根据socket参数创建一个socket。物理机侧在接收到创建请求之前,其内核与虚拟机之间保持通信,等待虚拟机中的创建请求。

步骤S605,物理机侧在创建完socket后,将该socket插入到当前进程的打开文件描述表中,从而为其分配一个文件描述符,完成socket描述符的创建。此时,该socket描述符可以通过物理机内部标识来确定,因此可以记录物理机内部标识与所述虚拟机内部标识的映射关系

步骤S606,物理机侧在根据创建的socket描述符以及虚拟机提供的socket参数和进程控制信息执行信道连接操作,例如向指定目标地址建立TCP连接、设置信道的各种连接参数等。

步骤S607,在物理机侧,若TCP连接成功,则将对应的socket描述符写入物理机内核,若TCP连接失败,则将禁止建立连接的错误信息写入物理机内核。

步骤S608,物理机侧根据连接的结果向虚拟机侧返回对应创建请求的响应。

步骤S609,虚拟机侧在收到响应后,根据响应的结果执行后续步骤。若不允许建立连接,则退出系统调用;若允许,则执行后续步骤。

步骤S610,虚拟机侧在根据响应中包含的物理机内部标识,将其记录在socket数据结构内,从而建立物理机内部标识与虚拟机内部标识的映射关系。

步骤S611,虚拟机侧设置socket抽象层的各种必要配置,例如该socket的发送队列和接收队列等。

步骤S612,虚拟机侧为创建的socket在VFS上分配一个文件描述符,以对应该socket,从而完成socket()调用,创建socket描述符。

综上所述,本申请的技术方案通过将系统调用分割为数据平面的系统 调用和控制平面的系统调用,使得虚拟机内的子进程只能执行数据平面的套接字操作,而物理机中的父进程则负责控制平面的套接字操作,由此达到数据收发与系统控制的分割,使得子进程与网络通信对端之间的通信过程不会影响系统的全局配置,同时借助于虚拟化技术带来的安全优势,提供更加安全可靠的受限通信,提高系统性能。

此外,通过内部标识的方式传递套接字描述符,克服了无法在不同操作系统内核之间直接传递套接字描述符的问题,为方案的实现提供了便捷,减少了系统开销,使得系统性能得到了提高。

需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(ASIC)、通用目的计算机或任何其他类似硬件设备来实现。在一个实施例中,本申请的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,RAM存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。

另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。而调用本申请的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据所述程序指令运行的计算机设备的工作存储器中。在此,根据本申请的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本申请的多个实施例的方法和/或技术方案。

对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括 在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1