基于配对标签及迁移监听的虚拟化安全计算方法及系统与流程

文档序号:16428761发布日期:2018-12-28 19:59阅读:462来源:国知局
基于配对标签及迁移监听的虚拟化安全计算方法及系统与流程

本发明涉及一种基于配对标签及迁移监听的虚拟化安全计算方法及系统。

背景技术

随着信息技术的快速发展,电子资源呈现爆炸性的增长,这使得计算机软硬件资源压力剧增,虚拟化技术由此得到空前的发展。虚拟化技术能有效地提高软硬件资源的利用率、安全性和稳定性,比如虚拟机(vm)可以看作是一个系统进程,也可以说是一个独立的系统,它可以在一台物理服务上同时运行多台虚拟机,将物理机上的内存和硬盘资源根据用户需求划分,大大提高了物理机的利用率。虽然虚拟技术得到复苏与长足的发展,但是同样也带来了许多安全威胁,典型的问题包括外部安全风险、虚拟机启动过程安全问题、虚拟机内部风险、资源争夺和管理复杂等,比如传统的攻击威胁(恶意软件感染、漏洞利用等)外,还有如隐蔽通道、基于vm的rootkit攻击(vmbr)以及新的恶意软件等等新型安全问题。对于外部一些恶意访问,虚拟机与物理机一样没有区别能力,存在很大被攻击的风险,一旦发现漏洞进行攻击将会严重威胁虚拟机的使用,难以实现真正隔离。

理论上虚拟环境中运行的计算机进程与在同一个物理硬件上运行的其他虚拟机是分隔的,每一个虚拟机实例都能够存储在一个物理硬盘上,关机和携带离开以便继续隔离和保证安全。但是,在实际中安全问题并不总是那样简单,一旦定义了一个虚拟机,这个虚拟机就能够按照自己的实例运行,它也许能够访问允许其它虚拟服务机访问的资源,也许不能访问这些资源;此外,虚拟机在不同的物理主机中进行迁移已成为公有云和私有云的必备功能,这其中也包括诸多安全隐患,如控制平面安全、数据平面安全和迁移模块安全等。攻击者可能通过攻陷vmm来影响动态迁移从而实现对虚拟机的完全控制、虚拟机数据泄露和虚拟机迁移前后状态不一致等。

为解决这些问题,本发明主要采用了对虚拟机配对标签方案以及监听虚拟机动态迁移方案。前者主要是针对虚拟机在系统启动时制定的方案,主要是对虚拟机的进程以及镜像添加独立标签,持有非配对标签则不可访问,实现虚拟机的访问控制,实现安全隔离,数据隐私,防止恶意访问。后者则是在虚拟机迁移过程制定的方案,该方案主要是对迁移过程进行监听,防止敏感信息泄露,保证迁移前后状态一致性。



技术实现要素:

本发明为了解决上述问题,提出了一种基于配对标签及迁移监听的虚拟化安全计算方法及系统,本发明能够实现虚拟机的安全隔离,有效提高计算的安全性。

为了实现上述目的,本发明采用如下技术方案:

一种基于配对标签及迁移监听的虚拟化安全计算方法,包括以下步骤:

改进selinux安全机制,在虚拟机启动时动态地为进程和镜像打上配对的标签,使得非配对的进程和镜像不能启动,同时持有非配对标签的进程不进行访问镜像标签的文件和设备,实现安全隔离;

对虚拟机动态迁移过程实施监听方案,将迁移时的每一步操作加以记录,保证迁移过程的正确性和迁移前后的一致性。

进一步的,改进selinux安全机制的具体过程包括:

配置配对标签的具体格式,每一个进程和镜像都会拥有一个独立的字段;

创建虚拟机时将不同对象用不同标签进行标识;

在虚拟机启动时对标签进行分配,根据分配的标签是否匹配,对相应的虚拟机的访问进行限制;

检验虚拟机的状态与进程和标签的分配是否相符。

进一步的,当虚拟机启动时,动态为进程和镜像分配标签,并将不同的镜像和进程设为不同的标签形式。

进一步的,虚拟化配对标签状态被配置为两种:强制和宽容;强制状态为强制执行访问机制,正确地开始限制虚拟机的访问;宽容状态为将配对标签的功能暂时关闭,允许虚拟机之间进行访问。

更进一步的,计算节点的配置文件中设强制状态为默认状态,或/和未知区域上的安全防护全部设置为强制状态访问模式。

进一步的,标签包括静态和动态分配,通过修改启动生成虚拟机时生成的xml的配置文件实现标签的静态和动态分配,所述xml的配置文件内存储有虚拟机分配占用的内存、硬盘大小和id。

