《虚拟化安全解决方案》一2.3 在Windows Server 2008上配置Microsoft Hyper-V-阿里云开发者社区

开发者社区> 华章出版社> 正文

《虚拟化安全解决方案》一2.3 在Windows Server 2008上配置Microsoft Hyper-V

简介:

本节书摘来自华章出版社《虚拟化安全解决方案》一书中的第2章,第2.3节,作者[美]戴夫·沙克尔福(Dave Shackleford),更多章节内容可以访问云栖社区“华章计算机”公众号查看

2.3 在Windows Server 2008上配置Microsoft Hyper-V

配置Microsoft Hyper-V是在很大方面比锁定一些其他虚拟平台更简单许多的。原因很简单——它运行在Windows Server 2008上!好吧,也不全是这个原因。尽管许多人相信Hyper-V是类型2的虚拟机管理程序,因为它与一个标准的操作系统一起运行,实际情况并非如此。当你在Windows 2008平台上安装Hyper-V角色的时候,运行的操作系统实际是封装的,并变成了虚拟管理程序层上的“父虚拟机”。这个父虚拟机然后控制其他虚拟机和管理程序间的交互和管理功能。这种关系的一个简单描述如图2.29所示(Windows操作系统是在图左上角标记为“父操作系统”的方块)。

image

除了少数例外,锁定Windows Server 2008系统的标准指南是一样的,无论Hyper-V是否运行。保护Windows Server 2008有许多很好的指南,本书不想重复它们讲述的信息。下面是可以自由下载的一些可用指南:
Microsoft Windows Server 2008安全指南。

image

还有许多其他资源,包括Sybex出版的马克米纳斯(Mark Minasi)著的《Mastering Microsoft Windows Server 2008 R2》 (Sybex,2010)。
在我们深入研究保护Hyper-V平台的一些细节之前,还有一个非常重要的选择,它可以极大增强任何Microsoft Hyper-V系统的整个安全样貌,那就是在服务器核心模式运行Microsoft Server 2008操作系统。运行服务器核心本质上禁止Microsoft Windows图形化界面,去掉所有Windows浏览器界面组件,它们常常是安全问题和缺陷的根源。前面Minasietal写的书可以让使用者开始学习,Microsoft也有很多非常好的可用资源。这部分没有假设运行服务器核心模式,但是记住许多指南都是一样的。而且,如果想真正限制操作平台的印记,可以安装Hyper-V Server 2008,一个非常特殊的服务器核心安装仅用于Hyper-V角色甚至没有可攻击的表面区,因为它没有图形用户界面。

2.3.1 给Hyper-V打补丁

给Hyper-V系统打补丁与通常Windows服务器打补丁没有什么不同。多数组织使用中央管理补丁工具如Microsoft系统中心,Windows服务器更新服务(WSUS),和其他的。这个战略将正常工作,下面是一些警告:
在多数情况下,当补丁或风险会影响它们的性能(或使性能更坏)的时候,就需要将运行的虚拟机迁移到另一个Hyper-V主机,这可以很容易地使用Live Migration和其他工具完成,但打补丁没有一点计划就无法实现;
使用者可能需要禁用任何在Hyper-V主机中的自动化打补丁策略。自动化补丁对多数企业来说不是一项公共的配置,因为测试通常是首选,因为若不进行事前测试和准备,就不对虚拟主机应用补丁是极其重要的。
如果使用服务器核心,可能需要用命令行打补丁。在这种情况下,可以使用下面的三种方法之一打补丁:
使用msiexec或wusa命令在本地打补丁;
使用WScript或PowerShell脚本安装补丁;
在Windows Server 2008 R2上使用内建的SCONFIG工具,它为你提供了一个简单的菜单驱动的控制本地Windows更新代理的接口。

2.3.2 与Hyper-V安全通信

Microsoft Hyper-V将数字证书用于管理客户和工具如SCUMM的安全通信,从虚拟机管理程序或从远程客户端以及其他工具连接到虚拟机,远程客户端使用远程桌面协议(Remote Desktop Protocol,RDP)。为了确保你使用可信的第三方的安全数字证书,你必须完成两个任务:
1)禁用Hyper-V的生成,使用自签名证书。
2)用用户自己的证书替换默认的证书。
首先,为了防止Hyper-V产生自签名的证书,需要在命令提示符后运行下面的命令;
image

