这些安全控制提供了一组虚拟机安全最佳做法的基准。它们的结构化方式解释了实施相应控制措施的好处和利弊权衡。要更改高级系统设置,您可以使用提供的 PowerCLI 或 vSphere Client主机 > 配置 > 系统 > 高级系统设置)。

使用的变量

本节中的 PowerCLI 命令使用以下变量:

  • $VM = "virtual_machine_name"

mks.enable3d

在不需要 3D 图形功能的虚拟机上停用这些功能以减少潜在攻击向量,从而增强整体系统安全性。

安装默认值:False
基准建议值:False
需要执行的操作
审核安装默认值。
默认值已更改时的潜在功能影响
PowerCLI 命令评估
Get-VM -Name $VM | Get-AdvancedSetting mks.enable3d
PowerCLI 命令修复示例
Get-VM -Name $VM | Get-AdvancedSetting mks.enable3d | Set-AdvancedSetting -Value FALSE

ethernet*.filter*.name

限制通过“dvFilter”网络 API 访问虚拟机。

NSX 等工具使用 dvFilter 接口筛选和检查网络流量。其他工具也可能使用该接口。确保这些工具已获得授权。

安装默认值:不存在
基准建议值:不存在
需要执行的操作
审核安装默认值。
默认值已更改时的潜在功能影响
包括 NSX 在内的合法网络工具可能需要此功能。
PowerCLI 命令评估
Get-VM -Name $VM | Get-AdvancedSetting "ethernet*.filter*.name*"
PowerCLI 命令修复示例
Get-VM -Name $VM | Get-AdvancedSetting "ethernet*.filter*.name*" | Remove-AdvancedSetting

防止虚拟机从未经授权的源引导

虚拟机必须防止从未经授权的源引导。

如果虚拟机的主引导卷不可用,并且 EFI 固件会寻求备用引导源(如网络引导),则可能会对虚拟机进行未经授权访问。可以通过网络控制以及高级参数 bios.bootDeviceClassesbios.bootOrderbios.hddOrder 缓解此问题。

bios.bootDeviceClasses 的格式为“allow:XXXX”或“deny:XXXX”,其中 XXXX 是引导类的逗号分隔列表。引导类包括 net(网络 PXE 引导)、usb(从连接的 USB 设备);pcmcia(PCMCIA 扩展卡,当前未使用);cd(从连接的虚拟 CD/DVD 设备);hd(从连接的虚拟硬盘);fd(从连接的虚拟软盘设备);reserved(来自未知设备);efishell(进入 EFI shell);和 all 或 any(与 all 相同)。

使用 allow 或 deny 也会隐式表示相反。例如:
  • deny:all 不允许所有引导类
  • deny:net 不允许网络引导,但允许所有其他引导
  • allow:hd 仅允许 hd 引导,并拒绝所有其他引导
  • allow:hd,cd 允许 hd 然后 cd 设备引导,并拒绝所有其他引导

新虚拟机可能需要 CD/DVD 引导,而某些动态环境(如实验室)可能会使用网络引导。相应地设置这些环境并记录您的理由。

安装默认值:allow:all
基准建议值:allow:hd(安装客户机操作系统后)
需要执行的操作
修改安装默认值。
默认值已更改时的潜在功能影响
虚拟机无法再从未指定的源引导,这可能会对需要 PXE 引导或恢复介质的情况产生负面影响。但是,可以通过 PowerCLI 轻松地大规模更改参数。另一种方法是指定拒绝的方法,例如“deny:net”。
PowerCLI 命令评估
Get-VM -Name $VM | Get-AdvancedSetting bios.bootDeviceClasses
PowerCLI 命令修复示例
Get-VM -Name $VM | Get-AdvancedSetting bios.bootDeviceClasses | Set-AdvancedSetting -Value "allow:hd"

RemoteDisplay.maxConnections

限制控制台与虚拟机的连接数。

将虚拟机控制台共享限制为一个用户可防止多个观察器,从而提高安全性。但是,这可能会无意中为服务拒绝带来潜在途径。

安装默认值:-1
基准建议值:1
需要执行的操作
修改安装默认值。
默认值已更改时的潜在功能影响
可能会造成由于连接了一个用户或持续存在断开连接的控制台会话而导致控制台不可用的拒绝服务状况。其他产品(如 VMware Cloud Director)可能需要将此选项设置为更大的值。
PowerCLI 命令评估
Get-VM -Name $VM | Get-AdvancedSetting RemoteDisplay.maxConnections
PowerCLI 命令修复示例
Get-VM -Name $VM | Get-AdvancedSetting RemoteDisplay.maxConnections | Set-AdvancedSetting -Value 1

限制 PCI 设备直通功能

虚拟机必须限制 PCI 设备直通功能。

DirectPath I/O 功能使虚拟机可以直接访问系统硬件,从而影响 vMotion、DRS 和 High Availability 等风险缓解工具。DirectPath I/O 功能还可能会为攻击者授予特权硬件访问权限。确保只有必要的虚拟机才具有此特权,从而通过客户机操作系统安全控制进行补偿。

安装默认值:不存在
基准建议值:不存在
需要执行的操作
审核
默认值已更改时的潜在功能影响
如果直通设备(如 GPU)断开连接,这些设备将受到负面影响。审核并记录这些虚拟机的业务需求。
PowerCLI 命令评估
Get-VM -Name $VM | Get-PassthroughDevice
PowerCLI 命令修复示例
Get-VM -Name $VM | Get-PassthroughDevice | Remove-PassthroughDevice

移除不必要的虚拟机虚拟硬件设备

虚拟机必须移除不必要的虚拟硬件。

要减小潜在攻击面,请从虚拟机中消除不必要的虚拟硬件。迁移引入的很少使用的端口、临时 CD/DVD 驱动器和硬件可能易受攻击。移除它们可降低从受保护环境中引入软件或数据外泄风险。

安装默认值:已配置
基准建议值:不存在
需要执行的操作
修改安装默认值。
默认值已更改时的潜在功能影响
移除 CD-ROM 设备可能会影响 VMware Tools 安装和维护。移除 XHCI 控制器可能会影响某些客户机操作系统的控制台键盘和鼠标连接。
PowerCLI 命令评估
$VMview = Get-VM -Name $VM | Get-View
$UnnecessaryHardware = "VirtualUSBController|VirtualUSBXHCIController|VirtualParallelPort|VirtualFloppy|VirtualSerialPort|VirtualHdAudioCard|VirtualAHCIController|VirtualEnsoniq1371|VirtualCdrom"

$VMview.Config.Hardware.Device | Where-Object {$_.GetType().Name -match $UnnecessaryHardware} | Foreach-Object {
	$devname = $_.GetType().Name
	Write-Host "$VM`: [WARNING] VM has a $devname device. Please evaluate and consider removing." -ForegroundColor Yellow
}
PowerCLI 命令修复示例
不适用
vSphere Client 中的设置位置
虚拟机 > 编辑设置 > 虚拟硬件

tools.guestlib.enableHostInfo

防止虚拟机获取有关 Hypervisor 的主机信息。

防止虚拟机获取有关 Hypervisor 的主机信息可降低高级攻击风险,因为它会拒绝攻击者有关物理主机的关键详细信息。

安装默认值:False
基准建议值:False 或未定义
需要执行的操作
审核安装默认值。
默认值已更改时的潜在功能影响
PowerCLI 命令评估
Get-VM -Name $VM | Get-AdvancedSetting tools.guestlib.enableHostInfo
PowerCLI 命令修复示例
Get-VM -Name $VM | Get-AdvancedSetting tools.guestlib.enableHostInfo | Remove-AdvancedSetting
vSphere Client 中的设置位置
不适用。这是 VMX 文件设置。

设置 Fault Tolerance 加密

虚拟机必须要求对 Fault Tolerance 进行加密。

要求对虚拟机中的 Fault Tolerance 进行加密可确保数据传输安全。虽然默认的“随机”加密可能会由于 vSphere 兼容硬件中无处不在的 AES-NI 支持而导致加密,但强制实施“要求”加密可确保不会执行未加密操作。

安装默认值:ftEncryptionOpportunistic
基准建议值:ftEncryptionRequired
需要执行的操作
修改安装默认值。
默认值已更改时的潜在功能影响
PowerCLI 命令评估
(Get-VM -Name $VM).ExtensionData.Config.FtEncryptionMode
PowerCLI 命令修复示例
$VMview = Get-VM -Name $VM | Get-View 
$ConfigSpec = New-Object VMware.Vim.VirtualMachineConfigSpec
$ConfigSpec.FtEncryptionMode = New-object VMware.Vim.VirtualMachineConfigSpecEncryptedFtModes
$ConfigSpec.FtEncryptionMode = "ftEncryptionRequired" 
$VMview.ReconfigVM_Task($ConfigSpec)
vSphere Client 中的设置位置
虚拟机 > 编辑设置 > 虚拟机选项 > 加密

isolation.tools.copy.disable

停用虚拟机上的控制台复制操作。

在虚拟机上停用控制台复制操作可防止在虚拟机和本地客户端之间复制数据,而无论用户是通过 Web 控制台、VMRC 还是其他方法进行访问。

安装默认值:True
基准建议值:True 或未定义
需要执行的操作
审核安装默认值。
默认值已更改时的潜在功能影响
PowerCLI 命令评估
Get-VM -Name $VM | Get-AdvancedSetting isolation.tools.copy.disable
PowerCLI 命令修复示例
Get-VM -Name $VM | Get-AdvancedSetting isolation.tools.copy.disable | Remove-AdvancedSetting

isolation.tools.paste.disable

停用虚拟机上的控制台粘贴操作。

通过在虚拟机上禁用控制台粘贴操作,将阻止从本地客户端到虚拟机传输数据,而无论用户使用的是 Web 控制台、VMRC 还是其他控制台。

安装默认值:True
基准建议值:True 或未定义
需要执行的操作
审核安装默认值。
默认值已更改时的潜在功能影响
PowerCLI 命令评估
Get-VM -Name $VM | Get-AdvancedSetting isolation.tools.paste.disable
PowerCLI 命令修复示例
Get-VM -Name $VM | Get-AdvancedSetting isolation.tools.paste.disable | Remove-AdvancedSetting

isolation.tools.diskShrink.disable

停用虚拟机上的虚拟磁盘压缩。

在虚拟机上禁用虚拟磁盘压缩有助于避免出现磁盘不可用问题。对于客户机环境中的非管理用户,执行此操作的能力通常会受限。

安装默认值:True
基准建议值:True 或未定义
需要执行的操作
审核安装默认值。
默认值已更改时的潜在功能影响
PowerCLI 命令评估
Get-VM -Name $VM | Get-AdvancedSetting isolation.tools.diskShrink.disable
PowerCLI 命令修复示例
Get-VM -Name $VM | Get-AdvancedSetting isolation.tools.diskShrink.disable | Remove-AdvancedSetting

isolation.tools.diskWiper.disable

停用虚拟机上的虚拟磁盘擦除操作。

在虚拟机上禁用虚拟磁盘擦除有助于避免出现磁盘不可用问题。对于客户机环境中的非管理用户,执行此操作的能力通常会受限。

安装默认值:True
基准建议值:True 或未定义
需要执行的操作
审核安装默认值。
默认值已更改时的潜在功能影响
PowerCLI 命令评估
Get-VM -Name $VM | Get-AdvancedSetting isolation.tools.diskWiper.disable
PowerCLI 命令修复示例
Get-VM -Name $VM | Get-AdvancedSetting isolation.tools.diskWiper.disable | Remove-AdvancedSetting

isolation.device.connectable.disable

防止虚拟机未经授权移除、连接和修改设备。

防止虚拟机中未经授权的设备修改会阻止非管理用户或进程连接、断开连接或调整设备设置。该措施可遏制未经授权的访问和操作中断,从而降低拒绝服务风险,并减少一些泄露数据的途径。

安装默认值:True
基准建议值:True 或未定义
需要执行的操作
审核安装默认值。
默认值已更改时的潜在功能影响
PowerCLI 命令评估
Get-VM -Name $VM | Get-AdvancedSetting isolation.device.connectable.disable
PowerCLI 命令修复示例
Get-VM -Name $VM | Get-AdvancedSetting isolation.device.connectable.disable | Remove-AdvancedSetting

isolation.tools.dnd.disable

停用虚拟机控制台上的拖放操作。

无论控制台类型如何,在虚拟机控制台中停用拖放操作都会阻止用户在虚拟机和本地客户端之间传输数据,从而增强数据安全性。

安装默认值:True
基准建议值:True 或未定义
需要执行的操作
审核安装默认值。
默认值已更改时的潜在功能影响
PowerCLI 命令评估
Get-VM -Name $VM | Get-AdvancedSetting isolation.tools.dnd.disable
PowerCLI 命令修复示例
Get-VM -Name $VM | Get-AdvancedSetting isolation.tools.dnd.disable | Remove-AdvancedSetting

tools.setInfo.sizeLimit

限制从虚拟机传递到 VMX 文件的信息性消息。

将虚拟机信息性消息限制到 VMX 文件可防止其超过其默认大小 1 MB。此选项可防止在数据存储变满时可能出现的潜在拒绝服务情况。

安装默认值:1048576
基准建议值:1048576 或未定义
需要执行的操作
审核安装默认值。
默认值已更改时的潜在功能影响
PowerCLI 命令评估
Get-VM -Name $VM | Get-AdvancedSetting tools.setInfo.sizeLimit
PowerCLI 命令修复示例
Get-VM -Name $VM | Get-AdvancedSetting tools.setInfo.sizeLimit | Remove-AdvancedSetting

