当前位置:首页 期刊杂志

虚拟机真比容器安全吗?

时间:2024-05-04

刘荻

我们常说“HTTPS安全”或“HTTP不安全”,但实际上是指“HTTPS很难被窥视,很难受到中间人攻击”或者“我的祖母轻而易举就能窥视HTTP”。

在某些情况下,HTTP足够安全。但是,如果有人在一种支持HTTPS的常见实现方法中发现了可以钻空子的缺陷,HTTPS就会成为一种攻击入口,直到这种实现方法得到了纠正。

HTTP和HTTPS是IETF RFC 7230-7237和2828中定义的协议。HTTPS被设计成一种安全的HTTP,但是仅简单说HTTPS绝对安全或HTTP不安全,却又隐藏了重要的例外情况。

虚拟机和容器的定义不太严格,两者都不是有意被设計成比对方来得安全。因而,安全问题仍然比较模糊不清。

为何笔者认为虚拟机比容器更加安全?

“分而治之”是战争和软件领域的一种制胜策略。一种架构将某个复杂、难以解决的安全问题分解成多个比较容易解决的问题后,在大多数情况下比应对所有问题的单一解决方案来得安全。

容器就是“分而治之”横向运用于应用程序的一个例子。由于将每个应用程序锁在各自的隔离区(jail)里面,一个应用程序的弱点不会因此累及其他容器里面的应用程序。虚拟机也是“分而治之”的一个例子,但是它在隔离方面更进了一步。

放在隔离区的应用程序中的漏洞不会直接影响其他应用程序,但是这个隔离的应用程序会危及与其他容器共享的单一操作系统,因而影响所有容器。如果使用共享的操作系统,应用程序、容器和操作系统实现堆栈中任何环节的漏洞都会导致整个堆栈丧失安全,并危及物理机。

像虚拟机这样的分层架构将每个应用程序的执行堆栈,甚至包括硬件都隔离开,因而排除了由于共享操作系统而导致应用程序彼此干扰的可能性。此外,每个应用程序堆栈和硬件之间的接口都加了定义和限制,防止被滥用。这提供了另一道牢固的边界,保护应用程序,避免互相干扰。

虚拟机将控制用户活动的操作系统与控制访客活动的操作系统与硬件之间交互的虚拟机管理程序分离开来。虚拟机访客操作系统控制用户活动,但并不控制硬件交互。应用程序或访客操作系统中的漏洞不太可能影响物理硬件或其他虚拟机。如果虚拟机访客操作系统和支持容器的操作系统一样(通常是这样的),危及在该操作系统上运行的所有其他容器的同一个安全漏洞并不会危及其他虚拟机。因而,虚拟机将应用程序横向隔离开,并将操作系统与硬件纵向隔离开。

虚拟机带来的开销

虚拟机更高的安全性是要付出代价的。控制传输(control transfer)在计算系统中始终开销很大,从处理器周期及其他资源方面来说都是如此。需要存储和重置执行堆栈,可能要暂停或允许外部操作完成,诸如此类。

访客操作系统和虚拟机管理程序之间的转换需要很大的开销,而且经常出现。就算特殊的控制指令固化到处理器芯片中,控制传输方面的开销也降低了虚拟机的总体效率。这个降幅大吗?这个问题很难回答。可以对应用程序进行调优,以便通过管理控制传输来减小开销。如今,大多数服务器、处理器被设计成了简化控制传输。换句话说,这个降幅取决于具体的应用程序和服务器,但是从来无法完全消除开销,只能适当减少。

虚拟机管理程序的安全漏洞

让情况进一步复杂化的是,将虚拟机架构中的各层分离开带来了另一个隐患:虚拟机管理程序的漏洞。虚拟机管理程序泄密是有可能造成严重破坏的单一故障点,尤其在公共云中。可以想象,单单一个黑客就能在控制其他公共云用户拥有的应用程序的虚拟机中启动代码,只需通过一个漏洞,就能攻陷一大批公共云。

牢固的架构仍可能存在实现方面的缺陷,从而导致系统安全性大大削弱。有人声称,虚拟机管理程序泄密根本不会发生,其依据是,虚拟机管理程序如此简单,编写得如此完善,并且经过如此精心的审计,因而根本不会出问题。虚拟机管理程序泄密的危害与WannaCry病毒一样大,可是没人为之担心。而Heartbleed发生了。OpenSSL的代码行比虚拟机管理程序要少得多。

迄今为止,笔者没有听说过任何重大的虚拟机管理程序泄密。不过看一眼通用漏洞披露(CVE)数据库就会发现,研究人员确实发现了虚拟机管理程序存在可以钻空子的缺陷。虚拟机管理程序的开发人员和厂商一直在第一时间给出现的安全漏洞打补丁。2017年3月,微软发布了安全公告“MS17-008”,记载了其Hyper-v虚拟机管理程序存在7个已经打上补丁的安全漏洞,它们都被标为严重漏洞或危急漏洞。

笔者仍认为,虚拟机提供的安全性高过容器,不过我们得认真地看一下虚拟机系统的安全性。

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!