VM真的比Container更安全吗?

理论上来说,是的。但在工作实践中,那可就不一定了。

写在前面的话

我们经常会说,“HTTPS是安全的”或者“HTTP是不安全的”。但其实我们想表达的是,“HTTPS的内容更加难被窥探到”,“这将会让中间人攻击(MitM)变得更加困难”,或“连我外婆都可以轻易嗅探到HTTP数据”。

尽管如此,HTTPS仍然有被黑的可能,而且在某些情况下,HTTP已经足够安全了。除此之外,如果我在一个支持HTTPS的常用实现(例如OpenSSL和Heartbleed)中发现了一个可以利用的漏洞,那么在漏洞被修复之前,HTTPS将会成为我入侵目标系统的垫脚石。

HTTPS其实是HTTP的安全升级版(参考IETFRFC:7230、7237和2828),但我们也不能百分之百地认定HTTPS就是安全的,而HTTP就绝对不安全。

在安全方面,虚拟机(VM)和容器(Container)的定义就没有那么严格了,从设计的角度来看,在这两者之间没有谁比谁更全的说法。因此,这也让它们的安全问题更加扑朔迷离了。

为什么我会认为VM比Container更加安全呢?

无论在战争中还是在软件开发中,“分而治之”的概念都是我们的制胜法宝。我们可以将一个非常复杂的架构拆分成多个单一架构,将复杂且难以解决的安全问题拆分成了一个又一个简单的问题,而在绝大多数情况下,分步解决小问题往往要比通过一个解决方案来解决所有问题要安全得多。

Container就是很好的例子,通过将每一个应用都锁定在它们自己的区域内,每一个应用中的漏洞与缺陷都不会影响到其他容器中的应用。而VM同样是如此,但虚拟机在隔离方面做得更好。

如果容器中的应用存在漏洞,它是不会直接影响到其他应用的,这是Container的设计思想。但是,这个应用却有可能破坏整个操作系统,进而影响到这个操作系统中的其他容器。在一个共享操作系统之中,任何一个应用、容器、以及操作系统实现栈中的漏洞都将会影响整个栈的安全性,并有可能导致物理主机被入侵。

虚拟化技术采用的是分层体系结构,它可以对每一个应用的执行栈到底层的硬件进行结构划分,以此来消除共享系统中应用程序相互干扰的可能性。除此之外,每一个应用程序栈和硬件之间的接口也有严格的限制以防止被恶意软件所利用,而这种技术也给应用程序提供了更强大的安全保护。

VM管理程序(Hypervisor)不仅可以控制GuestOS和硬件之间的交互,而且还可以对操作系统进行划分并控制用户的活动。虚拟机Guest OS控制的是用户活动,而非硬件之间的交互行为。应用程序或Guest OS中的漏洞不太可能会对物理硬件或其他的VM产生影响,当虚拟机Guest OS以及托管容器的操作系统是相同的时候,同样的漏洞将会影响系统中所有的容器,但并不会危及到系统中其他的虚拟机。因此VM会水平分割应用程序,并垂直分割操作系统以及物理硬件。

虚拟机开销

VM给我们带来的额外的安全性需要牺牲一定的代价。而在计算机系统中,控制转移所带来的开销是非常大的。在执行栈的存储和重置过程中,外部操作很有可能需要被挂起(暂停)。

Guest OS和管理程序之间的转换需要消耗大量的资源,而这个过程是经常会发生的。虽然处理器芯片中本身就带有特殊的控制命令,但控制转移所带来的开销仍然会降低虚拟机的整体运行效率。效率下降得非常明显吗?这就很难回答了。我们可以通过管理“控制转移”来降低应用程序的开销,大多数服务器级处理器现在都可以简化控制转移的整个过程。换言之,效率下降的程度取决于应用程序以及服务器的配置,但这种额外的开销是永远不可能完全消除的,我们只能尽量减少。

虚拟机管理程序(Hypervisor)中的漏洞

