啟用程式碼完整性的虛擬化型保護

記憶體完整性 是 Windows 中可用的虛擬化型安全 (VBS) 功能。 記憶體完整性和 VBS 可改善 Windows 的威脅模型,並針對嘗試惡意探索 Windows 核心的惡意代碼提供更強大的保護。 VBS 會使用 Windows Hypervisor 來建立隔離的虛擬環境,以成為假設核心可能遭到入侵之 OS 的信任根目錄。 記憶體完整性是一個重要元件,可藉由在 VBS的隔離虛擬環境中執行內核模式程式代碼完整性來保護和強化 Windows。 記憶體完整性也會限制可用來危害系統的核心記憶體配置。

注意

  • 記憶體完整性有時稱為 受 Hypervisor 保護的程式代碼完整性, (HVCI) Hypervisor 強制執行的程式代碼完整性,最初是作為 Device Guard 的一部分發行。 除了在 群組原則 或 Windows 登錄中尋找記憶體完整性和 VBS 設定之外,不再使用 Device Guard。
  • 使用 以模式為基礎的執行控制,以及具有 客體模式執行 陷阱功能的 AMD Zen 2 和更高處理器,Intel Kabylake 和更高處理器的記憶體完整性效果更好。 較舊的處理器依賴這些功能的模擬,稱為 「受限制的使用者模式」,而且會對效能產生更大的影響。 啟用巢狀虛擬化時,當 VM 版本 >= 9.3 時,記憶體完整性會更好運作。

警告

某些應用程式和硬體設備驅動器可能與記憶體完整性不相容。 此不相容可能會導致裝置或軟體故障,在極少數情況下,可能會導致開機失敗 (藍色畫面) 。 這類問題可能會在記憶體完整性已開啟或啟用程式本身期間發生。 如果發生相容性問題,請參閱針對補救步驟 進行疑難解答

記憶體完整性功能

  • 保護內核模式驅動程式的控制流程防護 (CFG) 位圖的修改。
  • 保護核心模式程式代碼完整性程式,確保其他受信任的核心進程具有有效的憑證。

如何開啟記憶體完整性

若要在整個企業中支援硬體的 Windows 裝置上啟用記憶體完整性,請使用下列任何選項:

Windows 安全性

記憶體完整性可以在 Windows 安全性 設定中開啟,並可在 Windows 安全性>Device 安全>性核心隔離詳細數據>記憶體完整性中找到。 如需詳細資訊,請參閱 Windows 安全性 中的裝置保護

從 Windows 11 22H2 開始,Windows 安全性 會在記憶體完整性關閉時顯示警告。 警告指標也會出現在 Windows 任務列和 Windows 通知中心的 Windows 安全性 圖示上。 用戶可以在 Windows 安全性 內關閉警告。

使用 Intune 啟用記憶體完整性

使用設定目錄虛擬化技術>Hypervisor 強制程式代碼完整性設定來啟用記憶體完整性。 您也可以在 VirtualizationBasedTechnology CSP 中使用 HypervisorEnforcedCodeIntegrity 節點。

使用 群組原則 啟用記憶體完整性

  1. 使用 群組原則 編輯器 (gpedit.msc) 編輯現有的 GPO 或建立新的 GPO。
  2. 流覽至 [計算機設定>] [系統管理>範本] [系統>裝置防護]
  3. 按兩下 [開啟虛擬化型安全性]
  4. 取 [已啟用 ],然後在 [ 程序代碼完整性的虛擬化型保護] 底下,選 取 [啟用但不使用 UEFI 鎖定]。 如果您想要防止遠端或原則更新停用記憶體完整性,請只選取 [ 使用 UEFI 鎖定啟用 ]。 使用 UEFI 鎖定啟用之後,如果您想要關閉記憶體完整性,就必須能夠存取 [UEFI BIOS] 功能表以關閉安全開機。 使用 群組原則 啟用記憶體完整性。
  5. 選取 [確定 ] 以關閉編輯器。

若要在已加入網域的計算機上套用新原則,請在提升許可權的命令提示字元中重新啟動或 gpupdate /force 執行。

使用登錄機碼來啟用記憶體完整性

設定下列登錄機碼以啟用記憶體完整性。 這些金鑰提供與 群組原則 所提供的組態選項組完全相同。

