A Security Model for Virtual Machine Rollback in Cloud Environments
Virtual machine (VM) rollback may be misused to launch attacks on the system, leading to persistent security problems in cloud environments, regardless of whether Trusted Platform Module (TPM) is utilized or not. This poses a serious challenge to the security of the cloud. This paper reports successful attack experiments conducted in both TPM-enabled and non-TPM-enabled environments, analyzes the fundamental causes of cloud security issues, and proposes a secure solution for virtual machine rollback based on rollback-resilient virtual TPM (rvTPM). rvTPM is designed and implemented based on Xen environments. The experimental results demonstrate that rvTPM provides a secure solution for virtual machine rollback without causing any significant performance degradation in cloud computing environments.
rvTPM
虚拟机(VM)是云计算的基石
本文探讨了虚拟机回滚过程中的一个固有特定安全漏洞,该漏洞被广泛用于攻击恢复等事件
如
成功地重用被泄露的密码。如
a) 20:10:Peggy的密码pw被侵入本地计算机的恶意软件破坏,这导致密码信息可能被泄露给了未授权的第三方。
b) 20:20:Peggy本地计算机中的恶意软件被检测并清除。鉴于密码pw可能已经遭到泄露,Peggy遵循服务器的密码更新流程,将其密码更新为一个新的密码pw'。
c) 20:30:拥有虚拟机回滚权限(但无其他权限)的攻击者回滚SaaS虚拟机到20:15时的状态(当时pw为有效密码)。或者,SaaS虚拟机出于合法目的回滚
该攻击可以在Amazon EC2平台上成功实施,其中SaaS虚拟机的操作系统为Amazon LinuxAMI,内核为3.10.34-37.137.amzn1.x86 64,实例类型为t1.micro,有1个虚拟CPU和0.615GB内存,服务器为Apache James 2.3.2。攻击只需要回滚SaaS虚拟机的权限,不需要其他权限。
TPM能够确保系统的可信引导,向远程验证方证实当前状态,以及对敏感数据进行加密和解密操作
a) 21:00:SaaS虚拟机的客户端操作系统和其对应的vTPM均处于state0,即vTPM记录的状态精确反映了虚拟机状态。Isaac为处于state0的SaaS虚拟机拍摄快照。
b) 21:10:新的SaaS软件补丁发布。Isaac更新软件并重启虚拟机。此时虚拟机处于state1,vTPM状态也是state1。Isaac通过远程验证向Peggy证明虚拟机处于state1(即SaaS软件中的漏洞已被修补)。
c) 21:20:Isaac将SaaS虚拟机回滚至state0,但vTPM的状态没有随之更新,即虚拟机与vTPM存在差异。vTPM可能会向Peggy证明SaaS虚拟机处于state1状态,而它实际上处于state0。因此,这个不一致可能被利用来窃取Peggy在SaaS虚拟机中的敏感数据。
攻击者针对未使用vTPM或TPM系统的攻击之所以有效,根本在于执行虚拟机回滚操作时,应用程序的当前状态可能会无法被追踪或恢复,因为应用程序状态已经回滚到较早状态。为应对这一挑战,必须开发相关机制使应用程序能够识别自身是否因虚拟机的回滚操作遭遇了状态的丢失或变更。为此,需要使应用程序能够检测虚拟机是否已回滚。通过研究,我们观察到如果只是回滚某些PCR值,而不是整个vTPM状态,同时添加一些永不重置的PCR,以便远程验证器检测回滚事件,可有效防止回滚攻击。
回滚弹性vTPM (rvTPM)使用TPM技术解决攻击问题,为了保护SaaS用户免受恶意SaaS供应商的侵害,用户应能够识别出存在问题的SaaS虚拟机是否经历了回滚操作。为实现这一点,需要依赖一个可信的独立实体来监控并记录虚拟机的回滚行为,同时向SaaS用户提供相应的证明,证实这些回滚行为确实已经发生或未发生过。
为了消除虚拟机与vTPM之间的差异,有研究建议回滚整个vTPM状态。然而,这种设计并不安全。首先,不应回滚整个vTPM实例,否则会破坏vTPM计数器的单调性。因此,有必要重放攻击
为了检测回滚,建议添加PCR24,…,PCR31。如
a) PCR24、PCR25和PCR26被rvTPM用于记录虚拟机快照的信息。使用PCRsnap作为简称,其中 。
b) PCR27、PCR28和PCR29被rvTPM用于追踪虚拟机从哪个状态回滚的信息。使用PCRroll作为简称,其中
c) PCR30用于管理员记录和恢复vTPM实例。
d) PCR31被应用程序用来检测虚拟机回滚。
e) PCR0~23是原始PCR,简称为PCRorig,其中 。
PCR |
目的 |
重置权限 |
扩展权限 |
PCR24 |
快照拍摄时间 |
rvTPM |
rvTPM |
PCR25 |
快照拍摄时的uid |
rvTPM |
rvTPM |
PCR26 |
记录拍摄快照时虚拟机状态 |
rvTPM |
rvTPM |
PCR27 |
虚拟机回滚时间 |
无 |
rvTPM |
PCR28 |
虚拟机回滚时的uid |
无 |
rvTPM |
PCR29 |
记录回滚时虚拟机状态 |
无 |
rvTPM |
PCR30 |
记录vTPM实例数据 |
无 |
rvTPM |
PCR31 |
应用检测虚拟机状态 |
无 |
应用 |
由于两个虚拟机快照可能对应TCG
(1)
其中,PCR24= 0,H是TCG采用的标准加密哈希函数,||是连接词操作,而快照时间则是拍摄快照时的管理程序时间戳。由于PCR24只能由rvTPM扩展或重置,因此任何虚拟机都无法对其进行操作。为防止出现上述VM-rvTPM差异,PCR24将与虚拟机一起回滚。为了让云用户(或远程验证者)确定虚拟机何时被回滚以及回滚到何时,使用PCR27记录虚拟机回滚的系统时间:
(2)
其中, ,回滚时间是发生回滚时的管理程序时间戳。PCR27只能由rvTPM扩展,不能被任何实体重置,从而防止它被任何虚拟机操纵。
由于SaaS虚拟机可由多个用户使用,而这些用户通过PCRorig
(3)
其中, 。PCR25只能由rvTPM扩展或重置。为防止出现VM-vTPM差异如上所述,PCR25将与相应的虚拟机一起回滚。
为了让云用户确定是谁将相关虚拟机回滚到谁的快照,添加PCR28记录记录回滚虚拟机的用户的uid:
(4)
其中, 。PCR28只能由rvTPM扩展,但不能重置。
当应用程序封存敏感数据时,数据必须与PCRorig所代表的虚拟机状态绑定
(5)
其中, 。PCR26只能由rvTPM扩展或重置。
与PCR26类似,如果虚拟机从状态B(源状态)回滚到状态A(目的状态),添加PCR29,来记录这一回滚操作:
(6)
其中, 。PCR29只能由rvTPM扩展,但不能重置。
当云管理员需要还原整个vTPM实例时﹐需要记录vTPM实例数据(用vTPM数据表示),记为vTPM_data。为了方便操作,添加PCR29,使得:
(7)
PCR30只能由rvTPM扩展,但不能重置。
远程挑战者(例如云用户)可以使用PCRroll来验证虚拟机回滚事件,并判断SaaS供应商是否通过回滚事件欺骗他。然而,应用程序不能简单地使用PCRroll来检测虚拟机回滚时其状态的丢失,因为它无法知道每个VM回滚事件的影响,也无法识别哪个虚拟机回滚操作可能会损坏其状态。所以需要添加PCR31来允许应用程序记录自己的状态转换,如下所示:
(8)
其中, 。Ei表示第i个敏感操作(例如更改密码)对应的信息,该操作将改变应用程序的敏感状态。当应用程序状态发生变化时,它将有关其状态变化的敏感操作信息Ei记录到日志中并将Ei扩展到PCR31,然后将秘密消息mi(密码或私钥)密封到PCR31。后面的应用程序可以通过测试哪个步骤的消息( )可以解封来确定应用程序正在处理哪个状态。如果应用程序处于状态Ex,则当前PCR31值应为 。如果mx消息能够成功解封,则表明应用程序处于状态Ex并且不是丢失状态,否则,应用程序能够察觉到虚拟机执行了回滚操作,因为其当前状态与存储在PCR31中的真实状态存在差异。应用程序可以通过日志强制恢复与PCR31的值匹配的状态,这个PCR只能由应用程序扩展但无法重置。
基于rvTPM的虚拟机回滚机制既不会被滥用而导致应用程序状态“丢失”,也不会被滥用而导致虚拟机与vTPM之间的差异。rvTPM旨在保障用户虚拟机中的应用程序能够借助PCR31记录其历史状态,并赋予系统强制调整应用程序状态的能力。为了造成应用程序状态的“丢失”,能够回滚虚拟机的攻击者必须能够操纵PCR31的值,使其与回滚操作后的应用程序状态相匹配。然而这是不可能的,因为PCR31从不重置。
rvTPM可以确保在进行虚拟机回滚操作后,从相应的vTPM快照中恢复vTPM状态,还可以确保从一个状态到另一个状态的执行路径是唯一的。为了让攻击者造成VM-vTPM差异,攻击者必须确保SaaS虚拟机处于可信状态SA,以便将证明传递给SaaS用户(否则,SaaS用户就会知道SaaS虚拟机不处于安全状态)。假设在成功执行验证后,攻击者将SaaS虚拟机拉回到易受攻击的状态SB。使用服务后,用户将验证PCRroll记录的服务时间内SaaS虚拟机的状态转换。因此,如果攻击者想消除攻击痕迹,必须通过操纵PCRroll来欺骗云用户,使虚拟机通过可信状态路径运行。然而这是不可能的,因为PCRroll只能由rvTPM扩展,而且永远不能重置。
实验原型系统以Linux 2.6.18为域0的Xen 3.3.1虚拟机管理程序上实施rvTPM。
在拍摄快照或将虚拟机回滚到上一个快照时,会调用该模块来收集以下信息:1) 虚拟机名称;2) 对应的vTPM ID;3) 用户名:(iv)用户ID;4) 系统当前时间;5) vTPM快照的路径。该模块通过一个新定义的超级调用do_vtpm_rollback,由下面描述的信息注册模块提供,将收集到的信息添加到新添加的全局请求表中,全局请求表的结构是一个链表,每个条目代表一个请求。
信息收集模块收集的信息存储在请求表中。每个rvTPM模块都能通过超级调用do_vtpm_rollback编辑和检索请求表。为了应对可能出现的并发写入全局表的情况,使用自旋锁
在进行虚拟机快照或将虚拟机回滚到之前的快照时,该模块会记录snap_time、uid_snap、vTPM_snap分别扩展到PCRsnap中的roll_time || snap_time,uid_roll || uid_snap, vTPM_snapsrc|| vTPM_snapdest分别扩展到PCRroll中。并更新日志以包含这些信息项,供远程验证使用。为确保快照和回滚过程的安全性,使用PCRsnap, PCRroll表示快照。在此机制下,仅允许回滚至这些PCR所记录的状态,而PCRroll则不允许回滚。一旦状态回滚,相关vTPM句柄将被清除,阻止应用程序利用这些句柄访问与回滚虚拟机无关的安全敏感资源(如密钥)。为了确保系统持久性存储不会回滚,将系统持久性存储的目录作为NFS运行,以便域0挂载和共享。由于域0不会回滚,系统持久存储最新状态。
当rvTPM管理器接到快照请求,它会查询新建立的全局表中的vTPM ID。若查询未发现相关信息,即表明用户未发起快照操作。反之,若找到数据,则说明信息收集与注册模块已成功搜集并记录了进行回滚所需的信息。在定位到先前注册的信息之后,rvTPM管理器将要求rvTPM扩展到PCRsnap,并提取PCRorig和PCRsnap中的所有哈希值。rvTPM管理器将这些PCR值存储至一个特定文件中,并复制该文件到某个路径以便回滚。rvTPM管理器还会将rvTPM实例数据保存到该路径,以便管理员执行适当的维护任务。
首先,rvTPM管理器会利用vTPM的ID在全局表中搜索。若查询到相关信息,管理器便会将vTPM的快照复制至硬盘。在回滚过程中,由于会生成一个新的rvTPM实例,因此可以从已保存的快照中恢复出rvTPM的实例。启动过程如下:首先,用未回滚的信息创建vTPM实例;其次,检查rvTPM的启动类型。只要rvTPM的启动类型是TPM ST STATE,就会调用恢复和扩展PCR的功能;第三,在与上一步相同的功能中,确定是否是回滚请求,如果rvTPM实例是为其他目的而不是为恢复快照而创建的,则将通过搜索全局表再次确定;第四,一旦确定是回滚请求,该函数将替换PCR的值,从PCR0…到PCR26;第五,它将刷新所有与vTPM相关的句柄;第六,在执行了所有可能引起rvTPM实例数据变更的操作后,保存并存储rvTPM实例数据;最后,PCR27…到PCR29将被更新来记录此类回滚事件。
使用新增的PCRsnap和PCRroll,可以跟踪回滚事件。然而,尽管PCR中存在哈希值,但仍不足以恢复回滚历史。在用户执行拍摄快照或恢复至早期快照的操作时,rvTPM会在扩展PCR时记录日志。日志包括回滚时间(拍摄,恢复快照的时间)、执行的动作(快照或回滚)、用户ID、虚拟机名称、虚拟机快照的路径(拍摄或恢复到的快照)。日志将有助于远程验证和TPM_Quote操作。
实验平台基于一台配备四核1.99 GHz AMD Opteron处理器、4GB内存和v1.2 Broadcom TPM修订级别A2的服务器进行实验。软件环境为Ubuntu 8.04 LTS上的准虚拟化Xen 3.3.1,内核为2.6.18.8-xen。用户虚拟机运行相同的准虚拟化内核,域U分别为32M、64M、128M、256M、512M和lG内存和1个虚拟CPU内核。域0中运行NFS版本3服务器,保证rvTPM的系统持久存储。
将rvTPM与OpenSSH服务集成
a) 当为OpenSSH服务器生成新的主机服务器密钥对时,OpenSSH服务器会将其公钥扩展到PCRs1,在回滚过程中该公钥不可恢复。然后,OpenSSH服务器将主密钥封存在PCR下。ssh-keygen命令由ssh-keygen.c实现,对主函数稍作修改(添加扩展函数和封存函数)。
b) 在密钥使用前,通过解封操作验证其有效性。解封成功则密钥与PCR31一致,不会发生回滚;否则,密钥与PCR31不一致,由于PCR的值是不可恢复的,指示系统可能已回滚,密钥被恢复到了以前的密钥。创建sshd守护进程时,需在主函数中加载并解封主机密钥对。
c) 如果解封操作失败,即虚拟机已回滚到之前的状态,OpenSSH服务器应放弃当前使用的公钥和私钥对,转而从日志中恢复主机密钥对。使用rvTPM系统和更新后的OpenSSH服务器,可以有效防止会话密钥在回滚操作中泄露,从而在发生此类事件时通知管理员进行进一步的调查。因为OpenSSH服务器可以实时检测回滚操作。
使用不同内存下的不同域U配置进行实验,以测试rvTPM带来的成本。对于拍摄快照,测量了以下步骤的成本:1) 计算收集信息时的哈希值;2) 超级调用注册信息;3) 超级调用搜索信息;4) PCR扩展和保存vTPM快照;5) 复制vTPM快照。对于回滚,测量了以下步骤的成本:1) 计算收集信息时的哈希值;2) 超级调用注册信息;3) 超级调用搜索信息;4) 回滚vTPM;5) PCR扩展。
测试结果如
此外,如
云环境中的虚拟机回滚机制易导致恶意攻击,本文展示了使用和不使用TPM技术的情况下当前的虚拟机回滚机制发起攻击的根源在于状态信息被复用,并基于此设计了回滚弹性虚拟TPM (rvTPM)回滚机制,并分析了其安全性。原型系统基于Xen平台实现rvTPM,性能评估结果表明:rvTPM可以有效保证虚拟机回滚安全可靠且不会造成增加显著的效率成本。rvTPM的提出可以有效促进TPM技术在云计算环境中的广泛应用。
广东省自然科学基金项目(2024A1515011502),广东省科技计划项目(2019B010139001)。
*通讯作者。