然后,按照下面的步骤删除任何默认证书:
1)在Hyper-V证书库中,删除任何已存在的自签名证书。为打开Microsoft管理控制台(MMC),单击开始->运行,输入mmc。单击文件->添加/删除管理单元,然后选择证书。单击“添加”。
2)选择服务账户,然后单击“下一步”。选择本地计算机,然后可以选择一个特定的Hyper-V服务账户类型。有三种类型你可以选择:
Hyper-V映像管理服务
Hyper-V网络管理服务
Hyper-V虚拟机管理服务
3)选择Hyper-V虚拟机管理服务。现在将看到一个有Hyper-V服务账户的证书库的MMC。选择个人目录,然后打开里面的证书目录,在这个目录中删除任何证书。然后打开vmmsTrusted Root Certif?ication Authorities目录,单击证书。找到任何与个人位置匹配的证书,删除它们。
现在,已经删除了任何自签名证书,可以开始使用你自己的证书替换它们:
1)再次单击文件->添加/删除管理单元,然后选择证书。单击“添加”。选择计算机账号,然后选择本地计算机。完成向导。
2)在左边面板证书下面(本地计算机),展开受信任的根证书颁发机构的位置,选择证书,然后在右边的面板中双击想使用的证书。选择“详情”选项页,在下拉菜单中选择“仅属性”。高亮指纹变量,如图2.30所示。将这个十六进制值复制到文本文件中以后使用。
image

3)打开一个Windows PowerShell窗口。执行下面的命令:
image

4)将第2步中的thumbprint_value替换为你复制的十六进制值,数字间不留空白(在剪贴和粘贴之后,删除它们)。按下回车键,然后输入下面一行,将证书对象添加到一个数组中:

image

7)返回MMC证书命令行。选择本地证书库,然后右击右侧信任的证书,选择“所有任务”,然后选择“管理私钥”。选择虚拟机组,确认它有允许的读访问权限。单击“OK”。
8)在注册表中,启用证书的哈希值:
image

9)然后需要重启虚拟机,使设置生效。
毫无疑问,这是非常复杂的过程。Microsoft对这个过程做了详细的解释,并更新了它,在下面的链接可以看到:
image

2.3.3 改变Hyper-V默认设置

我已经强调了增强系统的重要性。启用内存保护,磁盘加密应该被认为是在这之上可以采取的额外锁定步骤。
对于Hyper-V,首先应该考虑使用基于Windows本地特性进行内存保护,也就是数据执行保护(Data Execution Prevention,DEP)和地址空间布局随机化(Address Space Layout Randomization,ASLR)。而它们都不是百分之百安全的,但是它们都是有价值的。DEP可以防止缓存溢出攻击,它可以防止被保护内存空间的程序执行。ASLR常常改变系统文件的内存位置,挫败漏洞检测代码和目标是特定内存空间的恶意代码。DEP需要在Hyper-V中在硬件中启用。为了查看你的硬件是否支持DEP,检查看你的处理器是否支持AMD的不执行(No Execute NX)能力或英特尔的执行禁止(Execute Disable XD)功能。一个能帮助确定这些特性是否可用的简单工具是SecurAble,在Gibson研究组织网站上可以找到:

最简单的启用DEP的方式,应遵守下面的步骤:
1)右击我的计算机或计算机开始菜单,选择属性。选择高级选项卡,然后在性能区域单击“设置”按钮。选择“数据执行保护”标签,如图2.31
所示。
理想情况下,应该看到硬件支持DEP,应该为了所有程序启用DEP,除了要排除的,它们应该仅是那些DEP导致性能或稳定性问题的程序。在产品中启用它之前,你确保在实验室或测试系统上仔细测
试过!
image

2)为了启用ASLR,手动创建下面的注册表
设置:
image

将DWORD值设置为-1、0或1。-1将在系统上为每个程序启用ASLR,0为不使用它,1(或任何不是-1或0的值)将仅为特定应用程序启用ASLR尤其是与这个特性兼容的程序。再次强调,设置这个要非常小心,在实用之前要测试。
另一个你应该考虑改变的默认配置是在Hyper-V磁盘上启用驱动器加密(正规的称为驱动器加密或BDE)。这有助于保护虚拟磁盘和位于Hyper-V平台上的配置文件。对于企业,在独立的存储平台上存储所有虚拟文件,这是不适用的。我将在第6章单独讲述虚拟机加密。为了启用磁盘加密,遵循下面这些步骤:
1)在现有的Hyper-V安装上,单击“开始→所有程序→管理工具→服务器管理”。
2)当服务器管理器窗口打开的时候,在左侧面板高亮显示特性,然后在右侧窗口单击“添加特性”。单击“磁盘驱动器加密”,然后单击“下一步”。
3)按照提示完成安装,然后需要重启系统。当重启的时候,服务器管理器将自动重启,完成磁盘加密安装任务。
4)一旦这些完成,将可能看到错误,这是在尝试标准Hyper-V上启动磁盘加密时,因为感知驱动兼容性问题而产生的。最简单的正确设置的方式是下载Microsoft磁盘驱动器加密工具:
image

在你的Windows 2008操作系统上安装这个工具,运行它,然后当工具完成的时候重启。你应该看到一个类似图2.32所示的界面。除了系统磁盘(通常是C:),你将有一个新磁盘(S:)。
5)再次重启你的系统。
6)一旦它开始备份,进入控制面板,单击磁盘驱动器加密图标。当磁盘加密窗口打开的时候,选择启用磁盘加密。按照提示直到在系统硬件中,看到启用受信任的平台模块(TPM),如图2.33所示。
image

7)按照指令启用TPM,然后确保当向导完成的时候,归档恢复密码。在向导中完成步骤,以继续加密过程。
记住加密通常将对系统性能产生一点影响,因此确认在产品部署前对它进行测试。当系统磁盘没有启动时,这将保护你的系统磁盘,但是一个运行中的系统仍然是易受攻击的。所以把磁盘加密看作是额外的保护层,而不是第一线的防护。

2.3.4 启用Hyper-V的运行安全

在Hyper-V系统上启用NTP和SNMP与在vSphere平台上一样重要。幸好,这两个服务的启用相当简单。
了解在Windows域中的成员服务器与和它们通信的域控制器进行本地时间同步是非常重要的。校正时间敏感服务如Kerberos是很重要的,当它失去同步5分钟的时候,它的行为开始变得不确定。因为这个,建议不要改变内建的配置,仅确认你的域控制器指向你定义的内部和/或外部时间源。不管你怎样设置你的NTP层次,下面是在Windows系统上配置NTP的最简单方法:
1)在计划同步时间的系统上打开一个Windows命令提示窗口。
image

在虚拟环境中,需要为运行健康配置的第二个主要服务是SNMP。首先需要安装SNMP服务,单击开始→所有程序→管理工具→服务器管理器,当服务器管理器打开的时候,左侧高亮显示特性,然后在右侧窗口单击“添加特性”。单击SNMP服务(如果你愿意,也可以启用SNMP WMI提供者),然后单击“下一步”。让服务安装,然后单击“关闭”。
现在,按照下面的步骤配置SNMP:
1)单击“开始→运行”,输入Services.msc启动服务控制台。
2)向下滚动到“SNMP服务”,双击它,然后将在服务配置窗口的上面看到许多选项页。我们关心的三个选项页是代理、陷阱和安全。
3)在“代理”选项页,输入联系方式和位置信息以及SNMP代理可以访问的数据类型。
4)在“陷阱”选项页,输入系统响应的公钥,IP地址和/或发送数据的主机名。记住公钥和私钥通常是默认的,应该修改!
5)最后,在“安全”页,指定何种系统可以从主机接收SNMP信息或向主机发送SNMP信息。
这是你能够在Hyper-V主机上配置SNMP最简单的配置。

2.3.5 保护和监控Hyper-V关键配置文件

运行加密哈希函数监控关键文件,是确定最近它们是否进行过任何修改最简单的方法。对文件列表进行哈希操作,维护一个定期比较的基线,能提供一个简单的方式以确定任何关键Hyper-V文件是否被恶意软件或其他攻击修改。
多数关键二进制和库文件不需要改变直到应用了补丁,在这种情况下,你需要开发一个哈希值的新基线,从这里开始监控。监控关键Windows配置文件有许多可用的在线参考。这里,我们仅关注和Hyper-V运行和功能相关的文件和位置。如果这些文件被意外改变,应该有潜在的运行问题或安全漏洞,就应该视情况而定开始解决问题或启动事件响应过程。
那么需要监控什么文件呢?这里有一些,我将把它们分解为在一个路径中有许多文件的特殊列表。
单个文件

image

image
image
image
image
image

正如本章之前VMware提到的,Windows系统的一个很好的哈希工具是Windows sha1sum程序,它可以从GnuPG的网站上下载。

像下面这样运行程序:
image

2.3.6 保护本地Hyper-V用户和组

因为Hyper-V本地访问是通过Windows 2008服务器父分区管理的,所以需要考虑的细节很少。第一,强烈建议考虑仅使用域组管理用户访问。这可以放在本地组中提供本地更细粒度的基于角色的访问。第二,应该利用管理控制台用户控制,例如系统中心虚拟机管理器(SCVMM),如果可能。这可以使管理更加流畅,这通常是提供安全和审计的先导。
也就是说,分配用户和组基于角色访问Hyper-V和虚拟机的最好方法是通过Microsoft的认证管理器(AzMan)MMC。本书将讲解如何使用它,也将介绍一些能够入门的标准虚拟任务:
1)单击“开始→运行”,然后输入azman.msc,启动AzMan。
2)第一次使用AzMan启动时,使用者没有一个加载的认证库。在左侧面板中右击认证管理器,选择打开认证库,在ProgramDataMicrosoftWindowsHyper-VInitialStore.xml加载Hyper-V库。
3)在左侧面板出现的“Hyper-V服务”图标右击,选择“新范围”。填写范围的名称和描述,然后单击OK。
范围可以定义为你想要的任何东西,例如一个特定的应用程序或集群、某个网段、或组织部门或位置。一旦你有了定义的范围,你可以关注三个特定的配置区域:任务定义、角色定义和角色指定。理想情况下,首先要创建的是任务定义。这是一组完成一个任务的动作,例如管理虚拟网络组件,或创建和使用虚拟机。
4)在范围中右击任务定义目录,选择新任务定义。填写名称和描述,然后在窗口下面单击“添加”按钮,就能够选择一个特定操作,如图2.34所示。
5)现在有一个新打开的窗口,有两个选项页,即“任务”页和“操作”页。单击“操作”页,可以添加细粒度的任务操作,这些操作符合你试图完成的事情,如图2.35所示。
image

6)单击你想添加的每个任务旁边的复选框,然后单击“OK”。
7)下一步是添加角色,角色定义描述角色的类型例如网络工程师、安全管理员、虚拟机用户和其他人员。右击角色定义目录,选择新角色定义。然后你可以像往常一样输入名称和描述,然后再次单击“添加”按钮。现在,可以选择添加更低层次的角色和任务给这个新角色。可以给这个角色添加特殊操作,就像之前给任务添加的那样。建议将所有操作打包到任务,然后将任务指定给角色,这样易于管理和维护。一旦添加了任务、额外的角色和(或)操作,单击“OK”。任务管理网络的一个网络管理员角色的例子如图2.36所示。
  
image

8)最后,需要给角色指定用户和组。右击“角色指定目录”,选择新角色指定。然后可以选择一个已经定义的角色,单击“OK”。选中现在这个目录下面出现的角色,右击它,选择用户和组。可以进一步选择从窗口和活动目录或直接从AzMan中添加用户和组。如果从Windows或活动目录添加它们,那么将得到一个标准的窗口,通过它能够选择对象类型,位置和用户的名称/或与这个角色关联的组。
这就是所有需要做的!下面是一系列操作和操作的关键分类的描述,可以选择这些操作进行Hyper-V基于角色的访问:
Hyper-V服务操作
读服务配置(验证读取虚拟机管理服务的配置)
重配置服务(验证虚拟机管理服务器Hyper-V网络操作的重新配置)
绑定外部以太网端口
连接虚拟交换机端口
创建内部以太网端口
创建虚拟交换机
创建虚拟交换机端口
删除内部以太网端口
删除虚拟交换机
删除虚拟交换机端口
断开虚拟交换机端口
修改内部以太网端口
修改交换机端口设置
修改交换机设置
改变VLAN端口配置
解除外部以太网端口绑定
查看外部以太网端口
查看内部以太网端口
查看LAN端点
查看交换机端口
查看交换机
查看虚拟交换机管理服务
查看VLAN设置
Hyper-V虚拟机操作
允许输入到虚拟机(授权用户为虚拟机提供输入)
允许从虚拟机输出(授权查看虚拟机的输出)
改变虚拟机授权
创建虚拟机
删除虚拟机
暂停和重启虚拟机
重新配置虚拟机
启动虚拟机
停止虚拟机
查看虚拟机配置
下面是常用任务和相关的操作的一些例子:
任务:添加一个外部网络到服务器
绑定外部以太网端口
创建内部以太网端口
连接虚拟机
创建虚拟交换机
创建虚拟交换机端口
查看外部以太网端口
查看内部以太网端口
查看LAN端点
查看交换机端口
查看交换机
查看虚拟交换机管理服务
查看VLAN设置
任务:修改一个虚拟机
允许从一个虚拟机的输出
读取服务配置
重新配置虚拟机
查看虚拟机配置
查看Hyper-V设置(对于一个审计角色,可能):
允许从虚拟机输出
读取服务配置
重新配置服务
查看虚拟机配置
在Microsoft网站可以看到更多任务和操作的例子:

