
macOS 中的 Option ROM 安全性
搭载 Apple T2 安全芯片的 Mac 中的 Option ROM 安全性
雷雳和 PCIe 设备都可以通过物理方式连接 Option ROM (OROM)。(这通常不是真正的 ROM,而是储存固件的可重写芯片。)在基于 UEFI 的系统中,该固件通常是 UEFI 驱动程序,由 UEFI 固件读入并运行。运行的代码应该初始化并配置从中获取代码的硬件,使硬件供其他固件使用。专门的第三方硬件需要借助此功能在启动的最初阶段载入并运行,例如从外置 RAID 阵列启动。
但是由于 OROM 通常可重写,如果攻击者改写了合法外围设备的 OROM,攻击者的代码就可在启动过程的初期执行,从而能够篡改执行环境并破坏后续载入软件的完整性。与之类似,如果攻击者将自己的恶意设备引入到系统中,他们也能够执行恶意代码。
在 macOS 10.12.3 中,2011 年之后销售的 Mac 电脑变为启动时默认不运行 OROM,除非按下特殊的组合键。这个组合键可以防范在 macOS 启动序列中无意引入恶意 OROM。而“固件密码实用工具”的默认行为也发生了更改,当用户设定了固件密码后,即使按下组合键也不能执行 OROM。这可以防范处于电脑前的攻击者故意引入恶意 OROM。对于设定了固件密码但仍需运行 OROM 的用户,可以在 macOS 中使用 firmwarepasswd 命令行工具来配置非默认选项。
OROM 沙盒安全性
macOS 10.15 更新了 UEFI 固件以包含在沙盒中运行 OROM 并取消 OROM 特权的机制。UEFI 固件通常以 CPU 最高特权等级(称为 Ring 0)执行包括 OROM 在内的所有代码,其所有代码和数据还具有单独的共享虚拟内存空间。Ring 0 是 macOS 内核运行的特权等级,而 Ring 3 则是 App 运行的较低特权等级。OROM 沙盒通过像内核一样利用单独的虚拟内存来降低 OROM 的特权,使其以 Ring 3 特权运行。

沙盒进一步大幅限制 OROM 可以调用的接口(与内核中的系统调用过滤非常类似)以及 OROM 可以注册为的设备类型(与 App 批准非常类似)。这样设计的好处是恶意 OROM 不再能够在 Ring 0 内存中的任何位置直接写入。它们会被限制到定义完备的非常窄的沙盒接口。这种受限的接口极大地减小了攻击面,迫使攻击者先逃离沙盒并提升特权。
【注】搭载 Apple 芯片的 Mac 当前不支持 Option ROM。