目錄
內核頁表隔離
編輯內核頁表隔離(KPTI 或 PTI,以前稱為 KAISER)是一項 Linux 內核功能,可緩解 Meltdown 安全漏洞(主要影響 Intel 的 x86 CPU)并改進內核強化以防止試圖繞過內核地址空間布局隨機化 (KASLR) . 它通過更好地隔離用戶空間和內核空間內存來工作。 KPTI 被合并到 Linux 內核版本 4.15 中,并向后移植到 Linux 內核 4.14.11、4.9.75 和 4.4.110。 Windows 和 macOS 發布了類似的更新。 KPTI 不解決相關的 Spectre 漏洞。
KAISER 的背景
編輯KPTI 補丁基于 KAISER(Kernel Address Isolation to have Side-channels Efficiently Removed 的縮寫),該技術于 2016 年構思并于 2017 年 6 月發布,當時 Meltdown 尚不為人所知。 KAISER 使擊敗 KASLR 變得更加困難,KASLR 是 2014 年針對一個不那么嚴重的問題的緩解措施。
2014 年,Linux 內核采用了內核地址空間布局隨機化 (KASLR),這使得利用其他內核漏洞變得更加困難,這些漏洞依賴于對用戶空間隱藏的內核地址映射。 盡管禁止訪問這些內核映射,但事實證明,現代處理器中存在多種邊信道攻擊,可以泄漏該內存的位置,從而可以繞過 KASLR。
KAISER 通過消除一些地址泄漏源解決了 KASLR 中的這些問題。 KASLR 僅僅防止地址映射泄漏,而 KAISER 還防止數據泄漏,從而涵蓋了 Meltdown 案例。
KPTI 基于 KAISER。 如果不啟用 KPTI,每當執行用戶空間代碼(應用程序)時,Linux 也會將其整個內核內存映射到頁表中,盡管受到訪問保護。 優點是當應用程序對內核進行系統調用或接收到中斷時,內核頁表始終存在,因此可以避免大多數與上下文切換相關的開銷(TLB 刷新、頁表交換等)。
Meltdown漏洞和KPTI
編輯2018 年 1 月,發布了 Meltdown 漏洞,已知會影響 Intel 的 x86 CPU 和 ARM Cortex-A75。 這是一個比 KAISER 最初打算修復的 KASLR 繞過嚴重得多的漏洞:發現內核內存的內容也可能被泄露,而不僅僅是內存映射的位置,就像之前認為的那樣。
KPTI(概念上基于 KAISER)通過防止大多數受保護位置被映射到用戶空間來防止 Meltdown。
目前未知 AMD x86 處理器是否會受到 Meltdown 的影響,并且不需要 KPTI 來緩解它們。 但是,當禁用 KPTI 時,AMD 處理器仍然容易受到 KASLR 繞過的影響。
實施
編輯KPTI 通過完全分離用戶空間和內核空間頁表來修復這些漏洞。 一組頁表包括內核空間和用戶空間地址,和以前一樣,但它只在系統運行在內核態時使用。 在用戶模式下使用的第二組頁表包含用戶空間的副本和一組最小的內核空間映射,提供進入或退出系統調用、中斷和異常所需的信息。
在支持進程上下文標識符 (PCID) 的處理器上,可以避免轉換后備緩沖區 (TLB) 刷新,但即便如此,它也會帶來顯著的性能成本,尤其是在系統調用繁重和中斷繁重的工作負載中。
根據 KAISER 的原作者測量,開銷為 0.28%; 一位 Linux 開發人員測得,對于大多數工作負載,它大約為 5%,在某些情況下高達 30%,即使使用 PCID 優化也是如此; 對于數據庫引擎 PostgreSQL,Intel Skylake 處理器上的只讀測試的影響為 7-17%(或 16-23%,沒有 PCID),而完整的基準測試損失了 13-19%(Coffee Lake 與 Broadwell-E)。 許多基準測試由 Phoronix 完成,Redis 的速度降低了 6-7%。 Haswell 上的 Linux 內核編譯速度降低了 5%。
可以使用 nopti 內核引導選項部分禁用 KPTI。 如果較新的處理器修復了信息泄漏,還制定了禁用 KPTI 的規定。
內容由匿名用戶提供,本內容不代表www.gelinmeiz.com立場,內容投訴舉報請聯系www.gelinmeiz.com客服。如若轉載,請注明出處:http://www.gelinmeiz.com/195675/