{"stig":{"title":"VMware vSphere 7.0 ESXi Security Technical Implementation Guide","version":"1","release":"4"},"checks":[{"vulnId":"V-256375","ruleId":"SV-256375r958398_rule","severity":"medium","ruleTitle":"Access to the ESXi host must be limited by enabling 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.\n\nSatisfies: SRG-OS-000027-VMM-000080, SRG-OS-000123-VMM-000620","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...\". Select 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","CCI-001682"]},{"vulnId":"V-256376","ruleId":"SV-256376r959010_rule","severity":"medium","ruleTitle":"The ESXi host must verify the DCUI.Access list.","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-256377","ruleId":"SV-256377r959010_rule","severity":"medium","ruleTitle":"The ESXi host must verify the exception users list for lockdown mode.","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-256378","ruleId":"SV-256378r958406_rule","severity":"medium","ruleTitle":"Remote logging for ESXi hosts must be configured.","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-000032-VMM-000130, SRG-OS-000342-VMM-001230, SRG-OS-000479-VMM-001990, SRG-OS-000059-VMM-000280, SRG-OS-000058-VMM-000270, SRG-OS-000051-VMM-000230","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\nFollow the conventions shown below:\n\nudp://<IP/FQDN>:514\ntcp://<IP/FQDN>:514\nssl://<IP/FQDN>:1514\n\nMultiple servers can 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 \"<syslog server hostname>\"","ccis":["CCI-000067","CCI-000154","CCI-000163","CCI-000164","CCI-001851"]},{"vulnId":"V-256379","ruleId":"SV-256379r958388_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-256380","ruleId":"SV-256380r958736_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 \"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\n\nIf the \"Security.AccountUnlockTime\" setting is set to a value other than \"900\", 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-256381","ruleId":"SV-256381r958390_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":"Failure to display the DOD logon banner prior to a logon attempt will negate legal proceedings resulting from unauthorized access to system resources.\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 DOD logon banner below.\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\nBanner:\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\nIf the \"Annotations.WelcomeMessage\" setting is not set to the specified 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. Click \"Edit\".\n\nSelect 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-256382","ruleId":"SV-256382r958390_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":"Failure to display the DOD logon banner prior to a logon attempt will negate legal proceedings resulting from unauthorized access to system resources.","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 is set to the DOD logon banner below.\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 (/etc/issue file) does not contain the logon banner exactly as shown below, this is a finding.\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.\"","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 \"<insert logon banner>\"","ccis":["CCI-000048"]},{"vulnId":"V-256383","ruleId":"SV-256383r958390_rule","severity":"medium","ruleTitle":"The ESXi host SSH daemon must be configured with the DOD logon banner.","description":"The warning message reinforces policy awareness during the logon process and facilitates possible legal action against attackers. Alternatively, systems whose ownership should not be obvious should ensure use of a banner that does not provide easy attribution.","checkContent":"From an ESXi shell, run the following command:\n\n# /usr/lib/vmware/openssh/bin/sshd -T|grep banner\n\nExpected result:\n\nbanner /etc/issue\n\nIf the output does not match the expected result, this is a finding.","fixText":"From an ESXi shell, add or correct the following line in \"/etc/ssh/sshd_config\":\n\nBanner /etc/issue","ccis":["CCI-000048"]},{"vulnId":"V-256384","ruleId":"SV-256384r958408_rule","severity":"medium","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":"OpenSSH on the ESXi host ships with a FIPS 140-2 validated cryptographic module that is enabled by default. For backward compatibility reasons, this can be disabled so this setting can 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 output does not match the expected result, 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-256385","ruleId":"SV-256385r984206_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# /usr/lib/vmware/openssh/bin/sshd -T|grep ignorerhosts\n\nExpected result:\n\nignorerhosts yes\n\nIf the output does not match the expected result, this is a finding.","fixText":"From an ESXi shell, add or correct the following line in \"/etc/ssh/sshd_config\":\n\nIgnoreRhosts yes","ccis":["CCI-000767"]},{"vulnId":"V-256386","ruleId":"SV-256386r959010_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 because 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# /usr/lib/vmware/openssh/bin/sshd -T|grep hostbasedauthentication\n\nExpected result:\n\nhostbasedauthentication no\n\nIf the output does not match the expected result, this is a finding.","fixText":"From an ESXi shell, add or correct the following line in \"/etc/ssh/sshd_config\":\n\nHostbasedAuthentication no","ccis":["CCI-000366"]},{"vulnId":"V-256387","ruleId":"SV-256387r959010_rule","severity":"low","ruleTitle":"The ESXi host Secure Shell (SSH) daemon must not allow authentication using an empty password.","description":"Configuring this setting for the SSH daemon provides additional assurance that remote logon via SSH will require a password, even in the event of misconfiguration elsewhere.","checkContent":"From an ESXi shell, run the following command:\n\n# /usr/lib/vmware/openssh/bin/sshd -T|grep permitemptypasswords\n\nExpected result:\n\npermitemptypasswords no\n\nIf the output does not match the expected result, this is a finding.","fixText":"From an ESXi shell, add or correct the following line in \"/etc/ssh/sshd_config\":\n\nPermitEmptyPasswords no","ccis":["CCI-000366"]},{"vulnId":"V-256388","ruleId":"SV-256388r959010_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# /usr/lib/vmware/openssh/bin/sshd -T|grep permituserenvironment\n\nExpected result:\n\npermituserenvironment no\n\nIf the output does not match the expected result, this is a finding.","fixText":"From an ESXi shell, add or correct the following line in \"/etc/ssh/sshd_config\":\n\nPermitUserEnvironment no","ccis":["CCI-000366"]},{"vulnId":"V-256389","ruleId":"SV-256389r959010_rule","severity":"medium","ruleTitle":"The ESXi host Secure Shell (SSH) daemon must perform strict mode checking of home directory configuration files.","description":"If other users have access to modify user-specific SSH configuration files, they may be able to log on the system as another user.","checkContent":"From an ESXi shell, run the following command:\n\n# /usr/lib/vmware/openssh/bin/sshd -T|grep strictmodes\n\nExpected result:\n\nstrictmodes yes\n\nIf the output does not match the expected result, this is a finding.","fixText":"From an ESXi shell, add or correct the following line in \"/etc/ssh/sshd_config\":\n\nStrictModes yes","ccis":["CCI-000366"]},{"vulnId":"V-256390","ruleId":"SV-256390r959010_rule","severity":"medium","ruleTitle":"The ESXi host Secure Shell (SSH) daemon must not allow compression or must only allow compression after successful authentication.","description":"If compression is allowed in an SSH connection prior to authentication, vulnerabilities in the compression software could result in compromise of the system from an unauthenticated connection, potentially with root privileges.","checkContent":"From an ESXi shell, run the following command:\n\n# /usr/lib/vmware/openssh/bin/sshd -T|grep compression\n\nExpected result:\n\ncompression no\n\nIf the output does not match the expected result, this is a finding.","fixText":"From an ESXi shell, add or correct the following line in \"/etc/ssh/sshd_config\":\n\nCompression no","ccis":["CCI-000366"]},{"vulnId":"V-256391","ruleId":"SV-256391r959010_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# /usr/lib/vmware/openssh/bin/sshd -T|grep gatewayports\n\nExpected result:\n\ngatewayports no\n\nIf the output does not match the expected result, this is a finding.","fixText":"From an ESXi shell, add or correct the following line in \"/etc/ssh/sshd_config\":\n\nGatewayPorts no","ccis":["CCI-000366"]},{"vulnId":"V-256392","ruleId":"SV-256392r959010_rule","severity":"medium","ruleTitle":"The ESXi host Secure Shell (SSH) daemon must be configured to not allow X11 forwarding.","description":"X11 forwarding over SSH allows for the secure remote execution of X11-based applications. This feature can increase the attack surface of an SSH connection.","checkContent":"From an ESXi shell, run the following command:\n\n# /usr/lib/vmware/openssh/bin/sshd -T|grep x11forwarding\n\nExpected result:\n\nx11forwarding no\n\nIf the output does not match the expected result, this is a finding.","fixText":"From an ESXi shell, add or correct the following line in \"/etc/ssh/sshd_config\":\n\nX11Forwarding no","ccis":["CCI-000366"]},{"vulnId":"V-256393","ruleId":"SV-256393r959010_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# /usr/lib/vmware/openssh/bin/sshd -T|grep permittunnel\n\nExpected result:\n\npermittunnel no\n\nIf the output does not match the expected result, this is a finding.","fixText":"From an ESXi shell, add or correct the following line in \"/etc/ssh/sshd_config\":\n\nPermitTunnel no","ccis":["CCI-000366"]},{"vulnId":"V-256394","ruleId":"SV-256394r959010_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# /usr/lib/vmware/openssh/bin/sshd -T|grep clientalivecountmax\n\nExpected result:\n\nclientalivecountmax 3\n\nIf the output does not match the expected result, this is a finding.","fixText":"From an ESXi shell, add or correct the following line in \"/etc/ssh/sshd_config\":\n\nClientAliveCountMax 3","ccis":["CCI-000366"]},{"vulnId":"V-256395","ruleId":"SV-256395r959010_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# /usr/lib/vmware/openssh/bin/sshd -T|grep clientaliveinterval\n\nExpected result:\n\nclientaliveinterval 200\n\nIf the output does not match the expected result, this is a finding.","fixText":"From an ESXi shell, add or correct the following line in \"/etc/ssh/sshd_config\":\n\nClientAliveInterval 200","ccis":["CCI-000366"]},{"vulnId":"V-256396","ruleId":"SV-256396r958412_rule","severity":"medium","ruleTitle":"The ESXi host 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. Click \"Edit\".\n\nSelect 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-256397","ruleId":"SV-256397r984191_rule","severity":"medium","ruleTitle":"The ESXi host must be configured with a sufficiently complex password 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-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 not set to \"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-256398","ruleId":"SV-256398r984204_rule","severity":"medium","ruleTitle":"The ESXi host must prohibit the reuse of passwords within five iterations.","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\".\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 not set to \"5\" 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-256399","ruleId":"SV-256399r958478_rule","severity":"medium","ruleTitle":"The ESXi host must disable 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. Click \"Edit\".\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-256400","ruleId":"SV-256400r958478_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-256401","ruleId":"SV-256401r958478_rule","severity":"medium","ruleTitle":"The ESXi host must disable ESXi Shell unless needed for diagnostics or troubleshooting.","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-256402","ruleId":"SV-256402r958482_rule","severity":"low","ruleTitle":"The ESXi host must use Active Directory for local user authentication.","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","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-001941","CCI-001942"]},{"vulnId":"V-256403","ruleId":"SV-256403r958482_rule","severity":"medium","ruleTitle":"ESXi hosts 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":"If 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-000764"]},{"vulnId":"V-256404","ruleId":"SV-256404r958482_rule","severity":"medium","ruleTitle":"Active Directory ESX Admin group membership must not be used when adding ESXi hosts to Active Directory.","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\" key 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 <AD Group>","ccis":["CCI-000764"]},{"vulnId":"V-256405","ruleId":"SV-256405r970703_rule","severity":"medium","ruleTitle":"The ESXi host must set a timeout to automatically disable idle shell sessions after two 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 \"120\" (two minutes).\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 not set to \"120\", 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 \"120\".\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 120","ccis":["CCI-001133","CCI-002361"]},{"vulnId":"V-256406","ruleId":"SV-256406r970703_rule","severity":"medium","ruleTitle":"The ESXi host must terminate 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 \"600\" (10 minutes).\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 not set to \"600\", 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 commands:\n\nGet-VMHost | Get-AdvancedSetting -Name UserVars.ESXiShellTimeOut | Set-AdvancedSetting -Value 600","ccis":["CCI-001133"]},{"vulnId":"V-256407","ruleId":"SV-256407r970703_rule","severity":"medium","ruleTitle":"The ESXi host must log out of the console UI after two 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 \"120\" (two minutes).\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 not set to \"120\", 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 \"120\".\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 120","ccis":["CCI-001133"]},{"vulnId":"V-256408","ruleId":"SV-256408r958752_rule","severity":"medium","ruleTitle":"The ESXi host must enable 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-256409","ruleId":"SV-256409r1038976_rule","severity":"medium","ruleTitle":"The ESXi host must configure NTP time synchronization.","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\nUnder \"Current Time Configuration\", verify \"Time Synchronization\" is set to \"Network Time Protocol\". \n\nUnder \"Network Time Protocol\", verify the \"NTP Servers\" are authorized DOD time sources.\n\nIf the ESXi host is not configured to pull time from authoritative DOD time sources, this is a finding.\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\"}\n\nIf the NTP service is not configured with authoritative DOD time sources or the service does not have a \"Policy\" of \"on\" or is stopped, this is a finding.","fixText":"From the vSphere Client, go to Hosts and Clusters.\n\nSelect the ESXi Host >> Configure >> System >> Time Configuration.\n\nUnder \"Network Time Protocol\", click \"Edit...\". Ensure the \"NTP Servers\" are authorized DOD time sources. \n\nEnsure the \"NTP Service Startup Policy\" is set to \"Start and stop with host\". \n\nEnsure the \"Enable\" checkbox, in the upper left, is checked. Click \"OK\".\n\nClick \"Edit\" to configure the NTP service to start and stop with the host and with authoritative DOD time sources.\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","ccis":["CCI-001891","CCI-002046"]},{"vulnId":"V-256410","ruleId":"SV-256410r984242_rule","severity":"high","ruleTitle":"The ESXi Image Profile and vSphere Installation Bundle (VIB) acceptance levels 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, SRG-OS-000404-VMM-001650","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, select the ESXi Host and go to 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","CCI-002475"]},{"vulnId":"V-256411","ruleId":"SV-256411r958908_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 not routed to anything but 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.\n\nReview the VLAN associated with the 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\nAs an 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, and then go to Configure >> Settings >> Edit >> VLAN. \n\nChange the \"VLAN Type\" to \"VLAN\" and change the \"VLAN ID\" to a network allocated and dedicated to vMotion traffic exclusively.","ccis":["CCI-002418"]},{"vulnId":"V-256412","ruleId":"SV-256412r958908_rule","severity":"medium","ruleTitle":"The ESXi host must protect the confidentiality and integrity of transmitted information by protecting 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, select the ESXi host and go to Configure >> Networking >> VMkernel adapters.\n\nSelect each VMkernel adapter that is \"Enabled\" for management traffic and, in the bottom pane, view the \"Enabled services\".\n\nIf any services other than \"Management\" are enabled on the Management VMkernel adapter, this is a finding.\n\nFrom the vSphere Client, select the ESXi host and go to Configure >> Networking >> VMkernel adapters.\n\nReview the VLAN associated with each VMkernel that is \"Enabled\" for management traffic. Verify with the system administrator that they are dedicated for that purpose and are logically separated from other functions.\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":"From 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 \"Management\". Click \"OK\".\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 contains the Management VMkernel and click the \"...\" button next to the name. Click \"Edit Settings\".\n\nOn the \"Properties\" tab, change the \"VLAN ID\" to one dedicated to Management traffic. Click \"OK\".","ccis":["CCI-002418"]},{"vulnId":"V-256413","ruleId":"SV-256413r958908_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, select the ESXi host and go to Configure >> Networking >> VMkernel adapters.\n\nSelect each IP-based storage VMkernel adapter and view the enabled services.\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\nFrom the vSphere Client, select the ESXi host and go to Configure >> Networking >> VMkernel adapters.\n\nReview the VLANs associated with any IP-based storage VMkernels and verify they are dedicated for that purpose and are logically separated from other functions.\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 >> select 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-256414","ruleId":"SV-256414r959010_rule","severity":"medium","ruleTitle":"Simple Network Management Protocol (SNMP) must be configured properly on the ESXi host.","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 read-only communities are set to \"public\", this is a finding.\n\nIf SNMP is enabled and is not using v3 targets, 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\n\nTo configure SNMP for v3 targets, use the \"esxcli system snmp set\" command set locally on the host or remotely via PowerCLI.","ccis":["CCI-000366"]},{"vulnId":"V-256415","ruleId":"SV-256415r959010_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-000366"]},{"vulnId":"V-256416","ruleId":"SV-256416r959010_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-256417","ruleId":"SV-256417r959010_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. We are targeting the sshServer service 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 doing 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-256418","ruleId":"SV-256418r959010_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.\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-256419","ruleId":"SV-256419r959010_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-256420","ruleId":"SV-256420r959010_rule","severity":"medium","ruleTitle":"All port groups on standard switches must be configured 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. Click View Settings >> Policies tab. \n\nVerify that \"Forged transmits\" is set to \"Reject\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\nGet-VirtualSwitch -Standard | Get-SecurityPolicy\nGet-VirtualPortGroup -Standard | Get-SecurityPolicy\n\nIf the \"Forged Transmits\" policy is set to \"Accept\" (or \"true\", via PowerCLI), 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 the \"...\" button next to each port group. Click Edit Settings >> Security tab. \n\nSet \"Forged transmits\" to \"Reject\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\nGet-VirtualSwitch -Standard | Get-SecurityPolicy | Set-SecurityPolicy -ForgedTransmits $false\nGet-VirtualPortGroup -Standard | Get-SecurityPolicy | Set-SecurityPolicy -ForgedTransmitsInherited $true","ccis":["CCI-000366"]},{"vulnId":"V-256421","ruleId":"SV-256421r959010_rule","severity":"high","ruleTitle":"All port groups on standard switches must be configured to reject guest 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":"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. Click View Settings >> Policies tab. \n\nVerify \"MAC Address Changes\" is set to \"Reject\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\nGet-VirtualSwitch -Standard | Get-SecurityPolicy\nGet-VirtualPortGroup -Standard | Get-SecurityPolicy\n\nIf the \"MAC Address Changes\" policy is set to \"Accept\" (or \"true\", via PowerCLI), 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 the \"...\" button next to each port group. Click Edit Settings >> Security tab. \n\nSet \"MAC Address Changes\" to \"Reject\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\nGet-VirtualSwitch -Standard | Get-SecurityPolicy | Set-SecurityPolicy -MacChanges $false\nGet-VirtualPortGroup -Standard | Get-SecurityPolicy | Set-SecurityPolicy -MacChangesInherited $true","ccis":["CCI-000366"]},{"vulnId":"V-256422","ruleId":"SV-256422r959010_rule","severity":"medium","ruleTitle":"All port groups on standard switches must be configured to reject guest 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":"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. Click View Settings >> Policies tab. \n\nVerify \"Promiscuous Mode\" is set to \"Reject\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\nGet-VirtualSwitch -Standard | Get-SecurityPolicy\nGet-VirtualPortGroup -Standard | Get-SecurityPolicy\n\nIf the \"Promiscuous Mode\" policy is set to \"Accept\" (or \"true\", via PowerCLI), 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 the \"...\" button next to each port group. Click Edit Settings >> Security tab. \n\nSet \"Promiscuous Mode\" to \"Reject\".\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following commands:\n\nGet-VirtualSwitch -Standard | Get-SecurityPolicy | Set-SecurityPolicy -AllowPromiscuous $false\nGet-VirtualPortGroup -Standard | Get-SecurityPolicy | Set-SecurityPolicy -AllowPromiscuousInherited $true","ccis":["CCI-000366"]},{"vulnId":"V-256423","ruleId":"SV-256423r959010_rule","severity":"medium","ruleTitle":"Use of the dvFilter network application programming interfaces (APIs) must be restricted.","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\" 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-256424","ruleId":"SV-256424r959010_rule","severity":"medium","ruleTitle":"All port groups on standard switches must be configured to a value other than that of the native virtual local area network (VLAN).","description":"ESXi does not use the concept of native VLAN. Frames with a VLAN specified in the port group will have a tag, but frames with VLAN not specified in the port group are not tagged and therefore will belong to the native VLAN of the physical switch.\n\nFor example, frames on VLAN 1 from a Cisco physical switch will be untagged, because this is considered as the native VLAN. However, frames from ESXi specified as VLAN 1 will be tagged with a \"1\"; therefore, traffic from ESXi that is destined for the native VLAN will not be routed correctly (because it is tagged with a \"1\" instead of being untagged), and traffic from the physical switch coming from the native VLAN will not be visible (because it is not tagged).\n\nIf the ESXi virtual switch port group uses the native VLAN ID, traffic from those virtual machines (VMs) will not be visible to the native VLAN on the switch because the switch is expecting untagged traffic.","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\nFor each standard switch, review the \"VLAN ID\" on each port group. Verify they are not set to the native VLAN ID of the attached physical switch.\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VirtualPortGroup -Standard | Select Name, VLanId\n\nIf any port group is configured with the native VLAN of the attached physical switch, 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 a non-native VLAN and 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-256425","ruleId":"SV-256425r959010_rule","severity":"medium","ruleTitle":"All port groups on standard switches must not be configured to virtual local area network (VLAN) 4095 unless Virtual Guest Tagging (VGT) is required.","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":"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\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 -Standard | 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 and 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-256426","ruleId":"SV-256426r959010_rule","severity":"medium","ruleTitle":"All port groups on standard switches must not be configured to virtual local area network (VLAN) values reserved by upstream physical switches.","description":"Certain physical switches reserve certain VLAN IDs for internal purposes and often disallow traffic configured to these values. For example, Cisco Catalyst switches typically reserve VLANs 1001 to 1024 and 4094, while Nexus switches typically reserve 3968 to 4094. Check the documentation for the specific switch in use. Using a reserved VLAN might result in a denial of service on the network.","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\nFor each standard switch, review the \"VLAN ID\" on each port group and verify it is not set to a reserved VLAN ID.\n\nor\n\nFrom a PowerCLI command prompt while connected to the ESXi host, run the following command:\n\nGet-VirtualPortGroup -Standard | Select Name, VLanId\n\nIf any port group is configured with a reserved VLAN ID, 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 reserved 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 and 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-256427","ruleId":"SV-256427r959010_rule","severity":"medium","ruleTitle":"The ESXi host must not provide root/administrator-level access to Common Information Model (CIM)-based hardware monitoring tools or other third-party applications.","description":"The CIM system provides an interface that enables hardware-level management from remote applications via a set of standard application programming interfaces (APIs). \n\nIn environments that implement CIM hardware monitoring, create a limited-privilege, read-only service account for CIM and place this user in the Exception Users list. When CIM write access is required, create a new role with only the \"Host.CIM.Interaction\" permission and apply that role to the CIM service account.","checkContent":"If CIM monitoring is not implemented, this is not applicable.\n\nFrom the Host Client, select the ESXi host, right-click, and go to \"Permissions\".\n\nVerify the CIM service account is assigned the \"Read-only\" role or a custom role as described in the discussion.\n\nIf there is no dedicated CIM service account, this is a finding.\n\nIf the CIM service account has more permissions than necessary as noted in the discussion, this is a finding.","fixText":"If write access is required, create a new role for the CIM service account:\n\nFrom the Host Client, go to Manage >> Security & Users.\n\nSelect \"Roles\" and click \"Add role\".\n\nProvide a name for the new role and select Host >> Cim >> Ciminteraction and click \"Add\".\n\nAdd a CIM service account:\n\nFrom the Host Client, go to Manage >> Security & Users.\n\nSelect \"Users\" and click \"Add user\".\n\nProvide a name, description, and password for the new user and click \"Add\".\n\nAssign the CIM service account permissions to the host with the new role:\n\nFrom the Host Client, select the ESXi host, right-click, and go to \"Permissions\".\n\nClick \"Add User\", select the CIM service account from the drop-down list, and select either \"Read-only\" or the role just created. Click \"Add User\".","ccis":["CCI-000366"]},{"vulnId":"V-256428","ruleId":"SV-256428r959010_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\nBecause ESXi hosts should never be able to touch the internet, manually compare the current ESXi version and patch level to the latest available on vmware.com:\n\nhttps://kb.vmware.com/s/article/2143832\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\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-256429","ruleId":"SV-256429r959010_rule","severity":"high","ruleTitle":"The ESXi host must exclusively enable Transport Layer Security (TLS) 1.2 for all endpoints.","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-000480-VMM-002000, SRG-OS-000425-VMM-001710","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 the following:\n\ntlsv1,tlsv1.1,sslv3\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 not set to \"tlsv1,tlsv1.1,sslv3\" or the setting does not exist, 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\nSelect the \"UserVars.ESXiVPsDisabledProtocols\" value and set it to the following:\n\ntlsv1,tlsv1.1,sslv3\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 \"tlsv1,tlsv1.1,sslv3\"\n\nReboot the host for changes to take effect.","ccis":["CCI-002420"]},{"vulnId":"V-256430","ruleId":"SV-256430r959010_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 the output 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\nIf the discrepancies cannot be rectified, this finding is downgraded to a CAT III.","ccis":["CCI-000366"]},{"vulnId":"V-256431","ruleId":"SV-256431r1067573_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, or other AO-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-256432","ruleId":"SV-256432r959010_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\" or the setting does not exist, 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 set 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-256433","ruleId":"SV-256433r959010_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 SA 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 \"UserVars.SuppressHyperthreadWarning\" is not set to \"0\" or the setting does not exist, 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 set 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-256434","ruleId":"SV-256434r959010_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# /usr/lib/vmware/openssh/bin/sshd -T|grep allowtcpforwarding\n\nExpected result:\n\nallowtcpforwarding no\n\nIf the output does not match the expected result, this is a finding.","fixText":"From an ESXi shell, add or correct the following line in \"/etc/ssh/sshd_config\": \n\nAllowTcpForwarding no","ccis":["CCI-000366"]},{"vulnId":"V-256435","ruleId":"SV-256435r959010_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\nLocate the \"slpd\" service and verify that the \"Daemon\" 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\nSelect the \"slpd\" service. If the service is started, click \"Stop\". \n\nClick \"Edit Startup Policy...\". Select \"Start and stop manually\". Click \"OK\".\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\"} | Set-VMHostService -Policy Off\nGet-VMHost | Get-VMHostService | Where {$_.Label -eq \"slpd\"} | Stop-VMHostService","ccis":["CCI-000366"]},{"vulnId":"V-256436","ruleId":"SV-256436r959010_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/auditLogReader\" utility over SSH or at the ESXi shell.","checkContent":"From an ESXi shell, run the following command:\n\n# esxcli system auditrecords 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.auditrecords.get.invoke()|Format-List\n\nExample result:\n\nAuditRecordRemoteTransmissionActive : true\nAuditRecordStorageActive : true\nAuditRecordStorageCapacity : 100\nAuditRecordStorageDirectory : /scratch/auditLog\n\nNote: The \"Audit Record Storage Directory\" may differ from the default above, but it must still be located on persistent storage.\n\nIf audit record storage is not active and configured, this is a finding.","fixText":"From an ESXi shell, run the following commands:\n\nOptional: Set the audit log location to persistent storage. This is set to \"/scratch/auditLog\" by default and does not normally need to be changed.\n\n# esxcli system auditrecords local set --directory=\"/full/path/here\"\n\nMandatory:\n\n# esxcli system auditrecords local set --size=100\n# esxcli system auditrecords local enable\n# esxcli system auditrecords remote enable\n# esxcli system syslog reload\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.auditrecords.local.set.CreateArgs()\n*Optional* $arguments.directory = \"/full/path/here\"\n$arguments.size=\"100\"\n$esxcli.system.auditrecords.local.set.Invoke($arguments)\n$esxcli.system.auditrecords.local.enable.Invoke()\n$esxcli.system.auditrecords.remote.enable.Invoke()","ccis":["CCI-000366"]},{"vulnId":"V-256437","ruleId":"SV-256437r959010_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 the syslog target, this is not applicable.\n\nFrom an ESXi shell, run the following command:\n\n# esxcli system syslog config get|grep 509\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 StrictX509Compliance\n\nExpected result:\n\nStrict X509Compliance: true\n\nIf the output does not match the expected result, this is a finding.","fixText":"From an ESXi shell, run the following commands:\n\n# esxcli system syslog config set --x509-strict=\"true\"\n# esxcli system syslog reload\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.set.CreateArgs()\n$arguments.x509strict = $true\n$esxcli.system.syslog.config.set.Invoke($arguments)\n$esxcli.system.syslog.reload.Invoke()","ccis":["CCI-000366"]},{"vulnId":"V-256438","ruleId":"SV-256438r959010_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 also 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\nSelect the \"Syslog.global.logCheckSSLCerts\" value and set 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 follow 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 command:\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-256439","ruleId":"SV-256439r959010_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 set 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-256440","ruleId":"SV-256440r959010_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\nSelect the \"Config.HostAgent.vmacore.soap.sessionTimeout\" value and set 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-256441","ruleId":"SV-256441r959010_rule","severity":"medium","ruleTitle":"The ESXi Host Client must be configured with a session timeout.","description":"The ESXi Host Client is the UI served up by the host itself, outside of vCenter. It is accessed by browsing to \"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 \"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.HostClientSessionTimeout\n\nIf the \"UserVars.HostClientSessionTimeout\" setting is not set to \"600\", 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\nSelect the \"UserVars.HostClientSessionTimeout\" value and set 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.HostClientSessionTimeout | Set-AdvancedSetting -Value \"600\"","ccis":["CCI-000366"]},{"vulnId":"V-256442","ruleId":"SV-256442r958408_rule","severity":"medium","ruleTitle":"The ESXi host rhttpproxy daemon must use FIPS 140-2 validated cryptographic modules to protect the confidentiality of remote access sessions.","description":"ESXi runs a reverse proxy service called rhttpproxy that front ends internal services and application programming interfaces (APIs) over one HTTPS port by redirecting virtual paths to localhost ports. \n\nThis proxy implements a FIPS 140-2 validated OpenSSL cryptographic module that is in FIPS mode by default. This configuration must be validated and maintained to protect the traffic that rhttpproxy manages.","checkContent":"From an ESXi shell, run the following command:\n\n# esxcli system security fips140 rhttpproxy 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.rhttpproxy.get.invoke()\n\nExpected result:\n\nEnabled: true\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# esxcli system security fips140 rhttpproxy 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.rhttpproxy.set.CreateArgs()\n$arguments.enable = $true\n$esxcli.system.security.fips140.rhttpproxy.set.Invoke($arguments)","ccis":["CCI-000068"]},{"vulnId":"V-256443","ruleId":"SV-256443r959010_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 set 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-256444","ruleId":"SV-256444r959010_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-256445","ruleId":"SV-256445r959010_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-256446","ruleId":"SV-256446r959010_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|grep Mode\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 output does not match the expected result, 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 the BIOS.\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\nEvacuate the host and gracefully reboot for changes to take effect.","ccis":["CCI-000366"]},{"vulnId":"V-256447","ruleId":"SV-256447r959010_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\nNote: This setting is only available in 7.0 Update 2 and later.\n\nSatisfies: SRG-OS-000480-VMM-002000, SRG-OS-000257-VMM-000910, SRG-OS-000278-VMM-001000, 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|grep \"Secure Boot\"\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 the output does not match the expected result, this is a finding.","fixText":"This setting cannot be configured until Secure Boot is properly enabled in the BIOS.\n\nFrom an ESXi shell, run the following command:\n\n# esxcli system settings encryption set --require-secure-boot=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.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-001496","CCI-002699"]},{"vulnId":"V-256448","ruleId":"SV-256448r1051419_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\nLocate the \"CIM Server\" service and verify the \"Daemon\" 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\nSelect the \"CIM Server\" service. If the service is started, click \"Stop\". \n\nClick \"Edit Startup Policy...\". Select \"Start and stop manually\". 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-256449","ruleId":"SV-256449r959006_rule","severity":"medium","ruleTitle":"The ESXi host 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 using encryption to protect data. ESXi must implement cryptographic modules adhering to the higher standards approved by the federal government because this provides assurance they have been tested and validated.","checkContent":"From an ESXi shell, run the following command:\n\n# /usr/lib/vmware/openssh/bin/sshd -T|grep ciphers\n\nExpected result:\n\nciphers aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr\n\nIf the output does not match the expected result, this is a finding.","fixText":"From an ESXi shell, add or correct the following line in \"/etc/ssh/sshd_config\":\n\nCiphers aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr","ccis":["CCI-002450"]}]}