ARM TrustZone是ARM公司推出的SoC及CPU系统范围的安全解决方案,目前已在一些采用ARM指令集的应用处理器上广泛使用。本篇文章旨在对ARM TrustZone技术的体系架构、面临的安全隐患和应用进行简单的概述。
目录
1 TrustZone体系架构
2 基于TrustZone的TEE系统
3 TrustZone安全隐患
4 TrustZone的应用
1 TrustZone体系架构
ARM TrustZone是基于硬件的安全功能,它通过对原有硬件架构进行修改,在处理器层次引入了两个不同权限的保护域——安全世界和普通世界,任何时刻处理器仅在其中的一个环境内运行。同时这两个世界完全是硬件隔离的,并具有不同的权限,正常世界中运行的应用程序或操作系统访问安全世界的资源受到严格的限制,反过来安全世界中运行的程序可以正常访问正常世界中的资源。这种两个世界之间的硬件隔离和不同权限等属性为保护应用程序的代码和数据提供了有效的机制:通常正常世界用于运行商品操作系统(例如Android、iOS等),该操作系统提供了正常执行环境(Rich Execution Environment,REE);安全世界则始终使用安全的小内核(TEE-kernel)提供可信执行环境(Trusted Execution Environment,TEE),机密数据可以在TEE中被存储和访问。这样一来即使正常世界中的操作系统被破坏或入侵(例如iOS已被越狱或Android已被ROOT),黑客依旧无法获取存储在TEE中的机密数据。
图1(a)描述了Cortex-A上采用的TrustZone架构,该架构中还引入了一种称为监视模式的处理器模式,该模式负责在世界过渡时保留处理器状态,两个世界可以通过称为安全监视器调用(SMC)的特权指令进入监视模式并实现彼此切换。
![](https://i-blog.csdnimg.cn/blog_migrate/58f5ea4d6157c46268e1e915a4ca2687.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8f0f97c47b16750a86a235ab9e2a3361.png)
除了Cortex-A微架构外,ARM发布的新一代Cortex-M微架构同样为TrustZone提供了硬件支持。与Cortex-A相同的是,Cortex-M依旧将处理器运行状态划分为安全世界和正常世界,并阻止运行于正常世界的软件直接访问安全资源。不同的是,Cortex-M已针对更快的上下文切换和低功耗应用进行了优化。具体来说,Cortex-M中世界之间的划分是基于内存映射的,并且转换是在异常处理代码中自动发生的(如图1(b)所示)。这意味着,当从安全内存运行代码时,处理器状态为安全,而当从非安全内存运行代码时,处理器状态为非安全。Cortex-M中的TrustZone技术排除了监视模式,也不需要任何安全的监视软件,这大大减少了世界切换延迟,使得世界之间的转换为更高效。为了在两个世界之间架起桥梁,Cortex-M引入了三个新指令:secure gateway(SG),branch with exchange to non-secure state(BXNS)和branch with link and exchange to non-secure state(BLXNS)。 SG指令用于在安全入口点的第一条指令中从非安全状态切换到安全状态。安全软件使用BXNS指令来返回到非安全程序;最后,安全软件使用BLXNS指令来调用非安全功能。此外,Cortex-M中的状态转换也可以由异常和中断触发。
2 基于TrustZone的TEE系统
TrustZone通过硬件隔离出的安全世界提供了TEE,根据在安全世界中运行的可信程序的不同,又可以将其提供的TEE划分为两类:TEE内核与TEE服务。
在TEE内核中,可信程序实现一套基本的OS功能,以管理多个TEE实例,每个实例托管一个特定的应用程序。TEE内核实现的功能有:管理安全世界的内存、对每个TEE实施内存保护、处理TEE与OS之间的通信以及为TEE应用程序提供API 。为了解决正常世界中的操作系统和TEE内核的协同工作问题,业界提出了一系列有关TEE内核的标准。在2009年,Open Mobile Terminal Platform (OMTP)便提出了一个TEE标准,该标准定义了TEE应该支持的一系列安全功能。随后,GlobalPlatform组织以此为基础定义了可信应用程序可以依赖的内部API,以及正常世界的OS软件与TEE中的应用程序进行交互的通信接口。许多常见的TEE产品方案都遵守GlobalPlatform标准,例如SierraTEE、T6 、OP-TEE、Open-TEE和Samsung KNOX。
与TEE内核不同,TEE服务只实现某种特定功能,它们不需要任何低级OS逻辑来管理它们自己的内存和跨世界的通信。为了避免相互干扰,设备上只能部署一种TEE服务。与TEE内核相比,这是一个缺点,后者允许多个应用程序在独立的TEE实例中运行。但是,TEE内核的缺点是,与部署单个TEE服务的系统相比,它们通常依赖于较大的TCB,这意味着相比于TEE服务,TEE内核可能存在着更多的漏洞。常见的TEE服务包括:可信存储、安全的身份验证和加密、Rich OS验证和监控、可信I/O等。
3 TrustZone安全隐患
当前已发现的TrustZone漏洞主要可以归纳为两类:一类是缺乏鲁棒的TEE实现,导致无法为应用程序提供安全的运行容器;另一类是实现TrustZone的硬件存在缺陷,攻击者可以针对硬件漏洞发起攻击,进而获取存储的机密数据。
根据国家漏洞数据库(National Vulnerability Database,NVD)和一些公司(例如,高通,华为和三星)发布的安全公告,已发现的有关TrustZone和基于TrustZone的TEE的漏洞已达到了130多个。这些漏洞中的大多数都与TEE内核以及TEE驱动程序有关,例如缺乏输入验证、缓冲区溢出、过度读取、未初始化变量以及竞争条件等。出现这种情况的原因在于,尽管在设计TEE时能够保证其具有安全的体系结构以及能够提供完善而鲁棒的隔离,但是TEE内部运行的代码可能包含一些漏洞,攻击者可以利用这些漏洞破坏TEE并进而损害整个系统的信任状态。针对TEE中运行的代码存在的漏洞,业界尚缺乏用于验证和分析代码安全性的框架,同时TEE中也缺乏适当防御机制。
除了与TEE中运行的代码有关的漏洞外,在过去的几年中,研究者还发现了许多与实现TrustZone的硬件相关的漏洞,这些漏洞涉及构成平台信任根的组件、缓存、电源管理机制和FPGA等。
4 TrustZone的应用
4.1 用于提高物联网设备的安全
随着“万物互联”概念的到来,物联网设备被大量的部署,而这一新的互联网浪潮能否成功在很大程度上取决于数十亿种不同连接设备的安全性。最近的一些针对物联网设备的攻击表明,设计不佳的连接设备被黑客入侵后会造成巨大的损失。因此,保护物联网设备的安全是实现“万物互联”必须攻克的一个难题。
为了解决这个问题,ARM将TrustZone扩展到新一代微控制器。借助内置于物联网设备上的TrustZone,物联网设备制造商或软件开发者可以以较低的代价建立起可靠的安全防御体系。如今,ARM正在大力投资于物联网和嵌入式设备的规范与标准化,并且发布了平台安全体系结构(Platform Security Architecture,PSA)规范以及随附的名为Trusted Firmware-M的开源软件项目。 PSA主要是为保护低开销的IoT设备而设计的,可以在基于Cortex-M、Cortex-R和基于Cortex-A的设备上实现。不同的物联网设备制造商或开发者可以根据PSA,提供适合于自己设备的实现。
4.2 用于移动端环境与云计算环境的隐私保护
现有的基于TrustZone开发的应用主要用于提高移动平台上数据和应用程序的安全性,通过将用户的机密数据保存在基于TrustZone构建的TEE中,即使黑客完全控制了REE中的OS,也无法获取这些机密数据。早在iPhone 5s中,Apple便已利用TrustZone保护其Touch ID,这可确保即使iOS受到完全破坏,用户的指纹数据仍然无法被窃取。 2017年,谷歌也强制性要求所有配备指纹扫描仪的Android设备都需具有TEE。 如今,几乎所有的手机和平板电脑都部署了TEE。
随着ARM处理器在移动设备市场中的普及,一些云计算厂商也推出了基于ARM架构的产品,在云端使用ARM架构已是大势所趋。目前已有一些研究迈出了在云上使用TrustZone的第一步,例如在Zookeeper 中便使用TrustZone构建了受TEE保护的隐私代理,用于保护Zookeeper中存储的所有数据的安全。