毕竟,从安全的立场来说最佳实践是什么?其实很简单——努力坚持最小特权原则。角色的粒度应该是可以得到的最小限度,每个角色应该仅有特定的任务和完成工作所需的操作,没有任何多余的。这有助于从内部防止恶意活动和授予更多权限导致的后果严重的意外。

2.3.7 锁定对Hyper-V管理程序平台的访问

多数管理员将使用如下两种方法之一访问Hyper-V平台,第一种是利用中央管理控制台例如SCVMM或Hyper-V管理器,另一种是使用远程桌面服务。我们将在第5章管理平台讲述SCVMM。这里,将讨论你需要在本地Hyper-V系统进行的改变以允许一台远程Hyper-V管理器MMC连接和管理应用程序:
1)首先,遵从之前讨论的相同的步骤,为AzMan中的Hyper-V添加管理员角色用户或组。
2)然后,单击“开始→所有程序→管理工具→计算机管理”访问本地计算机管理控制台。打开系统工具,然后本地用户和组。双击“分布式COM用户”组,单击“添加”按钮添加远程用户/组到本地组,单击“OK”。
3)现在,打开服务和应用程序部分,右击WMI控制选项,选择属性。单击“安全”选项卡,展开根目录,选择CIMV2。现在单击下面的“安全”按钮,如图2.37所示。
4)确认添加远程用户/组。然后,在授权对话框下单击“高级”。
5)需要对这个用户或组的权限进行一点小小的修改。选中高级权限对话框中的用户或组,单击“编辑”。现在进行下面的改变(如图2.38所示):
确保应用(Apply to)设置为这个命名空间和子命名空间。
改变允许启用远程(单击复选框)的权限。
单击“仅对这个容器中对象和/或容器应用这些权限”复选框。
单击OK保持变更,返回WMI控制属性窗口。
6)从CIMV2向下滚动到一个类似的标签为虚拟化的区域。如前单击“安全”按钮,按照同样的步骤(步骤4和步骤5)添加用户/组,修改启用远程的权限。单击“OK”完成变更,然后退出WMI控制属性部分。需要重启服务器以便这些变更生效。
   
image

也需要确保Hyper-V上的本地防火墙已经适当的配置允许远程WMI交互。默认,安装Hyper-V时,表2.2中列出的规则是默认的。
image

注意,默认情况下Hyper-V标准WMI接口的前四条规则是启用的。为了启用后四条WMI相关规则(需要远程管理),需要在命令提示符下运行下面的命令:
image

这将启用防火墙规则允许远程MMC访问Hyper-V。
管理Hyper-V的第二个方法是通过远程桌面服务。尽管充分保护远程桌面超出了本书的范围,但是这里有一些恰当锁定它的关键建议:
访问系统使用强密码。这是整个安全的最基本最佳实践,但仍有许多问题。
限制对特定用户和系统的访问。这可以按照下面步骤完成,打开控制面板,单击系统,然后单击“远程”设置。首先,选择最后一个选项,“仅允许运行远程桌面具有网络级认证(更安全)的计算机连接”,然后单击选择用户按钮。这些选项如图2.39所示。
image

单击“添加”,选择可以从远程桌面访问系统的用户,然后单击OK三次完成。
修改主机的设置。单击“开始→所有程序→管理工具→远程桌面服务→远程桌面会话主机配置”。现在双击屏幕上对话框中的RDP-TCP连接。现在看到一个标题为RDP-TCP属性的弹出窗口。在“通用”页面,选择安全层的SSL(TLS 1.0)。这是建立基于证书协商连接的不错选择。对于加密等级,选择高或FIPS-140。确认选择需要网络级别认证复选框,并使用受信任的证书颁发机构发布的签名证书替换默认的自签名证书。在登录设置页面,选中“总是提示密码”复选框。
强烈推荐使用Hyper-V管理工具管理系统,但是保护远程桌面是非常好的实践。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:

华章出版社

官方博客
官网链接