尽管有大量的受访信息显示,运行VMware ESX和ESXi的操作系统是非常安全的;仍不排除一些由于VMware管理程序(hypervisor)和子操作系统之前的交互机制所带来的系统故障隐患。这些隐患是由于VMware驱动、VMware后门问题造成的。这种交互通常由三种渠道实现:半虚拟化驱动程序、常规驱动程序和VMware工具。这样,当系统管理员希望构建一个安全的VMware环境时,有两个部分需要关注。
***部分是管理程序(hypervisor)和虚拟机(VM)之间的交互。虚拟化层通过组成VMware工具的半虚拟化驱动延伸到子操作系统(guest OS)之中,对于之前不太关注这部分内容的人,这是一个全新的命题;第二部分就是子操作系统本身。每个子操作系统都有需要遵循的安全加固脚本、向导和基准。然而这些脚本、向导和基准事实上都无法完全取代虚拟化层和子操作系统之间的交互,所以一般来讲***个部分会直接影响到第二个部分。总之,您可以参考下面的这些设置,来确保VMware管理程序和建立在它之上的虚拟机之间的交互更加安全:
加固子操作系统
请在您的虚拟机环境中遵循其中的一项或者所有的基准和向导。同时谨记vSwitch并不包含内置的防火墙,所以一旦子操作系统接入网络环境,它就需要加强自身的防护工作。
管理程序和虚拟机之间的交互
管理程序和虚拟机之间的交互通过三种渠道:半虚拟化驱动、常规驱动和VMware后门程序。
半虚拟化驱动程序知晓自身运行于虚拟机中,通过带外通讯机制和硬件设备交互(也可能是通过VMware 后门程序),或者利用虚拟主机使用的特殊的指令交互。例如,在VMware子系统中,vmxnet驱动就是半虚拟化驱动程序。因为虚拟机界面(VMI)可以在Linux下几乎透明地写入半虚拟化驱动,所有它有很好的性能优势。如果写入半虚拟化程序的过程很困难,程序会试图避开虚拟机直接跟管理程序交互,这个过程可能会直接导致系统崩溃。因此,为了避免这种情况发生,***的办法就是在使用半虚拟化程序之前确保他们它们都是经过验证的。通常我们只使用那些来自已知来源(如:VMware)的半虚拟化驱动。
常规驱动程序并不知道自身运行于虚拟机管理程序之上,它和底层硬件之间的交互通常需要管理程序的转发。这些驱动程序仅仅和子操作系统内核之间交互,然后子操作系统内核通过普通方式和虚拟机管理程序之间交互。在某些情况下,管理程序可能并不能识别驱动所发出的(或者是发往驱动)指令。这种结果下,程序会返回错误值写入到每个虚拟机内部的vmware.log中,程序所需的功能将无法实现,这个过程多数时候对虚拟机的影响并不明显。有些时候,这种情形会直接导致虚拟机的崩溃。例如,VMware的管理程序vmkernel,并不能有效执行每个SCSI指令,一些特殊的指令将导致在VMware.log中写入错误日志。或在一些情况下,虚拟机会瘫痪。
VMware后门程序
关于VMware的后门程序是一个让人困惑和,并被许多人诟病的问题。一般来说,通过一些虚拟机内部的简单设置就可以保护VMware后门程序安全。后门程序是一种旁路通讯方式,提供了管理程序和虚拟机之间的另外一条交互通路,通常情况下VMware后门程序是供给VMware工具来使用的。
VMware工具可以在所有的用户权限下运行,因此每个用户都可以通过虚拟机后门程序运行一些VMware工具命令行。通常普通用户并不需要经常通过VMware工具来执行命令行指令,所以在VMware ESX环境中,VMware工具应该被严格限制给系统管理员使用。不幸的是,VMware后门程序是对所有用户开放的,并且不能在子操作系统内通过设置来关闭。
确保VMware后门程序的安全性
通常用来保护VMware后门程序的方式是在VMware 高级设置来配置更改一些选项。现在通用的安全标准都不建议使用最小化配置,而是通过建立一些不同配置的子集来管理。这里提供了一些设置方式,可以在Advanced Options下设置虚拟机配置来保证VMware后门程序更高的安全性(或直接添加到每个虚拟机的.vmx 文件中):
DISA STIG for ESX
禁止从虚拟机的远程控制端向工作站拷贝:
isolation.tools.copy.enable => false
禁止从工作站向虚拟机远程控制端粘贴:
isolation.tools.paste.enable => false
禁止改变屏幕分辨率和色度:
isolation.tools.setguioptions.enable => false
CISecurity ESX Benchmark
禁止从虚拟机的远程控制端向工作站拷贝:
isolation.tools.copy.enable => false
禁止从工作站向虚拟机远程控制端粘贴:
isolation.tools.paste.enable => false
禁止改变屏幕分辨率和色度:
isolation.tools.setguioptions.enable => false
禁止VMware工具进行配置更改的功能:
isolation.tools.setinfo.disable => true
VMware VI3.5加固指导
禁止某些情况下对vmware.log文件的访问登陆。在允许访问的情况下极大减少了访问量,可以减轻磁盘的I/O压力:
isolation.tools.log.disable => true
使vmware.log文件按照设定的字节循环滚动保存,避免vmware.log文件变得非常的庞大:
log.rotatesize => 100000
只保存设定数量的历史vmware.log文件,避免重复保存的该文件占用大量磁盘空间。在VMFS系统中,这个文件可以迅速达到32K的文件大小上限。
log.keepold => 10
限制可以发送给VMware后门程序的数据量:
tools.setinfo.sizeLimit => 1048576
禁止通过后门程序直接对虚拟机内部的一些配置信息做修改:
isolation.tools.setInfo.disable => true
禁止虚拟机通过VMware后门程序直接设置虚拟机硬件设备(软驱、光驱、网卡等)的连接状态(断开或连接):
isolation.tools.connectable.disable => true
isolation.tools.diskshrink.disable => true
禁止虚拟机通过VMware后门程序直接调用diskwiper功能:
isolation.tools.diskwiper.disable => true
根据安全需求的不同,所有的选项可以被设置用来保证子系统和VMware远程控制主机之间以及在虚拟机、管理程序及文件系统之间交互的安全。这些设置可以防止一些非常有趣的(有时是让人迷茫的)由于缺少空间导致的管理程序故障。
对VMware后门程序的保护是非常重要的,必须强调的一点是***适当限制使用VMware工具,而不是对驱动的访问。或者,执行集成在子操作系统内部的,像Window UAC(User Access Control)或SElinux这样的强制访问控制工具也是一样的效果。通过这些来限制什么时候可以访问VMware的后门程序。
虚拟机安全最主要的部分是在子操作系统之内,但是虚拟硬件设置也会起到作用。尝试去掌握和练习那些用于加固虚拟机的指导方针、基准和检查清单,帮助您更加合理地保护您的虚拟机。
【编辑推荐】