更进一步的,动态分配为在系统命令端查看selinux状态,该状态若不是运行状态则创建并打开虚拟机,查看进程和镜像的标签是否一致;

静态分配为检验虚拟机是否关闭,若是运行中则在系统命令端强制关闭虚拟机,创建xml文件,在里面添加静态标签的分配代码,创建并打开虚拟机查看进程和镜像的标签是否为所设置的静态标签。

进一步的,虚拟机迁移安全控制过程中,将拥有不同密码能力的计算节点划分同一集群中,而拥有不同能力的计算节点则划分到不同的集群中,以此来划分不同的迁移范围。

进一步的,虚拟机得到迁移指令时,虚拟机若是自动迁移,云操作系统自动限制其在同一个集群中的主机间进行迁移;若是处于手动迁移的情况,调用云操作系统提供的集群,通过云操作系统中获取/修改集群的信息,最终实现虚拟机迁移的范围控制。

进一步的,当发出虚拟机迁移的请求后,调用消息队列中的对象来检测对象间是否已经完成了请求操作,对相应的操作进行一个反馈,获取虚拟机迁移过程的消息。

一种基于配对标签及迁移监听的虚拟化安全计算系统,运行于处理器上,被配置为执行以下步骤:

改进selinux安全机制,在虚拟机启动时动态地为进程和镜像打上配对的标签,使得非配对的进程和镜像不能启动,同时持有非配对标签的进程不进行访问镜像标签的文件和设备,实现安全隔离;

对虚拟机动态迁移过程实施监听方案,将迁移时的每一步操作加以记录,保证迁移过程的正确性和迁移前后的一致性。

一种基于配对标签及迁移监听的虚拟化安全计算系统,包括:

安全控制模块,与云操作系统通信,被配置为在虚拟机启动时动态地为进程和镜像打上配对的标签,使得非配对的进程和镜像不能启动,同时持有非配对标签的进程不进行访问镜像标签的文件和设备,实现安全隔离;

动态迁移控制模块,被配置为对计算节点进行划分,将拥有不同密码能力的计算节点划分同一集群中,拥有不同能力的计算节点则划分到不同的集群中,实现虚拟机迁移的范围控制;

虚拟机迁移消息监听模块,被配置为对虚拟机动态迁移过程实施监听方案,将迁移时的每一步操作加以记录,保证迁移过程的正确性和迁移前后的一致性。

与现有技术相比,本发明的有益效果为:

1、本发明整合了云操作系统以及linux系统的优势并弥补了不足,将安全功能模块层嵌入到云操作系统中技术方法的重点创新,将云操作管理系统、虚拟机安全管理平台以及计算节点(配置安全功能层)全都涉及控制,进行对于虚拟机的更加安全的控制。

2、本发明使用配对的标签标示虚拟机镜像以及它的进程,将不同的进程和镜像分开,从而使其做到一对一。

3、在虚拟机迁移中添加了迁移范围控制模块以及监听模块,更加保证了迁移前后状态的一致性。

附图说明

构成本申请的一部分的说明书附图用来提供对本申请的进一步理解,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。

图1为本实施例的系统架构图;

图2为本实施例的selinux判断流程图;

图3为本实施例的配对标签图;

图4为本实施例的虚拟化配对标签示意图;

图5为本实施例的虚拟机迁移安全方案;

图6为本实施例的虚拟机迁移范围控制流程图;

图7为本实施例的虚拟机迁移监听的信息流图;

图8为本实施例的监听模块总体图;

图9为本实施例的消息获取机制实现类图。

具体实施方式:

下面结合附图与实施例对本发明作进一步说明。

应该指出,以下详细说明都是例示性的,旨在对本申请提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本申请所属技术领域的普通技术人员通常理解的相同含义。

需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本申请的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。

在本发明中,术语如“上”、“下”、“左”、“右”、“前”、“后”、“竖直”、“水平”、“侧”、“底”等指示的方位或位置关系为基于附图所示的方位或位置关系,只是为了便于叙述本发明各部件或元件结构关系而确定的关系词,并非特指本发明中任一部件或元件,不能理解为对本发明的限制。

本发明中,术语如“固接”、“相连”、“连接”等应做广义理解,表示可以是固定连接,也可以是一体地连接或可拆卸连接;可以是直接相连,也可以通过中间媒介间接相连。对于本领域的相关科研或技术人员,可以根据具体情况确定上述术语在本发明中的具体含义,不能理解为对本发明的限制。

