在 x86 下的最高权限级别,也被称为 Ring -2

运行在被称为SMRAM的专用内存区域中,它仍然位于主存中,但对其访问受限,只有CPU处于SMM时才能读写该区域。基本布局如下图所示

Untitled

SMRAM的基地址由内部寄存器 SMBASE 决定,可以在 SMM 下修改。

SMM 下也存在页表,但似乎是 1:1物理地址页表,不做地址转换,仅用于权限保护

目前版本下的EDK2会通过页表将 SMRAM 以外的区域标记为 不可执行,防止SMM驱动程序执行不可信内存区域的代码,但可以读写非 SMRAM 内存。

其他权限级别进入 SMM 也是通过中断机制,称为 System Management Interrupt (SMI),由芯片组发出,通常软件也能通过写入IO端口来触发(通过OUT写入端口0xb2)

触发中断后,会发生上下文切换,CPU切换为SMM,载入保存的 SMM 寄存器,进入到 SMBASE + 特定偏移 的Handler中。

参考:

System Management Mode - OSDev Wiki

Non SMRAM access in SMM · A Tour Beyond BIOS - Memory Protection in UEFI BIOS (gitbooks.io)

System Management Mode - Wikipedia

Attack

常见的攻击有以下几种:

  1. D_LCK未设置:导致一些关键寄存器可被修改,如 D_OPEN,会允许非 SMM 状态下访问 SMRAM
  2. SMRAM remap:没细看
  3. Branch Outside of SMRAM:调用了SMRAM以外的代码,可被低权限攻击者(Ring 0)修改