在 x86 下的最高权限级别,也被称为 Ring -2
运行在被称为SMRAM的专用内存区域中,它仍然位于主存中,但对其访问受限,只有CPU处于SMM时才能读写该区域。基本布局如下图所示
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
常见的攻击有以下几种: