环 -3 漏洞利用和其他环的存在

信息安全 开发 硬件 研究 英特尔 手臂
2021-08-13 13:41:42

戒指的概念

x86 环环是在 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)并且在这方面是否有任何关于漏洞利用的工作此外,我尝试遵循关于良好提示性问题的指南,以便对“如何”和“为什么”的解释适用。

3个回答

负环是假环。它们不是 CPU 的实际特权级别。戒指的工作方式很简单。一些指令具有特权检查,它们验证当前特权级别或 CPL 是否足够,如果不是,则指令失败并出现一般保护错误CPL0 是 ring 0,CPL1 是 ring 1 等等。有些指令会根据其操作数的值需要一定的权限级别(例如,mov如果 CPL 不足并且给它的内存地址需要 ring 0,可能会返回 GPF访问,或者如果给它的寄存器是特权的)。其他人总是需要更高的特权级别。还有一些可以配置为需要 CPL0。一个例子就是RDTSC指令。它将引发一般保护故障,除非CR4(第四个控制寄存器)的 TSD 位未设置,或者当前特权级别为零,或者系统处于实模式(通过检查 CR0 中的 PE 位是否未设置来确定)。该指令在内部定义为:

if(CR4.TSD == 0 || CPL == 0 || CR0.PE == 0) EDX:EAX = TimeStampCounter;
else Exception(GP(0));

我在这个答案中写了更多关于戒指及其用途的内容

没有负面特权级别这样的东西。它们不存在。Ring -1 只是虚拟机管理程序功能的昵称(Intel 上的 VT-x)。Ring -2 是系统管理模式上下文或 SMM 的昵称,它在称为 SMI 的特殊中断发生时执行隔离代码。Ring -3 是在 CSME 上运行的代码的昵称,CSME 是现代英特尔芯片组中的 i486/i586 混合协处理器,间接地可以访问系统内存(我说是间接地,因为它不是为完全内存访问而设计的,但是它确实暴露了一个虚拟 PCIe 设备,事实证明它也会干扰DMAR,由 IOMMU 使用)。将保护环用作这些超级特权上下文的类比可能会有所帮助,但是当您开始详细研究 x86 时,该类比就会失效。


更低级别的戒指会是什么样子

唯一可以被认为比这些都低的东西称为探测模式(同样,它不是真正的环)。它由JTAG启动并提供对整个 CPU 的极大控制。探测模式不再像以前那么强大,但可能有一些方法可以通过访问特殊的英特尔硬件和凭据来解锁更强大的探测模式版本。

在这方面是否有任何关于漏洞利用的工作

并不真地。JTAG 需要物理访问,对于 Intel,需要特定于 CPU 序列号的密码。现代商业英特尔芯片组也有可能通过烧录芯片组内置的特定 OTP(一次性可编程)熔断器在非开发板上禁用 JTAG 和相关调试功能。更熟悉英特尔的人或许可以澄清一下。

我将继续使用 intel/x86 架构来回答我的问题,但它可能适用于其他供应商/环形设计。

Ring -3 是“运行您的计算机的计算机”,主板上的管理引擎。因此,下一个合乎逻辑的步骤是在主板上寻找可以完全控制系统的芯片。我唯一能想到的就是RAM

现在你可能会说 RAM 并没有真正控制任何东西,因为它只是一个愚蠢的缓冲区,而 RAM 是由管理引擎直接控制的。然而,至少有一家公司一直在推销他们的带有嵌入式微控制器的 RAM。据推测,它用于将重复的内存任务卸载到嵌入到内存芯片中的控制器上。

如果您可以控制实际的 RAM,则可以控制系统中的任何内容,如果管理引擎拥有自己的内存,则可能除外。这些设备上的微控制器必须完全访问 RAM 才能完成工作。

至于针对漏洞利用所做的工作:这些设备远未标准化,因此使用它们的特殊功能将通过内核或用户模式驱动程序完成。因此,您需要特定于供应商的漏洞利用,因为它们将具有特定于供应商的驱动程序,以访问 RAM 芯片上的微控制器。

我不同意负环是假环。它们非常真实。让我们以 -1 为例:控制它几乎可以保证控制以 0 开头的任何东西(很少有例外)。没有什么不真实的。

这是我今天的看法:

  • 环 3 - 用户级

  • 环 2 - 驱动程序级别(实际驱动程序)

  • Ring 1 - 驱动程序仿真级别(如 Vista 以来的音频和 IRQ 软件分层)

  • 环 0 - 内核级别

  • 环 -1 - VM 级别(管理程序)

  • 环 -2 - 硬件管理系统(如 iDRAC)

  • Ring -3 - IME 和类似的硬件

如果人们能够找到一种方法来操纵电信号以实现特定目的,例如影响硬件组件,使其部分基本功能被禁用、卡住或更改,则可能存在环 -4。这在理论上是完全可能的,但据我所知,从未公开展示过。它还需要专门设计的硬件。