核心:禁用 /dev/kmem 和 /dev/mem
我理解這一點
/dev/kmem
並/dev/mem
提供對系統記憶體(即原始 RAM)的訪問。我也知道,/dev/kmem
可以在核心中完全禁用它,並且可以限制/dev/mem
.在我看來,對記憶體的原始訪問可能對開發人員和黑客很有用,但為什麼我需要通過
/dev/mem
. AFAIK 不能在核心中禁用它(與 不同/dev/kmem
)。在我看來,訪問可能被濫用/利用的原始記憶體似乎只是自找麻煩。它有一些實際用途嗎?是否有任何使用者程序需要它才能正常工作?
Scale 7x 2009 有一個幻燈片,標題為:破壞 Linux 核心:通過 /dev/mem 進行惡意程式碼注入,其中包含這兩個項目符號。
誰需要這個?
- X 伺服器(影片記憶體和控制寄存器)
- 劑量mu
從到目前為止我從搜尋中找到的所有內容來看,這兩個子彈似乎是合法用途的領先者。
參考
值得注意的是,即使您禁用
/dev/mem
了/dev/kmem
該記憶體,仍然可以轉儲;看一看man proc
就知道了/proc/kcore
;它是系統的物理記憶體。一個非常好的取證工具包rekall 已經有一個工具可以做到這一點;它轉儲記憶體(和/boot
文件),以便對其進行分析。事實上,Ubuntu 預設禁用
/dev/kmem
:
/dev/kmem
除了攻擊者使用它來載入核心 rootkit 之外,沒有任何現代用途。CONFIG_DEVKMEM
設置為“n”。雖然/dev/kmem
設備節點仍然存在於 Ubuntu 8.04 LTS 到 Ubuntu 9.04 中,但它實際上並未附加到核心中的任何內容。Ubuntu 不會禁用
/dev/mem
,因為應用程序需要它。一些應用程序(Xorg)需要從使用者空間直接訪問物理記憶體。存在特殊文件
/dev/mem
以提供此訪問權限。過去,如果攻擊者俱有 root 訪問權限,則可以從此文件查看和更改核心記憶體。引入了CONFIG_STRICT_DEVMEM
核心選項來阻止非設備記憶體訪問(最初命名為CONFIG_NONPROMISC_DEVMEM
)。如何禁用
/proc/kcore
?你如何禁用
/dev/mem
?好吧,查看
man mem
給我們一些關於它是如何創建的細節:mknod -m 660 /dev/mem c 1 1 chown root:kmem /dev/mem
你應該能夠
rm -rf /dev/mem
;您可以在核心建構階段通過不啟用來禁用CONFIG_STRICT_DEVMEM
.如何禁用
/dev/kmem
?確保
CONFIG_DEVKMEM
在核心建構時未啟用。如何防止冷啟動攻擊?
如果我能夠禁用
/proc/kcore
,/dev/mem
,/dev/kmem
然後使用加密的交換分區或根本不使用交換怎麼辦?好吧,您的記憶可能會被凍結並以這種方式訪問。你如何防止這種攻擊?你加密你的記憶體;你如何加密你的RAM?你不能。有關詳細資訊,請參閱 TRESOR。