本发明涉及高可用虚拟机的,具体地,涉及适用于可信执行环境的虚拟机错误恢复方法及系统,尤其涉及一种适用于可信执行环境的虚拟机快速错误恢复方法及装置。
背景技术:
1、在云计算相关技术中,用于为租户提供安全、隐秘的计算环境的可信执行环境技术是其中的重要技术之一。可信执行环境基于特定的硬件保护和隔离机制,在软件层面对其进行封装,可以实现对租户应用程序的数据和运行状态的完整性和隐密性的保护,避免租户数据和状态遭到不可信云平台和第三者的窃取和篡改。近几年来,以英特尔的软件保护扩展为首的一系列可信执行环境方案蓬勃发展。目前,可信执行环境在阿里云、亚马逊云、微软云、谷歌云等共有云平台上均有部署,并且已经广泛应用到安全沙箱、数据库、区块链、人工智能等领域。
2、从系统可用性的方面来看,现有的可信执行环境解决方案都没有考虑可用性的问题,而传统的容错机制不宜直接应用到可信执行环境的场景下。目前容错机制可以分为三类:第一类机制是复制状态机,通过将应用状态复制成多份,运行在不同的物理机器上,以避免因单个物理机器不可用而导致整个应用不可用的情况。复制状态机虽然通过冗余的机器资源达到了较高的可用性,但是其缺点是:存在分叉攻击的可能性。因为允许应用状态被复制,所以不可信云平台可以借此操控应用的状态,影响可信执行环境的安全性。第二类机制是检查点回滚,通过定期把应用的数据和状态保存到特定的检查点中,实现在应用出现故障后无需重新启动而是快速回滚到最新的检查点来恢复错误的能力。检查点回滚虽然利用连续保存的检查点能够保持应用服务的连续性,但是其缺点是:存在回滚攻击的可能性。不可信云平台可以利用检查点回滚将应用回退到一个过时的状态,同样破坏了可信执行环境的安全性。第三类机制是微重启,通过仅重新启动出现故障的软件组件来避免重新启动整个系统。微重启虽然通过最小化错误恢复的范围实现了快速恢复的能力,但是其缺点是:需要云平台能够检查应用的状态,才能确保重新启动的组件的状态和应用状态一致。而可信执行环境保护应用数据和状态的隐密性,因此云平台无法访问应用状态,限制了微重启在可信执行环境中的部署。
3、因此,需要提出一种新的技术方案以改善上述技术问题。
技术实现思路
1、针对现有技术中的缺陷,本发明的目的是提供一种适用于可信执行环境的虚拟机错误恢复方法及系统。
2、根据本发明提供的一种适用于可信执行环境的虚拟机错误恢复方法,所述方法包括如下步骤:
3、步骤s1:虚拟机监视器启动一个新的虚拟机实例;
4、步骤s2:虚拟机监视器将可信执行环境的安全内存映射重新映射到新的虚拟机实例中,进入可信执行环境内的恢复模块;
5、步骤s3:恢复模块将日志中所有系统调用标记记录为“未执行”;
6、步骤s4:如果日志中存在“未执行”的系统调用,执行步骤s5;否则执行步骤s8;
7、步骤s5:恢复模块读取并执行最早的“未执行”的系统调用;
8、步骤s6:恢复模块将步骤s5中执行系统调用的返回值与日志中记录的返回值进行比对,如果相同,则执行步骤s7;否则通知虚拟机监视器恢复失败,然后进入步骤s1;
9、步骤s7:恢复模块将步骤s6中的系统调用标记为“已执行”,并执行步骤s4;
10、步骤s8:恢复模块恢复所有应用线程的执行,虚拟机错误恢复过程完成。
11、优选地,所述步骤s1中虚拟机监视器使用虚拟机快照启动新的虚拟机实例。
12、优选地,所述步骤s2中的内存映射和出错前的虚拟机实例中的内存映射一致。
13、优选地,所述步骤s3中的标记记录在日志内,标记记录存放在可信执行环境的安全内存中。
14、优选地,所述步骤s5中执行最早的“未执行”的系统调用的参数为保存在安全内存中的日志。
15、优选地,所述步骤s6中使用虚拟机监视器调用通知虚拟机监视器。
16、本发明还提供一种适用于可信执行环境的虚拟机错误恢复系统,所述系统包括如下模块:
17、模块m1:虚拟机监视器启动一个新的虚拟机实例;
18、模块m2:虚拟机监视器将可信执行环境的安全内存映射重新映射到新的虚拟机实例中,进入可信执行环境内的恢复模块;
19、模块m3:恢复模块将日志中所有系统调用标记记录为“未执行”;
20、模块m4:如果日志中存在“未执行”的系统调用,执行模块m5;否则执行模块m8;
21、模块m5:恢复模块读取并执行最早的“未执行”的系统调用;
22、模块m6:恢复模块将模块m5中执行系统调用的返回值与日志中记录的返回值进行比对,如果相同,则执行模块m7;否则通知虚拟机监视器恢复失败,然后进入模块m1;
23、模块m7:恢复模块将模块m6中的系统调用标记为“已执行”,并执行模块m4;
24、模块m8:恢复模块恢复所有应用线程的执行,虚拟机错误恢复过程完成。
25、优选地,所述模块m1中虚拟机监视器使用虚拟机快照启动新的虚拟机实例;
26、所述模块m2中的内存映射和出错前的虚拟机实例中的内存映射一致。
27、优选地,所述模块m3中的标记记录在日志内,标记记录存放在可信执行环境的安全内存中;
28、所述模块m5中执行最早的“未执行”的系统调用的参数为保存在安全内存中的日志。
29、优选地,所述模块m6中使用虚拟机监视器调用通知虚拟机监视器。
30、与现有技术相比,本发明具有如下的有益效果:
31、1、与重启应用或者回滚应用状态的方案相比,本发明的方法无需改动可信执行环境的状态,杜绝了分叉攻击和回滚攻击的可能,保障了可信执行环境的安全性;
32、2、本发明采用应用程序主动重放日志的方法来重构虚拟机操作系统内核的状态,确保错误恢复的正确性和可信执行环境内外状态的一致性;
33、3、本发明采用可信执行环境的安全内存来保存应用程序的日志,避免不可信虚拟机恶意篡改日志,或者在出错时无意地误写日志,确保了日志内容的准确无误,提高了错误恢复的成功率;
34、4、本发明应用程序日志采用只记录会修改状态的系统调用的方法,并且定期整理和清除无效和冗余的日志项,降低日志记录的性能开销,也减少了错误恢复所需的时间,具有低延迟的特点;
35、5、本发明采用在应用程序和操作系统内核间插入错误恢复模块的方法,既不需要修改应用也无需修改内核,具有易于部署到现有系统的特点,可以适用于多种可信执行环境技术;
36、6、本发明采用可信执行环境内的错误恢复模块和虚拟机监视器协同工作的设计,既解决了虚拟机监视器无法访问应用状态的困难,又维持了可信执行环境的安全性。
1.一种适用于可信执行环境的虚拟机错误恢复方法,其特征在于,所述方法包括如下步骤:
2.根据权利要求1所述的适用于可信执行环境的虚拟机错误恢复方法,其特征在于,所述步骤s1中虚拟机监视器使用虚拟机快照启动新的虚拟机实例。
3.根据权利要求1所述的适用于可信执行环境的虚拟机错误恢复方法,其特征在于,所述步骤s2中的内存映射和出错前的虚拟机实例中的内存映射一致。
4.根据权利要求1所述的适用于可信执行环境的虚拟机错误恢复方法,其特征在于,所述步骤s3中的标记记录在日志内,标记记录存放在可信执行环境的安全内存中。
5.根据权利要求1所述的适用于可信执行环境的虚拟机错误恢复方法,其特征在于,所述步骤s5中执行最早的“未执行”的系统调用的参数为保存在安全内存中的日志。
6.根据权利要求1所述的适用于可信执行环境的虚拟机错误恢复方法,其特征在于,所述步骤s6中使用虚拟机监视器调用通知虚拟机监视器。
7.一种适用于可信执行环境的虚拟机错误恢复系统,其特征在于,所述系统包括如下模块:
8.根据权利要求7所述的适用于可信执行环境的虚拟机错误恢复系统,其特征在于,所述模块m1中虚拟机监视器使用虚拟机快照启动新的虚拟机实例;
9.根据权利要求7所述的适用于可信执行环境的虚拟机错误恢复系统,其特征在于,所述模块m3中的标记记录在日志内,标记记录存放在可信执行环境的安全内存中;
10.根据权利要求7所述的适用于可信执行环境的虚拟机错误恢复系统,其特征在于,所述模块m6中使用虚拟机监视器调用通知虚拟机监视器。