这是一个非常核心的架构问题。在 ARMv8 架构中,EL3(Exception Level 3) 处于特权级金字塔的顶端,被称为 "Secure Monitor"(安全监控器) 的领地。
如果说操作系统(EL1)是应用的管理者,虚拟化(EL2)是操作系统的管理者,那么 EL3 就是世界的管理者。
下面详细介绍 EL3 的职能以及为什么必须由它来做这些事。
一、 EL3 具体做哪些事情?
EL3 的代码量通常很小(例如 ARM 的 Trusted Firmware-A),但权限极大。它的核心职责可以概括为 "门卫" 和 "总管"。
1. 世界切换
这是 EL3 最核心的工作。
- 动作 :当普通世界调用
SMC指令,或者安全世界调用ERET返回时,CPU 会陷入 EL3。 - 职责:EL3 负责保存当前"世界"的上下文(寄存器、状态),并恢复另一个"世界"的上下文。
- 关键操作 :修改
SCR_EL3寄存器中的 NS bit 。- 如果要从普通世界切到安全世界,EL3 将 NS 设为 0。
- 如果要切回普通世界,EL3 将 NS 设为 1。
- 注意:只有 EL3 有权限修改 NS bit,EL1 和 EL2 根本看不到这个位。
2. 系统安全初始化
在 CPU 刚上电或复位时,默认是处于最高特权级 EL3 的。
- 动作:配置系统的安全策略。
- 职责 :
- 初始化 TZASC (TrustZone Address Space Controller):告诉硬件哪些物理内存地址是"安全的",哪些是"非安全的"。这决定了后续 CPU 能否访问某块内存。
- 初始化 TZPC (TrustZone Protection Controller):配置外设(如 UART、USB、Crypto 加密引擎)属于哪个世界。
- 配置中断控制器(GIC):决定哪些中断属于安全世界,哪些属于非安全世界。
3. 电源管理(PSCI)
你手机的开机、关机、待机、睡眠,其实最后都是由 EL3 执行的。
- 动作:Linux 内核(EL1)想要关闭 CPU 核心进入睡眠,或者唤醒其他核心。
- 职责:Linux 内核没有权限直接操作物理电源控制器,它会发出 PSCI 调用陷入 EL3。EL3 负责真正地切断核心电源或拉高电压。
- 原因:电源管理涉及整个芯片的物理状态,必须由最高权限的固件控制,防止恶意系统搞坏硬件。
4. 处理安全中断
- 动作:当安全外设(如安全定时器、指纹传感器)触发中断时。
- 职责:EL3 捕获这些中断,并将其路由给安全世界(TEE OS)处理,而不是扔给 Android 处理。
二、 为什么必须放到 EL3 来做?
你可能会问,为什么不让 Linux 内核(EL1)直接切换状态?或者让 Hypervisor(EL2)来做?理由主要有三点:
1. 硬件架构的强制隔离
这是最根本的原因。ARM 硬件设计了一条铁律:对安全状态的修改权,只赋予最高特权级。
- NS bit 的不可见性 :在 EL0、EL1、EL2 运行时,CPU 甚至"看"不到
SCR_EL3寄存器。普通世界的代码想作弊把 NS 位改成 0?硬件直接报错。 - 防止提权 :如果允许 EL1(OS)修改 NS 位,那么一旦 Android 系统被 Root(被黑客攻破),黑客就可以直接把 CPU 切换到安全模式,随意读取 TEE 里的指纹和密钥。EL3 的存在,保证了即使 OS 彻底烂掉,TEE 依然是安全的。
2. 信任链的根基
安全是一个层级递进的过程:
- App 信任 OS(EL1)。
- OS 信任 Hypervisor(EL2,如果有的话)。
- 所有层级都必须信任 EL3。
EL3 的代码通常是芯片厂商出厂时烧录好的,且经过严格验证。它是整个系统的 Root of Trust(信任根) 。把"切门钥匙"的权利交给 EL3,意味着我们默认:EL3 是绝对可信的,而 EL1/EL2 是不可信的。
3. 中立的仲裁者
EL3 站在两个世界之外,充当"裁判"。
- 如果让安全世界(TEE OS)负责切换,那么 TEE OS 就需要知道普通世界的所有细节(寄存器状态、调度信息),这增加了 TEE 的代码复杂度和攻击面。
- 如果让普通世界负责切换,那安全就荡然无存了。
- EL3 作为一个极简的、中立的中间层,只负责"搬运"和"开门",不参与具体的业务逻辑,这样最安全、最高效。
三、 形象的比喻:机场安检通道
为了串联理解,我们可以把 CPU 运行比作机场旅客:
- EL0 (App):普通乘客。只能在候机大厅活动。
- EL1 (Linux Kernel):地勤人员。可以管理乘客,安排登机,但不能进入驾驶舱。
- EL2 (Hypervisor):机场调度员。可以管理多个航班(虚拟机),但也进不了驾驶舱。
- EL3 (Secure Monitor) :安检闸机与空管系统。
为什么必须由 EL3 做切换?
- 旅客想从"非安全区"(候机厅)进入"安全区"(飞机驾驶舱/TEE)。
- 这时候,必须通过 安检闸机(EL3)。
- 闸机(EL3)做三件事:
- 查票:验证是否有权限进入。
- 换装:要求旅客取出违禁品(保存非安全上下文),换上飞行服(加载安全上下文)。
- 开门:按动按钮打开闸机(修改 NS bit)。
如果让地勤(EL1)自己掌握钥匙开门,那地勤就可以带任何人随意进出驾驶舱,这就破坏了整个机场的安全体系。所以,开门的权力,必须收归最高层(EL3)所有。