发明内容
有鉴于此,本发明实施例提供一种虚拟可信环境加载、运行方法、数据处理及安全处理装置,使得应用程序能够通过加密虚拟机运行飞地代码。
首先,本发明实施例提供了一种虚拟可信环境加载方法,应用于主机内核,所述加载方法包括:
获取来自应用程序在加密虚拟机的存储空间创建飞地的配置请求,其中,所述配置请求中包含所述飞地的存储信息;
根据所述配置请求中包含的飞地的存储信息,为所述飞地建立嵌套页表;向安全处理装置发送加密虚拟机初始化指令,所述初始化指令中包含所述嵌套页表中的虚拟机物理地址,使得所述安全处理装置为所述飞地执行加密虚拟机初始化操作,包括:建立所述飞地对应于所述虚拟机物理地址的虚拟机页表;将所述加密虚拟机的系统代码和数据复制到所述加密虚拟机的存储空间中;
根据来自所述安全处理装置的加密虚拟机初始化完成消息,执行加密虚拟机运行操作,并向所述应用程序返回所述加密虚拟机初始化完成消息;
获取来自所述应用程序的飞地代码加载请求并转发至所述安全处理装置,使得所述安全处理装置将所述应用程序的飞地代码复制到所述加密虚拟机的存储空间。
可选的,所述配置请求还包括所述飞地的完整性校验信息;
所述方法还包括在获取来自所述应用程序的飞地代码加载请求之前,向所述安全处理装置发送所述飞地的完整性校验信息,使得所述安全处理装置存储所述飞地的完整性校验信息;
所述加载请求中还包含所述飞地的完整性校验信息,使得所述安全处理装置基于所存储的飞地的完整性校验信息对所述加载请求对应的飞地进行完整性校验。
可选的,所述完整性校验信息包括以下至少一种:度量信息、签名验证信息。
本发明实施例提供了另一种虚拟可信环境加载方法,应用于安全处理装置,所述安全处理装置存储有加密虚拟机的系统代码和数据,所述加载方法包括:
接收来自主机内核的加密虚拟机初始化指令以及包含嵌套页表中的虚拟机物理地址的消息,所述嵌套页表和所述加密虚拟机初始化指令基于应用程序在加密虚拟机的存储空间创建飞地的配置请求生成;
根据所述加密虚拟机初始化指令以及包含嵌套页表中的虚拟机物理地址的消息,执行加密虚拟机初始化操作,包括:建立所述飞地对应于所述虚拟机物理地址的虚拟机页表;将所述加密虚拟机的系统代码和数据复制到所述加密虚拟机的存储空间中;将所述加密虚拟机初始化完成的消息发送至所述主机内核,使得所述主机内核执行加密虚拟机运行操作;
接收所述主机内核转发的应用程序的飞地代码加载请求,将所述应用程序的飞地代码复制至所述加密虚拟机的存储空间。
可选的,所述加载请求中还包含所述飞地的完整性校验信息;所述加载方法还包括:
在接收所述飞地代码加载请求之前,接收所述主机内核发送的包含飞地的完整性校验信息的消息并对所述飞地的完整性校验信息进行存储,所述飞地的完整性校验信息为所述主机内核从所述应用程序的配置请求中获取;
将所存储的飞地的完整性校验信息与所述加载请求包含的完整性校验信息进行匹配,完成对应飞地的完整性校验。
可选的,所述完整性校验信息包括以下至少一种:度量信息、签名验证信息。
本发明实施例还提供了一种可信环境运行方法,应用于主机内核,所述运行方法包括:
获取来自应用程序的飞地代码调用请求;
将所述飞地代码调用请求转发至安全处理装置,使得所述安全处理装置更新所述飞地代码对应的加密虚拟机的存储信息;
根据所述飞地代码调用请求,切换至虚拟机模式,执行所述加密虚拟机中的跳转代码,在所述加密虚拟机的存储空间中为所述飞地分配存储空间,使得所述应用程序执行所述飞地代码。
可选的,当检测异常退出事件时,确定所述异常退出事件的所属类型,并根据所述异常退出事件的所属类型,采用相应的异常事件处理方式进行处理。
可选的,所述当检测异常退出事件时,确定所述异常退出事件的所属类型,并根据所述异常退出事件的所属类型,采用相应的异常事件处理方式进行处理,包括:
当确定所述异常退出事件的所属类型为虚拟机页表缺页异常时,将虚拟机页表缺页信息和虚拟机页表缺页异常的虚拟机虚拟地址发送至安全处理装置;
根据所述安全处理装置对所述虚拟机页表缺页异常的页表页内存的判断结果,对所述缺页异常进行相应处理。
可选的,所述根据所述安全处理装置对所述虚拟机页表缺页异常的页表页内存的判断结果,对所述缺页异常进行相应处理,包括:
当所述安全处理装置确定所述虚拟机页表缺页异常的页表页内存不足时,为所述加密虚拟机分配新的虚拟机页表页内存,并为所述新的虚拟机页表页内存建立对应的嵌套页表,以及将新的虚拟机页表页信息发送至安全处理装置。
可选的,所述当检测异常退出事件时,确定所述异常退出事件的所属类型,根据所述异常退出事件的所属类型,采用相应的异常事件处理方式进行处理,包括:
当确定所述异常退出事件的所属类型为嵌套页表缺页异常时,更新对应于嵌套页表中虚拟机物理地址与主机物理地址的映射关系;
将更新后的嵌套页表发送至安全处理装置,使得所述安全处理装置对所述嵌套页表中的虚拟机物理地址进行加密处理。
可选的,所述当确定所述异常退出事件的所属类型为嵌套页表缺页异常时,更新所述嵌套页表中虚拟机物理地址与主机物理地址的映射关系,包括:
获取对应于所述嵌套页表缺页异常的虚拟机物理地址;
根据所述嵌套页表缺页异常的虚拟机物理地址,获取所述应用程序对应的页表中的主机物理地址,并锁定所述主机物理地址;
根据锁定的主机物理地址和所述虚拟机物理地址的对应关系,更新所述缺页异常的嵌套页表。
可选的,所述当检测异常退出事件时,确定所述异常退出事件的所属类型,并根据所述异常退出事件的所属类型,采用相应的异常事件处理方式进行处理,包括:
当确定所述异常退出事件的所属类型为未定义指令时,请求安全处理装置解析所述未定义指令;
根据所述安全处理装置的解析结果,对所述未定义指令进行相应处理。
可选的,所述根据所述安全处理装置的解析结果,对所述未定义指令进行相应处理,包括以下至少一种:
当确定所述解析结果属于SGX的退出指令时,退出虚拟机模式,继续所述应用程序的运行;
当确认所述解析结果不属于SGX的退出指令,则退出虚拟机模式,并通知所述应用程序处理异常。
可选的,所述当检测异常退出事件时,确定所述异常退出事件的所属类型,并根据所述异常退出事件的所属类型,采用相应的异常事件处理方式进行处理,包括:
当确定所述异常退出事件的所属类型为其他类型时,退出虚拟机模式,并通知所述应用程序终止运行。
本发明实施例提供了另一种虚拟可信环境运行方法,应用于安全处理装置,所述安全处理装置存储有加密虚拟机的系统代码和数据,所述运行方法包括:
获取来自主机内核转发的飞地代码调用请求;
根据所述飞地代码调用请求更新所述飞地代码对应的加密虚拟机的存储信息;
将所述飞地代码对应的加密虚拟机的存储信息更新完成消息发送至所述主机内核,使得所述主机内核执行虚拟机运行操作。
可选的,根据所述主机内核确定的异常退出事件的所属类型,采用相应的异常事件处理方式进行处理。
可选的,所述根据所述主机内核确定的异常退出事件的所属类型,采用相应的异常事件处理方式进行处理,包括:
当接收到所述主机内核处理虚拟机页表缺页异常的消息时,根据所述虚拟机页表缺页异常的消息中的虚拟机虚拟地址,确定缺页原因,并向所述主机内核反馈所述虚拟机页表的缺页原因;以及根据所述缺页异常的消息更新对应的虚拟机页表,并对所述缺页异常的消息中的虚拟机虚拟地址进行加密。
可选的,所述根据所述主机内核确定的异常退出事件的所属类型,采用相应的异常事件处理方式进行处理,包括:
当接收到所述主机内核处理虚拟机嵌套页表缺页异常的消息时,从主机内核获取更新后的嵌套页表,并对所述更新后的嵌套页表中的虚拟机物理地址进行加密。
可选的,所述根据所述主机内核确定的异常退出事件的所属类型,采用相应的异常事件处理方式进行处理,包括:
当接收到所述主机内核处理执行未定义指令的消息时,获取来自所述主机内核解析所述未定义指令的请求;
将所述未定义指令的解析结果发送至所述主机内核,使得所述主机内核根据所述解析结果处理所述未定义指令。
本发明实施例一种数据处理装置,包括:
配置请求获取单元,适于获取来自应用程序在加密虚拟机的存储空间创建飞地的配置请求,其中,所述配置请求中包含所述飞地的存储信息;
嵌套页表建立单元,适于根据所述配置请求中包含的飞地的存储信息,为所述飞地建立嵌套页表;
初始化处理单元,适于向安全处理装置发送加密虚拟机初始化指令,所述初始化指令中包含所述嵌套页表中的虚拟机物理地址,使得所述安全处理装置为所述飞地执行加密虚拟机初始化操作,包括:建立所述飞地对应于所述虚拟机物理地址的虚拟机页表;将所述加密虚拟机的系统代码和数据复制到所述加密虚拟机的存储空间中;
加密虚拟机运行单元,适于根据来自所述安全处理装置的加密虚拟机初始化完成消息,执行加密虚拟机运行操作,并向所述应用程序返回所述加密虚拟机初始化完成消息;
飞地加载请求单元,适于获取来自所述应用程序的飞地代码加载请求并转发至所述安全处理装置,使得所述安全处理装置将所述应用程序的飞地代码复制到所述加密虚拟机的存储空间。
本发明实施例还提供了一种安全处理装置,包括:
初始化执行单元,适于接收来自主机内核的加密虚拟机初始化指令和包含嵌套页表中的虚拟机物理地址的消息,所述嵌套页表和所述加密虚拟机初始化指令基于应用程序在加密虚拟机的存储空间创建飞地的配置请求生成;
虚拟机页表建立单元,适于根据所述加密虚拟机初始化指令和包含嵌套页表中的虚拟机物理地址的消息,执行加密虚拟机初始化操作,包括:建立所述飞地对应于所述虚拟机物理地址的虚拟机页表;
飞地加载处理单元,适于接收来自主机内核转发的应用程序的飞地代码加载请求,将所述应用程序的飞地代码复制至所述加密虚拟机的存储空间。
可选的,所述的安全处理装置还包括完整性校验单元,适于获取来自所述应用程序的飞地代码加载请求,所述加载请求中包含飞地的完整性校验信息,使得所述安全处理装置根据所述加载请求,基于所存储的飞地的完整性校验信息对所述加载请求对应的飞地进行完整性校验,其中,所存储的飞地的完整性校验信息来自所述主机内核,由所述主机内核从所述配置请求中获取。
本发明实施例还提供了一种数据处理装置,包括:
飞地代码调用单元,适于获取来自应用程序的飞地代码调用请求;
加密虚拟机运行单元,适于根据所述飞地代码调用请求,切换至虚拟机模式,执行所述加密虚拟机中的跳转代码,在所述加密虚拟机的存储空间中为所述飞地分配存储空间,使得所述应用程序执行所述飞地代码。
可选的,所述的数据处理装置,还包括:异常退出事件处理单元,适于根据所述异常退出事件的所属类型,采用相应的异常事件处理方式进行处理。
本发明实施例还提供了另一种安全处理装置,包括:
飞地代码执行单元,适于获取来自主机内核转发的飞地代码调用请求;
存储信息更新单元,适于根据所述飞地代码调用请求更新所述飞地代码对应的加密虚拟机的存储信息;
更新信息反馈单元,适于将所述飞地代码对应的加密虚拟机的存储信息更新完成消息发送至所述主机内核,使得所述主机内核执行虚拟机运行操作。
可选的,安全处理装置还包括异常退出事件执行单元,适于根据所述主机内核确定的异常退出事件的所属类型,采用相应的异常事件处理方式进行处理。
采用本发明实施例的虚拟可信环境加载方法,由主机内核根据应用程序在加密虚拟机的存储空间创建飞地的配置请求中包含的飞地的存储信息,为飞地在加密虚拟机建立嵌套页表,同时向安全处理装置发送加密虚拟机初始化指令,完成加密虚拟机的初始化操作。然后运行所述加密虚拟机,并向安全处理装置转发来自所述应用程序的飞地代码加载请求,使得所述安全处理装置将飞地的代码和数据复制到加密虚拟机中,完成虚拟可信环境的加载。由上述过程可知,可以将飞地的代码和数据加载到加密虚拟机的存储空间中,进而应用程序可以通过访问加密虚拟机实现飞地代码的调用和运行。
进一步的,由安全处理装置在加密虚拟机初始化过程中存储所述飞地的完整性校验信息,通过所述安全处理装置存储的完整性校验信息与所述飞地加载请求包含的完整性校验信息进行匹配,完成对应飞地的完整性校验可以防止飞地代码被非法篡改,保证飞地代码的完整性。
采用本发明实施例的虚拟可信环境运行方法,由主机内核接收来自应用程序的飞地代码调用请求并转发至安全处理装置,由所述安全处理装置更新所述飞地代码对应的加密虚拟机的存储信息,之后所述主机内核根据所述飞地代码调用请求,切换至虚拟机模式,执行加密虚拟机中的跳转代码,并在加密虚拟机的存储空间为所述飞地分配存储空间,使得所述应用程序执行所述飞地代码。由上述虚拟可信环境运行过程可知,无需SGX特有的调用指令基于应用程序的飞地代码调用请求,主机内核可以自动进入虚拟机模式,完成对存储于所述加密虚拟机的存储空间的飞地代码的调用。
进一步的,由主机内核检测异常退出事件,确定所述异常退出事件的所属类型,并根据所述异常退出事件的所属类型,采用相应的异常事件处理方式进行处理,可以防止恶意程序破坏当前虚拟可信环境,使得所述虚拟可信环境可以有效地抵御外部干扰。
具体实施方式
如背景技术所述,目前,SGX技术通过配置一部分独立的安全内存PMR提供飞地可信执行环境,可以保护数据的安全性。
为了更清楚的说明SGX技术中飞地可信执行环境的创建和调用流程,以下通过附图进行详细说明。
参照图1所示的一种飞地可信执行环境地址映射的示意图。其中,应用程序空间11可以划分为非可信地址空间111和可信地址空间112,其中,所述非可信地址空间111适于存储普通代码和数据,所述可信地址空间112适于存储飞地代码和数据;主机物理地址空间12可以划分为普通存储空间121和PMR122,其中,所述保留内存空间122适于运行飞地可信执行环境。
如图1所示,对于应用SGX技术的CPU,在BIOS启动时,在主机物理地址空间12配置一段PMR 122,并对所述保留内存空间进行加密和隔离,使得保留内存空间无法被主机操作系统使用,只能用来运行飞地可信程序,从而实现不同应用程序间的隔离。此外,应用程序中受保护的代码和数据经过一系列的签名验签信息等安全措施加载到PMR 122的安全区域,并建立飞地112与PMR122的地址映射关系,使得其他应用程序或主机操作系统13无法访问PMR122,从而确保飞地的安全性。
在SGX技术中,应用程序一般由可信代码和不可信代码构成。应用程序运行时,在一个特定的保护区域内(如PMR)创建和执行飞地,并可通过调用指令调用飞地。
如图2所述的一种飞地可行执行环境的创建和调用执行的示意图,其中应用程序包括可信程序和不可信程序,SGX应用程序执行过程可以包括如下步骤:
S20,不可信程序创建飞地,并通过一系列的签名验签的安全过程把飞地可信代码加载到可信内存中,完成飞地的创建。
S21,应用程序中不可信代码通过SGX专用调用指令ecall调用飞地中的可信函数,CPU进入到飞地可信执行环境(可信程序)。S22,可信程序执行飞地的可信代码,其中,所述飞地的可信代码可以访问当前进程的所有内存,而外部非可信代码不能访问飞地数据。S23,可信程序将执行飞地可信代码产生的结果,返回至应用程序。
S24,CPU切换到非飞地模式,执行非可信代码,不可信程序继续运行。
利用SGX技术提供的飞地可信执行环境,采用上述过程,可以在特定的CPU平台运行。然而,对于其他CPU平台的应用程序,不能运行飞地可信执行环境。
针对上述问题,本发明实施例通过将飞地的代码和数据复制到加密虚拟机的存储空间中,能够实现不受具体CPU平台限制的飞地可信执行环境方案。
具体而言,本发明实施例中,由应用程序发起在加密虚拟机的存储空间创建飞地的配置请求,主机内核响应于所述配置请求,在加密虚拟机中建立飞地的嵌套页表,然后由安全处理装置进行加密虚拟机的初始化操作,随后,由所述安全处理装置基于应用程序的飞地代码加载请求将飞地代码复制到加密虚拟机的存储空间中,完成虚拟可信环境的加载。飞地代码复制到加密虚拟机的存储空间后,所述加密虚拟机的存储空间就可以作为飞地的运行空间,因而,应用程序无需SGX技术特有的调用指令,通过访问加密虚拟机的存储空间,就可实现对飞地的调用。
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例的附图,对本发明实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。基于所描述的本发明的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
首先,为了实现应用程序能够通过加密虚拟机运行飞地代码,本发明实施例提供了相应的虚拟可信环境加载方法,参照图3所示的本发明实施例一种虚拟可信环境加载方法,所述加载方法可以应用于主机内核,具体可以通过如下步骤执行:
S31,获取来自应用程序在加密虚拟机的存储空间创建飞地的配置请求,其中,所述配置请求中包含所述飞地的存储信息。
具体而言,可以由主机应用程序发起在加密虚拟机创建飞地的配置请求。在具体实施中,可以由所述应用程序从应用程序的可信空间中获取飞地的存储信息,例如可以获取飞地的内存范围信息,并将所述配置请求发送主机内核。
在本发明一些实施例中,所述配置请求中还可以包括所述飞地的完整性校验信息,以用于飞地代码的完整性校验。
S32,根据所述配置请求中包含的飞地的存储信息,为所述飞地建立嵌套页表;向安全处理装置发送加密虚拟机初始化指令,以及发送包含所述嵌套页表中的虚拟机物理地址的消息,使得所述安全处理装置为所述飞地执行加密虚拟机初始化操作,包括:建立所述飞地对应于所述虚拟机物理地址的虚拟机页表;将所述加密虚拟机的系统代码和数据复制到所述加密虚拟机的存储空间中。
具体而言,主机内核可以根据获取的配置请求中的飞地的存储信息,为其在加密虚拟机的存储空间中建立对应的嵌套页表,即建立加密机虚拟机物理地址与飞地物理地址的映射关系,同时发起加密虚拟机初始化流程,向安全处理装置发送虚拟机初始化指令,使得所述安全处理装置执行加密虚拟机的初始化操作。
在具体实施中,所述主机内核可以在所述嵌套页表建立完成后,向安全处理装置发送的加密虚拟机初始化指令,所述加密虚拟化指令可以包含所述嵌套页表中的虚拟机物理地址,由所述安全处理装置根据所述虚拟机物理地址进行加密虚拟机的初始化操作。或者所述主机内核可以将所述加密虚拟机初始化指令和一包含嵌套页表的虚拟机物理地址的消息分别发送,例如可以先基于所述应用程序在加密虚拟机的存储空间创建飞地的配置请求,向所述安全处理装置发送所述加密虚拟机初始化指令,并在为所述飞地建立嵌套页表后,再向所述安全处理装置发送一个包含嵌套页表的虚拟机物理地址的消息。
所述安全处理装置的初始化操作具体可以包括:建立所述飞地对应于所述虚拟机物理地址的虚拟机页表,并将所述加密虚拟机的系统代码和数据复制到所述加密虚拟机的存储空间中。其中,所述虚拟机页表可以由安全处理装置进行维护。
S33,根据来自所述安全处理装置的加密虚拟机初始化完成消息,执行加密虚拟机运行操作,并向所述应用程序返回所述加密虚拟机初始化完成消息。
通过上述步骤S31~S32,可以完成飞地对应的加密虚拟机的初始化操作,可以由主机内核根据所述安全处理装置的加密虚拟机初始化完成消息,执行加密虚拟机运行操作,并将所述加密虚拟机初始化完成消息返回至所述应用程序。
S34,获取来自所述应用程序的飞地代码加载请求并转发至所述安全处理装置,使得所述安全处理装置将所述应用程序的飞地代码复制到所述加密虚拟机的存储空间。
具体而言,主机应用程序接收到加密虚拟机初始化完成消息后,可以发起飞地代码加载请求,由所述主机内核将飞地代码加载指令发送至安全处理装置,进而由所述安全处理装置将所述应用程序的飞地代码复制到所述加密虚拟机的存储空间。
作为可选示例,为了防止飞地代码被非法篡改,可以对飞地代码进行完整性校验。具体的,如前所述,所述应用程序发起的配置请求中还可以包括所述飞地的完整性校验信息,主机内核可以通过所述初始化指令或者一独立的消息将所述飞地的完整性校验信息转发至所述安全处理装置,即所述安全处理装置可以在初始化过程中获取并存储所述飞地的完整性校验信息,进而所述应用程序发起的飞地代码加载请求中也可以包含所述飞地的完整性校验信息,从而安全处理装置可以基于所存储的飞地的完整性校验信息对所述加载请求对应的飞地进行完整性校验,实现所述飞地的完整性校验。
在本发明到的一些实施例中,所述完整性校验信息可以包括度量信息和签名验签信息其中至少一种。
通过上述虚拟可信环境加载方法,由主机内核根据应用程序在加密虚拟机的存储空间创建飞地的配置请求中包含的飞地的存储信息,为飞地在加密虚拟机建立嵌套页表,同时向安全处理装置发送加密虚拟机初始化指令,完成加密虚拟机的初始化操作。然后运行所述加密虚拟机,并向安全处理装置转发来自所述应用程序的飞地代码加载请求,使得所述安全处理装置将飞地的代码和数据复制到加密虚拟机中,完成虚拟可信环境的加载。
由上述过程可知,可以将飞地的代码和数据加载到加密虚拟机的存储空间中,进而应用程序可以通过访问加密虚拟机实现飞地代码的调用和运行。
本说明书实施例还提供了另一种虚拟可信环境加载方法,参照图4所示的虚拟可信环境加载方法,可以应用于安全处理装置,所述安全处理装置存储有加密虚拟机的系统代码和数据。
所述虚拟可信环境的加载方法具体可以通过如下步骤执行:
S41,接收来自主机内核的加密虚拟机初始化指令以及包含嵌套页表中的虚拟机物理地址的消息,所述嵌套页表和所述加密虚拟机初始化指令基于应用程序在加密虚拟机的存储空间创建飞地的配置请求生成。
具体而言,所述安全处理装置可以根据所述加密虚拟机的初始化指令对加密虚拟机进行初始化操作。在本发明一些实施例中,如前实施例所述,所述嵌套页表中的虚拟机物理地址也可以作为所述加密虚拟机初始化指令中的部分信息一起发送至所述安全处理装置,所述嵌套页表和所述加密虚拟机初始化指令基于应用程序在加密虚拟机的存储空间创建飞地的配置请求生成。
S42,根据所述加密虚拟机初始化指令以及包含嵌套页表中的虚拟机物理地址的消息,执行加密虚拟机初始化操作,包括:建立所述飞地对应于所述虚拟机物理地址的虚拟机页表;将所述加密虚拟机的系统代码和数据复制到所述加密虚拟机的存储空间中;将所述加密虚拟机初始化完成消息发送至所述主机内核,使得所述主机内核执行加密虚拟机运行操作。
具体而言,安全处理装置可以根据初始化指令,执行加密虚拟机的初始化操作,其中,所述初始化操作具体可以包括:所述安全处理装置建立所述飞地对应于所述虚拟机物理地址的虚拟机页表,使得所述飞地的主机虚拟地址与加密虚拟机的虚拟机虚拟地址一致;并将所述加密虚拟机的系统代码和数据复制到所述加密虚拟机的存储空间中。完成加密虚拟机的初始化操作后,所述安全处理装置向主机内核发送所述加密虚拟机初始化完成消息,使得所述主机内核执行虚拟机运行操作,启动所述加密虚拟机。
S43,接收来自主机内核转发的应用程序的飞地代码加载请求,将所述应用程序的飞地代码复制至所述加密虚拟机的存储空间。
前述过程完成了加密虚拟机的启动,并建立了嵌套页表和虚拟机页表。加密虚拟机初始化完成后,安全处理装置接收来自主机内核转发的应用程序的飞地代码加载请求,并根据所述虚拟机页表和所述嵌套页表对应的地址映射关系,将所述应用程序的飞地的代码复制至加密虚拟机的存储空间中,完成虚拟可信环境的加载。
作为可选示例,所述安全处理装置可以对飞地进行完整性信息校验。具体的,安全处理装置可以在加密虚拟机初始化过程中获取所述飞地的完整性校验信息,例如可以接收到的加密虚拟机初始化指令中包含飞地的完整性校验信息,所述安全处理装置可以根据所述完整性校验信息对飞地进行校验。加密虚拟机启动后,飞地代码加载请求中也包含所述飞地的完整性校验信息,所述安全处理装置根据初始化过程中获取的完整性校验信息对加载请求中包含的完整性校验信息进行校验,保证飞地的代码和数据的完整性。
在本发明的一些实施例中,所述完整性校验信息至少包括度量信息和签名验签信息其中至少一种。
通过上述虚拟可信环境加载方法,由安全处理装置根据来自主机内核的加密虚拟机初始化指令,其中所述加密虚拟机初始化指令基于应用程序在加密虚拟机的存储空间创建飞地的配置请求生成,完成加密虚拟机的初始化,并根据主机内核转发的应用程序的飞地代码加载请求,将飞地代码复制至所述加密虚拟机的存储空间,完成虚拟可信环境的加载,从而所述加密虚拟机可以为飞地提供运行空间。
此外,安全处理装置根据加密虚拟机初始化指令和加载请求中的飞地的完整性校验信息,完成对飞地的完整性校验,从而可以防止在虚拟可信环境加载的过程中,飞地代码被非法篡改,保证飞地代码的完整性。
由上述过程可知,可以由安全处理装置飞地的代码和数据加载到加密虚拟机的存储空间中,进而应用程序可以通过访问加密虚拟机实现飞地代码的调用和运行。
参照图5所示的本发明实施例一种虚拟可信环境加载的示意图。如图5所示,应用程序用于发起创建飞地的配置请求,主机内核可以根据所述配置请求,建立嵌套页表,同时向安全处理装置发送加密虚拟机初始化指令,所述安全处理装置可以根据加密虚拟机初始化指令完成虚拟机初始化操作,然后由所述主机内核将加密虚拟机初始化完成消息发送至所述应用程序,再由所述应用程序发起飞地代码加载请求。
具体而言,所述虚拟可信环境加载过程可以包括以下步骤:
S500,安全处理器保存加密虚拟机系统的代码和数据。
在具体实施中,安全处理器内保存着虚拟机系统代码和数据,可以由安全处理器对加密虚拟机系统进行管理和维护,例如可以实现数据完整性校验、跳转和异常处理等其中至少一种方案,具体将在后续的虚拟可信环境运行方法实施例中进行详细描述。
S501,应用程序发起在加密虚拟机的存储空间创建飞地的配置请求并将所述配置请求发送至主机内核。
在具体实施中,所述配置请求可以包含所述飞地的存储信息,所述应用程序可以从应用程序的可信空间中获取飞地的存储信息,例如可以获取飞地的内存范围信息,之后,可以将所述在加密虚拟机的存储空间创建飞地的配置请求发送至所述主机内核。
S502,所述主机内核基于获取到的所述配置请求,发起加密虚拟机初始化过程,具体可以执行如下三个子步骤:
S502-1,向安全处理装置发送加密虚拟机初始化指令;
S502-2,为所述飞地在加密虚拟机中建立嵌套页表;
S502-3,所述主机内核向所述安全处理器发送包含所述嵌套页表中的虚拟机物理地址的消息。
其中,所述嵌套页表可以包含飞地的主机物理地址与加密虚拟机的虚拟机物理地址的映射关系。
作为可选示例,所述步骤S502-3中发送的消息还可以包括从所述配置请求中获取的完整性校验信息。
在具体实施中,也可以先执行步骤S502-2,之后再执行步骤S502-1和步骤S502-3;或者先执行步骤S502-2,步骤S502-3中传递的信息作为所述初始化指令中的附加信息一起发送至所述安全处理装置。
S503,所述安全处理装置进行加密虚拟机初始化操作。具体包括如下子步骤:
S503-1,为所述加密虚拟机建立虚拟机页表;
S503-2,把所述安全装置存储的加密虚拟机的系统代码和数据复制到加密虚拟机的存储空间中。
S504,在所述安全处理装置完成加密虚拟机初始化后,将加密虚拟机初始化完成消息发送至所述主机内核;
S505,所述主机内核在接收到所述加密虚拟机初始化完成消息后,执行加密虚拟机运行指令,启动加密虚拟机。
S506,在所述主机内核执行加密虚拟机运行指令,启动加密虚拟机后,向所述应用程序返回加密虚拟机初始化完成消息。
S507,所述应用程序接收到所述加密虚拟机初始化完成消息后,向所述主机内核发送飞地代码加载请求
作为可选示例,所述飞地代码加载请求中还可以包括完整性校验其中,所述完整性校验信息包括度量信息、签名验证信息等其中至少一种。
S508,所述主机内核将所述飞地代码加载请求转发至安全处理装置。
通过以上步骤,即可完成虚拟可信环境加载的过程。
作为可选步骤S509,可以由安全处理装置进行飞地的完整性校验。具体的,安全处理装置可以将加密虚拟机初始化过程中获取的飞地的完整性校验信息,与所述飞地代码加载请求包含的所述飞地的完整性校验信息进行一致性校验,并在二者一致时,确定所述飞地代码完整加载;否则,可以确定所述飞地代码未能完整加载,在校验完成后,可以将校验结果通过如下步骤S510~S511进行反馈。
S510,安全处理装置向主机内核返回飞地代码完整性校验结果反馈消息。
S511,主机内核向应用程序转发所述飞地代码完整性校验结果反馈消息。
上述虚拟可信环境加载过程需要建立嵌套页表和虚拟机页表,并由安全处理装置维护虚拟机页表,主机内核维护嵌套页表,以实现飞地地址与加密虚拟机地址的映射关系。
在本说明书一些实施例中,所述安全处理装置具体可以为安全处理器,或者为平台安全处理器(Platform Secure Processor,PSP)。
以下参照图6所示的利用加密虚拟机实现虚拟可信环境加载和调用的示意图来说明嵌套页表和虚拟机页表的建立过程。
如图6所示,主机应用线性空间61可以分为可信空间611和非可信空间612,其中所述可信空间611适于存储飞地的代码和数据;加密虚拟机线性空间62划分为加密内存空间621和非加密内存空间622;物理内存63划分为普通非加密内存632和虚拟机加密内存631。
继续参照图6,主机应用程序发起在加密虚拟机创建飞地的请求,飞地会被加载到可信空间611。主机内核(图6中未示出)获取上述飞地在所述可信空间611的主机虚拟地址和位于非可信空间612的其他主机虚拟地址范围,并根据主机侧进程页表(Page Table,PT),实现飞地的主机虚拟地址(Host Virtual Address,HVA)到主机物理地址(HostPhysical Address,HPA)的转换。与此同时,利用安全处理器(图6中未示出)负责为可信空间611在加密虚拟机内维护虚拟机页表(guest Page Table,gPT),使得上述虚拟机页表与主机应用程序线性空间保持一致,即所述可信空间中飞地的HVA与加密虚拟机的虚拟地址(Guest Virtual Address,GVA)一致,也即飞地在主机侧的线性空间范围与在加密虚拟机侧的线性空间范围一致。通过虚拟机页表可以实现GVA到虚拟机物理地址(Guest PhysicalAddress,GPA)的转换,然后CPU硬件(如主机内核)通过嵌套页表(nested Page Table,nPT)再把GPA转换为飞地的主机物理地址HPA,即建立飞地地址与加密虚拟机地址的映射关系。
通过上述过程,完成飞地地址与加密虚拟机地址的映射关系的建立。主机非可信空间代码直接利用HVA调用可信空间飞地代码,CPU切换至虚拟机模式后,由于GVA等于HVA,因此应用程序可以通过加密虚拟机,直接利用GVA来运行对应的飞地代码。
需要说明的是,为了保护飞地代码和数据在加密虚拟机中的安全性,可以将飞地的主机物理地址与加密虚拟机中对应的虚拟机物理地址进行加密。具体而言,可以由所述加密虚拟机获取加密虚拟机物理地址,查询所述加密虚拟机物理地址中加密标志位的状态并对其进行维护,若所述加密标志位为1,则通知主机硬件(如安全处理器)对所述加密虚拟机物理地址的加密虚拟机的存储空间进行加密。对于64位的加密虚拟机物理地址而言,作为一具体示例,所述加密标志位C-bit可以设置于线性地址的第47位,如图7所示。
继续参照图7,所述加密虚拟机物理地址可以按照如下结构进行数据存储,从0位至高位,依次可以包括:页表标志位、物理地址基址、地址空间标识符(Address SpaceIdentifier,ASID)、加密标志位(C-bit)和保留位,其中页表标志位适于表征所述加密虚拟机物理地址所属的页表标识;物理地址基址适于表征所述加密虚拟机物理地址的起始地址;ASID适于表征不同加密虚拟机的地址空间;加密标志位适于表征所述加密虚拟机的物理地址是否加密;保留位用于后续扩展使用。需要说明的是,在本发明实施例中,加密标志位位于第47位,在其他实施例中,所述加密标志位可以位于其他位置,本发明实施例对此不做限制。
经过上述过程,飞地代码被复制到加密虚拟机的存储空间中,所述加密虚拟机的存储空间可以为所述飞地代码提供运行空间,应用程序可以通过访问加密虚拟机的存储空间,不需要SGX技术中特有的调用指令,实现所述飞地代码的调用。
为说明如何利用加密虚拟机实现飞地的运行,本发明实施例还提供了一种虚拟可信环境运行方法,参照图8所示的虚拟可信环境运行方法的流程图,可以应用于主机内核,所述虚拟可信环境的运行方法可以通过如下步骤执行:
S81,获取来自应用程序的飞地代码调用请求。
具体而言,在主机应用程序运行的过程中,需要调用加密虚拟机中的飞地代码时,生成飞地代码调用请求,并将所述飞地代码调用请求发送至主机内核。
S82,将所述飞地代码调用请求转发至安全处理装置,使得所述安全处理装置更新所述飞地代码对应的加密虚拟机的存储信息。
具体而言,所述主机内核获取飞地代码调用请求,并转发至安全处理装置,使得所述安全处理装置根据所述飞地代码调用请求更新所述飞地代码对应的加密虚拟机的存储信息。
S83,根据所述飞地代码调用请求,切换至虚拟机模式,执行所述加密虚拟机中的跳转代码,在所述加密虚拟机的存储空间中为所述飞地分配存储空间,使得所述应用程序执行所述飞地代码。
安全处理装置更新所述飞地代码对应的加密虚拟机的存储信息后,向主机内核发送更新所述飞地代码对应的加密虚拟机的存储信息完成的消息,然后由所述主机内核执行虚拟机运行指令,进入虚拟机模式,执行相应的跳转代码,并在所述机密虚拟机中为所述飞地分配存储空间,应用程序可以调用加密虚拟机的存储空间中的飞地代码。
采用本发明实施例的虚拟可信环境运行方法,由主机内核接收来自应用程序的飞地代码调用请求并转发至安全处理装置,由所述安全处理装置更新所述飞地代码对应的加密虚拟机的存储信息,之后所述主机内核根据所述飞地代码调用请求,切换至虚拟机模式,执行加密虚拟机中的跳转代码,并在加密虚拟机的存储空间为所述飞地分配存储空间,使得所述应用程序执行所述飞地代码。由上述虚拟可信环境运行过程可知,无需SGX特有的调用指令基于应用程序的飞地代码调用请求,主机内核可以自动进入虚拟机模式,完成对存储于所述加密虚拟机的存储空间的飞地代码的调用。
当主机内核运行于虚拟机模式,执行飞地代码时,主机内核会检测运行过程中的异常情况,并进行对应的处理。当检测到异常退出事件时,可以确定所述异常退出事件的所属类型,并根据所述异常退出事件的所属类型,采用相应的异常事件处理方式进行处理。为使本领域技术人员更好地理解和实施,以下通过一些具体场景说明一些异常事件退出时处理的具体策略。
参照图9所示的异常退出事件的处理方法的流程图,具体可以通过如下步骤执行:
S91,获取所述异常退出事件的所属类型。
S92,判断所述异常退出事件的所属类型是否为虚拟机页表缺页异常,若是,则执行步骤S93;若否,则执行步骤S91,继续获取异常退出事件的所属类型。
S93,将所述虚拟机页表缺页信息发送至安全处理装置。
其中所述缺页信息可以包括虚拟机页表页缺页的虚拟机虚拟地址。
S94,接收来自安全处理装置对所述虚拟机页表缺页异常的页表页内存的判断结果,并将新的虚拟机页表页内存发送至安全处理装置。
在具体实施中,当所述安全处理装置确定所述虚拟机页表缺页异常的页表页内存不足时,可以由主机内核为所述加密虚拟机分配新的虚拟机页表页内存,并为所述新的虚拟机页表页内存建立对应的嵌套页表,以及将新的虚拟机页表页信息发送至安全处理装置。
参照图10所示的另一种异常退出事件的处理方法的流程图,本发明实施例还提供了另一种异常退出事件的处理方法,具体可以执行如下步骤:
S101,获取所述异常退出事件的所属类型。
S102,判断所述异常退出事件的所属类型是否为嵌套页表缺页异常,若是,则执行步骤S103;若否,则执行步骤S101,继续获取所述异常退出事件的所属类型。
S103,更新对应于嵌套页表中虚拟机物理地址与主机物理地址的映射关系。
在具体实施中,主机内核可以获取对应于所述嵌套页表缺页的虚拟机物理地址,并根据所述嵌套页表缺页异常的虚拟机物理地址,获取来自主机应用程序对应的页表中的主机物理地址,并锁定所述主机物理地址,根据锁定的主机物理地址和所述虚拟机物理地址的对应关系,更新所述缺页异常的嵌套页表。
在本发明实施例中,可以通过在虚拟可信环境中建立的嵌套页表和虚拟机页表,使得GVA与HVA的地址范围相同。发生嵌套页表缺页异常时,由主机内核根据嵌套页表缺页的GPA,通过虚拟机页表找到对应的GVA,由于GVA与HVA的地址范围相同,再通过HVA找到位于主机应用程序中的HPA,并锁定HPA的地址范围,然后更新嵌套页表缺页的GPA和HPA的映射关系。
S104,将更新后的嵌套页表发送至安全处理装置,使得所述安全处理装置对所述嵌套页表中的虚拟机物理地址进行加密处理。
具体而言,所述主机内核将更新映射关系的虚拟机物理地址和主机物理地址发送至安全处理装置,由上述安全处理装置对所述嵌套页表种的虚拟机物理地址进行加密。
参照图11所示的另一种异常退出事件的处理方法的流程图,本发明实施例还提供了另一种异常退出事件的处理方法,具体可以通过如下步骤执行:
S111,获取所述异常退出事件的所属类型。
S112,判断所述异常退出事件的所属类型是否为未定义指令,若是,则执行步骤113;若否,则执行步骤S111,继续获取所述异常退出事件的所属类型。
S113,请求安全处理装置解析所述未定义指令。
S114,接收来自所述安全处理装置的解析结果,根据所述解析结果进行相应处理。
具体而言,当确定所述解析结果属于SGX的退出指令时,退出虚拟机模式,继续所述应用程序的运行;当确认所述解析结果不属于SGX的退出指令,则退出虚拟机模式,并通知所述应用程序处理异常。
在本发明实施例中,除了上述三种异常退出事件外,还可能存在其他类型的异常退出事件,例如:执行不属于加密虚拟机内置的指令、执行其他虚拟可信环境中的指令等。当发生此类异常退出事件时,当前的虚拟可信环境可能遭到破坏,主机内核可以通知主机应用程序做异常处理,退出虚拟机模式,终止所述应用程序的运行。
由主机内核检测异常退出事件,确定所述异常退出事件的所属类型,并根据所述异常退出事件的所属类型,采用相应的异常事件处理方式进行处理,可以防止恶意程序破坏当前虚拟可信环境,使得所述虚拟可信环境可以有效地抵御外部干扰。
参照图12所示的本发明实施例另一种虚拟安全虚拟环境运行方法的流程图,可以应用于安全处理装置,所述安全处理装置存储有加密虚拟机的系统代码和数据,具体可以通过如下步骤执行虚拟安全虚拟环境运行:
S121,获取来自主机内核转发的飞地代码调用请求。
具体而言,主机应用程序运行时,在需要调用加密虚拟机中的飞地代码时,可以生成飞地代码调用请求,并由主机内核转发至安全处理装置。
S122,根据所述飞地代码调用请求更新所述飞地代码对应的加密虚拟机的存储信息。
具体而言,安全处理装置接收到来自于主机内核转发的所述飞地代码调用请求后,可以根据所述飞地代码调用请求,更新所述飞地代码对应的加密虚拟机内的存储信息。
S123,将所述飞地代码对应的加密虚拟机的存储信息更新完成消息发送至所述主机内核,使得所述主机内核执行虚拟机运行操作。
当主机内核运行于虚拟机模式,执行飞地代码时,安全处理装置获取来自主机内核确定的异常退出事件的所属类型,并采用相应的异常事件处理方式进行处理。
为更好的说明利用上述异常事件处理的过程,以下通过具体场景进行说明。
在具体示例中,当接收到所述主机内核处理虚拟机页表缺页异常的消息时,接收所述虚拟机页表缺页异常的虚拟机虚拟地址,并确定缺页原因,向所述主机内核反馈所述虚拟机页表的缺页原因;以及根据所述缺页异常的消息更新对应的虚拟机页表,并对所述缺页信息中的虚拟机虚拟地址进行加密。
参照图13所示的异常退出事件的处理方法的流程图,当存在虚拟机页表缺页异常时,具体可以通过以下步骤进行处理:
S131,当接收到所述主机内核处理虚拟机页表缺页异常的消息时,获取所述虚拟机页表缺页异常的虚拟机虚拟地址,确定缺页原因,并向所述主机内核反馈所述虚拟机页表的缺页原因。
S132,判断所述虚拟机页表缺页异常的页表页内存是否不足,若是,则执行步骤S133;若否,则执行步骤S134。
S133,获取来自所述主内核为加密虚拟机分配新的虚拟机页表页信息。
当所述虚拟机页表缺页异常是由页表页内存不足时,主机内核可以为加密虚拟机分配新的页表页信息,并将所述分配的新的虚拟机页表信息发送至安全处理装置。
S134,判断所述虚拟机页表中缺页的虚拟机虚拟地址是否为加密线性地址,并对,若是,则执行步骤S135;若否,则执行步骤S136。
S135,将所述虚拟机页表中缺页的虚拟机虚拟地址的加密标志位置1。
S136,将所述虚拟机页表中缺页的虚拟机虚拟地址的加密标志位清0。
S137,根据所述缺页异常的消息更新对应的虚拟机页表。
安全处理装置完成虚拟机虚拟地址的加密后,还可以在虚拟机新的虚拟机页表信息中的页表页内存更新所述虚拟机虚拟地址对应的虚拟机页表。
对于虚拟机页表缺页异常,经上述过程处理后,主机内核可以为缺页的虚拟机页表分配新的页表页内存,并在新的页表页内存中存储新的虚拟机页表页,然后由安全处理装置对所述新的虚拟机页表页中的虚拟机虚拟地址进行加密,并根据缺页异常的消息更新对应的虚拟机页表,主机内核可以继续运行于虚拟机模式。
作为另一具体示例,当接收到所述主机内核处理虚拟机嵌套页表缺页异常的消息时,安全处理装置从主机内核获取更新映射关系的所述虚拟机物理地址与所述主机物理地址,并对所述虚拟机物理地址进行加密。
参照图14所述的本发明实施例又一种处理异常退出事件的处理方法,具体可以通过以下步骤执行:
S141,当发生虚拟机嵌套页表缺页异常时,从主机内核获取更新后的嵌套页表。
具体而言,主机内核可以获取对应于所述嵌套页表异常的虚拟机物理地址,并根据所述嵌套页表缺页异常的虚拟机物理地址,获取来自主机应用程序对应的进程页表中的主机物理地址,并锁定所述主机物理地址,根据锁定的主机物理地址和所述虚拟机物理地址的对应关系,更新所述缺页异常的嵌套页表,然后将更新后的嵌套页表发送至安全处理装置。
S142,判断所述更新后的嵌套页表中的虚拟机物理地址是否为加密线性地址,若是,则执行步骤S143;若否,则执行步骤S145。
S143,将所述更新后的嵌套页表中的虚拟机物理地址的加密标志位置1。
S144,将所述更新后的嵌套页表中的后的主机物理地址中的数据存储至所述更新后的虚拟机物理地址对应的加密虚拟机的存储空间中。
S145,将所述更新后的嵌套页表中的虚拟机物理地址的加密标志位清0。
对于嵌套页表缺页异常,经上述过程处理后,主机内核可以为缺页的嵌套页表更新映射关系,安全处理装置对所述更新后的嵌套页表中的虚拟机物理地址进行加密,并将更新后的嵌套页表中的主机物理地址对应的数据存储至所述加密虚拟机的存储空间,所述主机内核可以继续运行于虚拟机模式。作为又一具体示例,当接收到所述主机内核处理执行未定义指令的消息时,获取来自所述主机内核解析所述未定义指令的请求,并将解析结果发送至所述主机内核,使得所述主机内核根据所述解析结果处理所述未定义指令。
参照图15所示的本发明实施例又一种虚拟可信环境运行的示意图。如图15所示,在某一用户空间中,主机应用程序运行时,需要调用加密虚拟机中的飞地代码时,生成飞地代码调用请求,并将与飞地相关的寄存器信息、可信代码的地址信息发送至主机内核,再由所述主机内核将飞地代码调用请求、寄存器信息转发至安全处理装置,使得所述安全处理装置更新所述飞地代码对应的加密虚拟机的存储信息,其中,包括更新虚拟机对应的虚拟机上下文结构(Virtual Machine Save Area,VMSA),并将指针寄存器中的指针数据置于虚拟机跳转代码)。安全处理装置将完成更新所述飞地代码对应的加密虚拟机的存储信息的消息发送至主机内核,由所述主机内核执行虚拟机启动指令,主机内核进入虚拟机模式,执行虚拟机中的跳转代码,并在所述加密虚拟机的存储空间中为所述飞地分配存储空间,应用程序可以调用所述飞地代码。
在应用程序调用飞地代码的过程中,主机内核会检测异常退出事件,并根据所述异常退出事件的所属类型,采用不同的处理方法。
在具体实施中,当主机内核确定异常退出事件为虚拟机页表缺页异常,所述主机内核将将虚拟机页表缺页信息发送至安全处理装置,并由所述安全处理装置对所述虚拟机页表缺页异常的页表页内存的判断结果,若页表页内存不足,则通知所述主机内核为所述加密虚拟机分配新的虚拟机页表页信息,所述分配新的虚拟机页表页信息可以包括虚拟机页表页内存,并为所述新的虚拟机页表页内存建立对应的嵌套页表,同时将新的虚拟机页表页信息发送至安全处理装置,然后由所述安全处理装置判断所述虚拟机页表缺页的虚拟机地址是否为加密线性地址,若是,则将所述虚拟机虚拟地址中的加密标志位置1;若不是,将所述虚拟机虚拟地址中的加密标志位清0,然后更新所述虚拟机页表缺页的虚拟机地址对应的虚拟机页表,最后继续虚拟机运行。若页表页内存不足,所述安全处理装置会判断所述虚拟机页表缺页的虚拟机地址是否为加密线性地址,并对所述虚拟机页表缺页的虚拟机地址进行加密。
在具体实施中,当主机内核确定所述异常退出事件的所属类型为嵌套页表缺页异常时,所述主机内核可以获取对应于所述嵌套页表异常的虚拟机物理地址,并根据所述嵌套页表缺页异常的虚拟机物理地址,获取来自主机应用程序对应的页表中的主机物理地址,并锁定所述主机物理地址,根据锁定的主机物理地址和所述虚拟机物理地址的对应关系,更新所述缺页异常的嵌套页表。然后将更新映射关系的所述虚拟机物理地址与所述主机物理地址发送至安全处理装置,所述安全处理装置判断所述虚拟机物理地址是否为加密线性地址,若是,将所述虚拟机物理地址的加密标志位置1,并将所述更新映射关系的虚拟机物理地址对应的加密内存中更新并存储主机物理地址中的数据;若否,将所述虚拟机物理地址的加密标志位清0,主机内核继续运行于虚拟机模式。
在具体实施中,当主机内核确定所述异常退出事件的所属类型为未定义指令时,所述主机内核请求安全处理装置解析所述未定义指令,当所述安全处理装置确定所述解析结果属于SGX的退出指令时,主机内核退出虚拟机模式,继续所述应用程序的运行;当所述安全处理装置确认所述解析结果不属于SGX的退出指令,则主机内核退出虚拟机模式,并通知所述应用程序处理异常。
在具体实施中,当主机内核确定所述异常退出事件的所属类型为其他类型时,所述主机内核通知主机应用程序做异常处理,所述主机内核退出虚拟机模式,并终止所述应用程序的运行。
本发明实施例还提供了与上述虚拟可信环境加载方法对应的装置,为使本领域技术人员更好地理解和实施本发明实施例的虚拟可信环境加载和运行方案,以下参照附图,通过具体实施例对相应的数据处理装置和安全处理装置进行对应描述。
参照图16所示的数据处理装置的结构示意图,在本发明实施例中,如图16所示,数据处理装置16包括:配置请求获取单元161、嵌套页表建立单元162、初始化处理单元163、加密虚拟机运行单元164、飞地加载请求单元165,其中:
所述配置请求获取单元161,适于获取来自应用程序在加密虚拟机的存储空间创建飞地的配置请求,其中,所述配置请求中包含所述飞地的存储信息;
所述嵌套页表建立单元162,适于根据所述配置请求中包含的飞地的存储信息,为所述飞地建立嵌套页表;
所述初始化处理单元163,适于向安全处理装置发送加密虚拟机初始化指令,所述初始化指令中包含所述嵌套页表中的虚拟机物理地址,使得所述安全处理装置为所述飞地执行加密虚拟机初始化操作,包括:建立所述飞地对应于所述虚拟机物理地址的虚拟机页表;将所述加密虚拟机的系统代码和数据复制到所述加密虚拟机的存储空间中;
所述加密虚拟机运行单元164,适于根据来自所述安全处理装置的加密虚拟机初始化完成消息,执行加密虚拟机运行操作,并向所述应用程序返回所述加密虚拟机初始化完成消息;
所述飞地加载请求单元165,适于获取来自所述应用程序的飞地代码加载请求并转发至所述安全处理装置,使得所述安全处理装置将所述应用程序的飞地代码复制到所述加密虚拟机的存储空间。
本发明实施例还提供了相应的安全处理装置,参照图17所示的安全处理装置的结构示意图,安全处理装置17可以包括:初始化执行单元171、虚拟机页表建立单元172、飞地加载处理单元173,其中:
所述初始化执行单元171,适于接收来自主机内核的加密虚拟机初始化指令,所述加密虚拟机初始化指令中包含嵌套页表中的虚拟机物理地址,所述嵌套页表和所述加密虚拟机初始化指令基于应用程序在加密虚拟机的存储空间创建飞地的配置请求生成;
所述虚拟机页表建立单元172,适于根据所述加密虚拟机初始化指令,执行加密虚拟机初始化操作,包括:建立所述飞地对应于所述虚拟机物理地址的虚拟机页表;
所述飞地加载处理单元173,适于接收来自主机内核转发的应用程序的飞地代码加载请求,将所述应用程序的飞地代码复制至所述加密虚拟机的存储空间。
此外,为了完成对飞地的完整性校验,防止飞地代码被非法篡改,保证飞地代码的完整性,所述安全处理装置17还可以包括完整性校验单元174,适于获取来自所述应用程序的飞地代码加载请求,所述加载请求中包含飞地的完整性校验信息,使得所述安全处理装置根据所述加载请求将所述应用程序的飞地代码复制到所述加密虚拟机的存储空间,并基于所存储的飞地的完整性校验信息对所述加载请求对应的飞地进行完整性校验。
在具体实施中,本发明实施例还提供了与上述虚拟可信环境运行方法对应的装置,以下参照附图,通过具体实施例进行对应描述。
参照图18的数据处理装置的结构示意图,在发明实施例中,数据处理装置18可以包括:飞地代码调用单元181、加密虚拟机运行单元182,其中:
所述飞地代码调用单元181,适于获取来自应用程序的飞地代码调用请求;
所述加密虚拟机运行单元182,适于根据所述飞地代码调用请求,切换至虚拟机模式,执行所述加密虚拟机中的跳转代码,在所述加密虚拟机的存储空间中为所述飞地分配存储空间,使得所述应用程序执行所述飞地代码。
此外,当应用程序在虚拟可信环境执行飞地代码时,主机内核检测异常退出事件时,先确定所述异常退出事件的所属类型并根据所述异常退出事件的所属类型,采用相应的异常事件处理方式进行处理,所以所述数据处理装置18还包括异常退出事件处理单元183,适于根据所述异常退出事件的所属类型,采用相应的异常事件处理方式进行处理。具体处理方式可以参见前述的异常事件处理方法的实施例,此处不再展开描述。
本发明实施例还提供了相应的安全处理装置,参照图19所示的安全处理装置的结构示意图,安全处理装置19包括:飞地代码调用单元191,存储信息更新单元192,更新信息反馈单元193,其中:
所述飞地代码执行单元191,适于获取来自主机内核转发的飞地代码调用请求;
所述存储信息更新单元192,适于根据所述飞地代码调用请求更新所述飞地代码对应的加密虚拟机的存储信息;
所述更新信息反馈单元193,适于将所述飞地代码对应的加密虚拟机的存储信息更新完成消息发送至所述主机内核,使得所述主机内核执行虚拟机运行操作。
此外,当数据处理装置运行于虚拟机模式,应用程序执行飞地代码时,安全处理装置可以获取来自主机内核确定的异常退出事件的所属类型,采用相应的异常事件处理方式进行处理,相应地,所述安全处理装置19还可以包括异常退出事件执行单元194,适于根据所述主机内核确定的异常退出事件的所属类型,采用相应的异常事件处理方式进行处理。具体处理方式可以参见前述的异常事件处理方法的实施例,此处不再展开描述。
虽然本发明披露如上,但本发明并非限定于此。任何本领域技术人员,在不脱离本发明的精神和范围内,均可作各种更动与修改,因此本发明的保护范围应当以权利要求所限定的范围为准。