內核頁表隔離
此條目可參照英語維基百科相應條目來擴充。 |
此條目需要精通或熟悉相關主題的編者參與及協助編輯。 |
內核頁表隔離(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]
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]。
參見
[編輯]參考文獻
[編輯]- ^ 1.0 1.1 Corbet, Jonathan. KAISER: hiding the kernel from user space. LWN.net. 15 November 2017 [2018-01-03]. (原始內容存檔於2020-12-08).
- ^ 2.0 2.1 2.2 Gruss, Daniel; Lipp, Moritz; Schwarz, Michael; Fellner, Richard; Maurice, Clémentine; Mangard, Stefan. KASLR is Dead: Long Live KASLR (PDF). Engineering Secure Software and Systems 2017. 24 June 2017 [2018-01-03]. (原始內容存檔 (PDF)於2018-06-28).
- ^ Dang, Alan. The NX Bit And ASLR - Behind Pwn2Own: Exclusive Interview With Charlie Miller. Tom's Hardware. 25 March 2009 [2017-12-29]. (原始內容存檔於2023-08-11) (英語).
- ^ Bhattacharjee, Abhishek; Lustig, Daniel. Architectural and Operating System Support for Virtual Memory. Morgan & Claypool Publishers. 29 September 2017: 56. ISBN 9781627059336 (英語).
- ^ 騰訊科技. 英特尔CPU爆惊天漏洞:全球PC面临最高30%“降速”. 財經網. 2018-01-03 [2018-01-03]. (原始內容存檔於2018-01-04) (中文(中國大陸)).
- ^ Jang, Yeongjin; Lee, Sangho; Kim, Taesoo. Breaking Kernel Address Space Layout Randomization with Intel TSX (PDF). 2016 ACM SIGSAC Conference on Computer and Communications Security. CCS '16 (New York, NY, USA: ACM). 2016: 380–392 [2018-01-03]. ISBN 9781450341394. doi:10.1145/2976749.2978321. (原始內容存檔 (PDF)於2020-09-21).
- ^ Gruss, Daniel; Maurice, Clémentine; Fogh, Anders; Lipp, Moritz; Mangard, Stefan. Prefetch Side-Channel Attacks: Bypassing SMAP and Kernel ASLR (PDF). 2016 ACM SIGSAC Conference on Computer and Communications Security. CCS '16 (New York, NY, USA: ACM). 2016: 368–379 [2018-01-03]. ISBN 9781450341394. doi:10.1145/2976749.2978356. (原始內容存檔 (PDF)於2020-08-17).
- ^ Hund, R.; Willems, C.; Holz, T. Practical Timing Side Channel Attacks against Kernel Space ASLR (PDF). 2013 IEEE Symposium on Security and Privacy. May 2013: 191–205 [2018-01-03]. doi:10.1109/sp.2013.23. (原始內容存檔 (PDF)於2020-11-09).
- ^ 9.0 9.1 Lendacky, Tom. Do not enable PTI on AMD processors. 26 December 2017 [2018-01-03]. (原始內容存檔於2020-11-09).
- ^ 10.0 10.1 Gleixner, Thomas. x86/cpu, x86/pti: Do not enable PTI on AMD processors. 3 January 2018 [2018-01-04]. (原始內容存檔於2020-06-28).
- ^ 11.0 11.1 An Update on AMD Processor Security. 4 January 2018 [2018-01-04]. (原始內容存檔於2018-03-17).
- ^ IT之家. AMD谈Intel芯片漏洞:我们没受影响. 鳳凰資訊. 2018-01-04 [2018-01-04]. (原始內容存檔於2018-01-05).
- ^ 13.0 13.1 Corbet, Jonathan. Kernel page-table isolation merged. LWN.net. 20 December 2017 [2018-01-03]. (原始內容存檔於2020-10-31).
- ^ Larabel, Michael. KAISER Getting Ready To Better Protect The Linux Kernel. Phoronix. 27 November 2017 [2018-01-03]. (原始內容存檔於2020-10-19).
- ^ Alex Ionescu [@aionescu]. Windows 17035 Kernel ASLR/VA Isolation In Practice (推文). 14 November 2017 –透過Twitter.
- ^ Apple has already partially implemented fix in macOS for 'KPTI' Intel CPU security flaw. AppleInsider. [2018-01-03]. (原始內容存檔於2018-01-11) (美國英語).
外部連結
[編輯]- 英特爾陷芯片安全問題漩渦_新浪網 (頁面存檔備份,存於網際網路檔案館)(簡體中文)
- KPTI documentation patch (頁面存檔備份,存於網際網路檔案館)(英文)