对比虚拟机及容器世界的安全性,相对于容器而言,虚拟机可以提供更多的隔离,因此其安全性较强。
虚拟机中运行的应用程序拥有自己的操作系统,而且是运行于物理主机上的独立单元。
但容器化的应用程序却不具备这样的独立性。相反,它会共享主机的内核,而且容器进程很有可能会溜进主机的内核空间中。
那么在理论上,如果我们将内置于虚拟机中的应用程序移至云端,肯定不会出现任何问题。
但事实并非如此,它会出现各式各样的问题。比如:
VM Hopping:当虚拟机机主知道如何攻击同一虚拟机管理程序中的另一台客机时,VM Hopping攻击就会出现。
VM DoS:指恶意的访客管理员利用来宾虚拟机攻破主机和其他访客的虚拟机。
VM Escape:这会在恶意的来宾虚拟机用户获得了底层主机的控制权后发生。如今,由于公有云服务能提供可在几秒内启动并投入使用的机器,所以人们会很容易忽略一个事实,即:任何共享环境都存在安全隐患。
探讨使用云端服务器开展业务会面临的风险可能听起来很老派也很落伍,但这种安全风险却是真实存在的。
其实早在2010年,P1 Code Security的首席技术官Jonathan Brossard(现任Salesforce.com的安全大师),他自称是“拥有超凡计算机黑客能力的外星人。”
Brossard表示,只要不同客户的虚拟机是托管在同一硬件上的,那他们只要每月支付几美元,就能在同一主机上获取shell,并将其作为给定目标。
Brossard表示:“如果您是恶意用户,共享就会变得非常有趣,您不用担心找不到远程攻击点,而且,因为虚拟化会恶化后果,所以即便是看起来很小的本地漏洞都至关重要。您可以侵占来宾主机,使得通过虚拟化提升安全性成为一个失败之举。”
虚拟机的安全性仍是一大挑战
随着时代的发展,虚拟化变得越来越复杂了。
但不可避免的是但安全漏洞永远不会消失。当您修复好一些漏洞后,新的漏洞仍会出现。
因此,Xen中最近刚出现一个重大漏洞也不足为奇了。Xen是一种服务器虚拟化虚拟机管理程序,它在大型云服务提供商中尤其受欢迎。
而这一漏洞非常严重,因为它能逃脱虚拟机进而访问主机,这样一来,恶意访客管理员就能获得该主机的更多权限,从而影响Xen虚拟机管理程序的所有版本。
值得庆幸的是,该虚拟机安全漏洞仅仅存在于运行x86硬件的半虚拟化客户机,而不是完全虚拟化的x86 来宾虚拟机(或ARM来宾虚拟机)上。
在XenSecurity Advisory CVE-2016-6528中,Xenproject.org安全团队这样描述了这一问题:“PV页表代码具有更新已有页表条目的快速路径,以便在安全的情况下跳过昂贵的重新验证过程(例如:只清除访问/脏位)。但是,很多被视为是安全的字节,实际上却并不安全。”
Xen 4.43及更高版本使用补丁对这一有问题的快速路径进行了修复,并在该问题扩散之前就问世了。
现在没有人会认为Xen开发人员不知道他们正在做的事:构建虚拟机管理程序非常要紧,但虚拟机管理程序、操作系统以及应用程序中的漏洞都是无法避免的。此外,考虑到复杂性,这种漏洞可能会更多。
因此,这一漏洞就是对我们的及时提醒:虽然在公有云环境中的虚拟机上运行应用程序要比在容器中运行相同的应用程序更安全,但也不是绝对安全的。
此外,如果您正处于共享环境中,那您在实施虚拟化的时候也会引入新的风险。所以,Brossard于2010年得出的虚拟机安全性结论在如今看来依然是正确的。
他指出:“添加虚拟化层实际上不是一个好主意,因为这会导致漏洞的出现。反之,保障软件安全的最佳方式就是对其进行正确的测试,从而检测出安全漏洞。”