本实施例主要是致力于提高虚拟机的安全性问题,针对linux系统环境下云操作系统启动虚拟机时存在的安全隐患,设计了一种架构,如图1所示,即在最新云计算操作系统下增加一个安全功能层(该功能层主要是实现虚拟机的安全隔离)。在云计算操作系统下配置一个安全功能层实现对于虚拟机计算安全的有效保护。配置安全功能层主要使用了两种方式,一是为虚拟机的镜像和进程通过使用配对标签来进行标识,虚拟机启动时限制为只有配对标签的进程和镜像才能启动,启动后不是配对标签的镜像和进程不能访问,对于虚拟机的访问进行了限制,实现安全隔离。二是为虚拟机动态迁移时提供安全保障,首先设置迁移范围模块限制虚拟机迁移的范围,其次配置迁移监听模块实现迁移过程的详细信息的监听方案。

本实施例主要是通过研究云计算管理系统技术特点和集成在linux系统中的安全模块selinux机制来进行考虑设计的,它是主要致力于虚拟机的安全隔离。在云操作管理系统上配置一个安全功能层模块将虚拟机安全隔离实现计算安全的有效提高。该模块主要是针对计算安全组件进行保护。

本实施例使用了双重保护措施,一种是通过改进selinux安全机制,在虚拟机启动时动态地为进程和镜像打上配对的标签,故使得不是配对的进程和镜像不能启动,同时持有非配对标签的进程不可以进行访问镜像标签的文件和设备,该配对标签的实现了安全隔离的效果。二是对虚拟机动态迁移过程实施监听方案,将迁移时的每一步操作加以记录,保证迁移过程的正确性和迁移前后的一致性。

具体的,首先,本实施例配置有一个安全控制模块,该模块实现以下指令。

为虚拟机镜像与进程添加配对标签:

通过使用linux系统中集成的libvirt插件给虚拟机进程与镜像打上配对标签,并配合安全策略将不同的进程以及不同的镜像进行隔离,达到安全访问的目的。当虚拟机启动时,动态为进程和镜像分配标签,并将不同的镜像和进程设为不同的标签形式,让进程无法访问没有配对的镜像的文件和设备,避免虚拟机恶意访问。

虚拟化配对标签状态设置为两种:强制和宽容。强制状态就是指强制执行访问机制,正确地开始限制虚拟机的访问;宽容状态就是指将配对标签的功能暂时关闭,允许虚拟机之间进行访问。我们将强制状态设为默认状态,即在计算节点的配置文件中设强制状态为默认状态,简单地说就是不论此刻标签状态是什么,一旦计算节点执行重启操作,hypervisor(kvm)安全状态自动更新为强制状态。

我们将系统未知区域上的安全防护全部设置为强制状态访问模式,以此来更好地保证kvm的安全性。selinux模块会对程序进行监测,不符合规则就回阻止该程序的访问,本方案使用的配对标签方法就是基于此安全模块进行改进设计,从而以所设计出的新的规则方式来进行限制权限。该安全策略会对虚拟机设置一定权限,比如为每个虚拟机进程分配权限时仅分配其正常工作所需要的对应权限,即每台虚拟机只能访问selinux中允许访问的一部分权限。如图2为selinux安全模块的判断流程图,当虚拟机发出请求操作时,该请求会首先到达selinux的策略数据库,当数据库存在相应的安全策略时,selinux会进行相应的判断。判断是否可以启动,如果判断成功,那么该模块则通过验证,虚拟机可以启动,如果请求失败,该模块则验证失败,会返回一个拒绝的信息,返回给发出请求的用户。

具体过程包括:(1)设置配对标签格式:

每一个进程和镜像都会拥有一个独立的字段,为了保证主机和虚拟机之间、虚拟机与虚拟机之间的访问安全,将每一个文件设置的字段为“用户:角色:类型:标签”。其中,标签字段为“s0:c*,c*”。

(2)创建虚拟机时将不同对象用不同标签进行标识

虚拟机共享读/写文件,分配标签system_u:object_r:svirt_image_t:s0。注:system_u为当前用户,object_r为当前角色,svirt_image_t为当前类型,s0为当前文件所添加的公共标签。注:svirt_image_t中(image)指该类型为镜像文件。

虚拟机共享只读文件,分配标签system_u:object_r:svirt_content_t:s0。注:只读文件类型为svirt_content_t。

(3)虚拟机启动时对标签进行分配

虚拟机1启动时为该进程分配一个唯一的标签system_u:system_r:svirt_t:s1。

虚拟机1对应的磁盘文件分配一个与其对应的标签system_u:object_r:svirt_image_t:s1。

虚拟机2启动时为该进程分配一个唯一的标签system_u:system_r:svirt_t:s2。

虚拟机2对应的磁盘文件分配一个与其对应的标签system_u:object_r:svirt_image_t:s2。

