Troubleshoot guarded hosts
This article describes resolutions to common problems encountered when deploying or operating a guarded Hyper-V host in your guarded fabric.
Applies to: Windows Server 2022, Windows Server 2019, Windows Server 2016
If you're unsure of the nature of your problem, first try running the guarded fabric diagnostics on your Hyper-V hosts to narrow down the potential causes.
Guarded host feature
If you're experiencing issues with your Hyper-V host, first ensure that the Host Guardian Hyper-V Support feature is installed. Without this feature, the Hyper-V host is missing some critical configuration settings and software that allow it to pass attestation and provision shielded VMs.
To check if the feature is installed, use Server Manager or run the following cmdlet in an elevated PowerShell window:
Get-WindowsFeature HostGuardian
If the feature isn't installed, install it with the following PowerShell cmdlet:
Install-WindowsFeature HostGuardian -Restart
Attestation failures
If a host doesn't pass attestation with the Host Guardian Service, it's unable to run shielded VMs. The output of Get-HgsClientConfiguration on that host will show you information about why that host failed attestation.
The table below explains the values that may appear in the AttestationStatus field and potential next steps, if appropriate.
AttestationStatus | Explanation |
---|---|
Expired | The host passed attestation previously, but the health certificate it was issued has expired. Ensure the host and HGS time are in sync. |
InsecureHostConfiguration | The host didn't pass attestation because it didn't comply with the attestation policies configured on HGS. For more information, see the AttestationSubStatus table. |
NotConfigured | The host isn't configured to use an HGS for attestation and key protection. It's configured for local mode, instead. If this host is in a guarded fabric, use Set-HgsClientConfiguration to provide it with the URLs for your HGS server. |
Passed | The host passed attestation. |
TransientError | The last attestation attempt failed due to a networking, service, or other temporary error. Retry your last operation. |
TpmError | The host couldn't complete its last attestation attempt due to an error with your TPM. For more information, see your TPM logs. |
UnauthorizedHost | The host didn't pass attestation because it wasn't authorized to run shielded VMs. Ensure the host belongs to a security group trusted by HGS to run shielded VMs. |
Unknown | The host hasn't attempted to attest with HGS yet. |
When AttestationStatus is reported as InsecureHostConfiguration, one or more reasons is populated in the AttestationSubStatus field. The table below explains the possible values for AttestationSubStatus and tips on how to resolve the problem.
AttestationSubStatus | What it means and what to do |
---|---|
BitLocker | The host's OS volume isn't encrypted by BitLocker. To resolve this, enable BitLocker on the OS volume or disable the BitLocker policy on HGS. |
CodeIntegrityPolicy | The host isn't configured to use a code integrity policy or isn't using a policy trusted by the HGS server. Ensure a code integrity policy has been configured, that the host has been restarted, and the policy is registered with the HGS server. For more information, see Create and apply a code integrity policy. |
DumpsEnabled | The host is configured to allow crash dumps or live memory dumps, which isn't allowed by your HGS policies. To resolve this, disable dumps on the host. |
DumpEncryption | The host is configured to allow crash dumps or live memory dumps but doesn't encrypt those dumps. Either disable dumps on the host or configure dump encryption. |
DumpEncryptionKey | The host is configured to allow and encrypt dumps, but isn't using a certificate known to HGS to encrypt them. To resolve this, update the dump encryption key on the host or register the key with HGS. |
FullBoot | The host resumed from a sleep state or hibernation. Restart the host to allow for a clean, full boot. |
HibernationEnabled | The host is configured to allow hibernation without encrypting the hibernation file, which isn't allowed by your HGS policies. Disable hibernation and restart the host, or configure dump encryption. |
HypervisorEnforcedCodeIntegrityPolicy | The host isn't configured to use a hypervisor-enforced code integrity policy. Verify that code integrity is enabled, configured, and enforced by the hypervisor. For more information, see Device Guard deployment guide. |
Iommu | The host's Virtualization Based Security features aren't configured to require an IOMMU device for protection against Direct Memory Access attacks, as required by your HGS policies. Verify the host has an IOMMU, that it's enabled, and that Device Guard is configured to require DMA protections when launching VBS. |
PagefileEncryption | Page file encryption isn't enabled on the host. To resolve this, run fsutil behavior set encryptpagingfile 1 to enable page file encryption. For more information, see fsutil behavior. |
SecureBoot | Secure Boot is either not enabled on this host or not using the Microsoft Secure Boot template. Enable Secure Boot with the Microsoft Secure Boot template to resolve this issue. |
SecureBootSettings | The TPM baseline on this host doesn't match any of those trusted by HGS. This can occur when your UEFI launch authorities, DBX variable, debug flag, or custom Secure Boot policies are changed by installing new hardware or software. If you trust the current hardware, firmware, and software configuration of this machine, you can capture a new TPM baseline and register it with HGS. |
TcgLogVerification | The TCG log (TPM baseline) cannot be obtained or verified. This can indicate a problem with the host's firmware, the TPM, or other hardware components. If your host is configured to attempt PXE boot before booting Windows, an outdated Net Boot Program (NBP) can also cause this error. Ensure all NBPs are up to date when PXE boot is enabled. |
VirtualSecureMode | Virtualization Based Security features aren't running on the host. Ensure VBS is enabled and that your system meets the configured platform security features. For more information about VBS requirements, see the Device Guard documentation. |
Modern TLS
If you've deployed a group policy or otherwise configured your Hyper-V host to prevent the use of TLS 1.0, you may encounter "the Host Guardian Service Client failed to unwrap a Key Protector on behalf of a calling process" errors when trying to start up a shielded VM. This is due to a default behavior in .NET 4.6 where the system default TLS version isn't considered when negotiating supported TLS versions with the HGS server.
To work around this behavior, run the following two commands to configure .NET to use the system default TLS versions for all .NET apps.
reg add HKLM\SOFTWARE\Microsoft\.NETFramework\v4.0.30319 /v SystemDefaultTlsVersions /t REG_DWORD /d 1 /f /reg:64
reg add HKLM\SOFTWARE\Microsoft\.NETFramework\v4.0.30319 /v SystemDefaultTlsVersions /t REG_DWORD /d 1 /f /reg:32
Warning
The system default TLS versions setting will affect all .NET apps on your machine. Be sure to test the registry keys in an isolated environment before deploying them to your production machines.
For more information about .NET 4.6 and TLS 1.0, see Solving the TLS 1.0 Problem, 2nd Edition.