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

使用的变量

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

  • $ESXi = "host_name"
  • $vmkernel_interface = "vmkernel_adapter"

确保 DCUI 帐户被拒绝访问

ESXi 主机必须拒绝 dcui 用户帐户访问 shell。

dcui 用户帐户用于 DCUI 本身的进程隔离。要减小攻击面,请对 dcui 用户帐户停用 shell 访问。

安装默认值:True
基准建议值:False
需要执行的操作
修改安装默认值。
默认值已更改时的潜在功能影响
PowerCLI 命令评估
$ESXcli = Get-EsxCli -VMHost $ESXi -V2
$ESXcli.system.account.list.Invoke() | Where-Object { $_.UserID -eq 'dcui' } | Select-Object -ExpandProperty Shellaccess
PowerCLI 命令修复示例
$ESXcli = Get-EsxCli -VMHost $ESXi -V2
$arguments = $ESXcli.system.account.set.CreateArgs()
$arguments.id = "dcui"
$arguments.shellaccess = "false"
$ESXcli.system.account.set.Invoke($arguments)

Annotations.WelcomeMessage

配置 VMware Host Client 和 DCUI 上显示的登录消息文本。

ESXi 提供了显示登录消息的功能。登录消息的用途包括通知入侵者他们的活动是非法的,以及向授权用户传达他们在使用系统期间必须满足并同意的期望和义务。

安装默认值:未定义
基准建议值:有关适用于您的环境的文本,请咨询您组织的法律顾问。

示例消息文本:仅限授权用户。禁止实际或试图未经授权使用本系统,否则可能导致刑事、民事、安全或行政诉讼和/或处罚。使用本信息系统即表示同意本系统在未通知您或未获得您许可的情况下进行监控和记录。用户不能指望在使用本系统期间能够得到隐私保护。存储在本系统上或传输到本系统或通过监控和/或记录获取的任何信息,均可根据联邦法律、州法规和组织政策披露给执法机构和/或使用。如果您不是本系统的授权用户,请立即退出系统。(Authorized users only. Actual or attempted unauthorized use of this system is prohibited and may result in criminal, civil, security, or administrative proceedings and/or penalties. Use of this information system indicates consent to monitoring and recording, without notice or permission. Users have no expectation of privacy in any use of this system. Any information stored on, or transiting this system, or obtained by monitoring and/or recording, may be disclosed to law enforcement and/or used in accordance with Federal law, State statute, and organization policy. If you are not an authorized user of this system, exit the system at this time.)

需要执行的操作
修改安装默认值。
默认值已更改时的潜在功能影响
在 DCUI 上屏蔽“F2/F12”和 IP 地址信息。可能还需要针对您的环境提供文档和培训。
PowerCLI 命令评估
Get-VMHost -Name $ESXi | Get-AdvancedSetting Annotations.WelcomeMessage
PowerCLI 命令修复示例
Get-VMHost -Name $ESXi | Get-AdvancedSetting Annotations.WelcomeMessage | Set-AdvancedSetting -Value "your_message"

Config.HostAgent.vmacore.soap.sessionTimeout

为 vSphere API 配置会话超时。

这种做法可确保无人参与的会话(可能会被未经授权的用户或恶意软件利用)不会无限期处于打开状态,从而帮助缓解潜在的安全风险。

安装默认值:30
基准建议值:30
需要执行的操作
审核安装默认值。
默认值已更改时的潜在功能影响
PowerCLI 命令评估
Get-VMHost -Name $ESXi | Get-AdvancedSetting Config.HostAgent.vmacore.soap.sessionTimeout
PowerCLI 命令修复示例
Get-VMHost -Name $ESXi | Get-AdvancedSetting Config.HostAgent.vmacore.soap.sessionTimeout | Set-AdvancedSetting -Value 30

Config.Etc.issue

配置当用户使用 SSH 连接到 ESXi 主机时显示的横幅文本。

ESXi 提供了针对 SSH 连接显示横幅的功能。横幅的用途包括通知入侵者他们的活动是非法的,以及向授权用户传达他们在使用系统期间必须满足并同意的期望和义务。除非您要执行故障排除操作,否则请将 SSH 服务保持停用状态。ESXivCenter Server 之间的实施不一致要求 Config.Etc.issue 中的“issue”为小写,才能在这两种情况下都起作用。

安装默认值:未定义
基准建议值:有关适用于您的环境的文本,请咨询您组织的法律顾问。

示例消息文本:仅限授权用户。禁止实际或试图未经授权使用本系统,否则可能导致刑事、民事、安全或行政诉讼和/或处罚。使用本信息系统即表示同意本系统在未通知您或未获得您许可的情况下进行监控和记录。用户不能指望在使用本系统期间能够得到隐私保护。存储在本系统上或传输到本系统或通过监控和/或记录获取的任何信息,均可根据联邦法律、州法规和组织政策披露给执法机构和/或使用。如果您不是本系统的授权用户,请立即退出系统。(Authorized users only. Actual or attempted unauthorized use of this system is prohibited and may result in criminal, civil, security, or administrative proceedings and/or penalties. Use of this information system indicates consent to monitoring and recording, without notice or permission. Users have no expectation of privacy in any use of this system. Any information stored on, or transiting this system, or obtained by monitoring and/or recording, may be disclosed to law enforcement and/or used in accordance with Federal law, State statute, and organization policy. If you are not an authorized user of this system, exit the system at this time.)

需要执行的操作
修改安装默认值。
默认值已更改时的潜在功能影响
PowerCLI 命令评估
Get-VMHost -Name $ESXi | Get-AdvancedSetting Config.Etc.issue
PowerCLI 命令修复示例
Get-VMHost -Name $ESXi | Get-AdvancedSetting Config.Etc.issue | Set-AdvancedSetting -Value "****************************************************************************`n* Authorized users only. Actual or attempted unauthorized use of this      *`n* system is prohibited and may result in criminal, civil, security, or     *`n* administrative proceedings and/or penalties. Use of this information     *`n* system indicates consent to monitoring and recording, without notice     *`n* or permission. Users have no expectation of privacy. Any information     *`n* stored on or transiting this system, or obtained by monitoring and/or    *`n* recording, may be disclosed to law enforcement and/or used in accordance *`n* with Federal law, State statute, and organization policy. If you are not *`n* an authorized user of this system, exit the system at this time.         *`n****************************************************************************`n"

对 vpxuser 停用 shell 访问

ESXi 主机必须拒绝 vpxuser 帐户访问 shell。

首次连接 ESXi 主机时,vCenter Server 会创建 vpxuser 帐户。vpxuser 帐户随后用于向 ESXi 进行特权身份验证。虽然 vCenter Server 会按 VirtualCenter.VimPasswordExpirationInDays 选项控制的时间间隔自动轮换 vpxuser 帐户的密码,但 vpxuser 帐户也具有 shell 访问权限。请停用 vpxuser 帐户以减小攻击面。

安装默认值:True
基准建议值:False
需要执行的操作
修改安装默认值。
默认值已更改时的潜在功能影响
没有 shell 访问权限的用户帐户无论其拥有哪种特权级别,都无法重新配置其他用户的 shell 访问权限。由于 vCenter Server 以 vpxuser 帐户身份连接到 ESXi 主机,因此对 vpxuser 停用 shell 访问后,将无法再使用该帐户来更改其他帐户的这些帐户设置。必须使用授权帐户逐个主机进行进一步的重新配置。
ESXi 8.0 及更高版本不再支持传统的密码或帐户恢复操作,例如从介质引导或在引导时将 init 更改为 shell。
确保 ESXi 主机保留至少一个完全特权用户帐户,并且您相应地保护此帐户。
PowerCLI 命令评估
$ESXcli = Get-EsxCli -VMHost $ESXi -V2
$ESXcli.system.account.list.Invoke() | Where-Object { $_.UserID -eq 'vpxuser' } | Select-Object -ExpandProperty Shellaccess
PowerCLI 命令修复示例
$ESXcli = Get-EsxCli -VMHost $ESXi -V2
$arguments = $ESXcli.system.account.set.CreateArgs()
$arguments.id = "vpxuser"
$arguments.shellaccess = "false"
$ESXcli.system.account.set.Invoke($arguments)

vCenter Server 必须使用 vSphere Authentication Proxy 以避免存储 Active Directory 凭据

vSphere Authentication Proxy 使 vCenter Server 无需直接存储 Active Directory 凭据即可连接和管理 Active Directory 实体,从而降低了凭据暴露或误用的风险。

安装默认值:未配置
基准建议值:如果使用该功能,则需要配置
需要执行的操作
修改安装默认值。
默认值已更改时的潜在功能影响
PowerCLI 命令评估
Get-VMHost -Name $ESXi | Get-VMHostAuthentication | Select-Object VMHost,Domain,DomainMembershipStatus
PowerCLI 命令修复示例
不适用

DCUI.Access

ESXi 主机必须具有准确的 DCUI.Access 列表。

将锁定模式例外用户列表设置为包含准确的用户列表,并确保激活锁定模式后,只有授权用户才能通过控制台用户界面 (DCUI) 直接访问 ESXi 主机。

无法从列表中移除 root 用户。

要控制 ESXi Shell 和 SSH 访问,请使用锁定模式例外用户列表。请参见确保 ESXi 主机具有准确的例外用户列表

安装默认值:root
基准建议值:root
需要执行的操作
审核列表。
默认值已更改时的潜在功能影响
可能失去对主机的管理访问权限。确保将 ESXi 主机连接到 vCenter Server,并在配置锁定模式之前配置访问列表和例外列表。
PowerCLI 命令评估
Get-VMHost -Name $ESXi | Get-AdvancedSetting DCUI.Access
PowerCLI 命令修复示例
Get-VMHost -Name $ESXi | Get-AdvancedSetting DCUI.Access | Set-AdvancedSetting -Value root

