Kees Cook推出了新補丁來提高Linux內核堆棧的安全性

Linux

Kees Cook,kernel.org的前首席系統管理員 是Ubuntu安全小組的負責人,現在在Google工作,以保護Android和ChromeOS, 發布了一組補丁,可將內核堆棧偏移隨機化 處理系統調用時。 修補程序通過更改堆棧位置來提高內核安全性,否則會使堆棧攻擊變得更加困難而失敗

修補程序的最初想法屬於PaX RANDKSTACK項目。 在2019年,英特爾工程師Elena Reshetova嘗試創建該想法的實現,以適合包含在Linux內核的主要組成部分中。

隨後,基斯·庫克(Kees Cook)採取了主動行動 他為內核的主版本提供了合適的實現,並且針對Linux 5.13版計劃了其補丁。

默認情況下將禁用該模式,要啟用它,將提供內核命令行參數 “ Randomize_kstack_offset =開/關»和設置 CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT, 另外,啟用該模式的開銷估計約為性能損失1%。

提議的保護措施的實質是在每個系統調用上選擇一個隨機的堆棧偏移量,即使接收到地址信息,也會使確定堆棧在內存中的佈局變得複雜,因為堆棧的基地址將在下一次調用時更改。

與執行不同 PaX RANDKStack在提議包含在內核中的補丁中, 初始階段不進行隨機化, 但是設置了pt_regs結構之後,這使得在長時間運行的系統調用期間無法使用基於ptrace的方法來確定隨機偏移量。

隨著Linux內核堆棧保護的不斷改進(帶有保護頁面的基於vmap的堆棧映射,刪除了thread_info,STACKLEAK),攻擊者不得不尋找新的方法來利用其漏洞。

在以下情況下,它們已經並且繼續依賴內核堆棧確定性 VMAP_STACK和THREAD_INFO_IN_TASK_STRUCT 它們不相關。 例如,如果在系統調用之間不能確定堆棧偏移量,那麼以下最近的攻擊將受到阻礙

randomize_kstack_offset函數的目的是添加一個隨機偏移量 在將pt_regs推送到堆棧上之後,以及在系統調用處理期間使用其餘線程堆棧之前,並在每次進程發出系統調用時都對其進行更改。 當前,隨機性的源由體系結構定義(但是x86使用rdtsc()的低字節)。

對於不同的熵源,將來可能會進行增強,但不在此補丁程序的範圍之內。 此外,為了增加不可預測性,在系統調用結束時選擇新的偏移量(從用戶空間開始測量偏移的時間應比進入系統調用時更不容易測量),並在每個CPU中存儲在一個變量中,因此值的生存期不會顯式地與單個任務相關聯。

在x86上,此操作沒有可見的更改,因為已無條件為編譯單元禁用了堆棧保護程序,但是arm64中需要進行更改。 不幸的是,沒有可用於禁用特定功能的堆棧保護程序的屬性。 與PaX RANDKSTACK函數的比較:RANDKSTACK函數將堆棧起始位置(cpu_current_top_of_stack)隨機化,也就是說,它包括pt_regs結構在堆棧上的位置。

最初, 這個補丁採用了相同的方法, 但是在最近的討論中,已經確定這幾乎沒有什麼價值,好像攻擊者可以使用ptrace功能一樣,您可以使用PTRACE_PEEKUSR來向pt_regs結構讀取/寫入不同的偏移量,觀察訪問pt_regs的緩存行為並找出隨機堆棧偏移量。

最後提到 初始實現支持ARM64和x86 / x86_64處理器.


發表您的評論

您的電子郵件地址將不會被發表。 必填字段標有 *

*

*

  1. 負責資料:AB Internet Networks 2008 SL
  2. 數據用途:控制垃圾郵件,註釋管理。
  3. 合法性:您的同意
  4. 數據通訊:除非有法律義務,否則不會將數據傳達給第三方。
  5. 數據存儲:Occentus Networks(EU)託管的數據庫
  6. 權利:您可以隨時限制,恢復和刪除您的信息。