核心頁表隔離

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

基本介紹

  • 中文名:核心頁表隔離
  • 外文名:Kernel page-table isolation
  • 縮寫:KPTI
  • 領域:計算機
前身,Meltdown漏洞與KPTI,實現,用戶空間,地址空間配置隨機載入,

前身

KPTI補丁基於KAISER,它是一個用於緩解不太重要問題的早期補丁,當時業界還未了解到Meltdown的存在。
如果沒有KPTI,每當執行用戶空間代碼(應用程式)時,Linux會在其分頁表中保留整個核心記憶體的映射,並保護其訪問。這樣做的優點是當應用程式向核心傳送系統調用或收到中斷時,核心頁表始終存在,可以避免絕大多數上下文交換相關的開銷(TLB刷新、頁表交換等)。
2005年,Linux核心採用了地址空間配置隨機載入(KASLR)隱匿用戶空間中的相關核心地址,增加了利用其他核心漏洞的難度。儘管阻止了對這些核心映射的訪問,但在此後發現,現有的英特爾x86處理器(截至2017年12月)還存在著多處可能泄露這些記憶體位置的旁路攻擊,可能繞過KASLR。AMD稱其處理器不受這些攻擊的影響,所以不需要KPTI作為緩解措施。

Meltdown漏洞與KPTI

2018年1月,影響Intelx86處理器的熔毀漏洞被公布。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”可以部分禁用核心頁表隔離。依規定也可對已修復漏洞的新款處理器禁用核心頁表隔離。

用戶空間

作業系統中,虛擬記憶體通常會被分成用戶空間(英語:User space,又譯為使用者空間),與核心空間(英語:Kernel space,又譯為核心空間)這兩個區塊。
這是存儲器保護機制中的一環。核心、核心擴充(kernel extensions)、以及驅動程式,運行在核心空間上。而其他的應用程式,則運行在用戶空間上。所有運行在用戶空間的應用程式,都被統稱為用戶級(userland)。

地址空間配置隨機載入

在計算機科學中,地址空間配置隨機載入(英語:Address space layout randomization,縮寫ASLR,又稱地址空間配置隨機化地址空間布局隨機化)是一種防範記憶體損壞漏洞被利用的計算機安全技術。ASLR通過隨機放置進程關鍵數據區域的地址空間來防止攻擊者能可靠地跳轉到記憶體的特定位置來利用函式。現代作業系統一般都加設這一機制,以防範惡意程式對已知地址進行Return-to-libc攻擊。

相關詞條

熱門詞條

聯絡我們