确保 ESXi 主机具有准确的例外用户列表

ESXi 主机必须具有准确的例外用户列表。

主机进入锁定模式时,锁定模式例外用户列表中的用户不会失去其特权。这种情况可能会破坏锁定模式的目的。

安装默认值:Null
基准建议值:Null
需要执行的操作
审核安装默认值。
默认值已更改时的潜在功能影响
可能失去对 ESXi 主机的管理访问权限。确保将 ESXi 主机连接到 vCenter Server,并在配置锁定模式之前配置访问列表和例外列表。
PowerCLI 命令评估
(Get-View (Get-VMHost -Name $ESXi | Get-View).ConfigManager.HostAccessManager).QueryLockdownExceptions()
PowerCLI 命令修复示例
(Get-View (Get-VMHost -Name $ESXi | Get-View).ConfigManager.HostAccessManager).UpdateLockdownExceptions($NULL)

激活正常锁定模式以限制对 ESXi 的访问

激活锁定模式会停用对 ESXi 主机的直接访问。锁定模式要求 vCenter Server 直接管理 ESXi 主机。

以这种方式限制访问可确保 vCenter Server 强制执行角色和权限。此外,用户无法通过直接登录到 ESXi 主机来绕过这些角色和权限。要求通过 vCenter Server 进行所有交互,这样可以降低用户无意获得提升的特权或执行未正确审核的任务的风险。

每个 ESXi 主机的例外用户列表中的用户可以覆盖锁定模式并登录。默认情况下,例外用户列表中不存在任何用户。

锁定模式设置包括“已禁用”、“正常”和“严格”。当锁定模式设置为“严格”时,如果 ESXi 主机与 vCenter Server 断开连接,则您无法管理该主机,直到连接恢复为止。如果无法恢复连接,则必须重新构建 ESXi 主机。通常,严格锁定模式超出大多数部署的需求。因此,配置正常锁定模式通常就足够了。

安装默认值:lockdownDisabled
基准建议值:lockdownNormal
需要执行的操作
修改安装默认值。
默认值已更改时的潜在功能影响
可能失去对主机的管理访问权限。确保将 ESXi 主机连接到 vCenter Server,并在配置锁定模式之前配置访问列表和例外列表。
某些操作(例如备份和故障排除)需要直接访问 ESXi 主机。在这些情况下,您可以暂时对特定主机停用锁定模式,然后在完成后重新激活锁定模式。
PowerCLI 命令评估
(Get-View (Get-VMHost -Name $ESXi | Get-View).ConfigManager.HostAccessManager).LockdownMode
PowerCLI 命令修复示例
(Get-View (Get-VMHost -Name $ESXi | Get-View).ConfigManager.HostAccessManager).ChangeLockdownMode('lockdownNormal')

Syslog.global.auditRecord.storageEnable

ESXi 主机配置为在本地存储审核记录。

您必须在 ESXi 主机上激活审核记录日志记录。

安装默认值:False
基准建议值:True
需要执行的操作
修改安装默认值。
默认值已更改时的潜在功能影响
日志会消耗额外的存储空间。
PowerCLI 命令评估
Get-VMHost -Name $ESXi | Get-AdvancedSetting Syslog.global.auditRecord.storageEnable
PowerCLI 命令修复示例
Get-VMHost -Name $ESXi | Get-AdvancedSetting Syslog.global.auditRecord.storageEnable | Set-AdvancedSetting -Value TRUE

Syslog.global.auditRecord.storageCapacity

您必须在 ESXi 主机上激活足够保存一周审核记录的存储容量。

如果远程审核记录存储设施可用,请务必确保本地存储容量足以保存审核记录,在向该设施传送记录的过程中预计会发生中断,中断期间审核记录会累积。这可确保在远程存储不可用期间不会丢失或覆盖审核记录,从而实现审核记录的无缝连续性并满足合规性要求。

安装默认值:4
基准建议值:100
需要执行的操作
修改安装默认值。
默认值已更改时的潜在功能影响
日志会消耗额外的存储空间。
PowerCLI 命令评估
Get-VMHost -Name $ESXi | Get-AdvancedSetting Syslog.global.auditRecord.storageCapacity
PowerCLI 命令修复示例
Get-VMHost -Name $ESXi | Get-AdvancedSetting Syslog.global.auditRecord.storageCapacity | Set-AdvancedSetting -Value 100

ScratchConfig.CurrentScratchLocation 和 Syslog.global.auditRecord.storageDirectory

ESXi 主机上本地存储的所有审核记录配置一个持久日志位置。

您可以对 ESXi 进行配置,使其将审核记录存储在内存中文件系统上。当主机的“/scratch”目录链接到“/tmp/scratch”时,会出现这种情况。完成此操作后,任何时候都只会存储一天的记录。此外,审核记录会在每次重新引导时重新初始化。这会带来安全风险,因为登录到主机的用户的活动只会暂时存储,不会在重新引导后持久保留。这还会使审核复杂化,并加大监控事件和诊断问题的难度。始终将 ESXi 主机审核记录配置为记录到持久数据存储。

您可以通过查询 ScratchConfig.CurrentScratchLocation 高级设置来检测暂存卷是临时卷还是持久卷。如果查询时返回“/tmp/scratch”,则表明该卷是临时卷,您应将审核记录存储重新映射到持久设备。

存储不能是 vSAN 数据存储。如果您唯一的本地非 vSAN 存储是 SD 或 USB 介质(此类介质会由于重复写入日志而变得不可靠),请考虑将日志保留在 ramdisk 中,并确保改为配置远程日志记录主机。记录决策和原因,为将来的审核做准备。

安装默认值:

ScratchConfig.CurrentScratchLocation:取决于引导设备

Syslog.global.auditRecord.storageDirectory/scratch/auditLog

基准建议值:持久存储位置
需要执行的操作
修改安装默认值。
默认值已更改时的潜在功能影响
日志会消耗额外的存储空间。
PowerCLI 命令评估
$ESXcli = Get-EsxCli -VMHost $ESXi -V2
$ESXcli.system.syslog.config.get.Invoke() | Select LocalLogOutput,LocalLogOutputIsPersistent

# If your LocalLogOutput is set to a directory in /scratch, and LocalLogOutputIsPersistent is true, that means your boot device is of a type and size that makes /scratch persistent. Verify that your audit storage is also on /scratch, and that /scratch points to a VMFS datastore:

Get-VMHost -Name $ESXi | Get-AdvancedSetting ScratchConfig.CurrentScratchLocation
Get-VMHost -Name $ESXi | Get-AdvancedSetting Syslog.global.auditRecord.storageDirectory
PowerCLI 命令修复示例
Get-VMHost -Name $ESXi | Get-AdvancedSetting Syslog.global.auditRecord.storageDirectory | Set-AdvancedSetting -Value "/vmfs/volumes/$Datastore/audit"

Syslog.global.auditRecord.remoteEnable

配置 ESXi 主机以将审核日志传输到远程主机。

安装默认值:False
基准建议值:True
需要执行的操作
修改安装默认值。
默认值已更改时的潜在功能影响
PowerCLI 命令评估
Get-VMHost -Name $ESXi | Get-AdvancedSetting Syslog.global.auditRecord.remoteEnable
PowerCLI 命令修复示例
Get-VMHost -Name $ESXi | Get-AdvancedSetting Syslog.global.auditRecord.remoteEnable | Set-AdvancedSetting -Value TRUE

Syslog.global.logFiltersEnable

ESXi 主机上激活日志筛选。

可以创建日志筛选器来减少重复条目数,还可以完全拒绝特定日志事件。

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

LocalLogOutputIsPersistent、ScratchConfig.CurrentScratchLocation 和 Syslog.global.logDir

ESXi 主机上本地存储的所有日志配置持久日志记录。

您可以对 ESXi 进行配置,使其将日志文件存储在内存中文件系统上。当主机的“/scratch”目录链接到“/tmp/scratch”时,会出现这种情况。完成此操作后,任何时候都只会存储一天的日志录。此外,日志文件会在每次重新引导时重新初始化。这会带来安全风险,因为登录到主机的用户的活动只会暂时存储,不会在重新引导后持久保留。这还会使审核复杂化,并加大监控事件和诊断问题的难度。始终将 ESXi 主机日志配置为记录到持久数据存储。

您可以通过查询 ScratchConfig.CurrentScratchLocation 高级参数来检测暂存卷是临时卷还是持久卷。如果查询时返回“/tmp/scratch”,则表明该卷是临时卷,您应将审核记录存储重新映射到持久设备。

存储不能是 vSAN 数据存储,除非您设置了 Syslog.global.vsanBacking,此设置具有局限性和依赖关系。如果您唯一的本地非 vSAN 存储是 SD 或 USB 介质(此类介质会由于重复写入日志而变得不可靠),请考虑将日志保留在 ramdisk 中,并确保改为配置远程日志记录主机。记录决策和原因,为将来的审核做准备。

安装默认值:ScratchConfig.CurrentScratchLocation:取决于引导设备

Syslog.global.logDir/scratch/log

基准建议值:持久存储位置
需要执行的操作
修改安装默认值。
默认值已更改时的潜在功能影响
PowerCLI 命令评估
$ESXcli = Get-EsxCli -VMHost $ESXi -V2
$ESXcli.system.syslog.config.get.Invoke() | Select LocalLogOutput,LocalLogOutputIsPersistent

# If your LocalLogOutput is set to a directory in /scratch, and LocalLogOutputIsPersistent is true, that means your boot device is of a type and size that makes /scratch persistent. Verify that your log storage is also on /scratch, , and that /scratch points to a VMFS datastore:

Get-VMHost -Name $ESXi | Get-AdvancedSetting ScratchConfig.CurrentScratchLocation
Get-VMHost -Name $ESXi | Get-AdvancedSetting Syslog.global.logDir
PowerCLI 命令修复示例
Get-VMHost -Name $ESXi | Get-AdvancedSetting Syslog.global.logDir | Set-AdvancedSetting -Value "/vmfs/volumes/$Datastore/logs"

Syslog.global.logHost

配置远程日志记录。

通过将日志配置为远程记录到中央日志主机,可以为 ESXi 日志提供安全的集中式存储。通过将主机日志文件收集到中央主机上,您可以使用单个工具来监控所有主机。您还可以执行汇总分析和搜索项目,例如对多个主机发起的协同攻击。将日志记录到安全的中央日志服务器不但有助于防止日志被篡改,而且能够提供长期的审核记录。

安装默认值:未定义
基准建议值:特定于站点
需要执行的操作
修改安装默认值。
默认值已更改时的潜在功能影响
PowerCLI 命令评估
Get-VMHost -Name $ESXi | Get-AdvancedSetting Syslog.global.logHost
PowerCLI 命令修复示例
Get-VMHost -Name $ESXi | Get-AdvancedSetting Syslog.global.logHost | Set-AdvancedSetting -Value "log_collector"

Syslog.global.certificate.checkSSLCerts

验证 TLS 的证书。

ESXi 主机必须验证 TLS 远程日志记录端点的证书。TLS 证书有助于确保端点是真实可信的。

安装默认值:True
基准建议值:True
需要执行的操作
审核安装默认值。
默认值已更改时的潜在功能影响
PowerCLI 命令评估
Get-VMHost -Name $ESXi | Get-AdvancedSetting Syslog.global.certificate.checkSSLCerts
PowerCLI 命令修复示例
Get-VMHost -Name $ESXi | Get-AdvancedSetting Syslog.global.certificate.checkSSLCerts | Set-AdvancedSetting -Value TRUE

Syslog.global.certificate.strictX509Compliance

对已启用 TLS 的远程日志记录端点执行严格的 x509 验证。

ESXi 主机必须对已启用 TLS 的远程日志记录端点使用严格的 x509 验证。Syslog.global.certificate.strictX509Compliance 设置会在验证期间对 CA 根证书执行额外的有效性检查。

安装默认值:False
基准建议值:True
需要执行的操作
修改安装默认值。
默认值已更改时的潜在功能影响
PowerCLI 命令评估
Get-VMHost -Name $ESXi | Get-AdvancedSetting Syslog.global.certificate.strictX509Compliance
PowerCLI 命令修复示例
Get-VMHost -Name $ESXi | Get-AdvancedSetting Syslog.global.certificate.strictX509Compliance | Set-AdvancedSetting -Value TRUE

Mem.MemEagerZero

激活易失性密钥销毁。

默认情况下,ESXi 在进行分配时会将已为虚拟机、用户空间应用程序和内核线程分配的页置零。这可确保不会向虚拟机或用户空间应用程序公开非零页。实施此措施可防止将加密密钥从虚拟机或用户环境暴露给其他客户端。

但是,如果不重用内存,这些密钥可能会长时间保留在主机内存中。要解决此问题,您可以配置 MemEagerZero 设置,以在用户环境进程或客户机退出时强制将用户环境和客户机内存页置零。对于内核线程,一旦不再需要密钥,会立即将保存密钥的内存空间置零。

安装默认值:0
基准建议值:1
需要执行的操作
修改安装默认值。
默认值已更改时的潜在功能影响
虚拟机需要额外的关机时间,这与分配的内存量相对应。
PowerCLI 命令评估
Get-VMHost -Name $ESXi | Get-AdvancedSetting Mem.MemEagerZero
PowerCLI 命令修复示例
Get-VMHost -Name $ESXi | Get-AdvancedSetting Mem.MemEagerZero | Set-AdvancedSetting -Value 1

检查 ESXi 版本的维护期限是否有效

确保 ESXi 版本未到达 VMware 终止标准技术支持状态。

安装默认值:不适用
基准建议值:不适用
需要执行的操作
定期审核 ESXi 版本。
默认值已更改时的潜在功能影响
请始终阅读发行说明,并以分阶段部署方式测试并部署新的软件版本。
PowerCLI 命令评估
Get-VMHost -Name $ESXi | Select-Object Name,Version,Build
PowerCLI 命令修复示例
不适用

激活时间同步源

ESXi 主机必须激活并运行时间同步服务。

加密、审核日志记录、集群操作、突发事件响应和取证依赖同步的时间。要确保时间在服务和操作之间保持同步,请激活 NTP 和/或 PTP 服务以与主机一起启动,并确保这些服务正在运行。

安装默认值:“已停止”、“手动启动和停止”
基准建议值:“正在运行”、“与主机一起停止和启动”
需要执行的操作
修改安装默认值。
默认值已更改时的潜在功能影响
PowerCLI 命令评估
Get-VMHostService -VMHost $ESXi | Where-Object{$_.Key -eq "ntpd"}
PowerCLI 命令修复示例
Get-VMHostService -VMHost $ESXi -ErrorAction:Stop | Where-Object{$_.Key -eq "ntpd"} | Set-VMHostService -policy "on" -Confirm:$false
Get-VMHostService -VMHost $ESXi -ErrorAction:Stop | Where-Object{$_.Key -eq "ntpd"} | Restart-VMHostService -Confirm:$false

配置可靠的时间同步源

ESXi 主机必须配置可靠的时间同步源。

加密、审核日志记录、集群操作、突发事件响应和取证依赖同步的时间。网络时间协议 (NTP) 必须具有至少四个源。如果必须在两个源和一个源之间进行选择,则首选一个源。

精度时间协议 (PTP) 是 NTP 的替代协议,可提供亚毫秒级时间精度。PTP 的架构与 NTP 不同,对主服务器故障的恢复能力也不相同。即使精度较低,也请考虑将 NTP 配置为 PTP 的备用源以确保时间源持续可用。

安装默认值:未定义
基准建议值:

特定于站点,或者:

0.vmware.pool.ntp.org

1.vmware.pool.ntp.org

2.vmware.pool.ntp.org

3.vmware.pool.ntp.org

需要执行的操作
修改安装默认值。
默认值已更改时的潜在功能影响
PowerCLI 命令评估
Get-VMHostNtpServer -VMHost $ESXi
PowerCLI 命令修复示例
$ntp0 = "0.vmware.pool.ntp.org"
$ntp1 = "1.vmware.pool.ntp.org"
$ntp2 = "2.vmware.pool.ntp.org"
$ntp3 = "3.vmware.pool.ntp.org"

Add-VMHostNTPServer -NtpServer $ntp0 , $ntp1 , $ntp2 , $ntp3 -VMHost $ESXi -Confirm:$false

使用 TLS 密码

ESXi 主机必须通过启用现代 TLS 密码来维护传输的保密性和完整性。

ESXi 8.0 Update 3 开始,TLS 配置文件将客户端和服务器 TLS 设置配置为仅使用强密码。可以使用以下命令来查看整个密码列表和套件:

$ESXcli = Get-EsxCli -VMHost $ESXi -V2
$arguments = $ESXcli.system.tls.server.get.CreateArgs()
$arguments.showprofiledefaults = $true
$arguments.showcurrentbootprofile = $true
$ESXcli.system.tls.server.get.invoke($arguments)

更改 TLS 配置文件后,必须重新引导 ESXi 主机。(在 vSphere Client 中,主机会显示后缀“需要重新引导”。)

安装默认值:COMPATIBLE
基准建议值:NIST_2024
需要执行的操作
修改安装默认值。
默认值已更改时的潜在功能影响
对密码套件的更改会影响与外部系统的连接。必须重新引导主机,对此 TLS 配置文件所做的更改才能生效。
PowerCLI 命令评估
$ESXcli = Get-EsxCli -VMHost $ESXi -V2
$ESXcli.system.tls.server.get.invoke() | Select-Object -ExpandProperty Profile
PowerCLI 命令修复示例
$ESXcli = Get-EsxCli -VMHost $ESXi -V2
$arguments = $ESXcli.system.tls.server.set.CreateArgs()
$arguments.profile = "NIST_2024"
$ESXcli.system.tls.server.set.invoke($arguments)

UserVars.ESXiVPsDisabledProtocols

ESXi 主机必须启用受支持的最高 TLS 版本。

ESXi 8.0 默认激活 TLS 1.2,但在必要时可以激活其他协议。从 ESXi 8.0 Update 3 开始,默认激活 TLS 1.3。

安装默认值:sslv3,tlsv1,tlsv1.1
基准建议值:sslv3,tlsv1,tlsv1.1
需要执行的操作
审核安装默认值。
默认值已更改时的潜在功能影响
PowerCLI 命令评估
Get-VMHost -Name $ESXi | Get-AdvancedSetting UserVars.ESXiVPsDisabledProtocols
PowerCLI 命令修复示例
Get-VMHost -Name $ESXi | Get-AdvancedSetting UserVars.ESXiVPsDisabledProtocols | Set-AdvancedSetting -Value "sslv3,tlsv1,tlsv1.1"

配置基于 TPM 的加密

ESXi 主机必须要求实施基于 TPM 的配置加密。

ESXi 主机的配置包括主机上运行的每个服务的配置文件。配置文件通常位于 /etc 目录中,但也可以驻留在其他命名空间中。配置文件包含有关服务状态的运行时信息。随着时间的推移,配置文件中的默认值可能会更改,例如,当 ESXi 主机上的设置已更改时。

cron 作业会定期、在 ESXi 正常关闭时或按需备份 ESXi 配置文件,并在引导槽中创建存档的配置文件。当 ESXi 重新引导时,系统会读取存档的配置文件,并重新创建 ESXi 在创建备份时所处的状态。

在 vSphere 7.0 Update 2 之前,存档的 ESXi 配置文件未加密。在 vSphere 7.0 Update 2 及更高版本中,存档的配置文件已加密。为 ESXi 主机配置可信平台模块 (TPM) 后,TPM 用于将配置“封装”到主机,从而提供强有力的安全保证以及对脱机攻击的额外防御。

如果物理 TPM 在安装或升级时可用且受支持,则配置加密会使用物理 TPM。如果后来添加或启用了 TPM,则必须明确重新配置 ESXi 主机以使用新近可用的 TPM。启用 TPM 配置加密后,无法将其停用。

安装默认值:特定于站点
基准建议值:TPM
需要执行的操作
审核安装默认值。
默认值已更改时的潜在功能影响
使用安全引导和强制执行 TPM 的配置加密会使传统的 root 密码恢复操作不可用。确保您不会失去对 ESXi 管理员帐户的访问权限。
PowerCLI 命令评估
$ESXcli = Get-EsxCli -VMHost $ESXi -V2
$ESXcli.system.settings.encryption.get.Invoke() | Select Mode
PowerCLI 命令修复示例
$ESXcli = Get-EsxCli -VMHost $ESXi -V2
$arguments = $ESXcli.system.settings.encryption.set.CreateArgs()
$arguments.mode = "TPM"
$ESXcli.system.settings.encryption.set.Invoke($arguments)

检查 ESXi 软件是否为最新

通过将 ESXi 修补程序保持最新,可以缓解 Hypervisor 中的漏洞的影响。

训练有素的攻击者在尝试访问 ESXi 主机或提升在该主机上的特权时可以利用已知漏洞。始终先更新 vCenter Server(如果有可用更新),然后再更新 ESXi

安装默认值:Downlevel
基准建议值:Current
需要执行的操作
定期审核 ESXi 修补程序级别。
请始终阅读发行说明,并以分阶段部署方式测试并部署新的软件版本。
默认值已更改时的潜在功能影响
vSphere Update 版本会增加和改变功能。修补程序版本仅用于解决问题。
PowerCLI 命令评估
Get-VMHost -Name $ESXi | Select-Object Name,Version,Build
PowerCLI 命令修复示例
不适用

VMkernel.Boot.execInstalledOnly

仅运行由 VIB 提供的二进制文件。

ESXi 会根据接受级别对 VIB 执行完整性检查。通过指示 ESXi 仅执行来自主机上安装的有效 VIB 的二进制文件,可使攻击者在泄露期间更难使用预构建的工具包,并提高检测到攻击者的几率。

安装默认值:False
基准建议值:True
需要执行的操作
修改安装默认值。
默认值已更改时的潜在功能影响
第三方未签名软件可能无法安装或执行。
PowerCLI 命令评估
Get-VMHost -Name $ESXi | Get-AdvancedSetting VMkernel.Boot.execInstalledOnly
PowerCLI 命令修复示例
Get-VMHost -Name $ESXi | Get-AdvancedSetting VMkernel.Boot.execInstalledOnly | Set-AdvancedSetting -Value True

在 VMkernel 适配器上停用管理服务

确保 vSAN、vMotion 和其他专用 VMkernel 适配器未激活管理服务。

可以为专用 VMkernel 网络接口配置管理功能,这可能会导致网络隔离和安全工作不起作用。仅在用于管理的 VMkernel 接口上启用管理服务。

安装默认值:特定于站点
基准建议值:特定于站点
需要执行的操作
审核特定于站点的值。
默认值已更改时的潜在功能影响
某些第三方受管解决方案可能要求您在 VMkernel 适配器上激活管理服务。
PowerCLI 命令评估
Get-VMHostNetworkAdapter -VMHost $ESXi -VMKernel | Select VMHost,Name,IP,ManagementTrafficEnabled
PowerCLI 命令修复示例
Get-VMHostNetworkAdapter -VMHost $ESXi -Name $vmkernel_interface | Set-VMHostNetworkAdapter -ManagementTrafficEnabled $false

ESXi 防火墙配置为阻止流量

默认情况下,您必须将 ESXi 主机防火墙配置为阻止网络流量。

确保阻止所有入站和出站网络流量(除非明确允许),从而减小攻击面并阻止对主机进行未经授权的访问。

安装默认值:已激活
基准建议值:已激活
需要执行的操作
审核安装默认值。
默认值已更改时的潜在功能影响
防火墙过于简单化,类似于路由器 ACL。您可能需要重新配置反射规则。
PowerCLI 命令评估
Get-VMHost -Name $ESXi | Get-VMHostFirewallDefaultPolicy
PowerCLI 命令修复示例
$ESXcli = Get-EsxCli -VMHost $ESXi -V2
$arguments = $ESXcli.network.firewall.set.CreateArgs()
$arguments.defaultaction = $FALSE
$arguments.enabled = $true
$ESXcli.network.firewall.set.Invoke($arguments)

为授权网络配置 ESXi 防火墙

ESXi 防火墙配置为仅允许来自授权网络的流量。

确保阻止所有入站和出站网络流量(除非明确允许),从而减小攻击面并阻止对 ESXi 主机进行未经授权的访问。

从 vSphere 8.0 Update 2 开始,防火墙规则分类为用户拥有的或系统拥有的,只有用户拥有的规则是可配置的。在 vSphere 8 Update 2b 和 PowerCLI 13.2.1 中,还有其他可查询参数可用于自动设置和检查可配置的规则。

安装默认值:允许来自任何 IP 地址的连接
基准建议值:仅允许来自授权基础架构和管理工作站的连接
需要执行的操作
修改安装默认值。
默认值已更改时的潜在功能影响
防火墙过于简单化,类似于路由器 ACL。您可能需要重新配置反射规则。
PowerCLI 命令评估
$ESXcli = Get-EsxCli -VMHost $ESXi -V2
$list = $ESXcli.network.firewall.ruleset.list.Invoke() | Where {($_.AllowedIPconfigurable -eq $true) -and ($_.EnableDisableconfigurable -eq $true)} | Select -ExpandProperty Name

$arguments = $ESXcli.network.firewall.ruleset.allowedip.list.CreateArgs()
foreach ($rule in $list) {
    $arguments.rulesetid = $rule
    $ESXcli.network.firewall.ruleset.allowedip.list.Invoke($arguments) 
}
PowerCLI 命令修复示例
# Customize this example for your environment.
$ESXcli = Get-EsxCli -VMHost $ESXi -V2
# Deactivate firewall temporarily so we don't lose connectivity
$arguments = $ESXcli.network.firewall.set.CreateArgs()
$arguments.enabled = $false
$ESXcli.network.firewall.set.Invoke($arguments)

# Unset the "allow all" flag
$arguments = $ESXcli.network.firewall.ruleset.set.CreateArgs()
$arguments.allowedall = $false
$arguments.rulesetid = "sshServer"
$ESXcli.network.firewall.ruleset.set.Invoke($arguments)

# Add an IP range
$arguments = $ESXcli.network.firewall.ruleset.allowedip.add.CreateArgs()
$arguments.ipaddress = "192.168.0.0/16"
$arguments.rulesetid = "sshServer"
$ESXcli.network.firewall.ruleset.allowedip.add.Invoke($arguments)

# Enable the firewall
$arguments = $ESXcli.network.firewall.set.CreateArgs()
$arguments.enabled = $true
$ESXcli.network.firewall.set.Invoke($arguments)

将伪传输策略设置为“拒绝”

在 vSphere 标准交换机及其端口组上将伪传输策略设置为“拒绝”。

如果虚拟机操作系统更改了 MAC 地址,则操作系统随时可能会发送带有模拟源 MAC 地址的帧。MAC 地址模拟使操作系统可以通过模拟接收方网络授权的网络适配器,来对网络中的设备进行恶意攻击。当伪传输策略设置为“接受”时,ESXi 不会比较源 MAC 地址和有效 MAC 地址。要防止 MAC 模拟,请将伪传输策略设置为“拒绝”。这样,主机将对客户机操作系统传输的源 MAC 地址与其虚拟机适配器的有效 MAC 地址进行比较,以确认是否匹配。如果地址不匹配,ESXi 主机将丢弃数据包。

安装默认值:接受
基准建议值:拒绝
需要执行的操作
修改安装默认值。
默认值已更改时的潜在功能影响
某些工作负载(例如集群应用程序、网络设备和功能)依赖这些技术来保持正常运行。如果需要,您可以配置单独的端口组来允许此行为,并仅将授权的虚拟机连接到该端口组。
PowerCLI 命令评估
Get-VMHost -Name $ESXi | Get-VirtualSwitch -Standard | Get-SecurityPolicy | select VirtualSwitch,ForgedTransmits
Get-VMHost -Name $ESXi | Get-VirtualPortGroup -Standard | Get-SecurityPolicy | select VirtualPortGroup,ForgedTransmits
PowerCLI 命令修复示例
Get-VMHost -Name $ESXi | Get-VirtualSwitch -Standard | Get-SecurityPolicy | Set-SecurityPolicy -ForgedTransmits $false 
Get-VMHost -Name $ESXi | Get-VirtualPortGroup -Standard | Get-SecurityPolicy | Set-SecurityPolicy -ForgedTransmitsInherited $true

将 MAC 地址更改策略设置为“拒绝”

在 vSphere 标准交换机及其端口组上将 MAC 地址更改策略设置为“拒绝”。