我们要面对的问题还没那么简单,因为虚拟机所采用的分层体系结构还会引发另一个麻烦,那就是虚拟机管理程序(Hypervisor)中的漏洞。尤其是在公共云端上,像这样的单点故障将有可能引起一系列潜在的严重问题。比如说,一个黑客可以在一台虚拟机中运行恶意代码,然后控制其他公共云端所托管的应用程序,这样一来,攻击者只需要一个漏洞就可以黑掉一个公共云端中的一系列应用程序了。

纵使是一个坚如磐石的系统都仍然会存在漏洞,更何况虚拟机了。但是厂商往往都会吹嘘他们的管理程序永远不会出现安全问题,他们会说:管理程序这么简单,而且开发起来也非常容易,我们还会对程序代码进行严格的安全审查,所以他们绝对不会出现安全问题。但OpenSSL的代码肯定比Hypervisor 要少得多吧?那Heartbleed又是哪儿来的呢?而且我们要知道,虚拟机管理程序中的漏洞与WannaCry一样,影响绝对是毁灭性的。

虽然管理程序中的漏洞在目前为止还没有引发什么严重的安全事件发生,但我们可以从常用CVE数据库中看到,很多研究人员早就发现了大量可以利用的Hypervisor漏洞了,不过Hypervisor的开发人员和厂商都能够及时修复其中的漏洞,这一点是我们应该感到欣慰的。

总结

虽然虚拟机也有这样那样的问题,但我依然坚信虚拟机的安全性比容器要高得多。尽管如此,我们还是要带着批判的眼光来看到虚拟机系统的安全性问题。

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2017-06-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏FreeBuf

PHP两版本大限将至,全球近七成网站需紧急更新

作为最受欢迎的服务器端语言,PHP 各版本已经被全球近8成的网站采用。而根据PHP 给出的各版本的生命周期,2019年1月1日开始,PHP 5 最后一个版本 5...

25840
来自专栏恰童鞋骚年

《大型网站技术架构》读书笔记之七:随需应变之网站的可扩展架构

此篇已收录至《大型网站技术架构》读书笔记系列目录贴,点击访问该目录可获取更多内容。

11830
来自专栏python开发者

两项基于网络的“黑客”技术

两项基于网络的“黑客”技术 软件开发和测试中网络环境迁移和数据分析 1   导读 关于智能路由器的这两项技术的介绍,想想还是搞个比较有噱头的标题才能吸引人进来细...

26480
来自专栏*坤的Blog

提高效率

20220
来自专栏企鹅号快讯

补丁管理:不要以持续运行时间为自豪

在补丁管理方面一些 Linux 系统管理员和 Windows 系统管理员没有差别。实话说,在一些方面甚至做的更差(特别是以持续运行时间为自豪)。 -- Kyle...

22290
来自专栏云加头条

腾讯云多Kubernetes的多维度监控实践

本次分享的主要内容涉及腾讯云容器的顶层整体设计,包括产品功能,及提供的附加能力。同时会介绍我们现在Master集群化部署的整体方案。

1.1K10
来自专栏猿人谷

一个项目的简单开发流程——需求、数据库、编码

关于一个项目的简单开发流程   前言:从11月8号开始到11月12号我们小组使用html+easyUI+ashx+异步,开发了一个简易的网 站,也就是简单的门户...

31250
来自专栏小文博客

腾讯云关系型数据库,3年只需86(新用户26)

40150
来自专栏Golang语言社区

不只是Web:十大令人振奋的Node.js项目

除了在Web服务器领域大展拳脚之外,Node.js同样也在无处不在的JavaScript应用程序创建当中散发出耀眼的光芒。 ? Node.js:不只是网站 就在...

59850
来自专栏FreeBuf

基于代理IP的挖掘与分析

? 废话不多说,直入主题。关于代理IP的挖掘与分析,个人的一些分析与总结。 1. 思路 1、获取代理地址 2、对获取的代理地址进行验证,提取出真实可用的代理地...

67170

扫码关注云+社区

领取腾讯云代金券