Ring 1 和 Ring 2 内存保护架构

信息安全 操作系统 记忆 保护 虚拟内存
2021-09-10 12:15:39

我听说Ring 1 和 Ring 2 内存保护在现代系统中基本上不再使用。

然而,当我检查事情时,我发现这些环以某种方式与驱动程序和驱动程序访问相关联。

这些是否真的被完全淘汰了,或者这两个保护环的元素存在于仍然常用的系统操作系统中(例如,OSX、Windows 7-10 和常见的 Linux 发行版,如 Mint 或 Ubuntu)?如果是这样,我将编写什么样的代码来要求访问系统的这些部分?如果它们确实已经被淘汰,或者正在被淘汰,这种变化的原因是什么?

我假设这两个环充当某种中间层,例如中间件,位于内核(环 0)和应用程序层(环 3)之间......

2个回答

四环系统是英特尔设计的,任何人都可以使用,微软选择了一种方案来简化开发工作,以牺牲一些安全性为代价提供更快的操作系统。就微软而言,它们并没有被淘汰,因为它们从一开始就没有被使用过。微软没有要求英特尔制造两环系统;英特尔提供了一个四环通用系统,微软决定以他们认为合适的方式使用它。

英特尔为操作系统提供了一种方法来提供额外的安全性,以防止恶意驱动程序使系统崩溃,而微软选择了另一种方式(签名驱动程序),这在 32 位模式下是可选的,在 64 位模式下是必需的。Microsoft 要求验证驱动程序在签署二进制文件之前不会影响系统。您会记得 Windows 95/98 因崩溃而臭名昭著。这是因为驱动程序通常是错误的,并且操作系统对这些驱动程序没有保护,因为它们都在 Ring 0 中。

我相信今天仍在使用一些现代操作系统,它们使用两个以上的环级别,并且作为向后兼容性的问题,硬件制造商不能排除这两个“未使用”的环。仅仅因为微软和主要的 Linux 内核使用两个以上的级别并不意味着有人不能编写一个确实使用 Rings 1 和 2 提供的额外保护的操作系统。在我们无法事先验证程序行为并且处理器速度太慢而无法在软件中完成所有保护的时代,硬件保护免受恶意软件或故障软件的侵害是绝对必要的。

微软还发布了一个名为Singularity的研究项目,以及所有代码都运行在 Ring 0 中的操作系统,并且内存中的所有页面都不使用段选择器。换句话说,没有针对恶意程序的硬件保护。这会显着提高速度,因为程序不再需要通过环层来调用内核代码,但所有代码都必须是静态可验证的,就像在 .NET 中编写而不使用“不安全”关键字时一样。操作系统可以在执行之前静态地验证程序不是恶意的。完整的源代码可免费获得。

硬件保护可能永远不会被淘汰,因为依赖它的系统实在太多了。这需要硬件和软件供应商之间的协调努力,从长远来看可能会花费数十亿甚至数万亿美元,而在运行功率/速度等方面的成本没有任何显着降低。只要只有三个主要的竞争操作系统(Microsoft、Apple、Linux),在可预见的未来,这两个环(0 和 3)很可能会继续使用。要打破现状,需要重大的市场变化。

x86 确实有 4 个保护环,但是 x86-64 只有 2 个,AMD 在设计 x86-64 时删除了环 1 和 2,但是这在虚拟化方面引发了问题,Intel 和 AMD 现在已经引入了 VT- x 和 AMD-V 分别有效地为虚拟化添加了一个环 -1。所以不,这些操作系统都没有使用额外的环,尽管它们有点使用额外的环来进行虚拟化。

环 1 和环 2 的想法是,您可以在不让给定驱动程序崩溃整个系统的情况下提供额外的访问权限,我不会重复 @phyrfox 所写的内容。

在使用所有 4 个保护环的操作系统方面,OpenVMS 可能是最突出的,这也是它在安全方面享有如此良好声誉的原因之一。OpenVMS 最初是为有 4 个环的 VAX 架构编写的,然后被移植到 AXP(Dec Alpha),这是一个只有 2 个环的 64 位架构,但是使用 PAL 代码很容易模拟所需的其他 2 个, DEC毕竟是硬件和软件的设计者,它已经被移植到具有4个特权级别的IA-64(Intel Itanium)。

OpenVMS 现在正在移植到 x86-64,主要困难之一是模拟额外的 2 个保护环。