如果虚拟机操作系统更改了 MAC 地址,它可能会发送带有模拟源 MAC 地址的帧,从而通过模拟接收方网络授权的网络适配器来对网络中的设备进行恶意攻击。为防止虚拟机更改其有效 MAC 地址,应采取措施来强制实施 MAC 地址稳定性或限制修改 MAC 地址的能力。这有助于降低 MAC 模拟和潜在恶意活动的风险。

安装默认值:接受
基准建议值:拒绝
需要执行的操作
修改安装默认值。
默认值已更改时的潜在功能影响
某些工作负载(例如集群应用程序、网络设备和功能、通过 MAC 地址许可的应用程序)和 vCenter Server 缩短停机时间升级依赖这些技术来保持正常运行。如果需要,您可以配置单独的端口组来允许此行为,并仅将授权的虚拟机连接到该端口组。
PowerCLI 命令评估
Get-VMHost -Name $ESXi | Get-VirtualSwitch -Standard | Get-SecurityPolicy | select VirtualSwitch,MacChanges
Get-VMHost -Name $ESXi | Get-VirtualPortGroup -Standard | Get-SecurityPolicy | select VirtualPortGroup,MacChanges
PowerCLI 命令修复示例
Get-VMHost -Name $ESXi | Get-VirtualSwitch -Standard | Get-SecurityPolicy | Set-SecurityPolicy -MacChanges $false
Get-VMHost -Name $ESXi | Get-VirtualPortGroup -Standard | Get-SecurityPolicy | Set-SecurityPolicy -MacChangesInherited $true

将混杂模式策略设置为“拒绝”

在 vSphere 标准交换机及其端口组上将混杂模式策略设置为“拒绝”。

为端口组启用混杂模式后,无论目标接收方是什么,连接到该端口组的所有虚拟机都可以读取通过该端口组传输的所有数据包。在更改混杂模式的默认值之前,请考虑潜在影响和设计注意事项。

安装默认值:拒绝
基准建议值:拒绝
需要执行的操作
审核安装默认值。
默认值已更改时的潜在功能影响
某些工作负载和工作类型(例如 DHCP 服务器、网络设备和安全监控)纳入了这些技术来保持正常运行。如果需要,您可以配置单独的端口组来允许此行为,并仅将授权的虚拟机连接到该端口组。
PowerCLI 命令评估
Get-VMHost -Name $ESXi | Get-VirtualSwitch -Standard | Get-SecurityPolicy | select VirtualSwitch,AllowPromiscuous
Get-VMHost -Name $ESXi | Get-VirtualPortGroup -Standard | Get-SecurityPolicy | select VirtualPortGroup,AllowPromiscuous
PowerCLI 命令修复示例
Get-VMHost -Name $ESXi | Get-VirtualSwitch -Standard | Get-SecurityPolicy | Set-SecurityPolicy -AllowPromiscuous $false
Get-VMHost -Name $ESXi | Get-VirtualPortGroup -Standard | Get-SecurityPolicy | Set-SecurityPolicy -AllowPromiscuousInherited $true

在标准交换机上限制虚拟客户机标记

ESXi 主机必须限制在标准交换机上使用虚拟客户机标记 (VGT)。

当端口组设置为 VLAN 4095 时,vSwitch 会将所有网络帧传递到连接的虚拟机,而不修改 VLAN 标记。在 vSphere 中,这称为 VGT。虚拟机必须自行使用操作系统中的 802.1Q 驱动程序来处理 VLAN 信息。

仅当连接的虚拟机已明确获得授权且能够自行管理 VLAN 标记时,才能实施 VLAN 4095。如果不当地启用了 VLAN 4095,可能会导致拒绝服务或允许虚拟机与未经授权的 VLAN 上的流量交互。

安装默认值:Not VLAN 4095
基准建议值:Not VLAN 4095
需要执行的操作
审核安装默认值。
默认值已更改时的潜在功能影响
PowerCLI 命令评估
Get-VMHost -Name $ESXi | Get-VirtualPortGroup -Standard | select Name,VlanID
PowerCLI 命令修复示例
Get-VMHost -Name $ESXi | Get-VirtualPortGroup -Standard -Name $PG| Set-VirtualPortGroup -VlanID "new_VLAN"

激活安全引导实施

安全引导属于 UEFI 固件标准的一部分。激活 UEFI 安全引导后,ESXi 主机会拒绝加载任何 UEFI 驱动程序或应用程序,除非操作系统引导加载程序具有有效的数字签名。ESXi 的安全引导需要固件支持。ESXi 的安全引导还要求所有 ESXi 内核模块、驱动程序和 VIB 均由 VMware 或合作伙伴下属签名。

安全引导可在 ESXi 物理服务器的 BIOS 中激活,并受 Hypervisor 引导加载程序支持。此控制措施使 ESXi 从只是支持安全引导变为需要安全引导。如果未激活此设置和配置加密,ESXi 主机可能会受到脱机攻击。攻击者只需将 ESXi 安装驱动器传输到非安全引导主机并进行引导即可。

安装默认值:False
基准建议值:True
需要执行的操作
修改安装默认值。
默认值已更改时的潜在功能影响
使用安全引导和强制执行 TPM 的配置加密会使传统的 root 密码恢复操作不可用。确保您不会失去对 ESXi 管理员帐户的访问权限。
PowerCLI 命令评估
$ESXcli = Get-EsxCli -VMHost $ESXi -V2
$ESXcli.system.settings.encryption.get.Invoke() | Select RequireSecureBoot
PowerCLI 命令修复示例
$ESXcli = Get-EsxCli -VMHost $ESXi -V2
$arguments = $ESXcli.system.settings.encryption.set.CreateArgs()
$arguments.requiresecureboot = $true
$ESXcli.system.settings.encryption.set.Invoke($arguments)

停用 ESXi Shell

应停用 ESXi Shell

安装默认值:“已停止”、“手动启动和停止”
基准建议值:“已停止”、“手动启动和停止”
需要执行的操作
审核安装默认值。
默认值已更改时的潜在功能影响
PowerCLI 命令评估
Get-VMHostService -VMHost $ESXi | Where-Object {$_.Key -eq 'TSM' -and $_.Running -eq 'True'}
Get-VMHostService -VMHost $ESXi | Where-Object {$_.Key -eq 'TSM' -and $_.Policy -eq 'On'}
PowerCLI 命令修复示例
Get-VMHostService -VMHost $ESXi | where {$_.Key -eq 'TSM'} | Set-VMHostService -Policy Off
Get-VMHostService -VMHost $ESXi | where {$_.Key -eq 'TSM'} | Stop-VMHostService

UserVars.ESXiShellInteractiveTimeOut

设置超时以自动终止闲置的 ESXi Shell 会话和 SSH 会话。

如果用户忘记注销其 SSH 会话,闲置连接将无限期保持打开状态,从而提高其他用户获得主机访问特权的可能性。您可以将闲置 shell 会话配置为自动终止。

安装默认值:0
基准建议值:900
需要执行的操作
修改安装默认值。
默认值已更改时的潜在功能影响
PowerCLI 命令评估
Get-VMHost -Name $ESXi | Get-AdvancedSetting UserVars.ESXiShellInteractiveTimeOut
PowerCLI 命令修复示例
Get-VMHost -Name $ESXi | Get-AdvancedSetting UserVars.ESXiShellInteractiveTimeOut | Set-AdvancedSetting -Value 900

停用 SNMP 服务

如果未使用 SNMP 服务,请将其停用。

安装默认值:“已停止”、“与主机一起停止和启动”
基准建议值:“已停止”、“手动启动和停止”
需要执行的操作
修改安装默认值。
默认值已更改时的潜在功能影响
PowerCLI 命令评估
Get-VMHostService -VMHost $ESXi | Where-Object {$_.Key -eq 'snmpd' -and $_.Running -eq 'True'}
Get-VMHostService -VMHost $ESXi | Where-Object {$_.Key -eq 'snmpd' -and $_.Policy -eq 'On'}
PowerCLI 命令修复示例
Get-VMHostService -VMHost $ESXi | where {$_.Key -eq 'snmpd'} | Set-VMHostService -Policy Off
Get-VMHostService -VMHost $ESXi | where {$_.Key -eq 'snmpd'} | Stop-VMHostService

停用 SSH 服务

停用 SSH,仅在进行故障排除时才激活。

ESXi 不是类似于 UNIX 的多用户操作系统。ESXi 是一个专门构建的 Hypervisor,旨在由 VMware Host ClientvSphere Client、CLI 和 API 进行管理。在 ESXi 上,SSH 是故障排除和支持接口,默认情况下已有意停止并停用 SSH。激活该接口会带来风险。

安装默认值:“已停止”、“手动启动和停止”
基准建议值:“已停止”、“手动启动和停止”
需要执行的操作
审核安装默认值。
默认值已更改时的潜在功能影响
PowerCLI 命令评估
Get-VMHostService -VMHost $ESXi | Where-Object {$_.Key -eq 'TSM-SSH' -and $_.Running -eq 'True'}
Get-VMHostService -VMHost $ESXi | Where-Object {$_.Key -eq 'TSM-SSH' -and $_.Policy -eq 'On'}
PowerCLI 命令修复示例
Get-VMHostService -VMHost $ESXi | where {$_.Key -eq 'TSM-SSH'} | Set-VMHostService -Policy Off
Get-VMHostService -VMHost $ESXi | where {$_.Key -eq 'TSM-SSH'} | Stop-VMHostService

对加密操作使用熵

ESXi 主机必须使用足够的熵进行加密操作。

在 vSphere 8.0 及更高版本中,ESXi 熵实施支持 FIPS 140-3 和 EAL4 认证。内核引导选项控制要在 ESXi 主机上激活哪些熵源。

