发明内容
本发明的目的在于,采用物理隔离的方法,解决虚拟化中对内存数据的软件攻击。和内存加密技术相比,本发明可以阻止恶意软件对加密过程的侧信道攻击,并且有效消除由于内存加密而引起的性能下降问题。同时,本发明中的内存隔离方案也可以防止虚拟机监控器(Virtual Machine Moni tor,VMM)、Kernel等***软件对客户虚拟机Guest OS的数据窃取,增加了虚拟化中Guest OS的安全性。
为实现上述目的,本发明提供了获取客户虚拟机的状态信息;获取客户虚拟机要求访问的内存的物理地址;根据物理地址查询用于记录各个内存页面的访问权限属性的线性映射表,获取所属物理地址所在页面的访问权限属性;将状态信息和访问权限属性进行匹配,根据匹配结果允许或拒绝本次内存访问。
优选地,该方法还包括:在获取客户虚拟机的状态信息后,获取安全处理器SP和虚拟机监控器VMM的状态信息。
优选地,物理地址是客户虚拟机发出的虚拟地址经过内存映射单元转化得到的。
优选地,客户虚拟机状态信息包括该虚拟机的VMID,即第一VMID,访问权限属性包括允许访问该内存页面的客户虚拟机的VMID,即第二VMID;
将状态信息和访问权限属性进行匹配,根据匹配结果允许或拒绝本次内存访问包括:判断第一VMID与第二VMID是否相等,如果相等,则允许本次访问。
优选地,线性映射包括:根据内存地址的从低到高,以映射表的第一项至最后一项,来对整个内存进行一一映射。
优选地,线性映射表保存在一块物理连续的内存中。
优选地,线性映射表中的表项有三种状态:未初始化状态、空闲状态和使用状态;
在未初始化状态下,表项中的内容为随机值或不可信的值;
在空闲状态下,线性映射表中的内容为默认值;
在使用状态下,表项中的访问权限正在保护所对应的客户虚拟机。
进一步优选地,根据虚拟机监控器VMM的行为改变线性映射表中表项的状态,改变线性映射表的状态包括:
当VMM初始化时,线性映射表中的内容被设置为初始值,同时,将线性映射表设置为只有安全处理器SP可以访问;
当VMM启动一个客户虚拟机时,SP将客户虚拟机所使用的物理内存对应的表项的空闲状态修改为使用状态;
当VMM关闭一个客户虚拟机时,由SP清除线性映射表中表项的内容,设置为初始值,将性映射表中表项的使用状态修改为空闲状态。
本发明的有益效果是:本发明通过一种在虚拟机***中管理内存的方法,实现了虚拟化中不同客户虚拟机之间的内存物理隔离,和内存加密技术相比较,省去了加密过程带来的性能下降,提高了虚拟化的性能,同时也消除了黑客对加解密算法中的侧信道攻击,提高了Guest OS的安全性和性能。
具体实施方式
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
图1为本发明实施例提供的一种在虚拟机***中管理内存的方法流程示意图;如图1所示,该方法包括:
步骤S101:获取客户虚拟机的状态信息;
步骤S102:获取客户虚拟机要求访问的内存的物理地址;
步骤S103:根据物理地址查询用于记录各个内存页面的访问权限属性的线性映射表,获取所属物理地址所在页面的访问权限属性;
步骤S104:将状态信息和访问权限属性进行匹配,根据匹配结果允许或拒绝本次内存访问。
具体的,该方法还包括:在获取客户虚拟机的状态信息后,获取安全处理器SP和虚拟机监控器VMM的状态信息。
具体的,物理地址是虚拟机发出的虚拟地址经过内存映射单元转化得到的。
具体的,客户虚拟机状态信息包括该虚拟机的VMID,即第一VMID,访问权限属性包括允许访问该内存页面的客户虚拟机的VMID,即第二VMID;
将状态信息和访问权限属性进行匹配,根据匹配结果允许或拒绝本次内存访问包括:判断第一VMID与第二VMID是否相等,如果相等,则允许本次访问。
具体的,线性映射表用于将内存进行线性映射,记录各个物理地址对应的访问权限属性。
具体的,线性映射包括:根据内存地址的从低到高,以映射表的第一项至最后一项,来对整个内存进行一一映射。
图2为本发明实施例提供的一种虚拟机***管理内存工作过程示意图。如图2所示,该实施例中的LMAT为线性属性映射表(Linear map attributetable,LMAT)108,中央处理器(Central Process ing Unit,CPU)103上运行有一个或多个客户虚拟机,客户虚拟机101、客户虚拟机102代表虚拟化中两个不同的客户操作***Guest OS;
相应地,在图1的步骤S101,客户虚拟机101发出的虚拟地址112经过虚拟地址映射单元或内存映射单元105转换为物理地址114,该转换的过程可能涉及到转换检测缓冲区(Trans lat ion Lookas ide Buffer,TLB)查询、***页表查询以及虚拟化中嵌套页表(nested page table)的查询等,本领域技术人员已知该转换过程,不再赘述。
相应地,在图1的步骤S102,权限管理逻辑电路(memory permiss ionmanagementuni t,MPMU)107就可以获取到转换后的物理地址114和当前CPU中发起内存访问的虚拟机VMID113信息;
其中,被访问的物理地址114位于***内存中的第n个页面page111中,该page在LMAT108中的映射为index110;
在图1的步骤S103,MPMU107根据物理地址114读取index110中的内容,即物理地址所在页面对应线性映射表中的访问权限属性信息,并在步骤S104,和当前的虚拟机的状态信息行匹配,根据对比的结果允许或拒绝本次内存访问;
如果允许访问,则MPMU107将该访问信号发给内存控制器106,通过内存控制器106对内存109进行读、写操作。
为了增加线性属性映射表的安全性,只允许SoC中的安全处理器104对线性属性映射表LMAT108进行数据更新以及清除等操作。
具体地,LMAT将***内存(DDR)以物理页面为单位进行映射,LMAT中的每一项对应DDR中的一个物理页面(page),并包含了该page所属Guest OS的状态信息。线性映射是指根据内存地址的从低到高,以线性映射表的第一项至最后一项,来对整个***内存进行一一映射。LMAT的大小由***内存大小、***一个page的大小以及LMAT中一个table index的大小共同决定。给定任意一个内存物理地址,都能以物理页面单位索引到该地址在***内存中的index,该index即与该内存地址对应的LMAT中的index相等。例如***内存的起始物理地址为start_address,一个page的大小为page_s ize,则给定任意物理地址phys ical_address,在LMAT中的index可以通过以下公式计算:
图3为本发明实施例提供的一种两个客户虚拟机对不同物理地址的访问示意图,如图3所示,Guest OS201和Guest OS202分别发起对物理地址210和物理地址211的访问。MPMU205获取上述物理地址210和211,以及两个虚拟机的ID,然后根据物理地址和虚拟机的VMID,查询LMAT207,同时LMAT207中VMID208和VMID209分别映射了物理地址210和物理地址211,并分别写入了Gues t OS201和Guest OS202的VMID。
为了实现不同Guest OS之间的内存共享以及虚拟机监控器(virtual machinemoni tor,VMM)专属内存,可以在LMAT的table index中定义一些特殊用途的VMID。表1为一个包含有特殊用途的VMID分级示例表。
表1:包含特殊用途的8位VMID实例
在上表中,访问权限属性用特定的VMID指示出特出的内存访问权限属性,例如用属性值254指示出对应页面为共享页面,所有客户虚拟机均可访问;用属性值255指示出对应页面仅可以由安全处理器SP来操作。
相应地,在映射表包括指示出共享内存的属性值的情况下,GuestOS和VMM之间,不同Guest OS之间共享内存的方法包括:判断请求访问的页面对应的访问权限属性值,即第二VMID,是否等于上述指示共享内存的属性值,如果是,则不需要MPMU的裁决可直接允许本次内存访问。
在一个实施例中,映射表保存在一块物理连续的存储空间中;该存储空间从***内存中或片内随机存储器SRAM中预留。
本发明的实施例中,需要使用一块物理连续的内存空间保存LMAT。该连续内存所处的位置不受限制,或存在于SoC的片内SRAM中,或直接从***内存中预留出。同时,为了加速MPMU对LMAT的读取速度,MPMU内部可以现一个cache缓存机制,将频繁使用的LMAT tableindex缓存至MPMU内部,以加快MPMU的裁决速度。同时,为了增加LMAT的安全性,防止恶意代码对LMAT的篡改,该LMAT所属的内存空间只允许安全处理器Secure Processor(SP)进行改写,并且SP和VMM之间通过一套认证机制来保证合法的VMM向SP发起修改、更新LMAT的操作。
图4为本发明实施例提供的一种AMD-SP、VMM、MPMU和LMAT的关系示意图。
LMAT中table index的内容可以根据需求而进行扩展。例如,在某些GuestOS中,需要一些只读和不可执行的内存,可以扩展table index增加R、X两个bi t。图5为本发明实施例提供的一种增加只读、不可执行属性的LMAT示例图;图6为本发明实施例提供的一种增加虚拟化客户物理地址(Guest physical address)的LMAT示例图;图7为本发明实施例提供的一种增加GuestOS内部thread ID的LMAT示例图。
LMAT中的每一个index有三种状态:未初始化状态、空闲状态和使用状态:
(1)未初始化状态,指***启动时,LMAT中的内容为随机值或不可信的值,此时MPMU也处于未初始化状态,CPU对内存的访问将绕过MPMU的裁决逻辑;
(2)空闲状态,指LMAT中的内容为默认值,例如0,表示该index对应的page不属于任何Guest OS;
(3)使用状态,指LMAT中index对应page分配给某一Guest OS,正在被该Guest OS使用。
图8为LMAT这三种状态转换的状态图。
相应地,本发明实施例的方法还包括,根据虚拟机监控器VMM的行为改变线性映射表中不同index的状态:
当VMM初始化时,安全处理器SP将线性映射表中的内容初始化为初始值,同时,SP进行将线性映射表设置为只有SP可以访问;
具体的,当VMM初始化时,CPU将LMAT的起始地址发送给SP,SP根据该地址将LMAT中的内容初始化为初始值,同时,SP进行一定的权限配置将LMAT设置为只有SP可以访问的空间。另外,CPU也会根据LMAT的起始地址对MPMU进行初始化,使MPMU生效。
当VMM启动一个客户虚拟机时,SP将映射表中对应空闲状态修改为使用状态;
进一步具体的,当VMM启动一个Guest OS时,从***中分配内存
给该Guest OS使用。CPU根据这些内存的物理地址,计算出在LMAT中的索引项index,并将这些index和Guest OS的VMID发送给SP,SP根据VMID修改LMAT中的index。
当VMM关闭一个客户虚拟机时,由SP清除线性映射表中的对应index,将性映射表中对应使用状态修改为空闲状态。
进一步具体的,当VMM关闭一个Guest OS时,释放该Guest OS使用的内存。同样,CPU将这些内存的物理地址对应的index发送供SP,由SP清除LMAT中的对应index。
以上的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。