激活日志记录

虚拟机必须激活诊断日志记录。

虚拟机的诊断日志记录有助于取证和故障排除。

安装默认值:True
基准建议值:True
需要执行的操作
审核安装默认值。
默认值已更改时的潜在功能影响
PowerCLI 命令评估
Get-VM -Name $VM | Where {$_.ExtensionData.Config.Flags.EnableLogging -ne "True"}
PowerCLI 命令修复示例
$VMview = Get-VM -Name $VM | Get-View 
$ConfigSpec = New-Object VMware.Vim.VirtualMachineConfigSpec
$ConfigSpec.Flags = New-Object VMware.Vim.VirtualMachineFlagInfo
$ConfigSpec.Flags.EnableLogging = $true
$VMview.ReconfigVM_Task($ConfigSpec)

log.keepOld

限制保留的虚拟机诊断日志数量。

通过限制保留的诊断日志数量,可以避免在不影响诊断功能的情况下填满数据存储。

安装默认值:10
基准建议值:10 或未定义
需要执行的操作
审核安装默认值。
默认值已更改时的潜在功能影响
PowerCLI 命令评估
Get-VM -Name $VM | Get-AdvancedSetting log.keepOld
PowerCLI 命令修复示例
Get-VM -Name $VM | Get-AdvancedSetting log.keepOld | Remove-AdvancedSetting

log.rotateSize

限制虚拟机诊断日志的大小。

限制虚拟机上的诊断日志大小可防止空间消耗过多,尤其是在长时间运行的虚拟机上。建议的最小限制为 2 MB。

安装默认值:2048000
基准建议值:2048000 或未定义
需要执行的操作
审核安装默认值。
默认值已更改时的潜在功能影响
PowerCLI 命令评估
Get-VM -Name $VM | Get-AdvancedSetting log.rotateSize
PowerCLI 命令修复示例
Get-VM -Name $VM | Get-AdvancedSetting log.rotateSize | Remove-AdvancedSetting

tools.guestlib.enableHostInfo

停用向客户机发送主机信息的功能。

通过将虚拟机配置为获取有关物理主机的详细信息,攻击者可能会使用该信息来通知对主机的进一步攻击。由于默认值是所需状态,您可以通过以下两种方法进行审核:确认该设置未设置,或者如果已设置该设置,则其设置为 False。

安装默认值:False
基准建议值:False 或未定义
需要执行的操作
审核安装默认值。
默认值已更改时的潜在功能影响
无法从客户机操作系统内部检索有关主机的性能信息可能会妨碍故障排除。
PowerCLI 命令评估
Get-VM -Name $VM | Get-AdvancedSetting tools.guestlib.enableHostInfo
PowerCLI 命令修复示例
Get-VM -Name $VM | Get-AdvancedSetting tools.guestlib.enableHostInfo | Remove-AdvancedSetting

tools.guest.desktop.autolock

在远程控制台断开连接时锁定虚拟机客户机会话。

在上次控制台连接关闭时锁定虚拟机可防止攻击者利用已登录的控制台会话进行潜在未授权访问。

安装默认值:False
基准建议值:True
需要执行的操作
修改安装默认值。
默认值已更改时的潜在功能影响
PowerCLI 命令评估
Get-VM -Name $VM | Get-AdvancedSetting tools.guest.desktop.autolock
PowerCLI 命令修复示例
Get-VM -Name $VM | Get-AdvancedSetting tools.guest.desktop.autolock | Remove-AdvancedSetting

激活 vMotion 加密

虚拟机必须要求对 vMotion 进行加密。

要求对虚拟机中的 vMotion 进行加密可保证数据传输安全。默认的“随机”加密可能会导致加密,因为 vSphere 兼容硬件中广泛支持 AES-NI。但是,实施“要求”加密可防止任何未加密操作。

安装默认值:随机
基准建议值:要求
需要执行的操作
修改安装默认值。
默认值已更改时的潜在功能影响
PowerCLI 命令评估
(Get-VM -Name $VM).ExtensionData.Config.MigrateEncryption
PowerCLI 命令修复示例
$VMview = Get-VM -Name $VM | Get-View 
$ConfigSpec = New-Object VMware.Vim.VirtualMachineConfigSpec
$ConfigSpec.MigrateEncryption = New-Object VMware.Vim.VirtualMachineConfigSpecEncryptedVMotionModes
$ConfigSpec.MigrateEncryption = "required"
$VMview.ReconfigVM_Task($ConfigSpec)