安装默认值:

disableHwrng = FALSE

entropySources = 0

基准建议值:

disableHwrng = FALSE

entropySources = 0

需要执行的操作
审核安装默认值。
默认值已更改时的潜在功能影响
PowerCLI 命令评估
$ESXcli = Get-EsxCli -VMHost $ESXi -V2
$ESXcli.system.settings.kernel.list.Invoke() | Where {$_.Name -eq "disableHwrng" -or $_.Name -eq "entropySources"}
PowerCLI 命令修复示例
$ESXcli = Get-EsxCli -VMHost $ESXi -V2
$arguments = $ESXcli.system.settings.kernel.set.CreateArgs()
$arguments.setting = "disableHwrng"
$arguments.value = "FALSE"
$ESXcli.system.settings.kernel.set.invoke($arguments)
$arguments.setting = "entropySources"
$arguments.value = "0"
$ESXcli.system.settings.kernel.set.invoke($arguments)

验证映像配置文件和 VIB 接受级别

ESXi 主机映像配置文件接受级别必须为 PartnerSupported 或更高。

接受级别控制 ESXi 允许安装的内容。有关 VIB 级别,请参见管理 ESXi 主机和 vSphere 安装包的接受级别

VMware 和 VMware 合作伙伴均未测试 CommunitySupported VIB,CommunitySupported VIB 也不包含数字签名。由于这些原因,安装 CommunitySupported VIB 时需谨慎。

安装默认值:PartnerSupported
基准建议值:PartnerSupported 或更高
需要执行的操作
审核安装默认值。
默认值已更改时的潜在功能影响
CommunitySupported 软件包未签名,且无法安装。
PowerCLI 命令评估
(Get-EsxCli -VMHost $ESXi -V2).software.acceptance.get.Invoke()
PowerCLI 命令修复示例
$ESXcli = Get-EsxCli -VMHost $ESXi -V2
$arguments = $ESXcli.software.acceptance.set.CreateArgs()
$arguments.level = "PartnerSupported" # VMwareCertified, VMwareAccepted, PartnerSupported, CommunitySupported
$ESXcli.software.acceptance.set.Invoke($arguments)

Security.AccountUnlockTime

ESXi 主机必须在指定的超时期限后解除锁定帐户。

Security.AccountUnlockTime 可确保在定义的非活动时段后自动解除锁定 ESXi 主机上的用户帐户。通过强制实施帐户自动解除锁定,组织可以在安全性与可用性之间保持平衡,从而确保及时重新激活闲置帐户,同时最大限度降低未经授权的访问的可能性。

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

Security.AccountLockFailures

设置锁定帐户之前的最多失败登录尝试次数。

通过暂时禁用受影响的帐户,并在锁定期限已过或管理员手动重置锁定期限之前阻止进一步的登录尝试,来防止暴力攻击和未经授权的访问尝试。要解除锁定已锁定的帐户,需要执行管理操作或等待帐户自动解除锁定(如果使用 Security.AccountUnlockTime 设置)。

安装默认值:5
基准建议值:5
需要执行的操作
审核安装默认值。
默认值已更改时的潜在功能影响
如果登录失败次数的阈值较低,拒绝服务攻击(无论是有意还是无意的)可能会增加,例如 SSH 连接重试。
PowerCLI 命令评估
Get-VMHost -Name $ESXi | Get-AdvancedSetting Security.AccountLockFailures
PowerCLI 命令修复示例
Get-VMHost -Name $ESXi | Get-AdvancedSetting Security.AccountLockFailures | Set-AdvancedSetting -Value 5

Security.PasswordHistory

不要允许重用密码。

此设置可防止重用以前的密码,从而缓解旧凭据遭到破解的潜在漏洞。

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

Security.PasswordMaxDays

设置两次更改密码之间的最大天数。

现代密码最佳做法(请参见 NIST 800-63B 第 5.1.1.2 条及其他相关指导)指出,当密码已具有足够的熵时,强制实施定期密码更改并不能提高安全性。

安装默认值:99999
基准建议值:99999
需要执行的操作
审核安装默认值。
默认值已更改时的潜在功能影响
PowerCLI 命令评估
Get-VMHost -Name $ESXi | Get-AdvancedSetting Security.PasswordMaxDays
PowerCLI 命令
Get-VMHost -Name $ESXi | Get-AdvancedSetting Security.PasswordMaxDays | Set-AdvancedSetting -Value 99999

Security.PasswordQualityControl

强制实施密码复杂性。

NIST 800-63B 第 5.1.1.2 条等建议指出,不应在系统上强制实施复合规则(例如,强制使用混合字符类别),因为这些规则通常无法增强密码安全性,并会阻碍用户采用更安全的密码短语。

密码强度和复杂性规则适用于所有 ESXi 用户,包括 root 用户。但是,当 ESXi 主机加入域时,这些规则不适用于 Active Directory (AD) 用户,因为 AD 系统对 AD 用户强制实施密码策略。

安装默认值:retry=3 min=disabled,disabled,disabled,7,7
基准建议值:retry=3 min=disabled,15,15,15,15 max=64 similar=deny passphrase=3
需要执行的操作
修改安装默认值。
默认值已更改时的潜在功能影响
VMware 生态系统中的其他产品和服务可能不希望更改密码复杂性要求,这可能会导致安装失败。
PowerCLI 命令评估
Get-VMHost -Name $ESXi | Get-AdvancedSetting Security.PasswordQualityControl
PowerCLI 命令
Get-VMHost -Name $ESXi | Get-AdvancedSetting Security.PasswordQualityControl | Set-AdvancedSetting -Value "retry=3 min=disabled,15,15,15,15 max=64 similar=deny passphrase=3"

UserVars.SuppressHyperthreadWarning

取消针对潜在的超线程安全漏洞显示警告。

超线程安全警告表示系统中存在未解决的 CPU 漏洞。忽略这些警告可能会掩盖潜在风险。确保硬件修复与组织可接受的风险保持一致。如果取消警告,请记录决策和原因。

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

UserVars.DcuiTimeOut

设置超时以自动终止闲置的 DCUI 会话。

DCUI 允许直接登录到 ESXi 主机以执行管理任务。要防止在遗留的登录会话中无意使用 DCUI,请终止闲置连接。

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

停用 CIM 服务

应停用 ESXi CIM 服务。

应停用未在使用且对操作不重要的服务。

安装默认值:“已停止”、“与主机一起停止和启动”
基准建议值:“已停止”、“手动启动和停止”
需要执行的操作
修改安装默认值。
默认值已更改时的潜在功能影响
PowerCLI 命令评估
Get-VMHostService -VMHost $ESXi | Where-Object {$_.Key -eq 'sfcbd-watchdog' -and $_.Running -eq 'True'}
Get-VMHostService -VMHost $ESXi | Where-Object {$_.Key -eq 'sfcbd-watchdog' -and $_.Policy -eq 'On'}
PowerCLI 命令修复示例
Get-VMHostService -VMHost $ESXi | where {$_.Key -eq 'sfcbd-watchdog'} | Set-VMHostService -Policy Off
Get-VMHostService -VMHost $ESXi | where {$_.Key -eq 'sfcbd-watchdog'} | Stop-VMHostService

Config.HostAgent.log.level

设置日志记录信息级别。

设置日志级别时,请确保审核日志中存在足够的信息来执行诊断和取证。

安装默认值:Info
基准建议值:Info
需要执行的操作
审核安装默认值。
默认值已更改时的潜在功能影响
日志会消耗额外的存储空间。
PowerCLI 命令评估
Get-VMHost -Name $ESXi | Get-AdvancedSetting Config.HostAgent.log.level
PowerCLI 命令修复示例
Get-VMHost -Name $ESXi | Get-AdvancedSetting Config.HostAgent.log.level | Set-AdvancedSetting -Value info

Syslog.global.logLevel

为事件记录足够的信息。

如果日志数据不足,关键入侵指标将被忽视,从而导致漏洞增加,并可能导致未能有效地对网络安全突发事件做出响应。

安装默认值:Error
基准建议值:Info
需要执行的操作
修改安装默认值。
默认值已更改时的潜在功能影响
日志会消耗额外的存储空间。
PowerCLI 命令评估
Get-VMHost -Name $ESXi | Get-AdvancedSetting Syslog.global.logLevel
PowerCLI 命令修复示例
Get-VMHost -Name $ESXi | Get-AdvancedSetting Syslog.global.logLevel | Set-AdvancedSetting -Value info

Config.HostAgent.plugins.solo.enableMob

停用受管对象浏览器 (MOB)。

应停用未在使用且对操作不重要的服务。

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

Net.BlockGuestBPDU

阻止客户机操作系统网桥协议数据单元 (BPDU) 传输。

BPDU 用于传输生成树协议 (STP) 信息和检测网络循环。通常在直接连接到 ESXi 主机的物理交换机上激活 BPDU 防护和 Portfast,以降低生成树融合延迟。

但是,如果从 ESXi 主机上的虚拟机将 BPDU 数据包发送到已配置的物理交换机,可能会导致源自 ESXi 主机的所有上行链路接口级联锁定。为防止出现此类锁定,您可以在 ESXi 主机上激活 BPDU 筛选器,以丢弃发送到物理交换机的任何 BPDU 数据包。

标准虚拟交换机和分布式虚拟交换机不支持 STP,并且不会生成 BPDU。

安装默认值:1
基准建议值:1
需要执行的操作
审核安装默认值。
默认值已更改时的潜在功能影响
某些面向网络的工作负载可能会生成合法的 BPDU 数据包。在启用 BPDU 筛选器之前,请确认 ESXi 主机上的虚拟机没有生成合法的 BPDU 数据包。如果在这种情况下激活 BPDU 筛选器,在虚拟交换机端口组上启用“拒绝”伪传输策略可加大对生成树循环的保护力度。
PowerCLI 命令评估
Get-VMHost -Name $ESXi | Get-AdvancedSetting Net.BlockGuestBPDU
PowerCLI 命令修复示例
Get-VMHost -Name $ESXi | Get-AdvancedSetting Net.BlockGuestBPDU | Set-AdvancedSetting -Value 1

Net.DVFilterBindIpAddress

限制使用 dvFilter 网络 API。

如果不使用 VMware NSX 等利用 dvFilter 网络 API 的产品,请不要将 ESXi 主机配置为向某个 IP 地址发送网络信息。启用该 API 并引用受到入侵的 IP 地址可能会允许对 ESXi 主机上其他虚拟机的网络进行未经授权的访问。

如果使用依赖该 API 的产品,请务必确认已正确配置 ESXi 主机以确保网络通信安全。

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

UserVars.ESXiShellTimeOut

设置超时以限制允许 ESXi Shell 服务和 SSH 服务运行的时间长度。

此高级系统设置用于定义一个时间段,ESXi Shell 服务和 SSH 服务将在此时间段后自动终止。

安装默认值:0
基准建议值:600
需要执行的操作
修改安装默认值。
默认值已更改时的潜在功能影响
PowerCLI 命令评估
Get-VMHost -Name $ESXi | Get-AdvancedSetting UserVars.ESXiShellTimeOut
PowerCLI 命令修复示例
Get-VMHost -Name $ESXi | Get-AdvancedSetting UserVars.ESXiShellTimeOut | Set-AdvancedSetting -Value 600

UserVars.SuppressShellWarning

取消针对支持接口和故障排除接口显示警告。

ESXi 主机不得取消指示 ESXi Shell 已激活的警告。

指示 SSH 或 ESXi Shell 已激活的警告可能表明攻击正在进行中。请务必确保 SSH 和 ESXi Shell 处于停用状态,并且未激活此高级系统设置。

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

为 FIPS 配置 ESXi 安全 Shell 守护进程

必须将 ESXi 主机安全 Shell (SSH) 守护进程配置为仅使用经 FIPS 140-2/140-3 验证的密码。激活系统服务后,您必须强化并保护这些服务。

安装默认值:[email protected],[email protected],aes256-ctr,aes192-ctr,aes128-ctr
基准建议值:[email protected],[email protected],aes256-ctr,aes192-ctr,aes128-ctr
需要执行的操作
审核安装默认值。
默认值已更改时的潜在功能影响
PowerCLI 命令评估
$ESXcli = Get-EsxCli -VMHost $ESXi -V2
$ESXcli.system.ssh.server.config.list.invoke() | Where-Object {$_.Key -eq 'ciphers'} | Select-Object -ExpandProperty Value
PowerCLI 命令修复示例
$ESXcli = Get-EsxCli -VMHost $ESXi -V2
$arguments = $ESXcli.system.ssh.server.config.set.CreateArgs()
$arguments.keyword = 'ciphers'
$arguments.value = '[email protected],[email protected],aes256-ctr,aes192-ctr,aes128-ctr'
$ESXcli.system.ssh.server.config.set.Invoke($arguments)

为 FIPS 配置 ESXi SSH 守护进程

ESXi 主机 SSH 守护进程必须使用经 FIPS 140-2/140-3 验证的加密模块。

ESXi 主机上的 OpenSSH 附带经 FIPS 140-2/140-3 验证的加密模块,该模块默认处于激活状态。由于向后兼容性原因,您可以停用该模块。审核并进行必要的更正。

安装默认值:True
基准建议值:True
需要执行的操作
审核安装默认值。
默认值已更改时的潜在功能影响
PowerCLI 命令评估
$ESXcli = Get-EsxCli -VMHost $ESXi -V2
$ESXcli.system.security.fips140.ssh.get.Invoke()
PowerCLI 命令修复示例
$ESXcli = Get-EsxCli -VMHost $ESXi -V2
$arguments = $ESXcli.system.security.fips140.ssh.set.CreateArgs()
$arguments.enable = $true
$ESXcli.system.security.fips140.ssh.set.Invoke($arguments)

ESXi 安全 Shell 守护进程配置为不允许网关端口

必须将 ESXi 主机安全 Shell (SSH) 守护进程配置为不允许网关端口。

激活系统服务后,您必须强化并保护这些服务。

安装默认值:否
基准建议值:否
需要执行的操作
审核安装默认值。
默认值已更改时的潜在功能影响
PowerCLI 命令评估
$ESXcli = Get-EsxCli -VMHost $ESXi -V2
$ESXcli.system.ssh.server.config.list.invoke() | Where-Object {$_.Key -eq 'gatewayports'} | Select-Object -ExpandProperty Value
PowerCLI 命令修复示例
$ESXcli = Get-EsxCli -VMHost $ESXi -V2
$arguments = $ESXcli.system.ssh.server.config.set.CreateArgs()
$arguments.keyword = 'gatewayports'
$arguments.value = 'no'
$ESXcli.system.ssh.server.config.set.Invoke($arguments)

ESXi 安全 Shell 守护进程配置为不使用基于主机的身份验证

ESXi 主机安全 Shell (SSH) 守护进程不得允许基于主机的身份验证。

激活系统服务后,您必须强化并保护这些服务。

安装默认值:否
基准建议值:否
需要执行的操作
审核安装默认值。
默认值已更改时的潜在功能影响
PowerCLI 命令评估
$ESXcli = Get-EsxCli -VMHost $ESXi -V2
$ESXcli.system.ssh.server.config.list.invoke() | Where-Object {$_.Key -eq 'hostbasedauthentication'} | Select-Object -ExpandProperty Value
PowerCLI 命令修复示例
$ESXcli = Get-EsxCli -VMHost $ESXi -V2
$arguments = $ESXcli.system.ssh.server.config.set.CreateArgs()
$arguments.keyword = 'hostbasedauthentication'
$arguments.value = 'no'
$ESXcli.system.ssh.server.config.set.Invoke($arguments)

配置 ESXi 安全 Shell 守护进程以设置超时计数

ESXi 主机安全 Shell (SSH) 守护进程必须设置一个针对闲置会话的超时计数。

激活系统服务后,您必须强化并保护这些服务。超时计数乘以闲置超时时间间隔等于会话在断开连接之前可以处于闲置状态的总秒数。

安装默认值:3
基准建议值:3
需要执行的操作
审核安装默认值。
默认值已更改时的潜在功能影响
PowerCLI 命令评估
$ESXcli = Get-EsxCli -VMHost $ESXi -V2
$ESXcli.system.ssh.server.config.list.invoke() | Where-Object {$_.Key -eq 'clientalivecountmax'} | Select-Object -ExpandProperty Value
PowerCLI 命令修复示例
$ESXcli = Get-EsxCli -VMHost $ESXi -V2
$arguments = $ESXcli.system.ssh.server.config.set.CreateArgs()
$arguments.keyword = 'clientalivecountmax'
$arguments.value = '3'
$ESXcli.system.ssh.server.config.set.Invoke($arguments)

配置 ESXi 安全 Shell 守护进程以设置超时时间间隔

ESXi 主机安全 Shell (SSH) 守护进程必须设置一个针对闲置会话的超时计数。

激活系统服务后,您必须强化并保护这些服务。超时计数乘以闲置超时间隔等于会话在断开连接之前可以处于闲置状态的总秒数。

安装默认值:200
基准建议值:200
需要执行的操作
审核安装默认值。
默认值已更改时的潜在功能影响
PowerCLI 命令评估
$ESXcli = Get-EsxCli -VMHost $ESXi -V2
$ESXcli.system.ssh.server.config.list.invoke() | Where-Object {$_.Key -eq 'clientaliveinterval'} | Select-Object -ExpandProperty Value
PowerCLI 命令修复示例
$ESXcli = Get-EsxCli -VMHost $ESXi -V2
$arguments = $ESXcli.system.ssh.server.config.set.CreateArgs()
$arguments.keyword = 'clientaliveinterval'
$arguments.value = '200'
$ESXcli.system.ssh.server.config.set.Invoke($arguments)

配置 ESXi 安全 Shell 守护进程以显示登录横幅

ESXi 主机安全 Shell (SSH) 守护进程必须显示系统登录横幅,然后才能授予对系统的访问权限。

激活系统服务后,您必须强化并保护这些服务。您还必须配置 Config.Etc.issue 设置,为此横幅提供文本。

安装默认值: /etc/issue
基准建议值: /etc/issue
需要执行的操作
审核安装默认值。
默认值已更改时的潜在功能影响
PowerCLI 命令评估
$ESXcli = Get-EsxCli -VMHost $ESXi -V2
$ESXcli.system.ssh.server.config.list.invoke() | Where-Object {$_.Key -eq 'banner'} | Select-Object -ExpandProperty Value
PowerCLI 命令修复示例
$ESXcli = Get-EsxCli -VMHost $ESXi -V2
$arguments = $ESXcli.system.ssh.server.config.set.CreateArgs()
$arguments.keyword = 'banner'
$arguments.value = '/etc/issue'
$ESXcli.system.ssh.server.config.set.Invoke($arguments)

ESXi 安全 Shell 守护进程配置为忽略 .rhosts 文件

ESXi 主机安全 Shell (SSH) 守护进程必须忽略 .rhosts 文件。

激活系统服务后,您必须强化并保护这些服务。

