一种基于物理页地址分析的虚拟机内存隔离性检测方法与流程

文档序号:15348385发布日期:2018-09-04 23:02阅读:156来源:国知局
本发明涉及虚拟机安全
技术领域
:,尤其涉及一种基于物理页地址分析的虚拟机内存隔离性检测方法。
背景技术
::云计算是一种将池化的集群计算能力通过互联网向内外部用户提供弹性、按需服务的互联网新业务和新技术。虚拟化技术是云计算一项重要的基础性技术,通过虚拟机管理程序vmm(virtualmachinemonitor)或称为hypervisor(系统管理程序),访问宿主机上的所有硬件设备。当宿主机启动并调动hypervisor时,它会加载所有虚拟机上的操作系统,同时给每个虚拟机分配适量的网络cpu、磁盘和内存等物理资源。由vmm或hypervisor负责协调这些硬件资源的访问,同时也在虚拟机之间实施安全防护。云计算环境中多个用户共享资源,多个虚拟资源很可能被绑定到相同的物理资源上。从安全角度出发,虚拟机之间的资源应严格隔离,对此,国家相关标准规范作了明确要求。但是,如何测试、评价虚拟机内存隔离性,目前欠缺相应的技术手段和方法。在对虚拟化产品安全检测、云服务安全审查等测评活动中涉及虚拟机内存隔离性时,测评(评价)人员采用的方法通常包括两种:一是文档检查,查看是否采取了相关技术手段确保不同虚拟机之间的内存隔离;二是试验测试,典型做法是在物理机上新建虚拟机实现对物理内存的满占,再尝试新建虚拟机,如果失败则认为实现了内存隔离。上述两种方式显然不够严谨、不够科学,对于是否实现虚拟机之间的内存隔离不能提供明确、确实的证据。技术实现要素:本发明所要解决的技术问题是:面向虚拟化产品的内存隔离性检测难的问题,提供一种基于物理页地址分析的虚拟机内存隔离性检测方法,实现对虚拟机内存占用的底层透视检测,绘制虚拟机内存物理地址的分布图,寻找是否存在内存交叉重叠区域,对虚拟机是否确实进行内存隔离进行技术检测。本发明提供的一种基于物理页地址分析的虚拟机内存隔离性检测方法,包括以下步骤:获取虚拟机物理页基地址集合;获取虚拟机物理页读写权限;对比虚拟机物理内存信息。进一步,所述获取虚拟机物理页基地址集合的步骤包括:获取虚拟机内存的虚拟地址空间;根据所述虚拟地址空间获取所述物理页基地址。进一步,所述获取物理页基地址的步骤包括:获取页全局目录项物理地址;获取页中间目录项物理地址;获取页表项物理地址。进一步,所述获取虚拟机物理页读写权限的步骤包括:读取vm_area_struct结构体中的vm_flags标志;或者读取页表项标志位。进一步,所述读取页表项标志位获取虚拟机物理页读写权限的步骤包括:获取各页表项的r/w标志位,其中,r/w=0代表只读,r/w=1代表读写;若r/w=0,则停止读取,判断其所指向的所有物理页为只读;若r/w=1,则继续遍历,直到获取所有物理页属性,若各级页表项均满足r/w=1,则判断该物理页的读写权限为既可以读又可以写,否则,判断该物理页的读写权限为只读。进一步,所述对比虚拟机物理内存信息的步骤包括:在获取两台虚拟机内存的真实物理地址的基础上,对比两台虚拟机的物理内存地址是否有重叠区域,若没有,则判断为内存隔离;若有,进一步获取该重叠区域的读写权限,并检测该两台虚拟机对该重叠区域是否只有只读权限;若是,则判断为内存隔离成功,否则,判断为内存隔离失败。进一步,当虚拟化产品存在多台虚拟机时,随机选择虚拟机进行两两比较,若有一比较结果提示内存隔离失败,则判断为该虚拟化产品内存隔离失败。通过采用以上的技术方案,本发明的有益效果是:针对目前对虚拟化产品的内存隔离性检测方法空白的问题,提出了一种虚拟机内存隔离性检测方法,界定了虚拟机内存隔离的含义,为开展内存隔离检测奠定了基础;形成内存隔离检测的具体方法,并给出了内存隔离检测的具体实现途径,可为虚拟化产品内存隔离的安全测试、安全审查等提供技术支持。附图说明本发明将通过例子并参照附图的方式说明,其中:图1为本发明的虚拟机内存隔离性检测方法流程图;图2为获取虚拟机内存的虚拟地址空间方法流程图;图3为以三级页表映射机制来得到物理页基地址的过程示意图;图4为虚拟机物理页读写权限的获取方法示意图。具体实施方式本说明书中公开的所有特征,或公开的所有方法或过程中的步骤,除了互相排斥的特征和/或步骤以外,均可以以任何方式组合。本说明书中公开的任一特征,除非特别叙述,均可被其他等效或具有类似目的的替代特征加以替换。即,除非特别叙述,每个特征只是一系列等效或类似特征中的一个例子而已。在qemu-kvm虚拟化环境下,一个虚拟机vm相当于宿主机操作系统上的一个qemu进程,根据这一点来讲,“虚拟机内存隔离检测”等同于“对应的宿主机进程内存隔离检测”。进程内存隔离,指不同的进程所对应的真实物理内存之间不存在交叉或者重复的状态。然而由于进程间共享内存或者ksm(内核相同页合并)等技术的使用,进程所对应的真实物理地址之间存在重叠的现象。因此,在这里对虚拟机内存隔离做如下的定义:(1)进程之间不重叠的内存要做到真实的物理空间上的隔离;(2)进程之间重叠的内存,确保进程对其拥有只读权限,做到逻辑隔离。据此,虚拟机a和虚拟机b之间的内存隔离检测方法就是:分别遍历出虚拟机a和b所对应的所有内存的真实物理的地址,分别记为集合pa(a)和pa(b),如果pa(a)和pa(b)之间没有交集,则虚拟机a和b处于内存隔离状态;如果pa(a)与pa(b)之间存在交集,得到该交集的物理地址,查询虚拟机a和b对该部分物理内存的权限设置,保证虚拟机a和b对该部分物理内存只有读权限,否则,报警出现内存不隔离的现象。由于物理内存是以固定大小的页(比如:4kb)为单位进行分配的,而且每个物理页中包含的物理内存的读写权限都是一样的,于是上述的集合pa(a)和pa(b)中可以不用遍历所有的物理地址,只要分别存储相应虚拟机使用的物理页的基地址即可。如图1所示,本发明的一种基于物理页地址分析的虚拟机内存隔离性检测方法,包括:获取虚拟机物理页基地址集合;获取虚拟机物理页读写权限;对比虚拟机物理内存信息。前两个步骤的所用信息从hypervisor获取,实现对虚拟机内存占用的底层透视检测能力。在一个实施例中,该虚拟机内存隔离性检测方法的具体过程如下:1、虚拟机物理页基地址集合的获取(1)虚拟机虚拟地址获取虚拟机是宿主机上的一个用户态进程,于是虚拟机物理页也就是该进程的物理页。基于linux的进程内存空间的映射机制,涉及到两种内存地址空间:虚拟地址空间和物理地址空间,虚拟地址通过分页机制映射到物理地址,因此,要想获得进程的物理地址,需要首先获得其虚拟地址。如图2所示。在一个实施例中,虚拟地址获取步骤如下:第一步,在获得虚拟机对应的task_struct进程结构体后,得到mm_struct内存描述符。第二步,在mm_struct结构体中找到vm_area_struct结构体。通过vm_area_struct链表遍历出该进程使用的所有内存虚拟地址空间。其中,task_struct:进程结构体,内核用来管理某个进程,唯一对应每个进程。mm_struct:进程的虚拟地址空间描述符,唯一对应每个进程。描述了进程所使用的所有虚拟地址空间,该结构体中保存了进程内存地址空间多级页表映射过程中所使用的页全局目录首地址pgd。vm_area_struct:mm_struct有一个vm_area_struct结构体变量的组成的链表,进程的虚拟地址空间被划分为多个内存段,每个内存段对应一个vm_area_struct结构体,每个vm_area_struct结构体包含多个虚拟地址空间的页。(2)虚拟机物理页基地址获取在获取虚拟地址后,进而需要获取虚拟机物理页基地址。由于虚拟内存地址空间对应于物理地址内存空间,同样以页为单位来划分,而且页的大小和物理页是一样的,可划分每一个vm_area_struct对象对应的虚拟地址空间为多个页,然后查询每个页对应的物理页的基地址。在一个实施例中,假设得到一个虚拟地址va,以三级页表映射机制来得到va对应的物理页基地址的过程,如图3所示。假设一个虚拟地址64位,按照9-9-9-12三级页表映射的规则,64位中只有39位是有效的,将这39位划分为四部分:pgd_offset(占9位)、pmd_offset(占9位)、pte_offset(占9位)和page_offset(占12位)。获取物理页基地址的过程具体如下:第一步,通过mm_struct结构体来确定该进程内存地址空间对应的页全局目录的首地址pgd,然后把虚拟地址va中的pgd_offset(占9位)部分作为页全局目录的偏移,通过相加操作可以得到虚拟地址va对应的页全局目录中的一项pgd_t,这便是内核函数pgd_offset(mm_struct,va)所做的工作。第二步,由于pgd_t指向一个页中间目录的首地址,然后再把虚拟地址va中的pmd_offset(占9位)部分作为页中间目录的偏移,通过相加操作可以得到虚拟地址va对应的页中间目录中的一项pmd_t,这便是内核函数pmd_offset(pgd_t,va)所做的工作。第三步,由于pmd_t指向一个页表的首地址,然后把虚拟地址va的pte_offset(占9位)部分作为页表的偏移,通过相加操作可以得到页表中的一项pte_t。第四步,由于pte_t直接指向一个物理页的基地址,然后把虚拟地址的page_offset(占12位)部分作为该物理页中的偏移,通过相加操作可以得到该虚拟地址va对应的真实物理地址pa。由于我们只需要得到一个虚拟地址所对应的物理页的基地址,于是在第三步的时候,便可以获得一个虚拟机对应的所有的物理页基地址的集合。其中,pgd、pmd、pte分别是pageglobaldirectory(页全局目录)、pagemiddledirectory(页中间目录)、pagetableentry(页表)。pgd_t:页全局目录中的一项,指向一个页中间目录的首地址。pmd_t:页中间目录中的一项,指向一个页表的首地址。pte_t:页表中的一项,指向一个物理页的基地址。pgd_offset(mm_struct,va):内核函数,传入进程内存描述符结构体mm_struct和该进程所使用的一个虚拟地址va,返回该虚拟地址对应的页全局目录中的一项pgd_t。pmd_offset(pgd_t,va):内核函数,传入页全局目录中的一项pgd_t和虚拟地址va,返回页中间目录中的一项pmd_t。pte_offset(pmd_t,va):内核函数,传入页中间目录中的一项pmd_t和虚拟地址va,返回页表中的一项pte_t。2、虚拟机物理页读写权限的获取有两种途径可以获取一个物理页的读写权限,具体如下:途径一:通过vm_area_struct结构体中的vm_flags标志,该标志中有vm_read/vm_write的授权信息,该信息对该vm_area_struct对象映射的所有物理页生效。这种读写权限映射的粒度比较大,以vm_area_struct所映射的物理内存为基本单位。途径二:通过对分页机制中页表访问权限的查询,获取虚拟机物理页读写权限。基于以下既定规则:pgd、pmd、pte各页表项读写权限存储于页表项r/w标志位(bit1)上,r/w=0代表只读、r/w=1代表读写,且:(1)某页表项的r/w=0,则该页表项所指向的所有下级页表项或者物理页的读写权限均为r/w=0;(2)从虚拟地址到物理地址的映射过程中,只有在各级页表项都满足r/w=1的情况下,该物理页表才既可以读又可以写。由此,虚拟机物理页读写权限的获取的具体方法是:获取对各页表项r/w标志位,如r/w=0,则可停止读取,判断其所指向的所有物理页为只读;如r/w=1,则可继续遍历。过程如图4所示,例如在“a”“c”处判断为pgd下所有存在的物理页为只读,停止遍历;在“b”“d”处继续遍历查询,直到获取所有物理页属性。3、虚拟机物理内存信息对比在一个实施例中,以虚拟机a和b内存隔离性检测为例:第一步,获取得到虚拟机a和b所对应的所有内存的真实物理地址(分别记为pa(a)和pa(b)),对比pa(a)和pa(b)是否有重叠区域,如没有,则判断虚拟机a和b处于内存隔离状态;如有(记为pa(c)),进行第二步。第二步,获取pa(c)物理页读写权限,检测虚拟机a和b是否只对其有只读权限。如是,则判断虚拟机a和b内存隔离成功;如不是,则判断虚拟机a和b内存隔离失败。在实际虚拟化产品内存隔离性检测中,可同时启动多台虚拟机,随机选择虚拟机进行两两比较。如果有一比较结果提示内存隔离失败,则判断虚拟化产品达不到内存隔离要求。本发明并不局限于前述的具体实施方式。本发明扩展到任何在本说明书中披露的新特征或任何新的组合,以及披露的任一新的方法或过程的步骤或任何新的组合。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1