上回我在 “云计算的一个问题”一文作出结论时提到 “云计算的一个重要问题是计算平台的安全问题”, 即,用户级的应用程序代码与数据如何在计算机内存中得到保护. 所谓在内存中保护用户程序与数据的安全,是指一个用户的程序代码以及数据在一个计算平台的内存储器中被执行时,其代码的正确性以及数据的私密性完整性不因受到***而被破坏或丢失. 注意,这里 “破坏或丢失”不仅仅是指一般意义上的失去对物件的拥有或有效使用,还包含很可能是更为严重后果的破坏情况,如***者成功获得了其不应得到的信息.
 
     我们都知道若要在外存设备上(如磁盘,网络通信设备)对数据进行保护,加密是常用且十分有效的保护手段. 但在内存中情况十分不同,在内存中我们当然不能采用对信息进行加密的手段,不然的话CPU将如何理解,执行并计算那些加了密的代码与数据呢. 对于内存中信息的保护,我们所需要的技术手段是隔离,即,不同用户的应用程序代码及数据之间应当实施适当的访问控制管理措施,使不同应用程序的代码及数据不能随意互访. 应用程序数据间的隔离其实是多用户操作系统的一个基本问题:操作系统负责管理用户对计算平台资源的分时共享包括内存的分时共享. 正确的隔离是维护程序正确执行的基本条件. 值得注意的是,现今成功的商用操作系统(如Windows, Linux, 及各种Unix版本, 等等)在实现应用程序隔离时主要考虑了程序正确执行的环境是一个非恶意的环境,其间不存在恶意***者. 这样的考虑至少在这些系统问世之初以及它们的早期发展阶段应该算是合理的吧. 在这样的非恶意计算环境考虑下,系统的正确性或许不是一个特别难解的问题(也许研究程序正确性,尤其是可证明正确性的同仁不会同意我这样说). 不过在如今的互联网时代,在恶意代码,病毒,流氓软件肆意虐行的今天,计算环境的非恶意假定已不再成立. 可惜商用操作系统在用户级应用程序隔离上的确存在先天不足的毛病. 主要原因包含由于在以前非恶意计算环境考虑下形成的设计中系统赋予了用户进程过多的不必要的特权. 另外所有这些操作系统如今都已经发展得十分庞大复杂, 存在许多隐含的设计漏洞. 许多这些漏洞都可以被恶意利用造成对用户应用程序的有效***. 的确,大量***的存在恰恰是以操作系统存在可以被利用的漏洞为前提的. 大家都有过对操作系统安装打补钉程序的经历吧. 看来补钉是一时半会儿打不完的. 系统化地解决计算平台安全问题现时已变得刻不容缓.
 
     近来用硬件虚拟化技术来加强计算平台安全问题被十分看好. 硬件虚拟化技术是用一个直接跑在 “金属”硬件计算平台上的软件来模拟 “金属”硬件的指令. 用分时的概念,一个硬件平台可以被虚拟成多个具有同样功能的软件计算平台. 在每一个软件平台上都可以运行一个客户操作系统以及跑在其上的用户应用程序. 在用户看来,这样虚拟出来的软件平台与被虚拟的硬件平台没有任何不同(当然在硬件平台负荷大的情况下用户会感觉到执行效益上的差别). 这样虚拟出来的软件平台叫做虚拟机(Virtual Machine, VM). 由于每个虚拟机分时地使用被虚拟的硬件平台,为了保证虚拟机正确使用硬件(向硬件平台发出正确执行指令),每个虚拟机都受到上面提到的哪个直接跑在硬件上的软件的严格监控(所以那个直接跑在硬件上的软件又叫做虚拟机监控器,Virtual Machine Monitor, VMM). 虽然可以说VMM对每一个VM的严格监控,其出发点完全是为了向硬件发出正确的执行指令,以避免机器出错而死机, 结果却在不同虚拟机之间事实上形成了很强的隔离效果. 跑在不同虚拟机上的用户应用程序是很难做到实现互访而同时又不被VMM所监控到.
 
     那么将不同用户的应用程序部署于不同的虚拟机上,是否应用程序间的严格隔离问题,即我们所面对的计算平台安全问题,就得到解决了呢? 可惜事情远没那么简单! 且听下回分解.