TrustZone 硅后门
摘要 ARM TrustZone 将系统划分为普通世界与安全世界,通过安全监控调用(SMC)实现切换。高通、联发科等厂商在实现 SMC 处理表时,常未严格验证调用 ID 范围,且允许在 EL2/EL1 特权下修改 SMC 表指针。攻击者可利用这些漏洞,劫持合法 SMC 调用,将其重定向至恶意处理函数,从普通世界读取安全世界内存(包括指纹模板、加密密钥),甚至将恶意载荷注入安全用户态(S-EL0)的可信应用(TA)中,实现持久化隐蔽后门。 SMC 指令与调用表 SMC 快速调用 在 TrustZone 架构中,普通世界(Normal World)的代码无论特权级多高,都无法直接访问标记为安全世界的物理内存或外设。唯一受控的跨域交互是通过 SMC(Secure Monitor Call) 指令。当普通世界执行 SMC #imm 时,CPU 陷入安全监控模式(Monitor Mode)或直接切换到安全世界的 EL3 固件。SMC 指令携带一个 16 位立即数,作为调用 ID,安全监控软件根据该 ID 查找预定义的函数表,执行相应的安全服务。 安全监控软件通常由 OEM 提供(如 Qualcomm 的 QSEE、MTK 的 Kinibi),运行在 EL3,充当 TrustZone 的看门人。其内部维护一个 SMC 调度表,每个条目包含一个调用 ID、处理函数指针以及参数个数等信息。 调用表的静态与动态注册 OEM 的 SMC 表通常分为两部分:编译期静态表(如高通 qsee_handle_smc)和动态注册表(用于后续加载的安全世界内核模块)。动态表的基址常存储在 EL3 固件的数据段中,可通过逆向固件或利用内存泄露漏洞获取。在某些实现中,动态表的尾指针未正确校验,导致调用 ID…