我读这里任何在根模式下运行的应用程序都可以发出内核调用并在内核模式下执行。任何在根模式下运行的应用程序都有可能发出内核调用,进入内核模式并篡改其他程序的内存区域或弄乱操作系统的内存部分,因为我找到的几乎所有教程都说内核模式可以完全访问我的硬件,如果是这样的话,那岂不是一个巨大的安全漏洞,程序在获得根级访问权限后就可以访问 RAM/磁盘上的任何内存位置?
(我问这个问题的时候脑子里想的是 Linux)
编辑:
好吧,我确实相信在 Linux 中内存是完全暴露的,有人能解释一下在 Windows 和 Unix 中是否也是如此吗
答案1
是的,这当然是可能的 - 许多 Linux 系统甚至通过两个设备文件/dev/mem
(用于物理内存)和/dev/kmem
(用于虚拟内存)来公开内存。您可以通过 访问内核的虚拟地址空间/proc/kcore
。当然,不建议写入这些设备,因为您很容易破坏系统。
不过,我不确定为什么这可以被视为一个安全问题 - 通常你必须以 root 身份才能写入这些设备,如果你拥有 root 访问权限,那么你就可以做任何你想做的事情。
答案2
您似乎把苹果和橘子混为一谈了。引用您引用的问题的答案,“内核模式和 root 是两个独立的概念,彼此之间没有真正的联系。以 root 身份运行进程的概念是一个 Unix/Linux 术语,表示您以系统管理员身份登录。……您运行的任何进程,无论是以 root 还是普通用户身份运行,通常都会在用户模式和内核模式下运行。”所以一个应用程序以 root 身份运行通常无法直接切换并开始在内核模式下运行。它所能做的就是非 root 进程可以做的事情:调用系统函数,这会导致操作系统内核在内核模式下运行。
话虽如此,大多数基于 Unix 的系统确实赋予了 root 用户非 root 用户/进程无法获得的特权。例如,正如 user55325 指出的那样,大多数基于 Unix 的系统都有伪设备,如/dev/mem
、/dev/kmem
和/proc/kcore
,它们授予特权进程访问不属于它们的内存的权限。此外,root 进程可以访问kill
任何进程,并且可以通过以各种方式操纵进程/proc
。当然,root 可以完全访问每个文件。因此,获得 root 访问权限的进程确实拥有很大的权力;但事情就是这样。
就此而言,除非您始终从光盘 (CD/DVD) 或网络启动,否则操作系统将存储在磁盘文件中,而以 root 身份访问您计算机的攻击者可以重写整个操作系统,然后坐等您重新启动。(哦,是的,我差点忘了;root 进程也可以重新启动您的系统。)因此,再说一次,是的,root 权限非常强大。