記憶體完整性和 VBS 啟用
記憶體完整性 是 Windows 10、Windows 11 和 Windows Server 2016 或更高版本中可用的虛擬化式安全性 (VBS) 功能。 記憶體完整性和 VBS 可改善 Windows 的威脅模型,並針對嘗試惡意探索 Windows 核心的惡意代碼提供更強大的保護。 VBS 會使用 Windows Hypervisor 來建立隔離的虛擬環境,以成為操作系統的根信任,該操作系統假設核心可能會遭到入侵。 記憶體完整性是一個重要元件,可在 VBS的隔離虛擬環境中執行核心模式程序代碼完整性,以保護和強化 Windows。 記憶體完整性也會限制可用來危害系統的核心記憶體配置,確保核心記憶體頁面只有在安全運行時間環境內傳遞程式代碼完整性檢查之後才會成為可執行檔,而且可執行檔頁面本身絕不可寫入。
注意
記憶體完整性有時稱為受 Hypervisor 保護的程式代碼完整性(HVCI)或 Hypervisor 強制執行的程式代碼完整性,且最初是作為 Device Guard 的一部分發行。 除了在組策略或 Windows 登錄中尋找記憶體完整性和 VBS 設定之外,不再使用 Device Guard。
如需這些保護的詳細資訊,請參閱 虛擬化安全性系統資源保護 。
默認啟用
預設會在 Windows 11 的全新安裝上開啟記憶體完整性,而且先前只在 S 模式的 Windows 10 全新安裝上,且在相容的硬體上,如本文所述。 它預設也會在所有安全核心計算機上開啟。 在其他不符合記憶體完整性自動啟用需求的系統上,客戶可以選擇使用如何啟用記憶體完整性中所述的任何方法。 IT 專業人員和終端使用者一律能夠最終控制是否啟用記憶體完整性。
自動啟用的硬體功能
當計算機符合下列最低硬體功能時,預設會開啟記憶體完整性:
元件 | 詳細資料 |
---|---|
處理器 |
|
RAM | 最低 8GB (僅適用於 x64 處理器) |
儲存體 | 大小下限為 64GB 的 SSD |
驅動程式 | 必須安裝記憶體完整性相容驅動程式。 如需驅動程式的詳細資訊,請參閱 驅動程式與記憶體完整性 的相容性。 |
BIOS 模式 | 必須啟用虛擬化 |
如果您要建置不會自動啟用記憶體完整性的映像,您仍然可以設定映像,使其預設為開啟。
注意
自動啟用僅與全新安裝有關,而不是升級現有的裝置。
注意
Intel 11 代核心桌面處理器未包含在目前的預設啟用邏輯中。 不過,它們是記憶體完整性的建議平臺,可由 OEM 啟用。
記憶體完整性和 VBS 控件
本節會列舉裝置製造商和終端使用者如何與記憶體完整性和 VBS 互動。 若要瞭解如何以系統管理員身分控制記憶體完整性狀態,請參閱 如何開啟記憶體完整性。
開啟記憶體完整性
雖然 Windows 預設會針對大多數系統開啟記憶體完整性,但有數個原因可能會防止這種情況發生。 身為 OEM,您可以在 OS 映射中設定登錄機碼,以確保裝置的記憶體完整性已開啟。
建議組態
在您的映像中設定下列兩個登錄機碼,以確保記憶體完整性已開啟。
登錄機碼 | 值 |
---|---|
HKLM\System\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity | Enabled=1 |
HKLM\System\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity | WasEnabledBy=1 |
HKLM\System\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity | EnabledBootId=<Current BootId> |
BootId 是在每次成功開機時遞增的計數器,可在登錄機碼中找到:HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters\BootId WasEnabledBy 和 EnabledBootId 登錄機碼可控制可保護裝置無法啟動的設定。 設定時,如果系統在開機期間當機,裝置會自動關閉記憶體完整性,可能是因為記憶體完整性封鎖不相容的開機關鍵驅動程式所造成。 只有在 BootId 小於 EnabledBootId + 3 時,才能使用這項自動停用功能。 在某些版本的 Windows 中,如果開機失敗在關閉記憶體完整性之後仍繼續,自動停用功能的設計目的是要還原,這表示記憶體完整性不是失敗的根本原因。
注意
針對高安全性系統, 不應設定 WasEnabledBy 和 EnabledBootId 。
疑難排解
識別記憶體完整性狀態
下列 volatile regkey 反映記憶體完整性的狀態:
登錄機碼 | 值 |
---|---|
HKLM\System\CurrentControlSet\Control\CI\State | HVCIEnabled |
檢查記憶體完整性狀態的其他方式,是查看 [虛擬化型安全性服務執行] 底下的 MsInfo32,或參閱 Windows 安全性 應用程式中的 [核心隔離設定] 頁面,以查看記憶體完整性的值。 另外還有一個 WMI 介面可用來檢查使用管理工具,請參閱 驗證已啟用的 VBS 和記憶體完整性功能。
偵錯驅動程序問題
檢查程式代碼完整性記錄,以查看因記憶體完整性而無法載入任何驅動程式。 這些位於下列路徑下的 事件檢視器:
Applications and Service Logs\Microsoft\Windows\CodeIntegrity\Operational
一般而言,記憶體完整性相容性事件具有 EventID=3087
檢查記憶體完整性預設啟用的結果
若要檢視記憶體完整性預設啟用結果的詳細資料,請檢查 setupact.log 並搜尋 HVCI
。 您應該會看到下列其中一個結果記錄,以及導致啟用決策的成功/失敗檢查:
已開啟記憶體完整性: SYSPRP HVCI: Enabling HVCI
記憶體完整性未啟用: SYSPRP HVCI: OS does not meet HVCI auto-enablement requirements. Exiting now.
如果裝置已透過稍早詳述的 regkey 方法退出記憶體完整性啟用,則這是記憶體完整性 sysprep 中唯一的記錄檔。 如果裝置發生相容性問題,則應該在上述記錄中識別,並顯示錯誤訊息:
SYSPRP HVCI: Compatibility did not pass. VBS_COMPAT_ISSUES 0xXXXXXXXX
以下是可能的 VBS 或記憶體完整性相容性問題的列舉。 每個問題都以位數組中的單一索引表示,而錯誤訊息會輸出每個錯誤位所產生的十六進位值。
位索引 | 相容性問題 | 十六進位值 | 架構 |
---|---|---|---|
0 | 不支援的架構(例如 x86) | 0x00000001 | |
1 | 需要 SLAT | 0x00000002 | x64 |
2 | 需要安全開機功能 | 0x00000004 | x64 |
3 | 需要IOMMU | 0x00000008 | x64 |
4 | 需要 MBEC/GMET | 0x00000010 | x64 |
5 | 需要 UEFI | 0x00000020 | x64 |
6 | 需要 UEFI WX 記憶體屬性數據表 | 0x00000040 | x64 |
7 | 需要 ACPI WSMT 資料表 | 0x00000080 | x64 |
8 | 需要 UEFI MOR 鎖定 | 0x00000100 | x64 |
9 | 已取代 | ||
10 | 需要硬體虛擬化 | 0x00000400 | x64 |
11 | 需要安全啟動 | 0x00000800 | ARM64 |
12 | 已取代 | ||
13 | 裝置不符合所需的最小磁碟區大小 64GB | 0x00002000 | x64、ARM64 |
14 | 需要系統磁碟驅動器 SSD | 0x00004000 | x64、ARM64 |
15 | 需要 Intel CET (僅適用於 W11 21H2) | 0x00008000 | x64 |
16 | ARM SoC 與 VBS 不兼容 | 0x00010000 | ARM64 |
17 | 需要 8 GB RAM | 0x00020000 | x64 |
錯誤碼和錯誤識別的範例: VBS_COMPAT_ISSUES 0x000000C0
0x000000C0 -> 0x00000080 AND 0x00000040 -> 需要 UEFI WX 記憶體屬性資料表、需要 ACPI WSMT 資料表