热门问题
时间线
聊天
视角

內核頁表隔離

来自维基百科,自由的百科全书

Remove ads

內核頁表隔離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]

Remove ads

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]

參見

參考文獻

外部連結

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads