可信执行环境——ARM的TrustZone

近年来,互联设备日益普及,迫使设备制造商们更加认真严肃的对待设备出现的安全问题。为了解决这些问题,专家们制定了一个新的规范,并且定义了一种方法来确保执行了该方法的设备上运行数据的完整性和机密性。

可信执行环境

可信执行环境(TEE)是主处理器内的安全区域。它运行在一个独立的环境中且与操作系统并行运行。它确保TEE中加载的代码和数据的机密性和完整性都得到保护。通过同时使用硬件和软件来保护数据和代码,这个并行系统比传统系统(即REE,也就是富执行环境)更加安全。在TEE中运行的受信任应用程序可以访问设备主处理器和内存的全部功能,而硬件隔离保护这些组件不受主操作系统中运行的用户安装应用程序的影响。TEE中的软件和加密隔离相互保护不同的受信任应用程序。

ARM的TrustZone硬件技术可以支持TEE实现,本文将具体讲解TrustZone,包括它的技术和问题。

具有TrustZone的ARM处理器实现了体系架构的安全扩展,其中每个物理处理器内核提供两个虚拟内核,一个被认为是不安全的,称为“non secure world”(不安安环境),另一个被认为是安全的,称为“secure world”(安全环境),还有一种在两者之间进行切换的机制,也就是监控模式。ARM结构图如下:

可信执行环境——ARM的TrustZone

如图所示,TrustZone包含监视器,可选操作系统和可选应用程序,都运行在secure world中。TrustZone实现可以包括所有这些组件,像Qualcomm或Trustonic实现那样,也可以像Nintendo Switch实现那样,只有一个监视器。

实现TrustZone操作系统为添加可信功能提供了更加灵活的模型,该模型旨在为normal world(正常环境)提供额外的安全服务。

这些功能可以作为签名的第三方应用程序(比如trustlet)使用,并在secure OS(安全操作系统)的安全环境下加载和执行,安全操作系统即运行在TrustZone上的操作系统。

trustlet完整性检查是非常标准的,由hash表组成,每个hash代表着ELF二进制文件一个片段的hash,然后由trustlet发布者对hash表进行签名,并且可以通过签名下方的证书链来对签名进行验证。这种信任链可以通过FUSE(用户控件文件系统)中采用SHA256加密的根证书进行验证,从而确保其完整性,如图:

可信执行环境——ARM的TrustZone

TrustZone用途宽广,包括DRM技术(数字版权管理),访问平台硬件特性,比如eFuse中存储的RSA公钥hash,硬件凭据存储,安全引导和安全元素模拟等等。

安全环境和正常环境—环境切换机制

处理器当前运行的环境可以通过安全配置寄存器中的非安全位来确定。通过执行专用指令Secure Monitor Call(安全监视调用),可以触发物理处理器从非安全环境进入监控模式的机制,它可以被视为监控模式软件的异常。此外,主内存也被标记为非安全位,允许安全环境和非安全环境之间的内存隔离。

ARMv7的异常处理

ARMv7中的异常处理要求安全环境注册一个向量的地址,当遇到SMC指令时,处理器将跳转到这个地址。这个handler位于ARMv7中存储在监视器向量基地址寄存器(MVBAR)中的地址的偏移量0x8处。

ARMv8的异常处理

在ARMv8中,引入了一个新的异常模型,它定义了异常级别的概念。

异常级别确定运行软件组件的权限级别(PL0到PL3)以及应使用哪种处理器模式(非安全和安全)来运行它。异常执行级别ELn与权限级别PLn相对应,n越大执行级别的权限越大。当异常发生时,处理器会定位到异常向量表并运行对应的处理器。

可信执行环境——ARM的TrustZone

SMC生成的同步异常,由存储在VBAR_EL3+0x600(即同步EL3异常处理器)处的处理器进行处理。

TrustZone商业实现

人们已经开发了几种商业实现,移动平台上最常见的三种实现方式如下:

· Trustonic的Kinibi

· Qualcomm的QSEE

· TrustedCore(华为TEE操作系统)

在TrustZone的不同实现中发现了许多漏洞,而且在多个平台的安全引导中也发现了几个漏洞,允许在TrustZone中进行代码执行。下面讨论其中的一些漏洞及其影响。

TrustZone自身漏洞

高通漏洞

Gal Beniamini发现了一些漏洞,包括安全环境用户空间中的代码执行和权限提升,通过SMC处理程序或SVC(ARM中的系统调用)处理程序,在安全环境内核中进行代码执行,从而导致KeyMaster Keys提取,TrustZone里的Linux内核劫持和解锁BootLoader等。

Azimuth Security团队发现了两个漏洞,高通TrustZone中的write primitive内存写入漏洞和任意代码执行漏洞。

还有一个漏洞,允许向TrustZone内核的任何地址写入值为0的dword。它可用于禁用TrustZone中memcpy函数的内存边界验证,精心构造任意的write primitive函数进行内存写入。

另外,高通TrustZone还存在单点故障,TrustZone中存在很多独立角色,但是其中一个角色出了错误会影响到其他所有组件。一个任意内存写入漏洞,尤其在安全环境内核中,会导致整个安全模型崩溃。

Trustonic漏洞

与QSEE不同,Trustonic开发的TrustZone以前称为t-base,后来改名为Kinibi,它有一个微内核,这意味着不再存在单点故障。虽然对Trustonic的TrustZone的公共研究较少,但有一些文章详细介绍了t-base 内部漏洞以及安全环境用户空间的一些漏洞

从Qualcomm TrustZone获取TEE操作系统要比Trustonic容易一些。比如,Qualcomm TrustZone可以直接从/dev/block目录下的Block块获取,而Trustonic TrustZone必须通过逆向sboot才能获取。

TrustZone强化的缺点

为了获得良好的安全性能和减缓逆向和利用过程,TrustZone强化至关重要。然后,下面列出的几点却并不适用:

· 两种实现在生产中都存在许多调试字符串。

· 在Kinibi上没有ASLR,在QSEE上ASLR只有9位。

· Kinibi上没有Stack Cookies。相反,QSEE上有Stack Cookies。

值得注意的是,一些TrustZone实现(例如为Nintendo Switch开发的实现)被加密存储并在引导过程中被解密,这给攻击者增加了额外的难度。

结论

一方面,使用TrustZone技术实现的安全模型通过安全环境和正常环境的分离提供了额外的分割,使得DRM解决方案有一定的保护作用,可以对抗恶意环境,如用户端和内核端的感染系统。

另一方面,整个操作系统的开发是一项艰巨的任务,通常会存在很多bug。TrustZone中的操作系统也不例外。一个导致安全环境内核内存损坏的开发错误会导致安全环境整个系统的崩溃,让它变得不再安全。同时,它也完全损坏了从安全环境可以访问到的正常环境。

最后,如果在安全引导链中发现了漏洞,那么在TEE操作系统启动之前就可以对其进行入侵损坏,这种情况已经发生了几次了。

本文翻译自:https://blog.quarkslab.com/introduction-to-trusted-execution-environment-arms-trustzone.html

如若转载,请注明来源及原文地址

相关新闻

联系我们

联系我们

18055100335

在线咨询:点击这里给我发消息

邮件:support@anyong.net

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
分享本页
返回顶部