重要

  • 在接下來的命令中,您可以選擇 \[安全開機\]\[安全開機及 DMA\] 的設定。 在大多數情況下,建議您選擇 \[安全開機\]。 此選項可提供安全開機與指定計算機硬體所支援一樣多的保護。 有輸入/輸出記憶體管理單元 (IOMMU) 的電腦必須使用安全開機及 DMA 保護。 沒有 IOMMU 的電腦只會啟用安全開機。

  • 如果您選取 [使用 DMA 進行安全開機],則記憶體完整性和其他 VBS 功能只會針對支援 DMA 的計算機開啟。 也就是說,僅適用於具有 IOMMU 的電腦。 任何沒有 IOMMU 的電腦都不會有 VBS 或記憶體完整性保護。

  • 系統上的所有驅動程式必須與程式碼完整性的虛擬式保護相容;否則您的系統可能會失敗。 建議您先在一組測試電腦上啟用這些功能,然後再於使用者的電腦上啟用。

建議的設定 (啟用記憶體完整性,而不需要 UEFI 鎖定) :

reg add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard" /v "EnableVirtualizationBasedSecurity" /t REG_DWORD /d 1 /f
reg add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard" /v "RequirePlatformSecurityFeatures" /t REG_DWORD /d 1 /f
reg add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard" /v "Locked" /t REG_DWORD /d 0 /f
reg add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity" /v "Enabled" /t REG_DWORD /d 1 /f
reg add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity" /v "Locked" /t REG_DWORD /d 0 /f

如果您想要自定義先前的建議設定,請使用下列登錄機碼。

若只要啟用 VBS (沒有記憶體完整性)

reg add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard" /v "EnableVirtualizationBasedSecurity" /t REG_DWORD /d 1 /f

啟用 VBS 並只要求安全開機 (值 1)

reg add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard" /v "RequirePlatformSecurityFeatures" /t REG_DWORD /d 1 /f

若要啟用具有安全開機和 DMA (值為 3 的 VBS)

reg add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard" /v "RequirePlatformSecurityFeatures" /t REG_DWORD /d 3 /f

在不搭配 UEFI 鎖定的情況下啟用 VBS (值 0)

reg add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard" /v "Locked" /t REG_DWORD /d 0 /f

若要啟用 UEFI 鎖定 (值為 1 的 VBS)

reg add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard" /v "Locked" /t REG_DWORD /d 1 /f

啟用記憶體完整性

reg add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity" /v "Enabled" /t REG_DWORD /d 1 /f

若要在不使用 UEFI 鎖定的情況下啟用記憶體完整性 (值 0)

reg add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity" /v "Locked" /t REG_DWORD /d 0 /f

若要啟用 UEFI 鎖定的記憶體完整性, (值 1)

reg add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity" /v "Locked" /t REG_DWORD /d 1 /f

若要將記憶體完整性 UI 呈現灰色,並顯示訊息「此設定是由您的系統管理員管理」

reg delete HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity /v "WasEnabledBy" /f

為了讓記憶體完整性 UI 正常運作 (不會呈現灰色)

reg add HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity /v "WasEnabledBy" /t REG_DWORD /d 2 /f

使用 Windows Defender 應用程控 (WDAC) 啟用記憶體完整性

您可以使用 WDAC 原則,使用下列任何技術來開啟記憶體完整性:

  1. 使用 WDAC 精靈來建立或編輯 WDAC 原則,然後在精靈的 [原則規則] 頁面上選取 [受 Hypervisor 保護的程式代碼完整性] 選項。
  2. 使用 Set-HVCIOptions PowerShell Cmdlet。
  3. 編輯您的 WDAC 原則 XML,並修改專案所設定的 <HVCIOptions> 值。

注意

如果您的 WDAC 原則設定為開啟記憶體完整性,即使原則處於稽核模式,它也會開啟。

驗證已啟用的 VBS 和記憶體完整性功能

使用 Win32_DeviceGuard WMI 類別

Windows 10、Windows 11 和 Windows Server 2016 和更新版本具有 VBS 相關屬性和功能的 WMI 類別:Win32_DeviceGuard。 這個類別可以透過使用下列命令,從提升權限的 Windows PowerShell 工作階段查詢:

Get-CimInstance -ClassName Win32_DeviceGuard -Namespace root\Microsoft\Windows\DeviceGuard

注意

模式型執行控制屬性只會從 Windows 10 1803 版和 Windows 11 21H2 版開始列為可用。 Intel 的 模式型執行控制 項和 AMD 的 客體模式執行陷阱 功能都會報告此值。

此命令的輸出會提供可用硬體型安全性功能以及目前啟用之功能的詳細數據。

AvailableSecurityProperties

此欄位有助於列舉和報告 VBS和記憶體完整性的相關安全性屬性狀態。

