戒指的概念
环是在 UNIX 的前身 Multics 中引入的,并且有8 个环用于读取、写入、执行和调用(我不太明白为什么它需要 8 个环来执行此操作,如果有人认为这是一个额外的问题!)。英特尔的 x86 架构将环的概念融入硬件中,4 个环对应环 0 用于内核,1 和 2 用于设备驱动程序,3 用于应用程序。
2019年情况
对于大多数用户来说,Ring 0 和 3 通常是现代 x86 操作系统中唯一使用的,ring 0 保留用于内核级操作,而 ring 3 保留用于用户级操作,尽管有一些例外;例如,VirtualBox 使用 ring 1来允许使用虚拟主机。一般来说,ring 3 中的代码无法访问 ring 0 中的内存或操作,尽管这是 Spectre 和 Meltdown 在 2018 年 1 月披露的问题的根源。
还为虚拟机管理程序引入了“环 -1”——英特尔 VT-X 和 AMD-V 添加了 9 条机器代码指令,引入了环 -1 的概念。Ring -2 通常称为 SMM(系统管理模式),用于非常低级别的操作,例如电源管理,仅由系统固件使用。它已与多个漏洞利用一起使用,以使 rootkit 驻留而操作系统无法干预。
在英特尔 Q35 芯片组(在 Q45 及更高版本中修复)上的 Invisible Things 演示攻击后,“Ring -3”是为低于该级别操作而创造的。这通过重新映射为英特尔管理引擎保留的前 16 MB RAM 来实现,即使设备处于 S3 状态也可以运行。
ARM 处理器似乎只使用 3 个环,顺序相反;PL0 是用户,PL1 是操作系统,PL2 是管理程序。 请参见图 3.20 和 ARM 的此页面。
总结和问题
多年来,有几个漏洞利用证明了在 x86 架构最初描述的之外的环上的漏洞利用。更低级别的环会是什么样子(Intel 中的环 -4,ARM 中的 PL3 或 AMD 中的环 -3)并且在这方面是否有任何关于漏洞利用的工作。此外,我尝试遵循关于良好提示性问题的指南,以便对“如何”和“为什么”的解释适用。