我正在为计算机安全考试而学习,我正在努力理解以下示例问题。
'解释在 x86 上在 ring 0 中运行和在 Linux 中作为 UID 0 运行之间的区别。举一个例子,说明每个人都能实现但另一个不能。'
我目前的理解是 x86 上的 ring 0 是最高特权的操作系统级别,内核代码在 ring 0 中运行。 UID 0 是基本上可以运行任何东西的 linux 超级用户。以我目前对这些概念的理解,我不明白如何回答这个问题。
请注意,这不是作业问题,也不是我要评分的问题,它只是学习材料。
你的理解是正确的。“Ring 0”是处理器内核模式的 x86 术语。“在环 0 中运行”意味着“内核代码”。
在安全性方面,一个进程(在任何 UID 下)可以完成的所有事情都可以由内核完成。有些事情从内核代码做起来很不方便,例如打开文件,但它们是可能的。
相反,在正常情况下,如果您可以在 UID 0 下运行代码,那么您可以通过加载内核模块来运行内核代码。因此,在典型配置下,UID 0 和内核级别之间没有安全屏障。然而,在进程中运行的代码仍然受到处理器用户模式的限制:对外围设备(包括磁盘、网络等)的每次访问仍然必须通过系统调用。可以将机器配置为具有并非全部强大的 UID 0,例如: