macOS 中的 Option ROM 安全性
【注】搭载 Apple 芯片的 Mac 当前不支持 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 内存中的任何位置直接写入。它们会被限制到定义完备的非常窄的沙盒接口。这种受限的接口极大地减小了攻击面,迫使攻击者先逃离沙盒并提升特权。