热门问题
时间线
聊天
视角
內核頁表隔離
来自维基百科,自由的百科全书
Remove ads
內核頁表隔離(Kernel page-table isolation,縮寫KPTI,也簡稱PTI,舊稱KAISER)是Linux內核中的一種強化技術,旨在更好地隔離用戶空間與內核空間的內存來提高安全性,緩解現代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]。
參見
參考文獻
外部連結
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads