核心頁表隔離Kernel page-table isolation,縮寫KPTI,也簡稱PTI,舊稱KAISER)是Linux核心中的一種強化英語Hardening (computing)技術,旨在更好地隔離使用者空間與核心空間的主記憶體來提高安全性,緩解現代x86 CPU中的「熔毀(Meltdown)」硬體安全缺陷。[1][2]

前身

KPTI修補程式基於KAISER,它是一個用於緩解不太重要問題的早期修補程式,當時業界還未了解到Meltdown的存在。

如果沒有KPTI,每當執行使用者空間程式碼(應用程式)時,Linux會在其分頁表中保留整個核心主記憶體的對映,並保護其訪問。這樣做的優點是當應用程式向核心傳送系統呼叫或收到中斷時,核心頁表始終存在,可以避免絕大多數上下文交換相關的開銷(TLB重新整理、頁表交換等)。

2005年,Linux核心採用了位址空間組態隨機載入(KASLR)隱匿使用者空間中的相關核心位址,增加了利用其他核心漏洞的難度[3][4]。儘管阻止了對這些核心對映的訪問,但在此後發現,現有的英特爾x86處理器(截至2017年12月[5])還存在著多處可能洩露這些主記憶體位置的旁路攻擊,可能繞過KASLR。[2][6][7][8]AMD稱其處理器不受這些攻擊的影響,所以不需要KPTI作為緩解措施。[9][10][11][12][9][10][11]

Meltdown漏洞與KPTI

2018年1月,影響Intel x86處理器的熔毀漏洞被公布。KAISER修補程式改為修復此問題,並更名為KPTI,因為新型攻擊很類似,儘管更為嚴重。

實現

KPTI通過完全分離使用者空間與核心空間頁表來解決頁表洩露。支援處理程序上下文識別碼(PCID)特性的x86處理器可以用它來避免TLB重新整理,但即便如此,它依然有很高的效能成本。據KAISER原作者稱,其開銷為0.28%[2];一名Linux開發者稱大多數工作負載下測得約為5%,但即便有PCID最佳化,在某些情況下開銷高達30%。[1]

KPTI在2018年早期被合併到Linux核心4.15版[13][14],並被反向移植到Linux核心4.14.11。Windows[15]macOS[16]也發布了類似的更新。

使用核心啟動選項「pti=off」可以部份禁用核心頁表隔離。依規定也可對已修復漏洞的新款處理器禁用核心頁表隔離[13]

參見

參考文獻

外部連結

Wikiwand in your browser!

Seamless Wikipedia browsing. On steroids.

Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.

Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.