記憶體完整性和 VBS 啟用
記憶體完整性是以虛擬化為基礎的安全性 (VBS) 功能,可在Windows 10、Windows 11及Windows Server 2016或更高版本中使用。 記憶體完整性和 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 第 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 或記憶體完整性相容性問題的列舉。 每個問題都是以位陣列中的單一索引表示,而錯誤訊息會輸出每個錯誤位所產生的十六進位值。
位索引 | Compat 問題 | 十六進位值 | 架構 |
---|---|---|---|
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 | 裝置無法符合所需的最小磁片區大小 64 GB | 0x00002000 | x64、ARM64 |
14 | 需要系統磁片磁碟機 SSD | 0x00004000 | x64、ARM64 |
15 | Intel CET 必要 (僅適用于 W11 21H2) | 0x00008000 | x64 |
16 | ARM SoC 與 VBS 不相容 | 0x00010000 | ARM64 |
17 | 需要 8GB RAM | 0x00020000 | x64 |
錯誤碼和錯誤識別的範例: VBS_COMPAT_ISSUES 0x000000C0
0x000000C0 - > 0x00000080 AND 0x00000040 - > 需要 UEFI WX 記憶體屬性資料表、需要 ACPI WSMT 資料表