(4)设置访问限制策略

虚拟机启动成功后,标签配置完成,如图3所示,有箭头连接代表实体间存在安全策略,无箭头连接则表明此实体间无此策略。若是虚拟机1或者虚拟机2想要利用linux系统内核的漏洞来获取整个系统的最高权限时,会因为配置的标签不匹配,也就是安全策略不存在从而使该虚拟机的访问被限制。但是若是标签匹配成功,也就是安全策略存在,则会访问成功。

本实施例所提出的匹配标签的设置将虚拟机的访问范围限制在selinux策略允许它访问的对象中,保证了虚拟机之间的有效安全隔离,同时也保证了虚拟机与hypervisor的隔离,这样一来就避免了其在被攻击之后控制所有虚拟机的恶劣情况。故可看出此方案的实施较大程度上提高了虚拟化技术的安全性。匹配标签模块设计如图4所示,向外提供restapi:

hypervisor(kvm)配对标签状态查看接口hy_get

hypervisor(kvm)配对标签功能开启接口hy_start

hypervisor(kvm)配对标签功能关闭接口hy_stop

在启动生成虚拟机时会在/var/lib/libvirt/images/中生成一个xml的配置文件,这个xml文件会将虚拟机的诸多基本信息记录下来,比如分配占用的内存、硬盘大小、id等等。我们知道在虚拟机启动的时候会默认地为动态的进程和镜像随机的分配标签,但是这个标签在虚拟机关闭的时候就会消失,从而会造成关机时进程几乎是可以不设限的去访问任何的镜像文件,这样一来就造成了极大的安全隐患。因此,本方案提出了为进程和镜像贴上静态的配对标签,使得他们可以在没有启动的时候也存在着相互对应的配对标签,只有相对应的进程和镜像才可以访问。

对于匹配标签的静态与动态分配则是通过创建和修改xml配置文件进行实现。

(5)设置匹配标签的动态和静态的分配方式。

具体的,检验标签的动态分配

1)在系统命令端查看selinux状态,该状态若不是运行状态则需打开该服务。

2)打开服务后创建并打开虚拟机,查看进程和镜像的标签是否一致。

设置标签的静态分配

1)检验虚拟机是否关闭,若是运行中则在系统命令端强制关闭虚拟机,创建xml文件,在里面添加静态标签的分配代码。

2)创建并打开虚拟机查看进程和镜像的标签是否为所设置的静态标签。

具体实现方式:

1)安装libselinux-devel包到centos中,本方案的安全策略调用方法就是由selinux的基础库libselinux提供。

2)libselinux-devel包安装完成后,到/usr/include/selinux中找出相关头文件,在文件中声明linselinux接口,以此来作为外部程序的接口使用。

3)调用libvirt接口输入启动虚拟机命令,libvirt调用libselinux的接口随机的生成一个标签同时将其添加到相应进程的安全上下文和image镜像文件的安全上下文中,其中,进程的标签为libselinuxapi中的setfilecon接口所添加,镜像文件被setexeccon接口添加匹配标签。

4)调动接口的开发方法:selinux.h头文件中is_selinux_enabled()接口的开发。

is_selinux_enabled{return1ifrunningonaselinuxkernel,or0ifnotor-1forerror}

依据接口文档的要求,该接口会声明在selinux.h头文件中,若是查看该头文件中的简介,该接口会返回linux中selinux的开启与关闭状态,如果selinux运行中则返回int类型1,关闭返回0。

第二方面,本实施例构建虚拟机迁移范围控制模块,执行虚拟机迁移范围控制,是通过cluster(集群)来实现。在部署环境时,不同的计算节点自身的密码能力并不是都相同的,可以将拥有不同密码能力的计算节点划分同一cluster中,而拥有不同能力的计算节点则划分到不同的cluster中,比如说cluster1中的计算节点可以为虚拟机配置对称加解密算法,cluster2中的计算节点配备另一种加密算法,故以此来划分不同的迁移范围。

虚拟机得到迁移指令时,虚拟机若是自动迁移,openstack则会自动限制其在同一个cluster中的主机间进行迁移,可以有效保证迁移前后密码能力的一致性。若是处于手动迁移的情况,为了使正确迁移虚拟机到同一集群cluster中,应用程序可以调用openstack提供的cluster这一组restapi,通过云操作系统中获取/修改cluster的信息,最终实现虚拟机迁移的范围控制,虚拟机迁移范围的实现如图6所示:

1)自动列举某虚拟机迁移时的合法目的主机列表:

调用get/v1/cluster/{cluster_id}从openstack中获取该cluster中合法主机。

2)为某cluster添加/删除主机:

调用post/v1/cluster/{cluster_id},通过openstack实现主机的添加/移除。

本实施例构建虚拟机迁移消息监听模块,由于整体的设计方案是在openstack云管理系统的基础上搭建的,所以消息监听模块也是基于该系统的消息队列的请求机制来完成,当发出虚拟机迁移的请求后,该模块会调用消息队列中的对象来检测对象间是否已经完成了请求操作,从而监听模块对该操作进行一个反馈,获取虚拟机迁移过程的消息。

为了保证虚拟机在迁移时的安全性及一致性,在真正迁移之前需要监听虚拟机是否迁移成功的消息(包括openstack自发迁移和手动迁移),才能更新信息。为了监听虚拟机迁移相关的信息,开发迁移消息监听模块,部署于各计算节点。当虚拟机迁移时,首先调用nova中def_migrate_live()方法,该方法会调用live_migrate()方法。live_migrate()方法除了更新实例信息,还会在主题topic的模式上发送实时迁移虚拟机的消息。虚拟机迁移时需要监听的信息流如图7。

1)监听模块持续监听nova的live_migrate()方法是否发送虚拟机迁移消息;

2)如果监听模块监听到主题topic的模式上发送的实时迁移虚拟机消息,则进行下一步;

3)监听模块持续监听nova的compute_rpcapi.live_migration()方法的返回结果;

4)如果监听模块监听到虚拟机和主机的信息,则进行下一步;

5)监听模块持续监听nova的wait_for_live_migration()方法的返回结果,直到监听到迁移成功消息。

openstack中各组件间的交互是通过rabitmq完成的,而本方案中的消息监听模块就是基于该消息队列的请求机制来实现的。当发出虚拟机迁移的指令时,该监听模块就会调用消息队列中的对象来检测是否完成请求的操作,监听模块对该操作存在反馈,获取虚拟机迁移过程的消息。整个监听模块设计如8所示,分两个部分,消息获取机制及依据获取内容实现机制。为了实现程序的松耦合性,在rabbitnode中当消息由交换器转发至消息队列queue后,通过消息获取模块,获取进入消息队列的信息,通过该部分,以达到监听虚拟机是否进行迁移、迁移详细信息、迁移是否成功等内容。

消息获取模块实现类图如图9所示,实现思路如下:

1)首先创建service类和connection类,service类调用crerate_connection()方法来建立连接,方法会返回一个connection对象corm,通过corm对象建立与rabbitmq的连接,该对象进行rabbitmq的打开与关闭。

2)service类通过connection类的create_consumer()方法创建消息消费者。

3)declare_consumer()方法对topicconsumer()类进行实例化,并保证消费者创建成功,topicconsumer类继承自consumerbase类。

4)service类通过connection类的consume方法激活消费者。connection类的consume()方法最终会调用consumerbase类的consume()方法。

5)consumerbase()类中的_callback方法,来进行分发和处理rpc请求。

6)在consumerbase()类中的_callback方法中,定义了一个_call_()的方法,该方法存在于proxycallback类中,用于获取队列中的信息。

7)最终在ca1lwaite:类中返回结果。

当虚拟机出现迁移行为时,首先,迁移消息到达control_exchange交换器,由该交换器转发给消息队列后,消息获取模块获取迁移信息取,并添加listertopic1类,创建该类的对象接收_callu_方法返回的信息,同理,将后续消息队列中的信息以同样方式获取到监听模块,分别创建listertopic2类、listertopic3类的对象进行信息接收,并创建topiccollect()公共类,定义对象与generaltopicmsg[]数组对listertopic进行汇总,迁移完成。

综上,本实施例通过配对签标示虚拟机镜像以及它的进程,将不同的进程和镜像分开,从而使其做到一对一,不是配对标签的镜像和进程无法进行访问,实现了资源的安全隔离。限制了可能存在的恶意访问。

在虚拟机迁移中添加了迁移范围控制模块以及监听模块,首先通过迁移范围的划分将虚拟机的迁移范围有效控制,其次,设计了监听模块,安装在各计算节点上,时刻监听虚拟机的迁移消息,保证虚拟机的正确而有效的迁移(实现迁移过程透明、迁移前后一致)。

功能层的配置将虚拟机的安全性提升很多,它可与云操作管理系统较好地结合在一起。

以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

上述虽然结合附图对本发明的具体实施方式进行了描述,但并非对本发明保护范围的限制,所属领域技术人员应该明白,在本发明的技术方案的基础上,本领域技术人员不需要付出创造性劳动即可做出的各种修改或变形仍在本发明的保护范围以内。

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