iTLB 多次命中

iTLB 多次命中是一個缺陷,當指令獲取命中指令 TLB 中的多個條目時,某些處理器可能會發生機器檢查錯誤,可能導致 CPU 無法恢復的死鎖。這可能發生在頁面大小與物理地址或快取型別一起更改時。在虛擬化系統上執行的惡意訪客可以利用此缺陷執行拒絕服務攻擊。

受影響的處理器

此缺陷的變體存在於大多數英特爾酷睿 (Intel Core) 和至強 (Xeon) 處理器型號上。此缺陷不存在於

  • 非英特爾處理器

  • 部分 Atom 處理器 (Airmont, Bonnell, Goldmont, GoldmontPlus, Saltwell, Silvermont)

  • 在 IA32_ARCH_CAPABILITIES MSR 中設定了 PSCHANGE_MC_NO 位的英特爾處理器。

問題

特權軟體(包括作業系統和虛擬機器管理器 (VMM))負責記憶體管理。記憶體管理中的一個關鍵元件是頁表的控制。現代處理器使用虛擬記憶體,這是一種為處理器建立巨大記憶體錯覺的技術。這個虛擬空間被分成給定大小的頁面。頁表將虛擬地址轉換為物理地址。

為了減少執行虛擬地址到物理地址轉換時的延遲,處理器包含一個稱為 TLB 的結構,用於快取最近的轉換。指令(iTLB)和資料(dTLB)有單獨的 TLB。

在此缺陷下,指令從使用 iTLB 中快取的 4 KB 轉換翻譯的線性地址獲取。特權軟體修改分頁結構,使得同一線性地址使用不同的物理地址或記憶體型別的大頁面大小(2 MB、4 MB、1 GB)。在頁結構修改之後但在軟體使該線性地址的任何 iTLB 條目失效之前,在同一線性地址上發生的程式碼獲取可能會導致機器檢查錯誤,從而可能導致系統掛起或關機。

攻擊場景

針對 iTLB 多次命中缺陷的攻擊可以從虛擬化系統中的惡意訪客發起。

iTLB 多次命中系統資訊

Linux 核心提供了一個 sysfs 介面來列舉系統當前的 iTLB 多次命中狀態:系統是否脆弱以及哪些緩解措施是活躍的。相關的 sysfs 檔案是:

/sys/devices/system/cpu/vulnerabilities/itlb_multihit

此檔案中可能的值是:

不受影響

處理器不受此漏洞影響。

KVM:緩解措施:拆分巨頁

軟體更改緩解此問題。

KVM:緩解措施:VMX 不支援

KVM 不受此漏洞影響,因為虛擬機器擴充套件 (VMX) 不受支援。

KVM:緩解措施:VMX 已停用

KVM 不受此漏洞影響,因為虛擬機器擴充套件 (VMX) 已停用。

KVM:易受攻擊

處理器易受攻擊,但未啟用緩解措施

缺陷的列舉

IA32_ARCH_CAPABILITIES (PSCHANGE_MC_NO) MSR 中已分配一個新位,並將在已針對此問題採取緩解措施的 CPU 上設定此位。

IA32_ARCH_CAPABILITIES MSR

不存在

可能易受攻擊,檢查型號

IA32_ARCH_CAPABILITIES[PSCHANGE_MC_NO]

‘0’

可能易受攻擊,檢查型號

IA32_ARCH_CAPABILITIES[PSCHANGE_MC_NO]

‘1’

不受攻擊

緩解機制

此缺陷可以透過將大頁面大小的使用限制為不可執行頁面來緩解。這會將所有 iTLB 條目強制為 4K,並消除多次命中的可能性。

為了緩解此漏洞,KVM 最初將所有巨頁標記為不可執行。如果訪客嘗試在其中一個頁面中執行,該頁面將被分解為 4K 頁面,然後這些頁面被標記為可執行。

如果 EPT 在宿主機上被停用或不可用,KVM 將控制 TLB 重新整理,並且不會發生問題情況。然而,巢狀虛擬化使用的影子 EPT 分頁機制是易受攻擊的,因為巢狀訪客可以透過修改其自己的(非巢狀)頁表來觸發多次 iTLB 命中。為簡化起見,KVM 將在所有影子分頁模式下將大頁面設定為不可執行。

核心命令列和 KVM - 模組引數上的緩解控制

KVM 虛擬機器監控程式將巨頁標記為不可執行的緩解機制可以透過模組引數“nx_huge_pages=”來控制。核心命令列允許在啟動時使用選項“kvm.nx_huge_pages=”來控制 iTLB 多次命中緩解措施。

這些選項的有效引數是:

force

緩解已啟用。在這種情況下,緩解措施在 Linux 核心 KVM 模組中實現了不可執行的巨頁。EPT 中的所有巨頁都標記為不可執行。如果訪客嘗試在其中一個頁面中執行,該頁面將被分解為 4K 頁面,然後這些頁面被標記為可執行。

off

緩解已停用。

auto

僅當平臺受影響且核心未透過“mitigations=off”命令列引數引導時,才啟用緩解措施。這是預設選項。

緩解措施選擇指南

1. 未使用虛擬化

系統已由核心無條件保護,無需進一步操作。

2. 帶有可信訪客的虛擬化

如果訪客來自可信來源,您可以假定訪客不會惡意利用這些缺陷,無需進一步操作。

3. 帶有不可信訪客的虛擬化

如果訪客來自不可信來源,訪客宿主機核心將需要透過核心命令列或 KVM 模組引數應用 iTLB 多次命中緩解措施。