描述
0 如果出現,表示裝置上沒有相關的屬性。
1 如果出現,表示提供 Hypervisor 支援。
2 如果出現,表示可以使用安全開機。
3 如果出現,表示可以使用 DMA 保護。
4 如果出現,表示可以使用安全記憶體覆寫。
5 如果出現,表示可以使用 NX 保護。
6 如果出現,表示可以使用 SMM 安全防護。
7 如果存在,則可使用 MBEC/GMET。
8 如果存在,則可使用APIC虛擬化。
InstanceIdentifier

特定裝置唯一且由 WMI 設定的字串。

RequiredSecurityProperties

此欄位描述啟用 VBS 所需的安全性屬性。

描述
0 不需要任何項目。
1 如果出現,表示需要 Hypervisor 支援。
2 如果出現,表示需要安全開機。
3 如果出現,表示需要 DMA 保護。
4 如果出現,表示需要安全記憶體覆寫。
5 如果出現,表示需要 NX 保護。
6 如果出現,表示需要 SMM 安全防護。
7 如果存在,則需要 MBEC/GMET。
SecurityServicesConfigured

此欄位指出是否已設定 Credential Guard 或記憶體完整性。

描述
0 未設定任何服務。
1 如果出現,表示已設定 Credential Guard。
2 如果存在,則會設定記憶體完整性。
3 如果存在,系統防護 設定安全啟動。
4 如果存在,則會設定 SMM 韌體測量。
SecurityServicesRunning

此欄位會指出 Credential Guard 或記憶體完整性是否正在執行。

描述
0 未執行任何服務。
1 如果出現,表示 Credential Guard 正在執行。
2 如果存在,則會執行記憶體完整性。
3 如果存在,系統防護 安全啟動正在執行。
4 如果存在,則 SMM 韌體測量正在執行。
版本

這個欄位會列出此 WMI 類別的版本。 現在唯一的有效值是 1.0

VirtualizationBasedSecurityStatus

這個欄位會指示 VBS 是否已啟用並且正在執行。

描述
0 未啟用 VBS。
1 VBS 已啟用但未執行。
2 VBS 已啟用並且正在執行。
PSComputerName

這個欄位會列出電腦名稱。 電腦名稱的所有有效值。

使用 msinfo32.exe

判斷可用和啟用 VBS 功能的另一種方法是從提升許可權的PowerShell工作階段執行 msinfo32.exe。 當您執行此程式時,VBS 功能會顯示在 [ 系統摘要 ] 區段的底部。

系統資訊系統摘要中的虛擬化型安全性功能。

疑難排解

  • 如果設備驅動器無法在運行時間載入或當機,您可能可以使用 裝置管理員 更新驅動程式
  • 如果您在開機期間遇到嚴重錯誤,或開啟記憶體完整性之後您的系統不穩定,您可以使用 Windows Recovery 環境 (Windows RE) 進行復原。
    1. 首先,停用用來啟用 VBS和記憶體完整性的任何原則,例如 群組原則。

    2. 然後,開機至受影響計算機上的 Windows RE,請參閱 Windows RE 技術參考]

    3. 登入 Windows RE 之後,請將記憶體完整性登錄機碼設定為關閉:

      reg add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity" /v "Enabled" /t REG_DWORD /d 0 /f
      
    4. 最後,重新啟動您的裝置。

注意

如果您使用 UEFI 鎖定開啟記憶體完整性,則必須停用安全開機,才能完成 Windows RE 復原步驟。

虛擬機中的記憶體完整性部署

記憶體完整性可以保護 Hyper-V 虛擬機,就像實體機器一樣。 從虛擬機內啟用記憶體完整性的步驟相同。

記憶體完整性可防止在客體虛擬機中執行的惡意代碼。 它不會提供主機系統管理員的額外保護。 您可以從主機停用虛擬機器的記憶體完整性:

Set-VMSecurity -VMName <VMName> -VirtualizationBasedSecurityOptOut $true

在 Hyper-V 虛擬機中執行記憶體完整性的需求

  • Hyper-V 主機必須至少執行 Windows Server 2016 或 Windows 10 版本 1607。
  • Hyper-V 虛擬機器必須是「第 2 代」,並且至少執行 Windows Server 2016 或 Windows 10。
  • 記憶體完整性和 巢狀虛擬化 可以同時啟用。 若要在虛擬機上啟用 Hyper-V 角色,您必須先在 Windows 巢狀虛擬化環境中安裝 Hyper-V 角色。
  • 虛擬光纖通道 配接器與記憶體完整性不相容。 將虛擬光纖通道配接器附加至虛擬機之前,您必須先使用 Set-VMSecurity退出虛擬化型安全性。
  • 傳遞磁碟的 AllowFullSCSICommandSet 選項與記憶體完整性不相容。 使用 AllowFullSCSICommandSet 設定傳遞磁碟之前,您必須先使用 Set-VMSecurity退出虛擬化型安全性。