最近在OpenBSD mailing list平台上的一场讨论招致了这样的推论就是虚拟化技术会降低系统的安全性。对这个有趣的话题,我们可以从Kernel Trap上看到这场讨论的摘要。不过,这场争论双方支持者的言论看起来更多的是情绪上的宣泄而不是对这个主题的客观评价。当然,无论是那些认为虚拟化技术的应用会降低系统安全性的说法,还是谴责人们过于情绪化的言论,所有人都被贴上了诸如"愚蠢""困惑"之类的标签。让我们把这些激烈的争论暂时搁置,把重点放在这个问题本身上,那就是虚拟化技术的应用会降低系统的安全性吗?那些认为虚拟化技术的应用会降低系统安全性的论点主要基于以下两个关键点:
一,如果软件工程师不能开发出没有漏洞的操作系统或者应用软件,虚拟化解决方案要想避免漏洞希望何在呢
二,x86的硬件架构对于虚拟化技术并不适用
第一点涉及到两个方面:就是把所有的软件工程师,操作系统和应用软件合为一体,假设找到没有漏洞的代码是有可能的
按照这个思路深入探讨,我们必须明白这样一个事实,首先软件工程师也是人(就像我们都会犯错误),一般来说,软件都有不完整性记录,而且对于所有的软件工程师和应用软件每个人的判断标准也不尽相同。事实上,我猜想OpenBSD mailing list上的很多人都是倾向OpenBSD多于Windows。然而,也有许多这个博客的读者是倾向Windows多过OpenBSD或者Linux或者OS X等等。同样的优先选择对office套装也同样适用(OpenOffice, StarOffice, MS Office, KOffice等等)。这也就是说我们每个人都有自己的选择偏好:我们不会用一个标准去衡量软件。
其次,第一点争论的是我们大家都在期待一个没有漏洞的管理程序来减少服务器平台上安全性的隐患。这确实是个伟大的愿望!在很久以前(可能是在七年前)我写信给科技类新闻社区Slashdot问了这样一个问题,就是为什么程序开发者们不能多花一些时间在项目研发上,从而开发出一款没有漏洞的软件。Slashdot的负责人Taco回复了我并说这真是一个愚蠢的愿望:首先第一点是软件是由人编写的。第二点是没有任何误差是不可能的假设。然而,人们仍然会去判定某些应用软件比其它的软件会更加安全,对于Kernel亦是如此。如果所有的软件都存在漏洞,那么这个判断又有何依据呢?答案是"这很容易"。我们从以下几个方面做了观察:发现软件漏洞的速度,在世界范围内漏洞对于IT基础架构的影响程度,操作系统和独立软件生产商发布补丁程序的速度以及这些补丁在不影响其他服务器平台的前提下应用的难易程度。然后我们再去判断一个软件的安全性。但即使是这样,我们仍然无法认定一个软件就是安全的,因为它的研发过程依旧存在不完整性。
在此请注意我并没有说我是否同意Slashdot的观点。事实上我并不认同。我相信任何一款为大众目的所设计的软件,例如目前通用的操作系统,注定都有很多漏洞。理解起来很简单那就是这种软件缺乏特定的设计目的从而会碰到很多意想不到的状况。然而让我们想象一下如果应用于空中交通控制系统或者军事用途的软件存在着同样的误差那会发生什么呢?这种软件的研发就会订立较高的标准,因为它是针对一种特定的用途设计的。对于管理程序也是如此:管理程序的设计也是出于某种特定的用途。他们并不等同于目前通用的操作系统软件。这里我希望研发出领先的虚拟化解决方案的独立软件开发商们能接受这个挑战。
概括而言,我认为这是个合乎情理的解释那就是管理程序比通用的应用软件(比如出于通用目的设计的操作系统软件)要更加安全。
x86硬件
确实,x86的指令系统并非是针对虚拟化设计的。但是由此断言这个指令系统就不能朝这个方向发展就太过武断了。事实上,英特尔公司一直在不断努力研发符合时代需求的最新技术。随着第一款虚拟化软件扩展版的出炉,产生的问题和混乱也开始迎刃而解,x86指令系统被注入了新的生命力。在最新的扩展版中,通过激活多代处理器版本向虚拟机的实时移植, 使用虚拟化技术的x86系统指令的持久力会有更大程度的提升。
因此我的观点很简单,那就是我们只是根深蒂固的认为x86基础架构不是针对虚拟化设计,但这并不意味着x86就不能运用虚拟化技术和保证运行的安全性。事实上x86有很多优势:它具有可扩展性,能满足我们的需求。历史已经证明过这一点。
结论
根据以上的分析,上面的两个争论的论点似乎都是错误的,那么原先争论的结论已经被推翻了吗?还不完全是。虽然虚拟化技术的应用并不会降低系统的安全性,但它也不能排除这样的隐患。毕竟管理程序也是软件。虽然和通用的普通软件相比,他们存在漏洞的可能性较小,但漏洞还是有可能产生的。无论如何,坦率的说虚拟化技术降低系统安全性的可能性在其运用过程中也是存在的。举例来说,如果VMware ESX虚拟化软件的内存共享发现了漏洞,它能允许一台虚拟化计算机去读写其他机器的内存,那么这是否就意味着XenSource就是有问题的呢?答案当然是否定的。因此即使在管理程序中出现了漏洞,也不能说明所有的虚拟化软件都存在同样的问题。
如前文所述,软件套装的安全性是根据使用过程中发现的漏洞数量,对IT基础架构的影响程度(潜在隐患或者实际发生的)和人们发现漏洞并进行弥补的速度来进行判断的。因此尽管可能存在这样的隐患,但我们只能拭目以待去观察虚拟化技术的应用到底会不会降低系统的安全性。现在恐怕只有时间能证明一切。