安全通告: amd64 (SA-08:07.amd64)
主題: amd64 swapgs local privilege escalation
分類: 核心(core)
模組: sys_amd64_amd64
發布時間: 2008-09-03
影響: 所有支援FreeBSD/amd64 的版本.
I. 背景資訊
FreeBSD/amd64 是常見使用AMD或Intel CPU 的64位元系統.
對於Intel CPU 而言這個架構稱之為 EM64T 或 Intel 64.
gs segment 在CPU register 被 user processes 和 kernel 用來方便的存取 state data .
使用者程序透過它用來管理 per-thread 資料,而 kernel透過它來管理 per-processor資料.
當處理器(processor)進入或離開時, kernel 使用 'swapgs' 來進行 kernel和 使用者數值間的切換. kernel在 per-processor data block 儲存 critical information , 包含了目前正在執行的程序和他的憑證.
當處理器在 user模式和kernel模式切換時 , 為了完成權限的保護會有許多檢查.
若處理器當嘗試切換權限等級時,偵測到問題會產生一個 trap 為 通用保護錯誤(general protection fault) 簡稱GPF.
此時,處理器會忽略並且回到使用者模式處理,並且 re-enters kernel .
FreeBSD kernel 允許使用者程序透過SIGSEGV 或 SIGBUS 訊號提醒(notified)此類狀況.
II. 問題描述
若通用保護錯誤發生在 FreeBSD/amd64 系統上, 將會造成使用者及kernel狀態混淆.
III. 影響
本機的攻擊者可能造成通用保護錯誤, 並且用kernel權限執行惡意碼.
此威脅可能被用來取得 kernel/ superviosr 權限.
也就是說 普通的使用者 透過此威脅可以取得 root 權限.
IV. 暫時處理方式
只有執行64位元的 FreeBSD/amd 64系統才會有此威脅
若系統為64位元的CPU , 但執行 32位元的 FreeBSD/i386 kernel 不受影響
V. 解決方式
1) 昇級系統至 6-STABLE, 或 7-STABLE, 或 此威脅發生後的 RELENG_7_0 或 RELENG_6_3 版本.
2) 修補現有系統:
以下修補檔案被用來提供給 FreeBSD6.3和 7.0 系統:
a) 下載修補檔
# fetch http://security.FreeBSD.org/patches/SA-08:07/amd64.patch
b) 執行修補
# cd /usr/src
# patch < /path/to/patch (您置放patch的路徑)
c) 重新編譯kernel 並且重新開機.