題 以root模式運行的應用程序是否能夠覆蓋OS或其他程序的內存部分?


我讀 這裡 任何以root模式運行的應用程序都可以發出內核調用並在內核模式下執行。是否有可能在根模式下運行的任何應用程序都可以進行內核調用,進入內核模式並篡改其他程序的內存區域或者弄亂操作系統的內存部分,幾乎所有的教程我發現內核模式給出了COMPLETE ACCESS我的硬件,如果是這樣的話,這不是一個很好的安全漏洞,在獲得根級別訪問之後,程序可以訪問RAM / DISK上的任何內存位置嗎?

(當我問這個問題時,我腦子裡有Linux)
編輯:
好吧,我非常確信在Linux中內存是完全暴露的,有人可以解釋一下,如果它在Windows和Unix中是一樣的


3
2017-11-04 17:22


起源


在Windows中它應該是相同的。內核模式與用戶模式的區別是x86功能,在環0中運行的程序(即內核模式)對所有內容(包括內存和MMU)具有完全權限。 - Lie Ryan


答案:


是的,這當然是可能的 - 許多Linux系統甚至通過兩個設備文件暴露內存 /dev/mem (用於物理內存)和 /dev/kmem (用於虛擬內存)。您可以通過訪問內核的虛擬地址空間 /proc/kcore。當然,不建議寫入這些設備,因為您可能很容易丟棄您的系統。

我不確定為什麼這可能被視為安全問題 - 你通常必須是root用戶才能寫入這些設備,如果你有root訪問權限,你就可以做任何你想要的事情。


2
2017-11-04 20:20



嘿,謝謝你的答案,你可以幫助我編輯??? - vikkyhacks
其他Unix系統也可能提供 /dev/mem 要么 /dev/kmem但是,儘管Windows曾經提供了一種直接從物理內存中讀取的方法 Device\PhysicalMemory,它似乎在最近的版本中被禁用。您可以使用 ReadProcessMemory 但是,要讀取單個進程的內存空間。 - user55325


你似乎在攪拌蘋果和橘子。引用你引用的問題的答案,“內核模式和root是兩個彼此並不真正相關的獨立思想。以root身份運行進程的概念是Unix / Linux術語,這意味著您以系統管理員身份登錄。 ...無論是root用戶還是普通用戶,您運行的任何進程通常都以用戶模式和內核模式運行。“所以 一個應用程序 以root身份運行通常不能只是切換並開始在內核模式下運行。它所能做的就是非root進程可以做的事情:調用系統函數,這會導致操作系統內核以內核模式運行。

也就是說,大多數基於Unix的系統確實為非root用戶/進程提供了root用戶權限。例如,正如user55325指出的那樣,大多數基於Unix的系統都有類似的偽設備 /dev/mem/dev/kmem,和 /proc/kcore 授予特權進程訪問不屬於它們的內存。此外,根進程可以 kill 任何過程,都可以通過各種方式操縱過程 /proc。當然,root擁有對每個文件的完全訪問權限。因此,獲得root訪問權限的流程確實具有很強的功能;但這就是它的方式。

就此而言,除非您始終從光盤(CD / DVD)或網絡啟動,否則操作系統將存儲在磁盤文件中,以root用戶身份訪問您的計算機的攻擊者可能會重寫整個操作系統,然後坐下來回來等你重啟。 (而且,哦,是的,我差點忘了;根進程也可以重新啟動你的系統。)所以,再次,是的,root權限非常強大。


2
2017-11-05 00:27