扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
来源:IT专家网 2009年10月19日
关键字:Windows Server Windows 虚拟化
其实保护虚拟机上的操作系统同保护物理计算机上的操作系统相似,但是当保护虚拟机时,有两个重要方面需要考虑。其一是虚拟机共享硬件资源(如网卡),而这可能带来某些安全风险。其二是虚拟机的配置、磁盘、BlOS甚至内存,因为它们都是以文件形式存在,可能会暴露在主机上。下面笔者从三个方面来进行阐述。
1、基于角色和权限的安全设置
保护配置为Hyper-V角色的Windows Server 2008尤为重要,因为每个来宾操作系统的安全性取决于主机服务器的安全性。奇怪的是Server 2008 安全指南(Security Guide)并没有涉及Hyper-V角色的内容,安全设置向导(SCW)也是如此。
(1).以Server Core运行Hyper-V角色
安全期间,笔者建议在Windows Server 2008的内核版本Server Core系统中运行Hyper-V角色。Server Core是最小限度的Windows安装,缺少Windows Explorer外壳、对话框、应用程序以及很多服务(而这些会增加开销并可能会增大攻击面)。内容越少,可供攻击的地方就越少,需要打补丁的文件就越少,这样服务器重启的次数就越少。如果你觉得没有图形界面工具运行Server Core有些不便的话,我们可以通过另一台有图形界面工具的计算机远程管理该服务器。(图1)
减小攻击面是保护操作系统的关键,所以最好在服务器指定单独一个虚拟化角色,而且不要在上面安装额外的软件或服务。这个最佳策略的一个例外情况是,Hyper-V主机是使用入侵检测系统(IDS)的绝佳位置。由于所有来宾的网络通讯都通过主机的网卡,所以在主机上安装一个IDS检测器就可以监控所有的来宾操作系统。
(2).精细的权限控制
我们知道,来宾计算机对于主机服务器上的用户来说是特别脆弱的。因此,谨慎考虑用户的访问权限是很重要的。控制用户访问权限的最简单的方法是只允许少量用户在本地或通过Terminal Services来访问系统。我们可以使用组策略来决定哪些用户可以在本地登录服务器。要这样做,打开“本地安全策略”控制台,展开“本地策略”,并选择“用户权限分配”。在右边窗格中双击“允许在本地登录”策略,默认情况下用户可以Users组可以从本地登录。接下来,选中Users并单击“删除”。我们从这里可以指定哪些用户或用户组能够登录到系统。(图2)
一旦我们决定了哪些用户能够本地登录系统,就可以使用“授权管理器”来进一步确定用户访问虚拟机的方式。在“开始”菜单的搜索框中输入azman.msc,打开“授权管理器”控制台。从“操作”莱单选择“打开授权存储”。当“打开授权存储”对话框出现时, 选择XML file并找到服务器上的“C:\PogramData\Microsoft\Windows\Hyper-V\initialStore.xml”文件(默认情况下ProgramData目录是隐藏的,需要手工输入该文件的路径)。当加载了授权存储,展开“InitialStore.xml”→“Microsoft Hyper-V Services”→“定义”,然后是“规则定义”。在右侧的窗格中双击User,然后选择“定义”属性页。我们可以在这里增加或删除用户能够执行的操作。(图3)
从开发角度来说,Hyper-V以其出众的可编程性以及通过Windows管理规范(WMI)进行控制的能力超越了很多虚拟化产品。但是,这种可编程性允许以来宾操作系统难以预料的方式来控制它,因此,未授权用户有可能会绕开来宾操作系统中的安全控制。因为WMI处理自动化界面,所以我们可以使用WMI权限限制通过WMI对Hyper-V的访问。只需在开始菜单的搜索框里输入wmimgmt.msc并按回车键即可。然后,右键单击“WMI控制(本地)”并选择“属性”。选择“安全”属性页并展开“Root”→“Virtualization”,选中ms_409。点击“安全设置”按钮,可以进行精细的用户权限调整。(图4)
2、基于主机和硬件的安全设置
(1).将主机与其来宾隔离
当构建一个虚拟服务器的时候,我们应该慎重配置网络组件。虚拟服务器应该有足够多的网卡,把虚拟机的网络适当分段,但是不应该把拥有多种网络安全性区域的不同虚拟机放置在同一台主机上。最好的解决方法是把具有相似角色和相似安全需求的虚拟来宾放到同一台主机上。
我们应该把主机的网络从它的来宾中隔离出来,这样只有授权用户能够通过可信赖的网络访问主机。要这样做,最好的方法是有一块网卡,连接到一个隔离的、专门用于管理的网络上。但是,如果不可能做到的话,应该使用一些技术,例如VLAN、IPsec、VPN、SSL以及包过滤,来限制哪些用户能通过网络连接到主机。
当涉及到加固虚拟来宾操作系统的情况时,我们可用与加固物理计算机的相同方法。虚拟机的一个优势是:因为它们处于一个固定的硬件环境中(虚拟化硬件驱动程序总是相同的),所以我们可以针对使用的不同服务器角色,轻松地构造经过加固的基线模板。。但是一定要小心地保护这些模板,以防它们遭到破坏,而且要使用类似Offline Vitual Machine Servicing Tool这样的工具给它们打上最新的补丁,使之达到最新状态。系统加固是一项耗费时间因而经常被忽略的任务。通过使用预先加固过的操作系统模板,可以确保每个新虚拟机都满足预先确定的基准要求。
正如大家所知,与虚拟机有关的最大风险是任何能够访问到虚拟硬盘的用户可以安装它们并绕过来宾操作系统的安全机制。防止这一风险的一种方法是在来宾操作系统上实施磁盘加密,至少对敏感数据加密。微软的加密文件系统(EFS)是保护数据的一个不错的解决方案。假如虚拟来宾系统上的数据是高度敏感的话,一些全盘加密技术,如Bitlocker也是可以采用的。
(2).与硬件相关的安全设置
我们可以对虚拟机轻松地增加或删除硬件设备。因此,好的做法是只在必要的时候连接设备,且在用于生产时删除它们。这一策略对于映射到主机的光驱这样的设备尤其重要,因为来宾虚拟机也能够访问插入到主机光驱中的光盘。
另外,当我们配置虚拟机的硬件时,还应该限制处理器的使用。默认情况下,一台虚拟机能够使用100%的物理主机的处理器,这就意味着某人有可能对一台虚拟机实施拒绝服务DoS)攻击,而对该系统上的所有其它虚拟来宾都有影响。限制CPU的使用可以确保留下够的CPU周期来保证主机和其它虚拟机继续运行。最后,因为在Hyper-V Management Console中访问一台虚拟机就相当于物理地使用来宾操作系统的控制台,所以有必要严格遵循所有的安全性方面的最佳策略,例如设置带密码保护的屏幕保护以及在计算机不使用时注销。
3、基于敏感虚拟机的安全措施
有时候我们会有一台特别敏感的虚拟机,需要更高级别的安全性。虚拟机的一个好处是使用Hyper-V的暂停功能可以轻松地离线系统并快速回到在线状态。比方说,一台根证书服务器就很敏感,我们会希望只有在特定任务时才让它处于在线状态。
(1).独立磁盘运行
要保护这些敏感的虚拟机,我们可以在一块移动硬盘上运行它们。当用完这些虚拟机的时候,把磁盘取下来并严密保存。如果有一个大多数时候都处于离线状态的系统,定时一定要把机器上线一次获取最新的补丁。
(2).使用启动密码
在适当的时候使用启动密码防止未授权用户访问敏感的虚拟机,尽管笔者不推荐在所有系统上都这样做。防止某人启动一台Windows虚拟机的一个方法,是在操作系统上设置一个syskey密码。在开始菜单的搜索框里输入syskey按回车键。这样会打开Startup Key对话框,单击Update,选择Password Startup选项,设置一个密码,然后单击OK即可。当然,当做了安全部署后一定要更新书面安全策略。(图5)