安装默认值:是
基准建议值:是
需要执行的操作
审核安装默认值。
默认值已更改时的潜在功能影响
PowerCLI 命令评估
$ESXcli = Get-EsxCli -VMHost $ESXi -V2
$ESXcli.system.ssh.server.config.list.invoke() | Where-Object {$_.Key -eq 'ignorerhosts'} | Select-Object -ExpandProperty Value
PowerCLI 命令修复示例
$ESXcli = Get-EsxCli -VMHost $ESXi -V2
$arguments = $ESXcli.system.ssh.server.config.set.CreateArgs()
$arguments.keyword = 'ignorerhosts'
$arguments.value = 'yes'
$ESXcli.system.ssh.server.config.set.Invoke($arguments)

配置 ESXi 安全 Shell 守护进程以停用流本地转发

ESXi 主机安全 Shell (SSH) 守护进程必须停用流本地转发。

激活系统服务后,您必须强化并保护这些服务。

安装默认值:否
基准建议值:否
需要执行的操作
审核安装默认值。
默认值已更改时的潜在功能影响
PowerCLI 命令评估
$ESXcli = Get-EsxCli -VMHost $ESXi -V2
$ESXcli.system.ssh.server.config.list.invoke() | Where-Object {$_.Key -eq 'allowstreamlocalforwarding'} | Select-Object -ExpandProperty Value
PowerCLI 命令修复示例
$ESXcli = Get-EsxCli -VMHost $ESXi -V2
$arguments = $ESXcli.system.ssh.server.config.set.CreateArgs()
$arguments.keyword = 'allowstreamlocalforwarding'
$arguments.value = 'no'
$ESXcli.system.ssh.server.config.set.Invoke($arguments)

配置 ESXi 安全 Shell 守护进程以停用 TCP 转发

ESXi 主机安全 Shell (SSH) 守护进程必须停用 TCP 转发。

激活系统服务后,您必须强化并保护这些服务。

安装默认值:否
基准建议值:否
需要执行的操作
审核安装默认值。
默认值已更改时的潜在功能影响
PowerCLI 命令评估
$ESXcli = Get-EsxCli -VMHost $ESXi -V2
$ESXcli.system.ssh.server.config.list.invoke() | Where-Object {$_.Key -eq 'allowtcpforwarding'} | Select-Object -ExpandProperty Value
PowerCLI 命令修复示例
$ESXcli = Get-EsxCli -VMHost $ESXi -V2
$arguments = $ESXcli.system.ssh.server.config.set.CreateArgs()
$arguments.keyword = 'allowtcpforwarding'
$arguments.value = 'no'
$ESXcli.system.ssh.server.config.set.Invoke($arguments)

ESXi 安全 Shell 守护进程配置为不允许使用隧道

ESXi 主机安全 Shell (SSH) 守护进程不得允许使用隧道。

激活系统服务后,您必须强化并保护这些服务。

安装默认值:否
基准建议值:否
需要执行的操作
审核安装默认值。
默认值已更改时的潜在功能影响
PowerCLI 命令评估
$ESXcli = Get-EsxCli -VMHost $ESXi -V2
$ESXcli.system.ssh.server.config.list.invoke() | Where-Object {$_.Key -eq 'permittunnel'} | Select-Object -ExpandProperty Value
PowerCLI 命令修复示例
$ESXcli = Get-EsxCli -VMHost $ESXi -V2
$arguments = $ESXcli.system.ssh.server.config.set.CreateArgs()
$arguments.keyword = 'permittunnel'
$arguments.value = 'no'
$ESXcli.system.ssh.server.config.set.Invoke($arguments)

ESXi 安全 Shell 守护进程配置为不允许配置用户环境设置

ESXi 主机安全 Shell (SSH) 守护进程不得允许配置用户环境设置。

激活系统服务后,您必须强化并保护这些服务。

安装默认值:否
基准建议值:否
需要执行的操作
审核安装默认值。
默认值已更改时的潜在功能影响
PowerCLI 命令评估
$ESXcli = Get-EsxCli -VMHost $ESXi -V2
$ESXcli.system.ssh.server.config.list.invoke() | Where-Object {$_.Key -eq 'permituserenvironment'} | Select-Object -ExpandProperty Value
PowerCLI 命令修复示例
$ESXcli = Get-EsxCli -VMHost $ESXi -V2
$arguments = $ESXcli.system.ssh.server.config.set.CreateArgs()
$arguments.keyword = 'permituserenvironment'
$arguments.value = 'no'
$ESXcli.system.ssh.server.config.set.Invoke($arguments)

停用服务位置协议服务

如果未使用服务位置协议 (SLP) 服务,请将其停用。

安装默认值:“已停止”、“手动启动和停止”
基准建议值:“已停止”、“手动启动和停止”
需要执行的操作
审核安装默认值。
默认值已更改时的潜在功能影响
PowerCLI 命令评估
Get-VMHostService -VMHost $ESXi | Where-Object {$_.Key -eq 'slpd' -and $_.Running -eq 'True'}
Get-VMHostService -VMHost $ESXi | Where-Object {$_.Key -eq 'slpd' -and $_.Policy -eq 'On'}
PowerCLI 命令修复示例
Get-VMHostService -VMHost $ESXi | where {$_.Key -eq 'slpd'} | Set-VMHostService -Policy Off
Get-VMHostService -VMHost $ESXi | where {$_.Key -eq 'slpd'} | Stop-VMHostService

Mem.ShareForceSalting

限制只有配置了 sched.mem.pshare.salt 的虚拟机可以使用透明页共享。

透明页共享 (TPS) 是一种用于减少虚拟机内存占用的方法。在高度受控条件下,攻击者可以使用 TPS 对相邻虚拟机上的数据进行未经授权的访问。未配置 sched.mem.pshare.salt 设置的虚拟机无法与其他虚拟机共享内存。大内存页是许多现代 CPU 上 Hypervisor 的性能优化,但与 TPS 不兼容。

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

UserVars.HostClientSessionTimeout

设置超时以自动终止闲置的 ESXi 主机客户端会话。

ESXi 主机必须自动终止闲置的主机客户端会话。这种做法可确保无人参与的会话(可能会被未经授权的用户或恶意软件利用)不会无限期处于打开状态,从而帮助缓解潜在的安全风险。

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

Net.BMCNetworkEnable

停用虚拟硬件管理网络接口。

硬件管理控制器通常向 ESXi 主机提供虚拟网卡或 USB 网卡。这些网卡可被用作后门,应在硬件配置和 ESXi 配置中停用。

安装默认值:1
基准建议值:0
需要执行的操作
修改安装默认值。
默认值已更改时的潜在功能影响
某些第三方受管解决方案可能需要此功能。
PowerCLI 命令评估
Get-VMHost -Name $ESXi | Get-AdvancedSetting Net.BMCNetworkEnable
PowerCLI 命令修复示例
Get-VMHost -Name $ESXi | Get-AdvancedSetting Net.BMCNetworkEnable | Set-AdvancedSetting -Value 0

为 iSCSI 流量激活双向 CHAP 身份验证

将 iSCSI 存储适配器身份验证设置为“使用双向 CHAP”并提供凭据。

双向 CHAP 通过要求启动者(客户端)和目标(服务器)相互验证其身份来提供额外一层保护,从而确保两者之间传输的数据不被未经授权的实体截获或更改。

安装默认值:未配置
基准建议值:已激活
需要执行的操作
如果使用此功能,请修改安装默认值。
默认值已更改时的潜在功能影响
PowerCLI 命令评估
Get-VMHost -Name $ESXi | Get-VMHostHba | Where {$_.Type -eq "Iscsi"} | Select VMHost, Device, ChapType, @{N="CHAPName";E={$_.AuthenticationProperties.ChapName}}
PowerCLI 命令修复示例
Get-VMHost -Name $ESXi | Get-VMHostHba | Where {$_.Type -eq "Iscsi"} | Set-VMHostHba parameters

有关参数的信息,请参见《《ESXCLI 参考指南》》。

不要将加密密钥存储在物理访问没有受到保护的 ESXi 主机上

如果对主机的物理访问没有受到保护,则 ESXi 主机不得将加密密钥存储在 ESXi 主机自身上。

密钥持久性是一种机制,它使用本地可信平台模块 (TPM) 来存储标准密钥提供程序密钥,通常只有外部密钥管理系统 (KMS) 使用这种机制。虽然此设置可以改进依赖关系的管理,但使用密钥持久性机制会改变加密风险。如果攻击者窃取主机,他们可以绕过外部 KMS 的访问控制,从而访问该主机上数据的加密密钥。因此,只有在可以确保主机的物理安全性时,才能使用密钥持久性机制。如果物理主机不安全,并且攻击者能够窃取主机,则攻击者还可以访问并使用加密的工作负载。

密钥持久性通常与 vSphere Native Key Provider 混为一体,因为两者都存储在主机上。但是,vSphere Native Key Provider 不使用密钥持久性机制,因此禁用密钥持久性机制不会对其造成影响。与密钥持久性机制一样,vSphere Native Key Provider 也要求仔细考虑物理安全性。请参见vSphere 系统设计安全控制参考

安装默认值:False
基准建议值:False
需要执行的操作
审核安装默认值。
默认值已更改时的潜在功能影响
默认值是预期的行为。如果更改默认值,可能会对攻击者能够进行物理访问的环境中的保密性产生负面影响。
PowerCLI 命令评估
$ESXcli = Get-EsxCli -VMHost $ESXi -V2
$ESXcli.system.security.keypersistence.get.invoke() | Select-Object -ExpandProperty Enabled
PowerCLI 命令修复示例
$ESXcli = Get-EsxCli -VMHost $ESXi -V2
$arguments = $ESXcli.system.security.keypersistence.disable.CreateArgs()
$arguments.removeallstoredkeys = $true
$ESXcli.system.security.keypersistence.disable.Invoke($arguments)