TrustZone 将 CPU 的执行环境划分为了 Secure World 和 Normal World,Secure World 拥有更高的权限,可以访问 Normal World 的内存、eFUSE 寄存器、Security Engine 寄存器等等。但是 Normal World 中的最高权限却无法访问 Secure World 的内存。
但是 Normal World 可以通过 SMC 指令调用 Secure World EL3 中注册的命令,然后 EL3 程序再将 Normal World 的请求转发给 Secure World,从而达到两个世界之间的通讯。
这是一个运行在 Secure World EL3 权限中的程序,Secure Monitor 的主要作用就是注册 SMC 指令的回调,转发两个世界之间的消息。
这是一个通常运行在 Secure World EL1 权限中的内核程序,比较常见的是基于开源的 ARM Trusted Firmware 进行扩展修改的,别的实现还有基于 Little Kernel 的,以及一些芯片厂家自己的实现。它的主要作用是给 Secure World 中运行的程序提供一个基本的系统内核,实现多任务调度、虚拟内存管理、System Call 回调、硬件驱动、IPC 通讯等等。
这些是在 Secure World EL0 中运行的程序、Daemon。根据不同的 Trusted OS 的实现,TA 的格式、运行模式也会有所不同,比如 ARM Trusted Firmware 的 TA 使用的是 ELF 格式,而高通的 TA 用的是自家的格式。
Secure Monitor 会初始化 TrustZone 环境,设置 SMC 回调,然后开始执行 FSBL 已经加载好的 Normal World 中的 Second Stage Bootloader,和 Secure World 中的 Trusted OS。
Trusted OS 会初始化 Secure World 中的系统内核环境,然后从 eMMC 加载各种 Trusted Applications(TA),认证它们的数字签名,然后执行它们。每个 TA 都会有自己独立的虚拟内存空间。TA 如果要访问特定的硬件,比如 Security Engine,会在一个描述 TA 的头信息中申请,TA 的签名也会涵盖这部分头信息。Trusted OS 如果同意 TA 访问这些硬件,会把对应的寄存器地址 mmap 映射到 TA 的虚拟内存空间中。
Second Stage Bootloader 也就是我们一般说的 Android Bootloader,它会加载验证然后执行 Android Kernel。
可以看出来,从 bootROM 到 Normal World 的 Kernel,到 Secure World 的 TA,每一步的加载都是要经过数字签名认证的,而所有这些签名认证的根证书,是要跟 eFUSE 中的 Signing Key 匹配的。这就形成了一个信任链。
回顾我们前面定义的威胁模型,如果攻击者的目的是刷自定义 ROM,那至少要同时拿到 Normal World 和 Secure World 的 EL1 权限才能勉强让一个自定义 ROM 正常运作。如果攻击者的目的是破坏由 TrustZone 保护的 IAP 支付机制,或者 DRM 保护机制,则至少要拿到实现这些保护机制的 TA 的权限才行,也就是至少要拿到 Secure World EL0 的权限。
目前我接触到的攻击思路,我基本上分为两类:Top Down 和 Bottom Up。
所谓 Top Down,就是从最上层的程序,也就是最低级的权限一步步提权,每一次提权就获得更底层一点的权限,慢慢渗透到目标权限层。
这个案例他们假设一开始只有 Normal World 中 EL0 的权限,但是可以自己写程序调用 TrustZone 的 Driver,通过 Driver → Android Kernel → SMC → Secure Monitor → Trusted OS Kernel → Trusted Application 这条线路调用 TA 的相关功能。他们逆向了 TA 的代码,找到了一处 memcpy 越界漏洞,从而拿到了该 TA 的 Secure World EL0 权限。
但是这个 TA 的权限有限,他们又通过 Trusted Application → System Call → Trusted OS → Secure Service 的线路调用同是 Secure World EL0,但是有更多 System Call 权限的一个 Secure Service。他们同样在这个 Secure Service 中找到了一处 memcpy 越界漏洞,从而拿到了更高权限的 Secure World EL0 执行权限。
然后他们发现这个 Secure Service 的其中一个 System Call 是一个任意地址 mmap,而且没有任何限制。于是他们可以直接把 Secure Monitor 的物理地址直接 mmap 到 Secure Service 的虚拟地址空间,然后直接改写 Secure Monitor 的代码,直接拿到 Secure Monitor 所在的 Secure World EL3 权限。基本上来说,拿到 EL3 权限,就已经可以做到任何想做的事情了。