{"stig":{"title":"VMware vSphere 8.0 ESXi Security Technical Implementation Guide","version":"1","release":"1"},"checks":[{"vulnId":"V-258728","ruleId":"SV-258728r933245_rule","severity":"medium","ruleTitle":"The ESXi host must enforce the limit of three consecutive invalid logon attempts by a user.","description":"By limiting the number of failed logon attempts, the risk of unauthorized access via user password guessing, otherwise known as brute forcing, is reduced. Once the configured number of attempts is reached, the account is locked by the ESXi host.","checkContent":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nSelect the \"Security.AccountLockFailures\" value and verify it is set to \"3\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name Security.AccountLockFailures\n\nIf the \"Security.AccountLockFailures\" setting is set to a value other than \"3\", this is a finding.","fixText":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nClick \"Edit\". Select the \"Security.AccountLockFailures\" value and configure it to \"3\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name Security.AccountLockFailures | Set-AdvancedSetting -Value 3","ccis":["CCI-000044"]},{"vulnId":"V-258729","ruleId":"SV-258729r933248_rule","severity":"medium","ruleTitle":"The ESXi host must display the Standard Mandatory DOD Notice and Consent Banner before granting access to the system via the Direct Console User Interface (DCUI).","description":"Display of a standardized and approved use notification before granting access to the host ensures privacy and security notification verbiage used is consistent with applicable federal laws, Executive Orders, directives, policies, regulations, standards, and guidance.\n\nSystem use notifications are required only for access via logon interfaces with human users and are not required when such human interfaces do not exist.\n\nThe banner must be formatted in accordance with applicable DOD policy. Use the following verbiage for a host that can accommodate banners of 1300 characters:\n\n\"You are accessing a U.S. Government (USG) VMM (IS) that is provided for USG-authorized use only.\n\nBy using this IS (which includes any device attached to this IS), you consent to the following conditions:\n\n-The USG routinely intercepts and monitors communications on this IS for purposes including, but not limited to, penetration testing, COMSEC monitoring, network operations and defense, personnel misconduct (PM), law enforcement (LE), and counterintelligence (CI) investigations.\n\n-At any time, the USG may inspect and seize data stored on this IS.\n\n-Communications using, or data stored on, this IS are not private, are subject to routine monitoring, interception, and search, and may be disclosed or used for any USG-authorized purpose.\n\n-This IS includes security measures (e.g., authentication and access controls) to protect USG interests--not for your personal benefit or privacy.\n\n-Notwithstanding the above, using this IS does not constitute consent to PM, LE or CI investigative searching or monitoring of the content of privileged communications, or work product, related to personal representation or services by attorneys, psychotherapists, or clergy, and their assistants. Such communications and work product are private and confidential. See User Agreement for details.\"\n\nUse the following verbiage for VMMs that have severe limitations on the number of characters that can be displayed in the banner:\n\n\"I've read (literal ampersand) consent to terms in IS user agreem't.\"\n\nSatisfies: SRG-OS-000023-VMM-000060, SRG-OS-000024-VMM-000070","checkContent":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nSelect the \"Annotations.WelcomeMessage\" value and verify it contains the standard mandatory DOD notice and consent banner.\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name Annotations.WelcomeMessage\n\nIf the \"Annotations.WelcomeMessage\" setting does not contain the standard mandatory DOD notice and consent banner, this is a finding.","fixText":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nClick \"Edit\". Select the \"Annotations.WelcomeMessage\" value and set it to the following. Click \"OK\".\n\n{bgcolor:black} {/color}{align:left}{bgcolor:black}{color:yellow}{hostname} , {ip}{/color}{/bgcolor}{/align}\n{bgcolor:black} {/color}{align:left}{bgcolor:black}{color:yellow}{esxproduct} {esxversion}{/color}{/bgcolor}{/align}\n{bgcolor:black} {/color}{align:left}{bgcolor:black}{color:yellow}{memory} RAM{/color}{/bgcolor}{/align}\n{bgcolor:black} {/color}{align:left}{bgcolor:black}{color:white} {/color}{/bgcolor}{/align}\n{bgcolor:black} {/color}{align:left}{bgcolor:yellow}{color:black}                                                                                                                          {/color}{/bgcolor}{/align}\n{bgcolor:black} {/color}{align:left}{bgcolor:yellow}{color:black}  You are accessing a U.S. Government (USG) Information System (IS) that is provided for USG-authorized use only. By      {/color}{/bgcolor}{/align}\n{bgcolor:black} {/color}{align:left}{bgcolor:yellow}{color:black}  using this IS (which includes any device attached to this IS), you consent to the following conditions:                 {/color}{/bgcolor}{/align}\n{bgcolor:black} {/color}{align:left}{bgcolor:yellow}{color:black}                                                                                                                          {/color}{/bgcolor}{/align}\n{bgcolor:black} {/color}{align:left}{bgcolor:yellow}{color:black}  -       The USG routinely intercepts and monitors communications on this IS for purposes including, but not limited     {/color}{/bgcolor}{/align}\n{bgcolor:black} {/color}{align:left}{bgcolor:yellow}{color:black}          to, penetration testing, COMSEC monitoring, network operations and defense, personnel misconduct (PM), law      {/color}{/bgcolor}{/align}\n{bgcolor:black} {/color}{align:left}{bgcolor:yellow}{color:black}          enforcement (LE), and counterintelligence (CI) investigations.                                                  {/color}{/bgcolor}{/align}\n{bgcolor:black} {/color}{align:left}{bgcolor:yellow}{color:black}                                                                                                                          {/color}{/bgcolor}{/align}\n{bgcolor:black} {/color}{align:left}{bgcolor:yellow}{color:black}  -       At any time, the USG may inspect and seize data stored on this IS.                                              {/color}{/bgcolor}{/align}\n{bgcolor:black} {/color}{align:left}{bgcolor:yellow}{color:black}                                                                                                                          {/color}{/bgcolor}{/align}\n{bgcolor:black} {/color}{align:left}{bgcolor:yellow}{color:black}  -       Communications using, or data stored on, this IS are not private, are subject to routine monitoring,            {/color}{/bgcolor}{/align}\n{bgcolor:black} {/color}{align:left}{bgcolor:yellow}{color:black}          interception, and search, and may be disclosed or used for any USG-authorized purpose.                          {/color}{/bgcolor}{/align}\n{bgcolor:black} {/color}{align:left}{bgcolor:yellow}{color:black}                                                                                                                          {/color}{/bgcolor}{/align}\n{bgcolor:black} {/color}{align:left}{bgcolor:yellow}{color:black}  -       This IS includes security measures (e.g., authentication and access controls) to protect USG interests--not     {/color}{/bgcolor}{/align}\n{bgcolor:black} {/color}{align:left}{bgcolor:yellow}{color:black}          for your personal benefit or privacy.                                                                           {/color}{/bgcolor}{/align}\n{bgcolor:black} {/color}{align:left}{bgcolor:yellow}{color:black}                                                                                                                          {/color}{/bgcolor}{/align}\n{bgcolor:black} {/color}{align:left}{bgcolor:yellow}{color:black}  -       Notwithstanding the above, using this IS does not constitute consent to PM, LE or CI investigative searching    {/color}{/bgcolor}{/align}\n{bgcolor:black} {/color}{align:left}{bgcolor:yellow}{color:black}          or monitoring of the content of privileged communications, or work product, related to personal representation  {/color}{/bgcolor}{/align}\n{bgcolor:black} {/color}{align:left}{bgcolor:yellow}{color:black}          or services by attorneys, psychotherapists, or clergy, and their assistants. Such communications and work       {/color}{/bgcolor}{/align}\n{bgcolor:black} {/color}{align:left}{bgcolor:yellow}{color:black}          product are private and confidential. See User Agreement for details.                                           {/color}{/bgcolor}{/align}\n{bgcolor:black} {/color}{align:left}{bgcolor:yellow}{color:black}                                                                                                                          {/color}{/bgcolor}{/align}\n{bgcolor:black} {/color}{bgcolor:dark-grey}{color:black}                                                                                                                          {/color}{/bgcolor}\n{bgcolor:black} {/color}{bgcolor:dark-grey}{color:black}                                                                                                                          {/color}{/bgcolor}\n{bgcolor:black} {/color}{bgcolor:dark-grey}{color:black}                                                                                                                          {/color}{/bgcolor}\n{bgcolor:black} {/color}{bgcolor:dark-grey}{color:black}                                                                                                                          {/color}{/bgcolor}\n{bgcolor:black} {/color}{bgcolor:dark-grey}{color:black}                                                                                                                          {/color}{/bgcolor}\n{bgcolor:black} {/color}{bgcolor:dark-grey}{color:black}                                                                                                                          {/color}{/bgcolor}\n{bgcolor:black} {/color}{bgcolor:dark-grey}{color:black}                                                                                                                          {/color}{/bgcolor}\n{bgcolor:black} {/color}{bgcolor:dark-grey}{color:black}                                                                                                                          {/color}{/bgcolor}\n{bgcolor:black} {/color}{bgcolor:dark-grey}{color:black}                                                                                                                          {/color}{/bgcolor}\n{bgcolor:black} {/color}{bgcolor:dark-grey}{color:black}                                                                                                                          {/color}{/bgcolor}\n{bgcolor:black} {/color}{bgcolor:dark-grey}{color:black}                                                                                                                          {/color}{/bgcolor}\n{bgcolor:black} {/color}{bgcolor:dark-grey}{color:black}                                                                                                                          {/color}{/bgcolor}\n{bgcolor:black} {/color}{bgcolor:dark-grey}{color:black}                                                                                                                          {/color}{/bgcolor}\n{bgcolor:black} {/color}{bgcolor:dark-grey}{color:black}                                                                                                                          {/color}{/bgcolor}\n{bgcolor:black} {/color}{bgcolor:dark-grey}{color:black}                                                                                                                          {/color}{/bgcolor}\n{bgcolor:black} {/color}{bgcolor:dark-grey}{color:black}                                                                                                                          {/color}{/bgcolor}\n{bgcolor:black} {/color}{bgcolor:dark-grey}{color:black}                                                                                                                          {/color}{/bgcolor}\n{bgcolor:black} {/color}{align:left}{bgcolor:dark-grey}{color:white}  <F2> Accept Conditions and Customize System / View Logs{/align}{align:right}<F12> Accept Conditions and Shut Down/Restart  {bgcolor:black} {/color}{/color}{/bgcolor}{/align}\n{bgcolor:black} {/color}{bgcolor:dark-grey}{color:black}                                                                                                                          {/color}{/bgcolor}\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name Annotations.WelcomeMessage | Set-AdvancedSetting -Value \"<Banner text above>\"","ccis":["CCI-000048","CCI-000050"]},{"vulnId":"V-258730","ruleId":"SV-258730r933251_rule","severity":"medium","ruleTitle":"The ESXi host must enable lockdown mode.","description":"Enabling Lockdown Mode disables direct access to an ESXi host, requiring the host to be managed remotely from vCenter Server. This is done to ensure the roles and access controls implemented in vCenter are always enforced and users cannot bypass them by logging on to a host directly.\n\nBy forcing all interaction to occur through vCenter Server, the risk of someone inadvertently attaining elevated privileges or performing tasks that are not properly audited is greatly reduced.","checkContent":"For environments that do not use vCenter server to manage ESXi, this is not applicable.\n\nFrom the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Security Profile.\n\nScroll down to \"Lockdown Mode\" and verify it is set to \"Enabled\" (Normal or Strict).\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Select Name,@{N=\"Lockdown\";E={$_.Extensiondata.Config.LockdownMode}}\n\nIf \"Lockdown Mode\" is disabled, this is a finding.","fixText":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Security Profile >> Lockdown Mode.\n\nClick edit and select either the \"Normal\" or \"Strict\" radio buttons.\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\n$level = \"lockdownNormal\" OR \"lockdownStrict\"\n$vmhost = Get-VMHost -Name <hostname> | Get-View\n$lockdown = Get-View $vmhost.ConfigManager.HostAccessManager\n$lockdown.ChangeLockdownMode($level)\n\nNote: In strict lockdown mode, the Direct Console User Interface (DCUI) service is stopped. If the connection to vCenter Server is lost and the vSphere Client is no longer available, the ESXi host becomes inaccessible.","ccis":["CCI-000054"]},{"vulnId":"V-258731","ruleId":"SV-258731r933254_rule","severity":"medium","ruleTitle":"The ESXi host client must be configured with an idle session timeout.","description":"The ESXi host client is the UI served up by the host itself, outside of vCenter. It is accessed at https://<ESX FQDN>/ui. ESXi is not usually administered via this interface for long periods, and all users will be highly privileged. Implementing a mandatory session idle limit will ensure that orphaned, forgotten, or ignored sessions will be closed promptly.","checkContent":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nSelect the \"UserVars.HostClientSessionTimeout\" value and verify it is set to \"900\" or less.\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name UserVars.HostClientSessionTimeout\n\nIf the \"UserVars.HostClientSessionTimeout\" setting is not set to \"900\" or less, this is a finding.","fixText":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nClick \"Edit\". Select the \"UserVars.HostClientSessionTimeout\" value and configure it to \"900\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name UserVars.HostClientSessionTimeout | Set-AdvancedSetting -Value \"900\"","ccis":["CCI-000057"]},{"vulnId":"V-258732","ruleId":"SV-258732r933257_rule","severity":"high","ruleTitle":"The ESXi host Secure Shell (SSH) daemon must use FIPS 140-2 validated cryptographic modules to protect the confidentiality of remote access sessions.","description":"Without confidentiality protection mechanisms, unauthorized individuals may gain access to sensitive information via a remote access session.\n\nOpenSSH on the ESXi host ships with a FIPS 140-2 validated cryptographic module and it is enabled by default. For backward compatibility reasons, this can be disabled so this setting must be audited and corrected if necessary.","checkContent":"From an ESXi shell, run the following command:\n\n# esxcli system security fips140 ssh get\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\n$esxcli = Get-EsxCli -v2\n$esxcli.system.security.fips140.ssh.get.invoke()\n\nExpected result:\n\nEnabled: true\n\nIf the FIPS mode is not enabled for SSH, this is a finding.","fixText":"From an ESXi shell, run the following command:\n\n# esxcli system security fips140 ssh set -e true\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\n$esxcli = Get-EsxCli -v2\n$arguments = $esxcli.system.security.fips140.ssh.set.CreateArgs()\n$arguments.enable = $true\n$esxcli.system.security.fips140.ssh.set.Invoke($arguments)","ccis":["CCI-000068"]},{"vulnId":"V-258733","ruleId":"SV-258733r933260_rule","severity":"medium","ruleTitle":"The ESXi must produce audit records containing information to establish what type of events occurred.","description":"Without establishing what types of events occurred, it would be difficult to establish, correlate, and investigate the events leading up to an outage or attack. \n\nSatisfies: SRG-OS-000037-VMM-000150, SRG-OS-000063-VMM-000310","checkContent":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nSelect the \"Config.HostAgent.log.level\" value and verify it is set to \"info\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name Config.HostAgent.log.level\n\nIf the \"Config.HostAgent.log.level\" setting is not set to \"info\", this is a finding.\n\nNote: Verbose logging level is acceptable for troubleshooting purposes.","fixText":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nClick \"Edit\". Select the \"Config.HostAgent.log.level\" value and configure it to \"info\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name Config.HostAgent.log.level | Set-AdvancedSetting -Value \"info\"","ccis":["CCI-000130","CCI-000171"]},{"vulnId":"V-258734","ruleId":"SV-258734r933263_rule","severity":"medium","ruleTitle":"The ESXi host must enforce password complexity by configuring a password quality policy.","description":"To enforce the use of complex passwords, minimum numbers of characters of different classes are mandated.\n\nThe use of complex passwords reduces the ability of attackers to successfully obtain valid passwords using guessing or exhaustive search techniques. Complexity requirements increase the password search space by requiring users to construct passwords from a larger character set than they may otherwise use.\n\nSatisfies: SRG-OS-000069-VMM-000360, SRG-OS-000070-VMM-000370, SRG-OS-000071-VMM-000380, SRG-OS-000072-VMM-000390, SRG-OS-000072-VMM-000390, SRG-OS-000078-VMM-000450, SRG-OS-000266-VMM-000940","checkContent":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nSelect the \"Security.PasswordQualityControl\" value and verify it is set to \"similar=deny retry=3 min=disabled,disabled,disabled,disabled,15\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name Security.PasswordQualityControl\n\nIf the \"Security.PasswordQualityControl\" setting is set to a value other than \"similar=deny retry=3 min=disabled,disabled,disabled,disabled,15\", this is a finding.","fixText":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nClick \"Edit\". Select the \"Security.PasswordQualityControl\" value and configure it to \"similar=deny retry=3 min=disabled,disabled,disabled,disabled,15\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name Security.PasswordQualityControl | Set-AdvancedSetting -Value \"similar=deny retry=3 min=disabled,disabled,disabled,disabled,15\"","ccis":["CCI-000192","CCI-000193","CCI-000194","CCI-000195","CCI-000205","CCI-001619"]},{"vulnId":"V-258735","ruleId":"SV-258735r933266_rule","severity":"medium","ruleTitle":"The ESXi host must prohibit password reuse for a minimum of five generations.","description":"If a user or root used the same password continuously or was allowed to change it back shortly after being forced to change it to something else, it would provide a potential intruder with the opportunity to keep guessing at one user's password until it was guessed correctly.","checkContent":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nSelect the \"Security.PasswordHistory\" value and verify it is set to \"5\" or greater.\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name Security.PasswordHistory\n\nIf the \"Security.PasswordHistory\" setting is set to a value other than 5 or greater, this is a finding.","fixText":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nClick \"Edit\". Select the \"Security.PasswordHistory\" value and configure it to \"5\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name Security.PasswordHistory | Set-AdvancedSetting -Value 5","ccis":["CCI-000200"]},{"vulnId":"V-258736","ruleId":"SV-258736r933269_rule","severity":"medium","ruleTitle":"The ESXi host must be configured to disable nonessential capabilities by disabling the Managed Object Browser (MOB).","description":"The MOB provides a way to explore the object model used by the VMkernel to manage the host and enables configurations to be changed. This interface is meant to be used primarily for debugging the vSphere Software Development Kit (SDK), but because there are no access controls it could also be used as a method to obtain information about a host being targeted for unauthorized access.","checkContent":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nSelect the \"Config.HostAgent.plugins.solo.enableMob\" value and verify it is set to \"false\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name Config.HostAgent.plugins.solo.enableMob\n\nIf the \"Config.HostAgent.plugins.solo.enableMob\" setting is not set to \"false\", this is a finding.","fixText":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nClick \"Edit\". Select the \"Config.HostAgent.plugins.solo.enableMob\" value and configure it to \"false\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name Config.HostAgent.plugins.solo.enableMob | Set-AdvancedSetting -Value false","ccis":["CCI-000381"]},{"vulnId":"V-258737","ruleId":"SV-258737r933272_rule","severity":"low","ruleTitle":"The ESXi host must uniquely identify and must authenticate organizational users by using Active Directory.","description":"Join ESXi hosts to an Active Directory domain to eliminate the need to create and maintain multiple local user accounts. Using Active Directory for user authentication simplifies the ESXi host configuration, ensures password complexity and reuse policies are enforced, and reduces the risk of security breaches and unauthorized access.\n\nNote: If the Active Directory group \"ESX Admins\" (default) exists, all users and groups assigned as members to this group will have full administrative access to all ESXi hosts in the domain.\n\nSatisfies: SRG-OS-000104-VMM-000500, SRG-OS-000109-VMM-000550, SRG-OS-000112-VMM-000560, SRG-OS-000113-VMM-000570, SRG-OS-000123-VMM-000620","checkContent":"For systems that do not use Active Directory and have no local user accounts other than root and/or service accounts, this is not applicable.\n\nFrom the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Authentication Services.\n\nVerify the \"Directory Services Type\" is set to \"Active Directory\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-VMHostAuthentication\n\nFor systems that do not use Active Directory and do have local user accounts, other than root and/or service accounts, this is a finding.\n\nIf the \"Directory Services Type\" is not set to \"Active Directory\", this is a finding.","fixText":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Authentication Services.\n\nClick \"Join Domain...\" and enter the AD domain to join.\n\nSelect the \"Using credentials\" radio button and enter the credentials of an account with permissions to join machines to AD (use UPN naming \"user@domain\"). Click \"OK\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-VMHostAuthentication | Set-VMHostAuthentication -JoinDomain -Domain \"domain name\" -User \"username\" -Password \"password\"\n\nIf any local user accounts are present besides root and service accounts, delete them by going to Host UI >> Manage >> Security & Users >> Users.","ccis":["CCI-000764","CCI-000770","CCI-001682","CCI-001941","CCI-001942"]},{"vulnId":"V-258738","ruleId":"SV-258738r933275_rule","severity":"medium","ruleTitle":"The ESXi host Secure Shell (SSH) daemon must ignore .rhosts files.","description":"SSH trust relationships mean a compromise on one host can allow an attacker to move trivially to other hosts. SSH can emulate the behavior of the obsolete \"rsh\" command in allowing users to enable insecure access to their accounts via \".rhosts\" files.","checkContent":"From an ESXi shell, run the following command:\n\n# esxcli system ssh server config list -k ignorerhosts\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\n$esxcli = Get-EsxCli -v2\n$esxcli.system.ssh.server.config.list.invoke() | Where-Object {$_.Key -eq 'ignorerhosts'}\n\nExample result:\n\nignorerhosts yes\n\nIf \"ignorerhosts\" is not configured to \"yes\", this is a finding.","fixText":"From an ESXi shell, run the following command:\n\n# esxcli system ssh server config set -k ignorerhosts -v yes\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\n$esxcli = Get-EsxCli -v2\n$arguments = $esxcli.system.ssh.server.config.set.CreateArgs()\n$arguments.keyword = 'ignorerhosts'\n$arguments.value = 'yes'\n$esxcli.system.ssh.server.config.set.Invoke($arguments)","ccis":["CCI-000767"]},{"vulnId":"V-258739","ruleId":"SV-258739r933278_rule","severity":"medium","ruleTitle":"The ESXi host must set a timeout to automatically end idle shell sessions after fifteen minutes.","description":"If a user forgets to log out of their local or remote ESXi Shell session, the idle connection will remain open indefinitely and increase the likelihood of inappropriate host access via session hijacking. The \"ESXiShellInteractiveTimeOut\" allows the automatic termination of idle shell sessions.\n\nSatisfies: SRG-OS-000163-VMM-000700, SRG-OS-000279-VMM-001010","checkContent":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nSelect the \"UserVars.ESXiShellInteractiveTimeOut\" value and verify it is set to less than \"900\" and not \"0\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name UserVars.ESXiShellInteractiveTimeOut\n\nIf the \"UserVars.ESXiShellInteractiveTimeOut\" setting is set to a value greater than \"900\" or \"0\", this is a finding.","fixText":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nClick \"Edit\". Select the \"UserVars.ESXiShellInteractiveTimeOut\" value and configure it to \"900\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name UserVars.ESXiShellInteractiveTimeOut | Set-AdvancedSetting -Value 900","ccis":["CCI-001133","CCI-002361"]},{"vulnId":"V-258740","ruleId":"SV-258740r933281_rule","severity":"medium","ruleTitle":"The ESXi host must implement Secure Boot enforcement.","description":"Secure Boot is part of the UEFI firmware standard. With UEFI Secure Boot enabled, a host refuses to load any UEFI driver or app unless the operating system bootloader has a valid digital signature. Secure Boot for ESXi requires support from the firmware and it requires that all ESXi kernel modules, drivers, and VIBs be signed by VMware or a partner subordinate.\n\nSecure Boot is enabled in the BIOS of the ESXi physical server and supported by the hypervisor boot loader. This control flips ESXi from merely supporting Secure Boot to requiring it. Without this setting enabled, and configuration encryption, an ESXi host could be subject to offline attacks. An attacker could simply transfer the ESXi install drive to a non-Secure Boot host and boot it up without ESXi complaining.\n\nSatisfies: SRG-OS-000257-VMM-000910, SRG-OS-000258-VMM-000920, SRG-OS-000445-VMM-001780, SRG-OS-000446-VMM-001790","checkContent":"If the ESXi host does not have a compatible TPM, this finding is downgraded to a CAT III.\n\nFrom an ESXi shell, run the following command:\n\n# esxcli system settings encryption get\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\n$esxcli = Get-EsxCli -v2\n$esxcli.system.settings.encryption.get.invoke() | Select RequireSecureBoot\n\nExpected result:\n\nRequire Secure Boot: true\n\nIf \"Require Secure Boot\" is not enable, this is a finding.","fixText":"This setting cannot be configured until Secure Boot is properly enabled in the servers firmware.\n\nFrom an ESXi shell, run the following commands:\n\n# esxcli system settings encryption set --require-secure-boot=true\n# /sbin/auto-backup.sh\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\n$esxcli = Get-EsxCli -v2\n$arguments = $esxcli.system.settings.encryption.set.CreateArgs()\n$arguments.requiresecureboot = $true\n$esxcli.system.settings.encryption.set.Invoke($arguments)\n\nEvacuate the host and gracefully reboot for changes to take effect.","ccis":["CCI-001494","CCI-001495","CCI-002696","CCI-002699"]},{"vulnId":"V-258741","ruleId":"SV-258741r933284_rule","severity":"medium","ruleTitle":"The ESXi host must enable Secure Boot.","description":"Secure Boot is part of the Unified Extensible Firmware Interface (UEFI) firmware standard. With UEFI Secure Boot enabled, a host refuses to load any UEFI driver or app unless the operating system bootloader has a valid digital signature. Secure Boot for ESXi requires support from the firmware and requires that all ESXi kernel modules, drivers, and vSphere Installation Bundles (VIBs) be signed by VMware or a partner subordinate.\n\nSecure Boot is enabled in the BIOS of the ESXi physical server and supported by the hypervisor boot loader. There is no ESXi control to \"turn on\" Secure Boot. Requiring Secure Boot (failing to boot without it present) is accomplished in another control.","checkContent":"From an ESXi shell, run the following command:\n\n# /usr/lib/vmware/secureboot/bin/secureBoot.py -s\n\nIf Secure Boot is not \"Enabled\", this is a finding.","fixText":"From an ESXi shell, run the following command:\n\n# /usr/lib/vmware/secureboot/bin/secureBoot.py -c\n\nIf the output indicates that Secure Boot cannot be enabled, correct the discrepancies and try again.\n\nOnce all discrepancies are resolved, the server ESXi is installed on can be updated to enable Secure Boot in the firmware.\n\nTo enable Secure Boot in the server's firmware follow the instructions for the specific manufacturer.","ccis":["CCI-001496"]},{"vulnId":"V-258742","ruleId":"SV-258742r933287_rule","severity":"medium","ruleTitle":"The ESXi host must enforce an unlock timeout of 15 minutes after a user account is locked out.","description":"By enforcing a reasonable unlock timeout after multiple failed logon attempts, the risk of unauthorized access via user password guessing, otherwise known as brute forcing, is reduced. Users must wait for the timeout period to elapse before subsequent logon attempts are allowed.","checkContent":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nSelect the \"Security.AccountUnlockTime\" value and verify it is set to less than \"900\" and not \"0\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name Security.AccountUnlockTime\n\nIf the \"Security.AccountUnlockTime\" setting is less than 900 or 0, this is a finding.","fixText":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nClick \"Edit\". Select the \"Security.AccountUnlockTime\" value and configure it to \"900\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name Security.AccountUnlockTime | Set-AdvancedSetting -Value 900","ccis":["CCI-002238"]},{"vulnId":"V-258743","ruleId":"SV-258743r933290_rule","severity":"medium","ruleTitle":"The ESXi host must allocate audit record storage capacity to store at least one week's worth of audit records.","description":"In order to ensure ESXi has sufficient storage capacity in which to write the audit logs, audit record storage capacity should be configured. \n\nIf a central audit record storage facility is available, the local storage capacity should be sufficient to hold audit records that would accumulate during anticipated interruptions in delivery of records to the facility.","checkContent":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nSelect the \"Syslog.global.auditRecord.storageCapacity\" value and verify it is set to \"100\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name Syslog.global.auditRecord.storageCapacity\n\nIf the \"Syslog.global.auditRecord.storageCapacity\" setting is not set to 100, this is a finding.","fixText":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nClick \"Edit\". Select the \"Syslog.global.auditRecord.storageCapacity\" value and configure it to \"100\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name Syslog.global.auditRecord.storageCapacity | Set-AdvancedSetting -Value 100","ccis":["CCI-001849"]},{"vulnId":"V-258744","ruleId":"SV-258744r933293_rule","severity":"medium","ruleTitle":"The ESXi host must off-load logs via syslog.","description":"Remote logging to a central log host provides a secure, centralized store for ESXi logs. By gathering host log files onto a central host, it can more easily monitor all hosts with a single tool. It can also do aggregate analysis and searching to look for such things as coordinated attacks on multiple hosts.\n\nLogging to a secure, centralized log server also helps prevent log tampering and provides a long-term audit record.\n\nSatisfies: SRG-OS-000342-VMM-001230, SRG-OS-000274-VMM-000960, SRG-OS-000275-VMM-000970, SRG-OS-000277-VMM-000990, SRG-OS-000479-VMM-001990","checkContent":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nSelect the \"Syslog.global.logHost\" value and verify it is set to a site-specific syslog server.\n\nSyslog servers are specified in the following formats:\n\nudp://<IP or FQDN>:514\ntcp://<IP or FQDN>:514\nssl://<IP or FQDN>:1514\n\nMultiple servers can also be specified when separated by commas.\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name Syslog.global.logHost\n\nIf the \"Syslog.global.logHost\" setting is not set to a valid, site-specific syslog server, this is a finding.","fixText":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nClick \"Edit\". Select the \"Syslog.global.logHost\" value and configure it to a site-specific syslog server.\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name Syslog.global.logHost | Set-AdvancedSetting -Value \"enter site specific servers\"","ccis":["CCI-001683","CCI-001684","CCI-001686","CCI-001851"]},{"vulnId":"V-258745","ruleId":"SV-258745r933296_rule","severity":"medium","ruleTitle":"The ESXi host must synchronize internal information system clocks to an authoritative time source.","description":"To ensure the accuracy of the system clock, it must be synchronized with an authoritative time source within DOD. Many system functions, including time-based logon and activity restrictions, automated reports, system logs, and audit records, depend on an accurate system clock. If there is no confidence in the correctness of the system clock, time-based functions may not operate as intended and records may be of diminished value.\n\nSatisfies: SRG-OS-000355-VMM-001330, SRG-OS-000356-VMM-001340","checkContent":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Time Configuration.\n\nVerify NTP or PTP are configured, and one or more authoritative time sources are listed.\n\nFrom the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Services.\n\nVerify the NTP or PTP service is running and configured to start and stop with the host.\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\nGet-VMHost | Get-VMHostNTPServer\nGet-VMHost | Get-VMHostService | Where {$_.Label -eq \"NTP Daemon\" -or $_.Label -eq \"PTP Daemon\"}\n\nIf the NTP service is not configured with authoritative DOD time sources or the service is not configured to start and stop with the host (\"Policy\" of \"on\" in PowerCLI) or is stopped, this is a finding.\n\nIf PTP is used instead of NTP, this is not a finding.","fixText":"To configure NTP, perform the following:\n\nFrom the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Time Configuration.\n\nClick \"Add Service\" and select \"Network Time Protocol\".\n\nEnter or update the NTP servers listed with a comma-separated list of authoritative time servers. Click \"OK\".\n\nFrom the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Services.\n\nSelect the \"NTP Daemon\" service and click \"Edit Startup Policy\".\n\nSelect \"Start and stop with host\". Click \"OK\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\n$NTPServers = \"ntpserver1\",\"ntpserver2\"\nGet-VMHost | Add-VMHostNTPServer $NTPServers\nGet-VMHost | Get-VMHostService | Where {$_.Label -eq \"NTP Daemon\"} | Set-VMHostService -Policy On\nGet-VMHost | Get-VMHostService | Where {$_.Label -eq \"NTP Daemon\"} | Start-VMHostService\n\nTo configure PTP, perform the following:\n\nFrom the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Time Configuration.\n\nClick \"Add Service\" and select \"Precision Time Protocol\".\n\nSelect the network adapter that can receive the PTP traffic.\n\nIf NTP servers are available, select \"Enable fallback\" and enter or update the NTP servers listed with a comma separate list of authoritative time servers. Click \"OK\".\n\nFrom the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Services.\n\nSelect the \"PTP Daemon\" service and click \"Edit Startup Policy\".\n\nSelect \"Start and stop with host\". Click \"OK\".","ccis":["CCI-001891","CCI-002046"]},{"vulnId":"V-258746","ruleId":"SV-258746r933299_rule","severity":"high","ruleTitle":"The ESXi Image Profile and vSphere Installation Bundle (VIB) acceptance level must be verified.","description":"Verify the ESXi Image Profile to only allow signed VIBs. An unsigned VIB represents untested code installed on an ESXi host. The ESXi Image profile supports four acceptance levels:\n\n1. VMwareCertified - VIBs created, tested, and signed by VMware.\n2. VMwareAccepted - VIBs created by a VMware partner but tested and signed by VMware.\n3. PartnerSupported - VIBs created, tested, and signed by a certified VMware partner.\n4. CommunitySupported - VIBs that have not been tested by VMware or a VMware partner.\n\nCommunity Supported VIBs are not supported and do not have a digital signature. To protect the security and integrity of ESXi hosts, do not allow unsigned (CommunitySupported) VIBs to be installed on hosts.\n\nSatisfies: SRG-OS-000366-VMM-001430, SRG-OS-000370-VMM-001460","checkContent":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Security Profile.\n\nUnder \"Host Image Profile Acceptance Level\" view the acceptance level.\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\n$esxcli = Get-EsxCli -v2\n$esxcli.software.acceptance.get.Invoke()\n\nIf the acceptance level is \"CommunitySupported\", this is a finding.","fixText":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Security Profile.\n\nUnder \"Host Image Profile Acceptance Level\", click \"Edit\".\n\nUsing the drop-down selection, set the acceptance level as \"VMwareCertified\", \"VMwareAccepted\", or \"PartnerSupported\". The default is \"PartnerSupported\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\n$esxcli = Get-EsxCli -v2\n$arguments = $esxcli.software.acceptance.set.CreateArgs()\n$arguments.level = \"PartnerSupported\"\n$esxcli.software.acceptance.set.Invoke($arguments)\n\nNote: \"VMwareCertified\" or \"VMwareAccepted\" may be substituted for \"PartnerSupported\", depending on local requirements. These are case sensitive.","ccis":["CCI-001749","CCI-001774"]},{"vulnId":"V-258747","ruleId":"SV-258747r933302_rule","severity":"medium","ruleTitle":"The ESXi host must enable bidirectional Challenge-Handshake Authentication Protocol (CHAP) authentication for Internet Small Computer Systems Interface (iSCSI) traffic.","description":"When enabled, vSphere performs bidirectional authentication of both the iSCSI target and host. When not authenticating both the iSCSI target and host, there is potential for a man-in-the-middle attack, in which an attacker might impersonate either side of the connection to steal data. Bidirectional authentication mitigates this risk.","checkContent":"If iSCSI is not used, this is not applicable.\n\nFrom the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> Storage >> Storage Adapters.\n\nSelect the iSCSI adapter >> Properties >> Authentication >> Method.\n\nView the CHAP configuration and verify CHAP is required for target and host authentication.\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-VMHostHba | Where {$_.Type -eq \"iscsi\"} | Select AuthenticationProperties -ExpandProperty AuthenticationProperties\n\nIf iSCSI is used and CHAP is not set to \"required\" for both the target and host, this is a finding.\n\nIf iSCSI is used and unique CHAP secrets are not used for each host, this is a finding.","fixText":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> Storage >> Storage Adapters.\n\nSelect the iSCSI adapter >> Properties >> Authentication.\n\nClick \"Edit...\". Set \"Authentication Method\" to \"Use bidirectional CHAP\" and enter a unique secret for each traffic flow direction.\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-VMHostHba | Where {$_.Type -eq \"iscsi\"} | Set-VMHostHba -ChapType Required -ChapName \"chapname\" -ChapPassword \"password\" -MutualChapEnabled $true -MutualChapName \"mutualchapname\" -MutualChapPassword \"mutualpassword\"","ccis":["CCI-001967"]},{"vulnId":"V-258748","ruleId":"SV-258748r933305_rule","severity":"medium","ruleTitle":"The ESXi host must protect the confidentiality and integrity of transmitted information by isolating vMotion traffic.","description":"While encrypted vMotion is available, vMotion traffic should still be sequestered from other traffic to further protect it from attack. This network must only be accessible to other ESXi hosts, preventing outside access to the network.\n\nThe vMotion VMkernel port group must be in a dedicated VLAN that can be on a standard or distributed virtual switch as long as the vMotion VLAN is not shared by any other function and is only routed to ESXi hosts.","checkContent":"For environments that do not use vCenter server to manage ESXi, this is not applicable.\n\nFrom the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> Networking >> VMkernel adapters.\n\nReview the VLAN associated with any vMotion VMkernel(s) and verify they are dedicated for that purpose and are logically separated from other functions.\n\nIf long distance or cross vCenter vMotion is used, the vMotion network can be routable but must be accessible to only the intended ESXi hosts.\n\nIf the vMotion port group is not on an isolated VLAN and/or is routable to systems other than ESXi hosts, this is a finding.","fixText":"Configuration of the vMotion VMkernel will be unique to each environment.\n\nFor example, to modify the IP address and VLAN information to the correct network on a distributed switch, do the following:\n\nFrom the vSphere Client, go to Networking.\n\nSelect a distributed switch >> Select a port group >> Configure >> Settings >> Properties.\n\nClick \"Edit\" and select VLAN.\n\nChange the \"VLAN Type\" to \"VLAN\" and change the \"VLAN ID\" to a network allocated and dedicated to vMotion traffic exclusively. Click \"OK\".","ccis":["CCI-002418"]},{"vulnId":"V-258749","ruleId":"SV-258749r933308_rule","severity":"high","ruleTitle":"The ESXi host must maintain the confidentiality and integrity of information during transmission by exclusively enabling Transport Layer Security (TLS) 1.2.","description":"TLS 1.0 and 1.1 are deprecated protocols with well-published shortcomings and vulnerabilities. TLS 1.2 should be enabled on all interfaces and SSLv3, TL 1.1, and 1.0 disabled, where supported.\n\nMandating TLS 1.2 may break third-party integrations and add-ons to vSphere. Test these integrations carefully after implementing TLS 1.2 and roll back where appropriate.\n\nOn interfaces where required functionality is broken with TLS 1.2, this finding is not applicable until such time as the third-party software supports TLS 1.2.\n\nModify TLS settings in the following order:\n1. vCenter.\n2. ESXi.\n\nSatisfies: SRG-OS-000425-VMM-001710, SRG-OS-000426-VMM-001720","checkContent":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nSelect the \"UserVars.ESXiVPsDisabledProtocols\" value and verify it is set to \"sslv3,tlsv1,tlsv1.1\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name UserVars.ESXiVPsDisabledProtocols\n\nIf the \"UserVars.ESXiVPsDisabledProtocols\" setting is set to a value other than \"sslv3,tlsv1,tlsv1.1\", this is a finding.","fixText":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nClick \"Edit\". Select the \"UserVars.ESXiVPsDisabledProtocols\" value and configure it to \"sslv3,tlsv1,tlsv1.1\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name UserVars.ESXiVPsDisabledProtocols | Set-AdvancedSetting -Value \"sslv3,tlsv1,tlsv1.1\"","ccis":["CCI-002420","CCI-002422"]},{"vulnId":"V-258750","ruleId":"SV-258750r933311_rule","severity":"medium","ruleTitle":"The ESXi host Secure Shell (SSH) daemon must be configured to only use FIPS 140-2 validated ciphers.","description":"Use of weak or untested encryption algorithms undermines the purposes of utilizing encryption to protect data. ESXi must implement cryptographic modules adhering to the higher standards approved by the federal government since this provides assurance they have been tested and validated.","checkContent":"From an ESXi shell, run the following command:\n\n# esxcli system ssh server config list -k ciphers\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\n$esxcli = Get-EsxCli -v2\n$esxcli.system.ssh.server.config.list.invoke() | Where-Object {$_.Key -eq 'ciphers'}\n\nExpected result:\n\nciphers aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr\n\nIf the output matches the ciphers in the expected result or a subset thereof, this is not a finding.\n\nIf the ciphers in the output contain any ciphers not listed in the expected result, this is a finding.","fixText":"From an ESXi shell, run the following command:\n\n# esxcli system ssh server config set -k ciphers -v aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\n$esxcli = Get-EsxCli -v2\n$arguments = $esxcli.system.ssh.server.config.set.CreateArgs()\n$arguments.keyword = 'ciphers'\n$arguments.value = 'aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr'\n$esxcli.system.ssh.server.config.set.Invoke($arguments)","ccis":["CCI-002450"]},{"vulnId":"V-258751","ruleId":"SV-258751r933314_rule","severity":"medium","ruleTitle":"The ESXi host DCUI.Access list must be verified.","description":"Lockdown mode disables direct host access, requiring that administrators manage hosts from vCenter Server. However, if a host becomes isolated from vCenter, the administrator is locked out and can no longer manage the host.\n\nThe \"DCUI.Access\" advanced setting allows specified users to exit lockdown mode in such a scenario. If the Direct Console User Interface (DCUI) is running in strict lockdown mode, this setting is ineffective.","checkContent":"For environments that do not use vCenter server to manage ESXi, this is not applicable.\n\nFrom the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nSelect the \"DCUI.Access\" value and verify only the root user is listed.\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name DCUI.Access and verify it is set to root.\n\nIf the \"DCUI.Access\" is not restricted to \"root\", this is a finding.\n\nNote: This list is only for local user accounts and should only contain the root user.","fixText":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nClick \"Edit\". Select the \"DCUI.Access\" value and configure it to \"root\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name DCUI.Access | Set-AdvancedSetting -Value \"root\"","ccis":["CCI-000366"]},{"vulnId":"V-258752","ruleId":"SV-258752r933317_rule","severity":"medium","ruleTitle":"The ESXi host must display the Standard Mandatory DOD Notice and Consent Banner before granting access to the system via Secure Shell (SSH).","description":"Display of a standardized and approved use notification before granting access to the host ensures privacy and security notification verbiage used is consistent with applicable federal laws, Executive Orders, directives, policies, regulations, standards, and guidance.\n\nSystem use notifications are required only for access via logon interfaces with human users and are not required when such human interfaces do not exist.\n\nThe banner must be formatted in accordance with applicable DOD policy. Use the following verbiage for a host that can accommodate banners of 1300 characters:\n\n\"You are accessing a U.S. Government (USG) VMM (IS) that is provided for USG-authorized use only.\n\nBy using this IS (which includes any device attached to this IS), you consent to the following conditions:\n\n-The USG routinely intercepts and monitors communications on this IS for purposes including, but not limited to, penetration testing, COMSEC monitoring, network operations and defense, personnel misconduct (PM), law enforcement (LE), and counterintelligence (CI) investigations.\n\n-At any time, the USG may inspect and seize data stored on this IS.\n\n-Communications using, or data stored on, this IS are not private, are subject to routine monitoring, interception, and search, and may be disclosed or used for any USG-authorized purpose.\n\n-This IS includes security measures (e.g., authentication and access controls) to protect USG interests--not for your personal benefit or privacy.\n\n-Notwithstanding the above, using this IS does not constitute consent to PM, LE or CI investigative searching or monitoring of the content of privileged communications, or work product, related to personal representation or services by attorneys, psychotherapists, or clergy, and their assistants. Such communications and work product are private and confidential. See User Agreement for details.\"\n\nUse the following verbiage for VMMs that have severe limitations on the number of characters that can be displayed in the banner:\n\n\"I've read (literal ampersand) consent to terms in IS user agreem't.\"","checkContent":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nSelect the \"Config.Etc.issue\" value and verify it contains the standard mandatory DOD notice and consent banner.\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name Config.Etc.issue\n\nIf the \"Config.Etc.issue\" setting does not contain the standard mandatory DOD notice and consent banner, this is a finding.","fixText":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nClick \"Edit\". Select the \"Config.Etc.issue\" value and set it to the following:\n\n\"You are accessing a U.S. Government (USG) Information System (IS) that is provided for USG-authorized use only. By using this IS (which includes any device attached to this IS), you consent to the following conditions: -The USG routinely intercepts and monitors communications on this IS for purposes including, but not limited to, penetration testing, COMSEC monitoring, network operations and defense, personnel misconduct (PM), law enforcement (LE), and counterintelligence (CI) investigations. -At any time, the USG may inspect and seize data stored on this IS. -Communications using, or data stored on, this IS are not private, are subject to routine monitoring, interception, and search, and may be disclosed or used for any USG-authorized purpose. -This IS includes security measures (e.g., authentication and access controls) to protect USG interests--not for your personal benefit or privacy. -Notwithstanding the above, using this IS does not constitute consent to PM, LE or CI investigative searching or monitoring of the content of privileged communications, or work product, related to personal representation or services by attorneys, psychotherapists, or clergy, and their assistants. Such communications and work product are private and confidential. See User Agreement for details.\"\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name Config.Etc.issue | Set-AdvancedSetting -Value \"<Banner text above>\"","ccis":["CCI-000048"]},{"vulnId":"V-258753","ruleId":"SV-258753r933320_rule","severity":"medium","ruleTitle":"The ESXi host Secure Shell (SSH) daemon must display the Standard Mandatory DOD Notice and Consent Banner before granting access to the system.","description":"Display of a standardized and approved use notification before granting access to the host ensures privacy and security notification verbiage used is consistent with applicable federal laws, Executive Orders, directives, policies, regulations, standards, and guidance.\n\nSystem use notifications are required only for access via logon interfaces with human users and are not required when such human interfaces do not exist.\n\nThe banner must be formatted in accordance with applicable DOD policy. Use the following verbiage for a host that can accommodate banners of 1300 characters:\n\n\"You are accessing a U.S. Government (USG) VMM (IS) that is provided for USG-authorized use only.\n\nBy using this IS (which includes any device attached to this IS), you consent to the following conditions:\n\n-The USG routinely intercepts and monitors communications on this IS for purposes including, but not limited to, penetration testing, COMSEC monitoring, network operations and defense, personnel misconduct (PM), law enforcement (LE), and counterintelligence (CI) investigations.\n\n-At any time, the USG may inspect and seize data stored on this IS.\n\n-Communications using, or data stored on, this IS are not private, are subject to routine monitoring, interception, and search, and may be disclosed or used for any USG-authorized purpose.\n\n-This IS includes security measures (e.g., authentication and access controls) to protect USG interests--not for your personal benefit or privacy.\n\n-Notwithstanding the above, using this IS does not constitute consent to PM, LE or CI investigative searching or monitoring of the content of privileged communications, or work product, related to personal representation or services by attorneys, psychotherapists, or clergy, and their assistants. Such communications and work product are private and confidential. See User Agreement for details.\"\n\nUse the following verbiage for VMMs that have severe limitations on the number of characters that can be displayed in the banner:\n\n\"I've read (literal ampersand) consent to terms in IS user agreem't.\"","checkContent":"From an ESXi shell, run the following command:\n\n# esxcli system ssh server config list -k banner\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\n$esxcli = Get-EsxCli -v2\n$esxcli.system.ssh.server.config.list.invoke() | Where-Object {$_.Key -eq 'banner'}\n\nExample result:\n\nbanner /etc/issue\n\nIf \"banner\" is not configured to \"/etc/issue\", this is a finding.","fixText":"From an ESXi shell, run the following command:\n\n# esxcli system ssh server config set -k banner -v /etc/issue\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\n$esxcli = Get-EsxCli -v2\n$arguments = $esxcli.system.ssh.server.config.set.CreateArgs()\n$arguments.keyword = 'banner'\n$arguments.value = '/etc/issue'\n$esxcli.system.ssh.server.config.set.Invoke($arguments)","ccis":["CCI-000048"]},{"vulnId":"V-258754","ruleId":"SV-258754r933323_rule","severity":"medium","ruleTitle":"The ESXi host must be configured to disable nonessential capabilities by disabling Secure Shell (SSH).","description":"The ESXi Shell is an interactive command line interface (CLI) available at the ESXi server console. The ESXi shell provides temporary access to commands essential for server maintenance. Intended primarily for use in break-fix scenarios, the ESXi shell is well suited for checking and modifying configuration details, which are not always generally accessible, using the vSphere Client.\n\nThe ESXi shell is accessible remotely using SSH by users with the Administrator role. Under normal operating conditions, SSH access to the host must be disabled as is the default. As with the ESXi shell, SSH is also intended only for temporary use during break-fix scenarios. SSH must therefore be disabled under normal operating conditions and must only be enabled for diagnostics or troubleshooting. Remote access to the host must therefore be limited to the vSphere Client or Host Client at all other times.\n\nSatisfies: SRG-OS-000095-VMM-000480, SRG-OS-000297-VMM-001040, SRG-OS-000298-VMM-001050","checkContent":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Services.\n\nUnder Services, locate the \"SSH\" service and verify it is \"Stopped\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-VMHostService | Where {$_.Label -eq \"SSH\"}\n\nIf the SSH service is \"Running\", this is a finding.","fixText":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Services.\n\nUnder \"Services\", select the \"SSH\" service and click the \"Stop\" button.\n\nClick the \"Edit Startup policy...\" button.\n\nSelect the \"Start and stop manually\" radio button.\n\nClick \"OK\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\nGet-VMHost | Get-VMHostService | Where {$_.Label -eq \"SSH\"} | Set-VMHostService -Policy Off\nGet-VMHost | Get-VMHostService | Where {$_.Label -eq \"SSH\"} | Stop-VMHostService","ccis":["CCI-000381","CCI-002314","CCI-002322"]},{"vulnId":"V-258755","ruleId":"SV-258755r933326_rule","severity":"medium","ruleTitle":"The ESXi host must be configured to disable nonessential capabilities by disabling the ESXi shell.","description":"The ESXi Shell is an interactive command line environment available locally from the Direct Console User Interface (DCUI) or remotely via SSH. Activities performed from the ESXi Shell bypass vCenter role-based access control (RBAC) and audit controls.\n\nThe ESXi shell must only be turned on when needed to troubleshoot/resolve problems that cannot be fixed through the vSphere client.","checkContent":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Services.\n\nUnder Services, locate the \"ESXi Shell\" service and verify it is \"Stopped\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-VMHostService | Where {$_.Label -eq \"ESXi Shell\"}\n\nIf the ESXi Shell service is \"Running\", this is a finding.","fixText":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Services.\n\nUnder \"Services\", select the \"ESXi Shell\" service and click the \"Stop\" button.\n\nClick the \"Edit Startup policy...\" button.\n\nSelect the \"Start and stop manually\" radio button.\n\nClick \"OK\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\nGet-VMHost | Get-VMHostService | Where {$_.Label -eq \"ESXi Shell\"} | Set-VMHostService -Policy Off\nGet-VMHost | Get-VMHostService | Where {$_.Label -eq \"ESXi Shell\"} | Stop-VMHostService","ccis":["CCI-000381"]},{"vulnId":"V-258756","ruleId":"SV-258756r933329_rule","severity":"medium","ruleTitle":"The ESXi host must automatically stop shell services after 10 minutes.","description":"When the ESXi Shell or Secure Shell (SSH) services are enabled on a host, they will run indefinitely. To avoid having these services left running, set the \"ESXiShellTimeOut\". The \"ESXiShellTimeOut\" defines a window of time after which the ESXi Shell and SSH services will be stopped automatically.","checkContent":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nSelect the \"UserVars.ESXiShellTimeOut\" value and verify it is set to less than \"600\" and not \"0\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name UserVars.ESXiShellTimeOut\n\nIf the \"UserVars.ESXiShellTimeOut\" setting is set to a value greater than \"600\" or \"0\", this is a finding.","fixText":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nClick \"Edit\". Select the \"UserVars.ESXiShellTimeOut\" value and configure it to \"600\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name UserVars.ESXiShellTimeOut | Set-AdvancedSetting -Value 600","ccis":["CCI-001133"]},{"vulnId":"V-258757","ruleId":"SV-258757r933332_rule","severity":"medium","ruleTitle":"The ESXi host must set a timeout to automatically end idle DCUI sessions after 10 minutes.","description":"When the Direct Console User Interface (DCUI) is enabled and logged in, it should be automatically logged out if left logged on to avoid access by unauthorized persons. The \"DcuiTimeOut\" setting defines a window of time after which the DCUI will be logged out.","checkContent":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nSelect the \"UserVars.DcuiTimeOut\" value and verify it is set to less than \"600\" and not \"0\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name UserVars.DcuiTimeOut\n\nIf the \"UserVars.DcuiTimeOut\" setting is set to a value greater than \"600\" or \"0\", this is a finding.","fixText":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nClick \"Edit\". Select the \"UserVars.DcuiTimeOut\" value and configure it to \"600\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name UserVars.DcuiTimeOut | Set-AdvancedSetting -Value 600","ccis":["CCI-001133"]},{"vulnId":"V-258758","ruleId":"SV-258758r933335_rule","severity":"medium","ruleTitle":"The ESXi host must protect the confidentiality and integrity of transmitted information by isolating ESXi management traffic.","description":"The vSphere management network provides access to the vSphere management interface on each component. Services running on the management interface provide an opportunity for an attacker to gain privileged access to the systems. Any remote attack most likely would begin with gaining entry to this network.\n\nThe Management VMkernel port group can be on a standard or distributed virtual switch but must be on a dedicated VLAN. The Management VLAN must not be shared by any other function and must not be accessible to anything other than management-related functions such as vCenter.","checkContent":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> Networking >> VMkernel adapters.\n\nReview each VMkernel adapter that is used for management traffic and view the \"Enabled services\".\n\nReview the VLAN associated with each VMkernel that is used for management traffic. Verify with the system administrator that they are dedicated for that purpose and are logically separated from other functions.\n\nIf any services other than \"Management\" are enabled on the Management VMkernel adapter, this is a finding.\n\nIf the network segment is accessible, except to networks where other management-related entities are located such as vCenter, this is a finding.\n\nIf there are any other systems or devices such as VMs on the ESXi management segment, this is a finding.","fixText":"Configuration of the management VMkernel will be unique to each environment.\n\nFor example, to modify the IP address and VLAN information to the correct network on a distributed switch, do the following:\n\nFrom the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> Networking >> VMkernel adapters.\n\nSelect the Management VMkernel and click \"Edit\". On the Port properties tab, uncheck all services except for \"Management\". Click \"OK\".\n\nFrom the vSphere Client, go to Networking.\n\nSelect a distributed switch >> Select a port group >> Configure >> Settings >> Properties.\n\nClick \"Edit\" and select VLAN.\n\nChange the \"VLAN Type\" to \"VLAN\" and change the \"VLAN ID\" to a network allocated and dedicated to management traffic exclusively. Click \"OK\".","ccis":["CCI-002418"]},{"vulnId":"V-258759","ruleId":"SV-258759r933338_rule","severity":"medium","ruleTitle":"The ESXi host must protect the confidentiality and integrity of transmitted information by isolating IP-based storage traffic.","description":"Virtual machines (VMs) might share virtual switches and VLANs with the IP-based storage configurations. IP-based storage includes vSAN, iSCSI, and NFS. This configuration might expose IP-based storage traffic to unauthorized VM users. IP-based storage frequently is not encrypted. It can be viewed by anyone with access to this network.\n\nTo restrict unauthorized users from viewing the IP-based storage traffic, the IP-based storage network must be logically separated from any other traffic. Configuring the IP-based storage adaptors on separate VLANs or network segments from other VMkernels and VMs will limit unauthorized users from viewing the traffic.","checkContent":"If IP-based storage is not used, this is not applicable.\n\nFrom the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> Networking >> VMkernel adapters.\n\nReview each VMkernel adapter that is used for IP-based storage traffic and view the \"Enabled services\".\n\nReview the VLAN associated with each VMkernel that is used for IP-based storage traffic. Verify with the system administrator that they are dedicated for that purpose and are logically separated from other functions.\n\nIf any services are enabled on an NFS or iSCSI IP-based storage VMkernel adapter, this is a finding.\n\nIf any services are enabled on a vSAN VMkernel adapter other than vSAN, this is a finding.\n\nIf any IP-based storage networks are not isolated from other traffic types, this is a finding.","fixText":"Configuration of an IP-Based VMkernel will be unique to each environment.\n\nFrom the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> Networking >> VMkernel adapters.\n\nSelect the VMkernel used for IP-based storage and click \"Edit\". On the \"Port\" properties tab, uncheck all services. Click \"OK\".\n\nNote: For VMkernels used for vSAN leave the vSAN service enabled and uncheck all others.\n\nFrom the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> Networking >> Virtual switches.\n\nFind the port group that is dedicated to IP-based storage and click the '...' button next to the name. Click \"Edit Settings\".\n\nOn the \"Properties\" tab, change the \"VLAN ID\" to one dedicated for IP-based storage traffic. Click \"OK\".","ccis":["CCI-002418"]},{"vulnId":"V-258760","ruleId":"SV-258760r933341_rule","severity":"medium","ruleTitle":"The ESXi host lockdown mode exception users list must be verified.","description":"While a host is in lockdown mode (strict or normal), only users on the \"Exception Users\" list are allowed access. These users do not lose their permissions when the host enters lockdown mode. \n\nThe organization may want to add service accounts such as a backup agent to the Exception Users list. Verify the list of users exempted from losing permissions is legitimate and as needed per the environment. Adding unnecessary users to the exception list defeats the purpose of lockdown mode.","checkContent":"For environments that do not use vCenter server to manage ESXi, this is not applicable.\n\nFrom the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Security Profile.\n\nUnder \"Lockdown Mode\", review the Exception Users list.\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following script:\n\n$vmhost = Get-VMHost | Get-View\n$lockdown = Get-View $vmhost.ConfigManager.HostAccessManager\n$lockdown.QueryLockdownExceptions()\n\nIf the Exception Users list contains accounts that do not require special permissions, this is a finding.\n\nNote: The Exception Users list is empty by default and should remain that way except under site-specific circumstances.","fixText":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Security Profile.\n\nUnder \"Lockdown Mode\", click \"Edit\" and remove unnecessary users from the Exception Users list.","ccis":["CCI-000366"]},{"vulnId":"V-258761","ruleId":"SV-258761r933344_rule","severity":"medium","ruleTitle":"The ESXi host Secure Shell (SSH) daemon must not allow host-based authentication.","description":"SSH trust relationships mean a compromise on one host can allow an attacker to move trivially to other hosts. SSH's cryptographic host-based authentication is more secure than \".rhosts\" authentication since hosts are cryptographically authenticated. However, it is not recommended that hosts unilaterally trust one another, even within an organization.","checkContent":"From an ESXi shell, run the following command:\n\n# esxcli system ssh server config list -k hostbasedauthentication\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\n$esxcli = Get-EsxCli -v2\n$esxcli.system.ssh.server.config.list.invoke() | Where-Object {$_.Key -eq 'hostbasedauthentication'}\n\nExample result:\n\nhostbasedauthentication no\n\nIf \"hostbasedauthentication\" is not configured to \"no\", this is a finding.","fixText":"From an ESXi shell, run the following command:\n\n# esxcli system ssh server config set -k hostbasedauthentication -v no\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\n$esxcli = Get-EsxCli -v2\n$arguments = $esxcli.system.ssh.server.config.set.CreateArgs()\n$arguments.keyword = 'hostbasedauthentication'\n$arguments.value = 'no'\n$esxcli.system.ssh.server.config.set.Invoke($arguments)","ccis":["CCI-000366"]},{"vulnId":"V-258762","ruleId":"SV-258762r933347_rule","severity":"medium","ruleTitle":"The ESXi host Secure Shell (SSH) daemon must not permit user environment settings.","description":"SSH environment options potentially allow users to bypass access restriction in some configurations. Users must not be able to present environment options to the SSH daemon.","checkContent":"From an ESXi shell, run the following command:\n\n# esxcli system ssh server config list -k permituserenvironment\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\n$esxcli = Get-EsxCli -v2\n$esxcli.system.ssh.server.config.list.invoke() | Where-Object {$_.Key -eq 'permituserenvironment'}\n\nExample result:\n\npermituserenvironment no\n\nIf \"permituserenvironment\" is not configured to \"no\", this is a finding.","fixText":"From an ESXi shell, run the following command:\n\n# esxcli system ssh server config set -k permituserenvironment -v no\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\n$esxcli = Get-EsxCli -v2\n$arguments = $esxcli.system.ssh.server.config.set.CreateArgs()\n$arguments.keyword = 'permituserenvironment'\n$arguments.value = 'no'\n$esxcli.system.ssh.server.config.set.Invoke($arguments)","ccis":["CCI-000366"]},{"vulnId":"V-258763","ruleId":"SV-258763r933350_rule","severity":"low","ruleTitle":"The ESXi host Secure Shell (SSH) daemon must be configured to not allow gateway ports.","description":"SSH Transmission Control Protocol (TCP) connection forwarding provides a mechanism to establish TCP connections proxied by the SSH server. This function can provide convenience similar to a virtual private network (VPN) with the similar risk of providing a path to circumvent firewalls and network Access Control Lists (ACLs). Gateway ports allow remote forwarded ports to bind to nonloopback addresses on the server.","checkContent":"From an ESXi shell, run the following command:\n\n# esxcli system ssh server config list -k gatewayports\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\n$esxcli = Get-EsxCli -v2\n$esxcli.system.ssh.server.config.list.invoke() | Where-Object {$_.Key -eq 'gatewayports'}\n\nExample result:\n\ngatewayports no\n\nIf \"gatewayports\" is not configured to \"no\", this is a finding.","fixText":"From an ESXi shell, run the following command:\n\n# esxcli system ssh server config set -k gatewayports -v no\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\n$esxcli = Get-EsxCli -v2\n$arguments = $esxcli.system.ssh.server.config.set.CreateArgs()\n$arguments.keyword = 'gatewayports'\n$arguments.value = 'no'\n$esxcli.system.ssh.server.config.set.Invoke($arguments)","ccis":["CCI-000366"]},{"vulnId":"V-258764","ruleId":"SV-258764r933353_rule","severity":"medium","ruleTitle":"The ESXi host Secure Shell (SSH) daemon must not permit tunnels.","description":"OpenSSH has the ability to create network tunnels (layer 2 and layer 3) over an SSH connection. This function can provide similar convenience to a virtual private network (VPN) with the similar risk of providing a path to circumvent firewalls and network Access Control Lists (ACLs).","checkContent":"From an ESXi shell, run the following command:\n\n# esxcli system ssh server config list -k permittunnel\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\n$esxcli = Get-EsxCli -v2\n$esxcli.system.ssh.server.config.list.invoke() | Where-Object {$_.Key -eq 'permittunnel'}\n\nExample result:\n\npermittunnel no\n\nIf \"permittunnel\" is not configured to \"no\", this is a finding.","fixText":"From an ESXi shell, run the following command:\n\n# esxcli system ssh server config set -k permittunnel -v no\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\n$esxcli = Get-EsxCli -v2\n$arguments = $esxcli.system.ssh.server.config.set.CreateArgs()\n$arguments.keyword = 'permittunnel'\n$arguments.value = 'no'\n$esxcli.system.ssh.server.config.set.Invoke($arguments)","ccis":["CCI-000366"]},{"vulnId":"V-258765","ruleId":"SV-258765r933356_rule","severity":"low","ruleTitle":"The ESXi host Secure Shell (SSH) daemon must set a timeout count on idle sessions.","description":"Setting a timeout ensures that a user login will be terminated as soon as the \"ClientAliveCountMax\" is reached.","checkContent":"From an ESXi shell, run the following command:\n\n# esxcli system ssh server config list -k clientalivecountmax\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\n$esxcli = Get-EsxCli -v2\n$esxcli.system.ssh.server.config.list.invoke() | Where-Object {$_.Key -eq 'clientalivecountmax'}\n\nExample result:\n\nclientalivecountmax 3\n\nIf \"clientalivecountmax\" is not configured to \"3\", this is a finding.","fixText":"From an ESXi shell, run the following command:\n\n# esxcli system ssh server config set -k clientalivecountmax -v 3\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\n$esxcli = Get-EsxCli -v2\n$arguments = $esxcli.system.ssh.server.config.set.CreateArgs()\n$arguments.keyword = 'clientalivecountmax'\n$arguments.value = '3'\n$esxcli.system.ssh.server.config.set.Invoke($arguments)","ccis":["CCI-000366"]},{"vulnId":"V-258766","ruleId":"SV-258766r933359_rule","severity":"low","ruleTitle":"The ESXi host Secure Shell (SSH) daemon must set a timeout interval on idle sessions.","description":"Automatically logging out idle users guards against compromises via hijacked administrative sessions.","checkContent":"From an ESXi shell, run the following command:\n\n# esxcli system ssh server config list -k clientaliveinterval\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\n$esxcli = Get-EsxCli -v2\n$esxcli.system.ssh.server.config.list.invoke() | Where-Object {$_.Key -eq 'clientaliveinterval'}\n\nExample result:\n\nclientaliveinterval 200\n\nIf \"clientaliveinterval\" is not configured to \"200\", this is a finding.","fixText":"From an ESXi shell, run the following command:\n\n# esxcli system ssh server config set -k clientaliveinterval -v 200\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\n$esxcli = Get-EsxCli -v2\n$arguments = $esxcli.system.ssh.server.config.set.CreateArgs()\n$arguments.keyword = 'clientaliveinterval'\n$arguments.value = '200'\n$esxcli.system.ssh.server.config.set.Invoke($arguments)","ccis":["CCI-000366"]},{"vulnId":"V-258767","ruleId":"SV-258767r933362_rule","severity":"medium","ruleTitle":"The ESXi host must disable Simple Network Management Protocol (SNMP) v1 and v2c.","description":"If SNMP is not being used, it must remain disabled. If it is being used, the proper trap destination must be configured. If SNMP is not properly configured, monitoring information can be sent to a malicious host that can use this information to plan an attack.","checkContent":"From an ESXi shell, run the following command:\n\n# esxcli system snmp get\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHostSnmp | Select *\n\nIf SNMP is not in use and is enabled, this is a finding.\n\nIf SNMP is enabled and is not using v3 targets with authentication, this is a finding.\n\nNote: SNMP v3 targets can only be viewed and configured via the \"esxcli\" command.","fixText":"To disable SNMP from an ESXi shell, run the following command:\n\n# esxcli system snmp set -e no\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi Host:\n\nGet-VMHostSnmp | Set-VMHostSnmp -Enabled $false","ccis":["CCI-000366"]},{"vulnId":"V-258768","ruleId":"SV-258768r933365_rule","severity":"low","ruleTitle":"The ESXi host must disable Inter-Virtual Machine (VM) Transparent Page Sharing.","description":"Published academic papers have demonstrated that by forcing a flush and reload of cache memory, it is possible to measure memory timings to try to determine an Advanced Encryption Standard (AES) encryption key in use on another virtual machine running on the same physical processor of the host server if Transparent Page Sharing (TPS) is enabled between the two VMs. This technique works only in a highly controlled system configured in a nonstandard way that VMware believes would not be recreated in a production environment.\n\nAlthough VMware believes information being disclosed in real-world conditions is unrealistic, out of an abundance of caution, upcoming ESXi update releases will no longer enable TPS between VMs by default (TPS will still be used within individual VMs).","checkContent":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nSelect the \"Mem.ShareForceSalting\" value and verify it is set to \"2\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name Mem.ShareForceSalting\n\nIf the \"Mem.ShareForceSalting\" setting is not set to 2, this is a finding.","fixText":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nClick \"Edit\". Select the \"Mem.ShareForceSalting\" value and set it to \"2\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name Mem.ShareForceSalting | Set-AdvancedSetting -Value 2","ccis":["CCI-000366"]},{"vulnId":"V-258769","ruleId":"SV-258769r933368_rule","severity":"medium","ruleTitle":"The ESXi host must configure the firewall to block network traffic by default.","description":"In addition to service-specific firewall rules, ESXi has a default firewall rule policy to allow or deny incoming and outgoing traffic. Reduce the risk of attack by ensuring this is set to deny incoming and outgoing traffic.","checkContent":"From an ESXi shell, run the following command:\n\n# esxcli network firewall get\n\nIf the \"Default Action\" does not equal \"DROP\", this is a finding.\nIf \"Enabled\" does not equal \"true\", this is a finding.\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHostFirewallDefaultPolicy\n\nIf the Incoming or Outgoing policies are \"True\", this is a finding.","fixText":"From an ESXi shell, run the following command:\n\n# esxcli network firewall set --default-action=false\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHostFirewallDefaultPolicy | Set-VMHostFirewallDefaultPolicy -AllowIncoming $false -AllowOutgoing $false","ccis":["CCI-000366"]},{"vulnId":"V-258770","ruleId":"SV-258770r933371_rule","severity":"medium","ruleTitle":"The ESXi host must enable Bridge Protocol Data Units (BPDU) filter on the host to prevent being locked out of physical switch ports with Portfast and BPDU Guard enabled.","description":"BPDU Guard and Portfast are commonly enabled on the physical switch to which the ESXi host is directly connected to reduce the Spanning Tree Protocol (STP) convergence delay.\n\nIf a BPDU packet is sent from a virtual machine (VM) on the ESXi host to the physical switch configured as stated above, a cascading lockout of all the uplink interfaces from the ESXi host can occur. To prevent this type of lockout, BPDU Filter can be enabled on the ESXi host to drop any BPDU packets being sent to the physical switch.\n\nThe caveat is that certain Secure Socket Layer (SSL) virtual private networks that use Windows bridging capability can legitimately generate BPDU packets. The administrator should verify no legitimate BPDU packets are generated by VMs on the ESXi host prior to enabling BPDU Filter. If BPDU Filter is enabled in this situation, enabling Reject Forged Transmits on the virtual switch port group adds protection against Spanning Tree loops.","checkContent":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nSelect the \"Net.BlockGuestBPDU\" value and verify it is set to \"1\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name Net.BlockGuestBPDU\n\nIf the \"Net.BlockGuestBPDU\" setting is not set to \"1\", this is a finding.","fixText":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nClick \"Edit\". Select the \"Net.BlockGuestBPDU\" value and configure it to \"1\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name Net.BlockGuestBPDU | Set-AdvancedSetting -Value 1","ccis":["CCI-000366"]},{"vulnId":"V-258771","ruleId":"SV-258771r933374_rule","severity":"medium","ruleTitle":"The ESXi host must configure virtual switch security policies to reject forged transmits.","description":"If the virtual machine (VM) operating system changes the Media Access Control (MAC) address, the operating system can send frames with an impersonated source MAC address at any time. This allows an operating system to stage malicious attacks on the devices in a network by impersonating a network adaptor authorized by the receiving network. \n \nThis means the virtual switch does not compare the source and effective MAC addresses. \n \nTo protect against MAC address impersonation, all virtual switches must have forged transmissions set to reject. Reject Forged Transmit can be set at the vSwitch and/or the Portgroup level. Switch-level settings can be overridden at the Portgroup level.","checkContent":"Note: This control addresses ESXi standard switches. Distributed switches are addressed in the vCenter STIG. If there is no standard switch on the ESXi host, this is not applicable.\n\nFrom the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> Networking >> Virtual Switches.\n\nOn each standard switch, click the '...' button next to each port group and select \"Edit Settings\".\n\nClick the \"Security\" tab. Verify that \"Forged transmits\" is set to \"Reject\" and that \"Override\" is not checked.\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\nGet-VirtualSwitch | Get-SecurityPolicy\nGet-VirtualPortGroup | Get-SecurityPolicy | Select-Object *\n\nIf the \"Forged Transmits\" policy is set to \"Accept\" (or \"true\", via PowerCLI) or the security policy inherited from the virtual switch is overridden, this is a finding.","fixText":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> Networking >> Virtual Switches.\n\nOn each standard switch, click \"Edit\" and select Security.\n\nSet \"Forged transmits\" to \"Reject\". Click \"OK\".\n\nFor each port group, click the '...' button and select \"Edit Settings\" then Security.\n\nSet \"Forged transmits\" to \"Reject\" and uncheck the \"Override\" box. Click \"OK\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\nGet-VirtualSwitch | Get-SecurityPolicy | Set-SecurityPolicy -ForgedTransmits $false\nGet-VirtualPortGroup | Get-SecurityPolicy | Set-SecurityPolicy -ForgedTransmitsInherited $true","ccis":["CCI-000366"]},{"vulnId":"V-258772","ruleId":"SV-258772r933377_rule","severity":"high","ruleTitle":"The ESXi host must configure virtual switch security policies to reject Media Access Control (MAC) address changes.","description":"If the virtual machine (VM) operating system changes the MAC address, it can send frames with an impersonated source MAC address at any time. This allows it to stage malicious attacks on the devices in a network by impersonating a network adaptor authorized by the receiving network.\n\nThis will prevent VMs from changing their effective MAC address, which will affect applications that require this functionality. This will also affect how a layer 2 bridge will operate and will affect applications that require a specific MAC address for licensing. \"Reject MAC Changes\" can be set at the vSwitch and/or the Portgroup level. Switch-level settings can be overridden at the Portgroup level.","checkContent":"This control addresses ESXi standard switches. Distributed switches are addressed in the vCenter STIG. If there is no standard switch on the ESXi host, this is not applicable.\n\nFrom the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> Networking >> Virtual Switches.\n\nOn each standard switch, click the '...' button next to each port group and select \"Edit Settings\".\n\nClick the \"Security\" tab. Verify that \"MAC Address Changes\" is set to \"Reject\" and that \"Override\" is not checked.\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\nGet-VirtualSwitch | Get-SecurityPolicy\nGet-VirtualPortGroup | Get-SecurityPolicy | Select-Object *\n\nIf the \"MAC Address Changes\" policy is set to \"Accept\" (or \"true\", via PowerCLI) or the security policy inherited from the virtual switch is overridden, this is a finding.","fixText":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> Networking >> Virtual Switches.\n\nOn each standard switch, click \"Edit\" and select Security.\n\nSet \"MAC Address Changes\" to \"Reject\". Click \"OK\".\n\nFor each port group, click the '...' button and select \"Edit Settings\" then Security.\n\nSet \"MAC Address Changes\" to \"Reject\" and uncheck the \"Override\" box. Click \"OK\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\nGet-VirtualSwitch | Get-SecurityPolicy | Set-SecurityPolicy -MacChanges $false\nGet-VirtualPortGroup | Get-SecurityPolicy | Set-SecurityPolicy -MacChangesInherited $true","ccis":["CCI-000366"]},{"vulnId":"V-258773","ruleId":"SV-258773r933380_rule","severity":"medium","ruleTitle":"The ESXi host must configure virtual switch security policies to reject promiscuous mode requests.","description":"When promiscuous mode is enabled for a virtual switch, all virtual machines (VMs) connected to the Portgroup have the potential to read all packets across that network (only the virtual machines connected to that Portgroup).\n\nPromiscuous mode is disabled by default on the ESXi Server, and this is the recommended setting. Promiscuous mode can be set at the vSwitch and/or the Portgroup level. Switch-level settings can be overridden at the Portgroup level.","checkContent":"This control addresses ESXi standard switches. Distributed switches are addressed in the vCenter STIG. If there is no standard switch on the ESXi host, this is not applicable.\n\nFrom the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> Networking >> Virtual Switches.\n\nOn each standard switch, click the '...' button next to each port group and select \"Edit Settings\".\n\nClick the \"Security\" tab. Verify that \"Promiscuous Mode\" is set to \"Reject\" and that \"Override\" is not checked.\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\nGet-VirtualSwitch | Get-SecurityPolicy\nGet-VirtualPortGroup | Get-SecurityPolicy | Select-Object *\n\nIf the \"Promiscuous Mode\" policy is set to \"Accept\" (or \"true\", via PowerCLI) or the security policy inherited from the virtual switch is overridden, this is a finding.","fixText":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> Networking >> Virtual Switches.\n\nOn each standard switch, click \"Edit\" and select Security.\n\nSet \"Promiscuous Mode\" to \"Reject\". Click \"OK\".\n\nFor each port group, click the '...' button and select \"Edit Settings\" then Security.\n\nSet \"Promiscuous Mode\" to \"Reject\" and uncheck the \"Override\" box. Click \"OK\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\nGet-VirtualSwitch | Get-SecurityPolicy | Set-SecurityPolicy -AllowPromiscuous $false\nGet-VirtualPortGroup | Get-SecurityPolicy | Set-SecurityPolicy -AllowPromiscuousInherited $true","ccis":["CCI-000366"]},{"vulnId":"V-258774","ruleId":"SV-258774r933383_rule","severity":"medium","ruleTitle":"The ESXi host must restrict use of the dvFilter network application programming interface (API).","description":"If the organization is not using products that use the dvFilter network API, the host should not be configured to send network information to a virtual machine (VM).\n\nIf the API is enabled, an attacker might attempt to connect a virtual machine to it, potentially providing access to the network of other VMs on the host.\n\nIf using a product that makes use of this API, verify the host has been configured correctly. If not using such a product, ensure the setting is blank.","checkContent":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nSelect the \"Net.DVFilterBindIpAddress\" value and verify the value is blank or the correct IP address of a security appliance if in use.\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name Net.DVFilterBindIpAddress\n\nIf the \"Net.DVFilterBindIpAddress\" setting is not blank and security appliances are not in use on the host, this is a finding.","fixText":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nClick \"Edit\". Select the \"Net.DVFilterBindIpAddress\" value and remove any incorrect addresses.\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name Net.DVFilterBindIpAddress | Set-AdvancedSetting -Value \"\"","ccis":["CCI-000366"]},{"vulnId":"V-258775","ruleId":"SV-258775r933386_rule","severity":"medium","ruleTitle":"The ESXi host must restrict the use of Virtual Guest Tagging (VGT) on standard switches.","description":"When a port group is set to VLAN 4095, the vSwitch passes all network frames to the attached virtual machines (VMs) without modifying the VLAN tags. In vSphere, this is referred to as VGT. The VM must process the VLAN information itself via an 802.1Q driver in the operating system.\n\nVLAN 4095 must only be implemented if the attached VMs have been specifically authorized and are capable of managing VLAN tags themselves. If VLAN 4095 is enabled inappropriately, it may cause denial of service or allow a VM to interact with traffic on an unauthorized VLAN.","checkContent":"This control addresses ESXi standard switches. Distributed switches are addressed in the vCenter STIG. If there is no standard switch on the ESXi host, this is not applicable.\n\nFrom the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> Networking >> Virtual Switches.\n\nFor each standard switch, review the \"VLAN ID\" on each port group and verify it is not set to \"4095\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VirtualPortGroup | Select Name, VLanID\n\nIf any port group is configured with VLAN 4095 and is not documented as a needed exception, this is a finding.","fixText":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> Networking >> Virtual Switches.\n\nFor each port group on a standard switch that is configured to a native VLAN, click the '...' button next to the port group.\n\nClick \"Edit Settings\". On the \"Properties\" tab, change the \"VLAN ID\" to an appropriate VLAN ID. Click \"OK\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VirtualPortGroup -Name \"portgroup name\" | Set-VirtualPortGroup -VLanId \"New VLAN#\"","ccis":["CCI-000366"]},{"vulnId":"V-258776","ruleId":"SV-258776r933389_rule","severity":"high","ruleTitle":"The ESXi host must have all security patches and updates installed.","description":"Installing software updates is a fundamental mitigation against the exploitation of publicly known vulnerabilities.","checkContent":"Determine the current version and build:\n\nFrom the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Summary. Note the version string next to \"Hypervisor:\".\n\nor\n\nFrom a Secure Shell (SSH) session connected to the ESXi host, or from the ESXi shell, run the following command:\n\n# vmware -v\n\nIf the ESXi host does not have the latest patches, this is a finding.\n\nIf the ESXi host is not on a supported release, this is a finding.\n\nThe latest ESXi versions and their build numbers can be found here: https://kb.vmware.com/s/article/2143832\n\nVMware also publishes advisories on security patches and offers a way to subscribe to email alerts for them.\n\nGo to: https://www.vmware.com/support/policies/security_response","fixText":"ESXi can be patched in multiple ways, and this fix text does not cover all methods.\n\nManual patching when image profiles are not used:\n\n- Download the latest \"offline bundle\" .zip update from vmware.com. Verify the hash.\n\n- Transfer the file to a datastore accessible by the ESXi host, local or remote.\n\n- Put the ESXi host into maintenance mode.\n\n- From an ESXi shell, run the following command:\n\nesxcli software vib update -d <path to offline patch bundle.zip>\n\nManual patching when image profiles are used:\n\nFrom an ESXi shell, run the following command:\n\n# esxcli software sources profile list -d /vmfs/volumes/<your datastore>/<bundle name.zip>\n\nNote the available profiles. The organization will usually want the one ending in \"-standard\".\n\n# esxcli software profile update -p <selected profile> -d /vmfs/volumes/<your datastore>/<bundle name.zip>\n\nThere will be little output during the update. Once complete, reboot the host for changes to take effect.","ccis":["CCI-000366"]},{"vulnId":"V-258777","ruleId":"SV-258777r933392_rule","severity":"medium","ruleTitle":"The ESXi host must not suppress warnings that the local or remote shell sessions are enabled.","description":"Warnings that local or remote shell sessions are enabled alert administrators to activity they may not be aware of and need to investigate.","checkContent":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nSelect the \"UserVars.SuppressShellWarning\" value and verify it is set to \"0\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name UserVars.SuppressShellWarning\n\nIf the \"UserVars.SuppressShellWarning\" setting is not set to \"0\", this is a finding.","fixText":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nClick \"Edit\". Select the \"UserVars.SuppressShellWarning\" value and configure it to \"0\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name UserVars.SuppressShellWarning | Set-AdvancedSetting -Value 0","ccis":["CCI-000366"]},{"vulnId":"V-258778","ruleId":"SV-258778r933395_rule","severity":"medium","ruleTitle":"The ESXi host must not suppress warnings about unmitigated hyperthreading vulnerabilities.","description":"The L1 Terminal Fault (L1TF) CPU vulnerabilities published in 2018 have patches and mitigations available in vSphere. However, there are performance impacts to these mitigations that require careful thought and planning from the system administrator before implementation. Until a mitigation is implemented, the UI warning about the lack of a mitigation must not be dismissed so the system administrator does not assume the vulnerability has been addressed.","checkContent":"From the vSphere Client go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nSelect the \"UserVars.SuppressHyperthreadWarning\" value and verify it is set to \"0\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name UserVars.SuppressHyperthreadWarning\n\nIf the \"UserVars.SuppressHyperthreadWarning\" setting is not set to \"0\", this is a finding.","fixText":"From the vSphere Client go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nClick \"Edit\". Select the \"UserVars.SuppressHyperthreadWarning\" value and configure it to \"0\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name UserVars.SuppressHyperthreadWarning | Set-AdvancedSetting -Value 0","ccis":["CCI-000366"]},{"vulnId":"V-258779","ruleId":"SV-258779r933398_rule","severity":"medium","ruleTitle":"The ESXi host must verify certificates for SSL syslog endpoints.","description":"When sending syslog data to a remote host, ESXi can be configured to use any combination of TCP, UDP, and SSL transports. When using SSL, the server certificate must be validated to ensure that the host is connecting to a valid syslog server.","checkContent":"If SSL is not used for a syslog target, this is not applicable.\n\nFrom the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nSelect the \"Syslog.global.logCheckSSLCerts\" value and verify it is set to \"true\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name Syslog.global.logCheckSSLCerts\n\nIf the \"Syslog.global.logCheckSSLCerts\" setting is not set to \"true\", this is a finding.","fixText":"To configure SSL syslog endpoint certificate checking, it must be turned on and the trusted certificate chain must be added to ESXi's trusted store.\n\nFrom the vSphere Client go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nClick \"Edit\". Select the \"Syslog.global.logCheckSSLCerts\" value and configure it to \"true\".\n\nCopy the PEM formatted trusted CA certificate so that is accessible to the host and append the contents to /etc/vmware/ssl/castore.pem by running the following command:\n\n# <path/to/cacert> >> /etc/vmware/ssl/castore.pem\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\nGet-VMHost | Get-AdvancedSetting -Name Syslog.global.logCheckSSLCerts | Set-AdvancedSetting -Value \"true\"\n\nCopy the PEM formatted trusted CA certificate so that is accessible to the host.\n\n$esxcli = Get-EsxCli -v2\n$arguments = $esxcli.system.security.certificatestore.add.CreateArgs()\n$arguments.filename = <path/to/cacert>\n$esxcli.system.security.certificatestore.add.Invoke($arguments)","ccis":["CCI-000366"]},{"vulnId":"V-258780","ruleId":"SV-258780r933401_rule","severity":"medium","ruleTitle":"The ESXi host must enable volatile key destruction.","description":"By default, pages allocated for virtual machines (VMs), userspace applications, and kernel threads are zeroed out at allocation time. ESXi will always ensure that no nonzero pages are exposed to VMs or userspace applications. While this prevents exposing cryptographic keys from VMs or userworlds to other clients, these keys can stay present in host memory for a long time if the memory is not reused.\n\nThe NIAP Virtualization Protection Profile and Server Virtualization Extended Package require that memory that may contain cryptographic keys be zeroed upon process exit.\n\nTo this end, a new configuration option, MemEagerZero, can be configured to enforce zeroing out userworld and guest memory pages when a userworld process or guest exits. For kernel threads, memory spaces holding keys are zeroed out as soon as the secret is no longer needed.","checkContent":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nSelect the \"Mem.MemEagerZero\" value and verify it is set to \"1\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name Mem.MemEagerZero\n\nIf the \"Mem.MemEagerZero\" setting is not set to \"1\", this is a finding.","fixText":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nClick \"Edit\". Select the \"Mem.MemEagerZero\" value and configure it to \"1\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name Mem.MemEagerZero | Set-AdvancedSetting -Value 1","ccis":["CCI-000366"]},{"vulnId":"V-258781","ruleId":"SV-258781r933404_rule","severity":"medium","ruleTitle":"The ESXi host must configure a session timeout for the vSphere API.","description":"The vSphere API (VIM) allows for remote, programmatic administration of the ESXi host. Authenticated API sessions are no different from a risk perspective than authenticated UI sessions and they need similar protections.\n\nOne of these protections is a basic inactivity timeout, after which the session will be invalidated and reauthentication will be required by the application accessing the API. This is set to 30 seconds by default but can be disabled, thus leaving API sessions open indefinitely. The 30 second default must be verified and maintained.","checkContent":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nSelect the \"Config.HostAgent.vmacore.soap.sessionTimeout\" value and verify it is set to \"30\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name Config.HostAgent.vmacore.soap.sessionTimeout\n\nIf the \"Config.HostAgent.vmacore.soap.sessionTimeout\" setting is not set to \"30\", this is a finding.","fixText":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nClick \"Edit\". Select the \"Config.HostAgent.vmacore.soap.sessionTimeout\" value and configure it to \"30\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name Config.HostAgent.vmacore.soap.sessionTimeout | Set-AdvancedSetting -Value 30","ccis":["CCI-000366"]},{"vulnId":"V-258782","ruleId":"SV-258782r933407_rule","severity":"medium","ruleTitle":"The ESXi host must be configured with an appropriate maximum password age.","description":"The older an ESXi local account password is, the larger the opportunity window is for attackers to guess, crack or reuse a previously cracked password. Rotating passwords on a regular basis is a fundamental security practice and one that ESXi supports.","checkContent":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nSelect the \"Security.PasswordMaxDays\" value and verify it is set to \"90\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name Security.PasswordMaxDays\n\nIf the \"Security.PasswordMaxDays\" setting is not set to \"90\", this is a finding.","fixText":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nClick \"Edit\". Select the \"Security.PasswordMaxDays\" value and configure it to \"90\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name Security.PasswordMaxDays | Set-AdvancedSetting -Value 90","ccis":["CCI-000366"]},{"vulnId":"V-258783","ruleId":"SV-258783r933410_rule","severity":"medium","ruleTitle":"The ESXi Common Information Model (CIM) service must be disabled.","description":"The CIM system provides an interface that enables hardware-level management from remote applications via a set of standard application programming interfaces (APIs). These APIs are consumed by external applications such as HP SIM or Dell OpenManage for agentless, remote hardware monitoring of the ESXi host.\n\nTo reduce attack surface area and following the minimum functionality principal, the CIM service must be disabled unless explicitly needed and approved.","checkContent":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Services.\n\nUnder \"Services\", locate the \"CIM Server\" service and verify it is \"Stopped\" and the \"Startup Policy\" is set to \"Start and stop manually\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-VMHostService | Where {$_.Label -eq \"CIM Server\"}\n\nIf the \"CIM Server\" service does not have a \"Policy\" of \"off\" or is running, this is a finding.","fixText":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Services.\n\nUnder \"Services\" select the \"CIM Server\" service and click the \"Stop\" button.\n\nClick \"Edit Startup policy...\" and select the \"Start and stop manually\" radio button. Click \"OK\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\nGet-VMHost | Get-VMHostService | Where {$_.Label -eq \"CIM Server\"} | Set-VMHostService -Policy Off\nGet-VMHost | Get-VMHostService | Where {$_.Label -eq \"CIM Server\"} | Stop-VMHostService","ccis":["CCI-000366"]},{"vulnId":"V-258784","ruleId":"SV-258784r933413_rule","severity":"medium","ruleTitle":"The ESXi host must use DOD-approved certificates.","description":"The default self-signed host certificate issued by the VMware Certificate Authority (VMCA) must be replaced with a DOD-approved certificate when the host will be accessed directly, such as during a virtual machine (VM) console connection.\n\nThe use of a DOD certificate on the host assures clients the service they are connecting to is legitimate and properly secured.","checkContent":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Certificate.\n\nIf the issuer is not a DOD-approved certificate authority, this is a finding.\n\nIf the host will never be accessed directly (virtual machine console connections bypass vCenter), this is not a finding.","fixText":"Join the ESXi host to vCenter before replacing the certificate.\n\nObtain a DOD-issued certificate and private key for the host following the requirements below:\n\nKey size: 2048 bits or more (PEM encoded)\n\nKey format: PEM\nVMware supports PKCS8 and PKCS1 (RSA keys)\nx509 version 3\n\nSubjectAltName must contain DNS Name=<machine_FQDN>\n\nCRT (Base-64) format\n\nContains the following Key Usages: Digital Signature, Non Repudiation, Key Encipherment\n\nStart time of one day before the current time\n\nCN (and SubjectAltName) set to the host name (or IP address) that the ESXi host has in the vCenter Server inventory\n\nFrom the vSphere Web Client, select the ESXi host's vCenter Server >> Configure >> System >> Advanced Settings.\n\nSelect the \"vpxd.certmgmt.mode\" value and ensure it is set to \"custom\".\n\nPut the host into maintenance mode.\n\nTemporarily enable Secure Shell (SSH) on the host. Use Secure Copy Protocol (SCP) to transfer the new certificate and key to /tmp. SSH to the host. Back up the existing certificate and key:\n\n# mv /etc/vmware/ssl/rui.crt /etc/vmware/ssl/rui.crt.bak\n# mv /etc/vmware/ssl/rui.key /etc/vmware/ssl/rui.key.bak\n\nCopy the new certificate and key to \"/etc/vmware/ssl/\" and rename them to \"rui.crt\" and \"rui.key\" respectively.\n\nRestart management agents to implement the new certificate:\n\n# services.sh restart","ccis":["CCI-000366"]},{"vulnId":"V-258785","ruleId":"SV-258785r933416_rule","severity":"medium","ruleTitle":"The ESXi host Secure Shell (SSH) daemon must disable port forwarding.","description":"While enabling Transmission Control Protocol (TCP) tunnels is a valuable function of sshd, this feature is not appropriate for use on the ESXi hypervisor.","checkContent":"From an ESXi shell, run the following command:\n\n# esxcli system ssh server config list -k allowtcpforwarding\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\n$esxcli = Get-EsxCli -v2\n$esxcli.system.ssh.server.config.list.invoke() | Where-Object {$_.Key -eq 'allowtcpforwarding'}\n\nExample result:\n\nallowtcpforwarding no\n\nIf \"allowtcpforwarding\" is not configured to \"no\", this is a finding.","fixText":"From an ESXi shell, run the following command:\n\n# esxcli system ssh server config set -k allowtcpforwarding -v no\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\n$esxcli = Get-EsxCli -v2\n$arguments = $esxcli.system.ssh.server.config.set.CreateArgs()\n$arguments.keyword = 'allowtcpforwarding'\n$arguments.value = 'no'\n$esxcli.system.ssh.server.config.set.Invoke($arguments)","ccis":["CCI-000366"]},{"vulnId":"V-258786","ruleId":"SV-258786r933419_rule","severity":"medium","ruleTitle":"The ESXi host OpenSLP service must be disabled.","description":"OpenSLP implements the Service Location Protocol to help CIM clients discover CIM servers over TCP 427. This service is not widely needed and has had vulnerabilities exposed in the past. To reduce attack surface area and following the minimum functionality principal, the OpenSLP service must be disabled unless explicitly needed and approved.\n\nNote: Disabling the OpenSLP service may affect monitoring and third-party systems that use the WBEM DTMF protocols.","checkContent":"From the vSphere Client go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Services.\n\nUnder \"Services\", locate the \"slpd\" service and verify it is \"Stopped\" and the \"Startup Policy\" is set to \"Start and stop manually\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-VMHostService | Where {$_.Label -eq \"slpd\"}\n\nIf the slpd service does not have a \"Policy\" of \"off\" or is running, this is a finding.","fixText":"From the vSphere Client go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Services.\n\nUnder \"Services\" select the \"slpd\" service and click the \"Stop\" button.\n\nClick \"Edit Startup policy...\" and select the \"Start and stop manually\" radio button. Click \"OK\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\nGet-VMHost | Get-VMHostService | Where {$_.Label -eq \"slpd\"} | Set-VMHostService -Policy Off\nGet-VMHost | Get-VMHostService | Where {$_.Label -eq \"slpd\"} | Stop-VMHostService","ccis":["CCI-000366"]},{"vulnId":"V-258787","ruleId":"SV-258787r933422_rule","severity":"medium","ruleTitle":"The ESXi host must enable audit logging.","description":"ESXi offers both local and remote audit recordkeeping to meet the requirements of the NIAP Virtualization Protection Profile and Server Virtualization Extended Package. Local records are stored on any accessible local or VMFS path. Remote records are sent to the global syslog servers configured elsewhere.\n\nTo operate in the NIAP validated state, ESXi must enable and properly configure this audit system. This system is disabled by default.\n\nNote: Audit records can be viewed locally via the \"/bin/viewAudit\" utility over SSH or at the ESXi shell.","checkContent":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nSelect the \"Syslog.global.auditRecord.storageEnable\" value and verify it is set to \"true\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name Syslog.global.auditRecord.storageEnable\n\nIf the \"Syslog.global.auditRecord.storageEnable\" setting is not set to \"true\", this is a finding.","fixText":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nClick \"Edit\". Select the \"Syslog.global.auditRecord.storageEnable\" value and configure it to \"true\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name Syslog.global.auditRecord.storageEnable | Set-AdvancedSetting -Value \"true\"","ccis":["CCI-000366"]},{"vulnId":"V-258788","ruleId":"SV-258788r933425_rule","severity":"medium","ruleTitle":"The ESXi host must off-load audit records via syslog.","description":"ESXi offers both local and remote audit recordkeeping to meet the requirements of the NIAP Virtualization Protection Profile and Server Virtualization Extended Package. Local records are stored on any accessible local or VMFS path. Remote records are sent to the global syslog servers configured elsewhere.\n\nTo operate in the NIAP-validated state, ESXi must enable and properly configure this audit system. This system is disabled by default.\n\nNote: Audit records can be viewed locally via the \"/bin/viewAudit\" utility over SSH or at the ESXi shell.","checkContent":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nSelect the \"Syslog.global.auditRecord.remoteEnable\" value and verify it is set to \"true\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name Syslog.global.auditRecord.remoteEnable\n\nIf the \"Syslog.global.auditRecord.remoteEnable\" setting is not set to \"true\", this is a finding.","fixText":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nClick \"Edit\". Select the \"Syslog.global.auditRecord.remoteEnable\" value and configure it to \"true\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name Syslog.global.auditRecord.remoteEnable | Set-AdvancedSetting -Value \"true\"","ccis":["CCI-001851"]},{"vulnId":"V-258789","ruleId":"SV-258789r933428_rule","severity":"medium","ruleTitle":"The ESXi host must enable strict x509 verification for SSL syslog endpoints.","description":"When sending syslog data to a remote host via SSL, the ESXi host is presented with the endpoint's SSL server certificate. In addition to trust verification, configured elsewhere, this \"x509-strict\" option performs additional validity checks on CA root certificates during verification.\n\nThese checks are generally not performed (CA roots are inherently trusted) and might cause incompatibilities with existing, misconfigured CA roots. The NIAP requirements in the Virtualization Protection Profile and Server Virtualization Extended Package, however, require even CA roots to pass validations.","checkContent":"If SSL is not used for a syslog target, this is not applicable.\n\nFrom the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nSelect the \"Syslog.global.certificate.strictX509Compliance\" value and verify it is set to \"true\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name Syslog.global.certificate.strictX509Compliance\n\nIf the \"Syslog.global.certificate.strictX509Compliance\" setting is not set to \"true\", this is a finding.","fixText":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nClick \"Edit\". Select the \"Syslog.global.certificate.strictX509Compliance\" value and configure it to \"true\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name Syslog.global.certificate.strictX509Compliance | Set-AdvancedSetting -Value \"true\"","ccis":["CCI-000366"]},{"vulnId":"V-258790","ruleId":"SV-258790r933431_rule","severity":"medium","ruleTitle":"The ESXi host must forward audit records containing information to establish what type of events occurred.","description":"Without establishing what types of events occurred, it would be difficult to establish, correlate, and investigate the events leading up to an outage or attack. \n\nAudit record content that may be necessary to satisfy this requirement includes, for example, time stamps, source and destination addresses, user/process/VM identifiers, event descriptions, success/fail indications, filenames involved, and access control or flow control rules invoked.\n\nAssociating event types with detected events in the ESXi audit logs provides a means of investigating an attack; recognizing resource utilization or capacity thresholds; or identifying an improperly configured host.","checkContent":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nSelect the \"Syslog.global.logLevel\" value and verify it is set to \"info\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name Syslog.global.logLevel\n\nIf the \"Syslog.global.logLevel\" setting is not set to \"info\", this is a finding.\n\nNote: Verbose logging level is acceptable for troubleshooting purposes.","fixText":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nClick \"Edit\". Select the \"Syslog.global.logLevel\" value and configure it to \"info\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name Syslog.global.logLevel | Set-AdvancedSetting -Value \"info\"","ccis":["CCI-000130"]},{"vulnId":"V-258791","ruleId":"SV-258791r933434_rule","severity":"medium","ruleTitle":"The ESXi host must not be configured to override virtual machine (VM) configurations.","description":"Each VM on an ESXi host runs in its own \"vmx\" process. Upon creation, a vmx process will look in two locations for configuration items, the ESXi host itself and the per-vm *.vmx file in the VM storage path on the datastore. The settings on the ESXi host are read first and take precedence over settings in the *.vmx file.\n\nThis can be a convenient way to set a setting in one place and have it apply to all VMs running on that host. The difficulty is in managing those settings and determining the effective state. Since managing per-VM vmx settings can be fully automated and customized while the ESXi setting cannot be easily queried, the ESXi configuration must not be used.","checkContent":"From an ESXi shell, run the following command:\n\n# stat -c \"%s\" /etc/vmware/settings\n\nExpected result:\n\n0\n\nIf the output does not match the expected result, this is a finding.","fixText":"From an ESXi shell, run the following command:\n\n# echo -n >/etc/vmware/settings","ccis":["CCI-000366"]},{"vulnId":"V-258792","ruleId":"SV-258792r933437_rule","severity":"medium","ruleTitle":"The ESXi host must not be configured to override virtual machine (VM) logger settings.","description":"Each VM on an ESXi host runs in its own \"vmx\" process. Upon creation, a vmx process will look in two locations for configuration items, the ESXi host itself and the per-vm *.vmx file in the VM storage path on the datastore. The settings on the ESXi host are read first and take precedence over settings in the *.vmx file.\n\nThis can be a convenient way to set a setting in one place and have it apply to all VMs running on that host. The difficulty is in managing those settings and determining the effective state. Since managing per-VM vmx settings can be fully automated and customized while the ESXi setting cannot be easily queried, the ESXi configuration must not be used.","checkContent":"From an ESXi shell, run the following command:\n\n# grep \"^vmx\\.log\" /etc/vmware/config\n\nIf the command produces any output, this is a finding.","fixText":"From an ESXi shell, run the following commands:\n\n# cp /etc/vmware/config /etc/vmware/config.bak\n# grep -v \"^vmx\\.log\" /etc/vmware/config.bak>/etc/vmware/config","ccis":["CCI-000366"]},{"vulnId":"V-258793","ruleId":"SV-258793r933440_rule","severity":"medium","ruleTitle":"The ESXi host must require TPM-based configuration encryption.","description":"An ESXi host's configuration consists of configuration files for each service that runs on the host. The configuration files typically reside in the /etc/ directory, but they can also reside in other namespaces. The configuration files contain run-time information about the state of the services. Over time, the default values in the configuration files might change, for example, when settings on the ESXi host are changed.\n\nA cron job backs up the ESXi configuration files periodically, when ESXi shuts down gracefully or on demand, and creates an archived configuration file in the boot bank. When ESXi reboots, it reads the archived configuration file and recreates the state that ESXi was in when the backup was taken.\n\nBefore vSphere 7.0 Update 2, the archived ESXi configuration file is not encrypted. In vSphere 7.0 Update 2 and later, the archived configuration file is encrypted. When the ESXi host is configured with a Trusted Platform Module (TPM), the TPM is used to \"seal\" the configuration to the host, providing a strong security guarantee and additional protection from offline attacks.\n\nConfiguration encryption uses the physical TPM when it is available and supported at install or upgrade time. If the TPM was added or enabled later, the ESXi host must be told to reconfigure to use the newly available TPM. Once the TPM configuration encryption is enabled, it cannot be disabled.","checkContent":"If the ESXi host does not have a compatible TPM, this finding is downgraded to a CAT III.\n\nFrom an ESXi shell, run the following command:\n\n# esxcli system settings encryption get\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\n$esxcli = Get-EsxCli -v2\n$esxcli.system.settings.encryption.get.invoke() | Select Mode\n\nExpected result:\n\nMode: TPM\n\nIf the \"Mode\" is not set to \"TPM\", this is a finding.","fixText":"Ensure the TPM 2.0 chip is enabled in the BIOS and the ESX UI does not show any errors about a present but unavailable TPM.\n\nThis setting cannot be configured until the TPM is properly enabled in firmware.\n\nFrom an ESXi shell, run the following command:\n\n# esxcli system settings encryption set --mode=TPM\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\n$esxcli = Get-EsxCli -v2\n$arguments = $esxcli.system.settings.encryption.set.CreateArgs()\n$arguments.mode = \"TPM\"\n$esxcli.system.settings.encryption.set.Invoke($arguments)\n\nEnter the host into maintenance mode and reboot for changes to take effect.","ccis":["CCI-000366"]},{"vulnId":"V-258794","ruleId":"SV-258794r933443_rule","severity":"medium","ruleTitle":"The ESXi host must configure the firewall to restrict access to services running on the host.","description":"Unrestricted access to services running on an ESXi host can expose a host to outside attacks and unauthorized access. Reduce the risk by configuring the ESXi firewall to only allow access from authorized networks.","checkContent":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Firewall.\n\nUnder the \"Allowed IP addresses\" column, review the allowed IPs for each service.\n\nCheck this for \"Incoming\" and \"Outgoing\" sections.\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-VMHostFirewallException | Where {$_.Enabled -eq $true} | Select Name,Enabled,@{N=\"AllIPEnabled\";E={$_.ExtensionData.AllowedHosts.AllIP}}\n\nIf for an enabled service \"Allow connections from any IP address\" is selected, this is a finding.","fixText":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Firewall.\n\nClick \"Edit...\". For each enabled service, uncheck the check box to \"Allow connections from any IP address\" and input the site-specific network(s) required.\n\nThe following example formats are acceptable:\n\n192.168.0.0/24\n192.168.1.2, 2001::1/64\nfd3e:29a6:0a81:e478::/64\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\n$esxcli = Get-EsxCli -v2\n#This disables the allow all rule for the target service. The sshServer service is the target in this example.\n$arguments = $esxcli.network.firewall.ruleset.set.CreateArgs()\n$arguments.rulesetid = \"sshServer\"\n$arguments.allowedall = $false\n$esxcli.network.firewall.ruleset.set.Invoke($arguments)\n\n#Next add the allowed IPs for the service. Note that executing the \"vSphere Web Client\" service this way may disable access but may be done through vCenter or through the console.\n$arguments = $esxcli.network.firewall.ruleset.allowedip.add.CreateArgs()\n$arguments.rulesetid = \"sshServer\"\n$arguments.ipaddress = \"10.0.0.0/8\"\n$esxcli.network.firewall.ruleset.allowedip.add.Invoke($arguments)\n\nThis must be done for each enabled service.","ccis":["CCI-000366"]},{"vulnId":"V-258795","ruleId":"SV-258795r933446_rule","severity":"medium","ruleTitle":"The ESXi host when using Host Profiles and/or Auto Deploy must use the vSphere Authentication Proxy to protect passwords when adding themselves to Active Directory.","description":"If a host is configured to join an Active Directory domain using Host Profiles and/or Auto Deploy, the Active Directory credentials are saved in the profile and are transmitted over the network.\n\nTo avoid having to save Active Directory credentials in the Host Profile and to avoid transmitting Active Directory credentials over the network, use the vSphere Authentication Proxy.","checkContent":"For environments that do not use vCenter server to manage ESXi, this is not applicable.\n\nIf the organization is not using Host Profiles to join Active Directory, this is not applicable.\n\nFrom the vSphere Client, go to Home >> Policies and Profiles >> Host Profiles.\n\nClick a Host Profile >> Configure >> Security and Services >> Security Settings >> Authentication Configuration >> Active Directory Configuration >> Join Domain Method.\n\nIf the method used to join hosts to a domain is not set to \"Use vSphere Authentication Proxy to add the host to domain\", this is a finding.\n\nor\n\nFrom a PowerCLI command prompt while connected to vCenter, run the following command:\n\nGet-VMHost | Select Name, ` @{N=\"HostProfile\";E={$_ | Get-VMHostProfile}}, ` @{N=\"JoinADEnabled\";E={($_ | Get-VmHostProfile).ExtensionData.Config.ApplyProfile.Authentication.ActiveDirectory.Enabled}}, ` @{N=\"JoinDomainMethod\";E={(($_ | Get-VMHostProfile).ExtensionData.Config.ApplyProfile.Authentication.ActiveDirectory | Select -ExpandProperty Policy | Where {$_.Id -eq \"JoinDomainMethodPolicy\"}).Policyoption.Id}}\n\nIf \"JoinADEnabled\" is \"True\" and \"JoinDomainMethod\" is not \"FixedCAMConfigOption\", this is a finding.","fixText":"From the vSphere Client, go to Home >> Policies and Profiles >> Host Profiles.\n\nClick a Host Profile >> Configure >> Security and Services >> Security Settings >> Authentication Configuration >> Active Directory Configuration.\n\nClick \"Edit Host Profile...\". Set the \"Join Domain Method\" to \"Use vSphere Authentication Proxy to add the host to domain\" and provide the IP address of the vSphere Authentication Proxy server.\n\nClick \"Save\".","ccis":["CCI-000366"]},{"vulnId":"V-258796","ruleId":"SV-258796r933449_rule","severity":"medium","ruleTitle":"The ESXi host must not use the default Active Directory ESX Admin group.","description":"When adding ESXi hosts to Active Directory, all user/group accounts assigned to the Active Directory group \"ESX Admins\" will have full administrative access to the host.\n\nIf this group is not controlled or known to the system administrators, it may be used for inappropriate access to the host. Therefore, the default group must be changed to a site-specific Active Directory group and membership must be severely restricted.","checkContent":"For systems that do not use Active Directory, this is not applicable.\n\nFrom the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nSelect the \"Config.HostAgent.plugins.hostsvc.esxAdminsGroup\" value and verify it is not set to \"ESX Admins\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name Config.HostAgent.plugins.hostsvc.esxAdminsGroup\n\nIf the \"Config.HostAgent.plugins.hostsvc.esxAdminsGroup\" setting is set to \"ESX Admins\", this is a finding.","fixText":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nClick \"Edit\". Select the \"Config.HostAgent.plugins.hostsvc.esxAdminsGroup\" key and configure its value to an appropriate Active Directory group other than \"ESX Admins\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name Config.HostAgent.plugins.hostsvc.esxAdminsGroup | Set-AdvancedSetting -Value \"<site specific AD group>\"\n\nNote: Changing the group name does not remove the permissions of the previous group.","ccis":["CCI-000366"]},{"vulnId":"V-258797","ruleId":"SV-258797r933452_rule","severity":"medium","ruleTitle":"The ESXi host must configure a persistent log location for all locally stored logs.","description":"ESXi can be configured to store log files on an in-memory file system. This occurs when the host's \"/scratch\" directory is linked to \"/tmp/scratch\". When this is done, only a single day's worth of logs are stored at any time. In addition, log files will be reinitialized upon each reboot.\n\nThis presents a security risk as user activity logged on the host is only stored temporarily and will not persist across reboots. This can also complicate auditing and make it harder to monitor events and diagnose issues. ESXi host logging should always be configured to a persistent datastore.\n\nNote: Scratch space is configured automatically during installation or first boot of an ESXi host and does not usually need to be configured manually.\n\nIf ESXi is installed on an SD card or USB device, a persistent log location may not be configured upon install as normal.","checkContent":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nSelect the \"Syslog.global.logDir\" value and verify it is set to a persistent location.\n\nIf the value of the setting is \"[] /scratch/logs\", verify the advanced setting \"ScratchConfig.CurrentScratchLocation\" is not set to \"/tmp/scratch\". This is a nonpersistent location.\n\nIf \"Syslog.global.logDir\" is not configured to a persistent location, this is a finding.\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\n$esxcli = Get-EsxCli -v2\n$esxcli.system.syslog.config.get.Invoke() | Select LocalLogOutput,LocalLogOutputIsPersistent\n\nIf the \"LocalLogOutputIsPersistent\" value is not true, this is a finding.","fixText":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nClick \"Edit\". Select the \"Syslog.global.logDir\" value and set it to a known persistent location.\n\nAn example is shown below, where 51dda02d-fade5016-8a08-005056171889 is the UUID of the target datastore:\n\n/vmfs/volumes/51dda02d-fade5016-8a08-005056171889\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name Syslog.global.logDir | Set-AdvancedSetting -Value \"New Log Location\"","ccis":["CCI-001849"]},{"vulnId":"V-258798","ruleId":"SV-258798r933455_rule","severity":"medium","ruleTitle":"The ESXi host must enforce the exclusive running of executables from approved VIBs.","description":"The \"execInstalledOnly\" advanced ESXi boot option, when set to TRUE, guarantees that the VMkernel executes only those binaries that have been packaged as part of a signed VIB. While this option is effective on its own, it can be further enhanced by telling the Secure Boot to check with the TPM to make sure that the boot process does not proceed unless this setting is enabled. This further protects against malicious offline changes to ESXi configuration to disable the \"execInstalledOnly\" option.","checkContent":"If the ESXi host does not have a compatible TPM, this finding is downgraded to a CAT III.\n\nFrom the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nSelect the \"VMkernel.Boot.execInstalledOnly\" value and verify that it is \"true\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name VMkernel.Boot.execInstalledOnly\n\nIf the \"VMkernel.Boot.execInstalledOnly\" setting is not \"true\", this is a finding.","fixText":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Advanced System Settings.\n\nClick \"Edit\". Select the \"VMkernel.Boot.execInstalledOnly\" value and configure it to \"true\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VMHost | Get-AdvancedSetting -Name VMkernel.Boot.execInstalledOnly | Set-AdvancedSetting -Value True","ccis":["CCI-000366"]},{"vulnId":"V-258799","ruleId":"SV-258799r933458_rule","severity":"medium","ruleTitle":"The ESXi host must use sufficient entropy for cryptographic operations.","description":"Starting in vSphere 8.0, the ESXi Entropy implementation supports the FIPS 140-3 and EAL4 certifications. Kernel boot options control which entropy sources to activate on an ESXi host.\n\nIn computing, the term \"entropy\" refers to random characters and data that are collected for use in cryptography, such as generating encryption keys to secure data transmitted over a network. Entropy is required by security for generating keys and communicating securely over the network. Entropy is often collected from a variety of sources on a system.\n\nFIPS entropy handling is the default behavior if the following conditions are true:\n\n-The hardware supports RDSEED.\n-The disableHwrng VMkernel boot option is not present or is FALSE.\n-The entropySources VMkernel boot option is not present or is 0 (zero).","checkContent":"From an ESXi shell, run the following commands:\n\n# esxcli system settings kernel list -o disableHwrng\n# esxcli system settings kernel list -o entropySources\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\n$esxcli = Get-EsxCli -v2\n$esxcli.system.settings.kernel.list.invoke() | Where {$_.Name -eq \"disableHwrng\" -or $_.Name -eq \"entropySources\"}\n\nIf \"disableHwrng\" is not set to \"false\", this is a finding.\nIf \"entropySources\" is not set to \"0\", this is a finding.","fixText":"From an ESXi shell, run the following commands:\n\n# esxcli system settings kernel set -s disableHwrng -v FALSE\n# esxcli system settings kernel set -s entropySources -v 0\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\n$esxcli = Get-EsxCli -v2\n$arguments = $esxcli.system.settings.kernel.set.CreateArgs()\n$arguments.setting = \"disableHwrng\"\n$arguments.value = \"FALSE\"\n$esxcli.system.settings.kernel.set.invoke($arguments)\n$arguments.setting = \"entropySources\"\n$arguments.value = \"0\"\n$esxcli.system.settings.kernel.set.invoke($arguments)\n\nReboot the ESXi host after updating entropy settings.","ccis":["CCI-000366"]},{"vulnId":"V-258800","ruleId":"SV-258800r933461_rule","severity":"medium","ruleTitle":"The ESXi host must not enable log filtering.","description":"The log filtering capability allows users to modify the logging policy of the syslog service that is running on an ESXi host. Users can create log filters to reduce the number of repetitive entries in the ESXi logs and to deny specific log events entirely.\n\nSetting a limit to the amount of logging information restricts the ability to detect and respond to potential security issues or system failures properly.","checkContent":"From an ESXi shell, run the following command:\n\n# esxcli system syslog config logfilter get\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\n$esxcli = Get-EsxCli -v2\n$esxcli.system.syslog.config.logfilter.get.invoke()\n\nIf \"LogFilteringEnabled\" is not set to \"false\", this is a finding.","fixText":"From an ESXi shell, run the following command:\n\n# esxcli system syslog config logfilter set --log-filtering-enabled=false\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\n$esxcli = Get-EsxCli -v2\n$arguments = $esxcli.system.syslog.config.logfilter.set.CreateArgs()\n$arguments.logfilteringenabled = $false\n$esxcli.system.syslog.config.logfilter.set.invoke($arguments)","ccis":["CCI-000366"]}]}