Linux

核心:禁用 /dev/kmem 和 /dev/mem

  • January 6, 2020

我理解這一點/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

CONFIG_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

引用自:https://unix.stackexchange.com/questions/126608