X86 CPU特性之(3)-kaiser

kaiser(歐洲人名),公元前102年7月12日-公元前44年3月15日,Kaiser源於凱撒,德語裏指神聖羅馬帝國(962-1806)、德意志帝國、奧地利帝國皇帝。

內核頁表隔離(Kernel page-table isolation,縮寫KPTI,也簡稱PTI,舊稱KAISER)是Linux內核中的一種強化技術,旨在更好地隔離用戶空間與內核空間的內存來提高安全性,緩解現代x86 CPU中的“熔斷(Meltdown)”硬件安全缺陷。

前身

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

如果沒有KPTI,每當執行用戶空間代碼(應用程序)時,Linux會在其分頁表中保留整個內核內存的映射,並保護其訪問。這樣做的優點是當應用程序向內核發送系統調用或收到中斷時,內核頁表始終存在,可以避免絕大多數上下文交換相關的開銷(TLB刷新、頁表交換等)。

2005年,Linux內核採用了地址空間配置隨機加載(KASLR)隱匿用戶空間中的相關內核地址,增加了利用其他內核漏洞的難度。儘管阻止了對這些內核映射的訪問,但在此後發現,現有的英特爾x86處理器(截至2017年12月)還存在着多處可能泄露這些內存位置的旁路攻擊,可能繞過KASLR。AMD稱其處理器不受這些攻擊的影響,所以不需要KPTI作爲緩解措施。

Meltdown漏洞與KPTI

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

實現

KPTI通過完全分離用戶空間與內核空間頁表來解決頁表泄露。支持進程上下文標識符(PCID)特性的x86處理器可以用它來避免TLB刷新,但即便如此,它依然有很高的性能成本。據KAISER原作者稱,其開銷爲0.28%;一名Linux開發者稱大多數工作負載下測得約爲5%,但即便有PCID優化,在某些情況下開銷高達30%。

KPTI在2018年早期被合併到Linux內核4.15版,並被反向移植到Linux內核4.14.11。Windows和macOS也發佈了類似的更新。

使用內核啓動選項“pti=off”可以部分禁用內核頁表隔離。依規定也可對已修復漏洞的新款處理器禁用內核頁表隔離。

參考:
https://en.wikipedia.org/wiki/Kernel_page-table_isolation

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章