Android可信执行环境学习

TEE的全称Trusted Execution Environment,它是移动设备(智能手机、平板电脑、智能电视)CPU上的一块区域。TEE 为运行在其中的应用程序提供了一个隔离的环境以保护应用程序和数据免受其他软件的攻击。TEE 常用于处理敏感的数据,如密码、密钥、生物识别数据等。前面在阅读安全白皮书时也提到了可信区域(HarmonyOS)/安全隔区(IOS)的概念,本质上就是本文介绍的可信执行环境。

TEE简介

TEE与REE

可信执行环境(Trusted Execution Environment,TEE) 是一种具有运算和储存功能,能提供安全性和完整性保护的独立处理环境。其基本思想是:在硬件中为敏感数据单独分配一块隔离的内存,所有敏感数据的计算均在这块内存中进行,并且除了经过授权的接口外,硬件中的其他部分不能访问这块隔离的内存中的信息,以此来实现敏感数据的隐私计算。

富执行环境 (Rich Execution Environment,REE) 指的是操作系统运行时的环境中,可以运行如 Android、IOS 等通用的操作系统。REE 是一个容易受到攻击的开放环境,如敏感数据的窃取、移动支付盗用等等。而 TEE 是中央处理器上的一个安全区域,能够保证敏感数据在隔离和可信的环境内被处理,从而免受来自 REE 中的软件攻击。此外,与其他的安全执行环境相比,TEE 可以端到端地保护 可信应用(Trusted Application,TA)的完整性和机密性,能够提供更强的处理能力和更大的内存空间。TEE用于敏感数据的安全存储、安全通信、可信UI的绘制、安全的加密策略等,而这些策略的承载者,就是TA。TEE 内部为 REE 中的软件提供了接口,使得 REE 中的软件可以调用 TEE 对数据进行处理,但不会泄露敏感数据。

REE调用TEE的接口进行安全数据处理

TEE的定义

Mohamed Sabt 等人在2015年的文章Trusted Execution Environment: What It is, and What It is Not | IEEE Conference Publication | IEEE Xplore中对 TEE 进行了崭新的更一般化的定义,提出了TEE的精确定义,并分析了TEE的核心特性。

分离内核是 TEE 的基础组件和先决条件,安全要求主要由四个主要安全策略组成:

  • Data (spatial) separation. 一个分区内的数据不能由其他分区读取或修改;
  • Sanitization (temporal separation). 共享资源不能用于将信息泄漏到其他分区;
  • Control of information flow. 除非明确允许,否则分区之间不能进行通信;
  • Fault isolation. 一个分区中的安全漏洞不能扩散到其他分区。

可信执行环境(Trusted Execution Environment, TEE)是一种在分离内核上运行的防篡改处理环境。它保证了执行代码的真实性、运行时状态(如CPU寄存器、内存和敏感I/O)的完整性,以及存储在持久性内存上的代码、数据和运行时状态的机密性。能够向第三方提供证明其可信性的远程证明。TEE的内容不是静态的;它可以安全地更新。TEE可以抵抗所有软件攻击,也可以抵抗对系统主存进行的物理攻击。利用后门安全缺陷进行的攻击是不可能的。

An overview of TEE building blocks

TEE发展

TEE 技术最早可以追溯到 2006 年。开放移动终端平台(Open Mobile Terminal Platform ,以下简称 OMTP))率先提出一个针对移动终端的双系统安全解决方案,即在同一个终端系统下同时部署两个操作系统,其中一个是常规的操作系统,另一个是隔离的安全操作系统。其中,安全操作系统运行在隔离的硬件环境中,专门处理敏感信息以保障其安全性。

在 OMTP 方案的基础上,ARM 公司提出了一种硬件虚拟化技术 TrustZone 及其相关的硬件实现方案,并于 2008 年第一次发布了 Trustzone 技术白皮书。目前 ARM 是移动端最具影响力的方案供应商,其 TEE 技术也在行业内处于主导地位:高通的骁龙系列,海思麒麟,联发科 ,三星等移动端主流处理器的芯片均基于 ARM 结构,并且它们采用的 TEE 技术也基于 ARM 结构。除此之外,还有一种比较主流的可信执行环境产品是 Intel 公司推出的 SGX(Software Guard Extensions)。

2010 年 7 月,Global Platform(以下简称 GP)正式提出了 TEE 的概念,并从 2011 年开始起草制定相关的 TEE 规范标准,针对 TEE 系统设计了一系列规范,对应用接口,应用流程,安全存储,身份认证等功能进行了规范化。GP 是跨行业的国际标准组织,致力于制定和发布基于硬件安全的技术标准。GP 组织制定和发布的国际标准被称为 GP 标准。此外 GP 组织还设立了 TEE 检测认证体系,对 TEE 产品进行功能检测并颁发证书,国际上大多数基于 TEE 技术的 Trust OS 都遵循了 GP 的标准规范。

国内,银联自 2012 年起与产业链合作开始制定包括 TEE 硬件、TEE 操作系统、TEE 基础服务和应用等各个层面的规范标准,并且于 2015 年通过技术管理委员会的审核发布银联 TEEI 规范。2017 年初,人民银行开始制定 TEE 各层面的需求类规范。2020 年 7 月,中国信通院发布联合 20 家单位共同参与制定的标准《基于可信执行环境的数据计算平台 技术要求与测试方法》。

CA与TA的通信(OP-TEE为例)

OP-TEE

About OP-TEE — OP-TEE documentation documentation

OP-TEE (github.com)

OP-TEE是一个可信任的执行环境(Trusted Execution Environment, TEE),它设计与运行在Arm上的非安全Linux内核一起。OP-TEE实现TEE内部核心API v1.3.1,这是公开给受信任应用程序的API,以及TEE客户端API v1.0,这是描述如何与TEE通信的API。这些API定义在GlobalPlatform API规范中。

OP-TEE 主要设计为依靠 Arm TrustZone 技术作为 底层硬件隔离机制。但是,它的结构是 与任何适合 TEE 概念和目标的隔离技术兼容, 例如作为虚拟机运行或在专用 CPU 上运行。

OP-TEE的主要设计目标是:

  • 隔离 - TEE 提供与非安全操作系统的隔离,并且 使用 底层硬件支持,
  • 占地面积小 - TEE 应保持足够小,可以驻留在 在基于 Arm 的系统上发现的合理数量的片上存储器,
  • 便携性 - TEE 旨在轻松插入不同的 架构和可用的硬件,并且必须支持各种设置,例如 多个客户端操作系统或多个 TEE。

通信交互接口

tee_ta_ca

CA API

TEE客户端API描述并定义了在富操作环境(REE)中运行的客户端应该如何与TEE通信。为了识别要使用的可信应用程序(TA),客户端提供一个UUID。所有TA都公开一个或多个函数。这些函数对应于所谓的commandID,也是由客户端发送的。

原则上,命令按此顺序调用:

  • TEEC_InitializeContext:对变量Context进行初始化配置,用来建立CA和TEE的联系,向TEE申请共享内存地址用于存放数据。
  • TEEC_OpenSession:建立一个CA和TA间的session,用于CA和UUID指定的TA进行通信,是CA连接TA的起始点。
  • TEEC_InvokeCommand:依靠打开的session,将传送命令请求给TA,并将必要的指令执行参数一并发送给TA。
  • TEEC_CloseSession:关闭session,关闭CA和TA之间的通道。
  • TEEC_FinalizeContext:释放Context,结束CA与TEE的连接。

在会话建立之后,经常会连续调用几次TEEC_InvokeCommand(…)。

TA API

Trusted Applications — OP-TEE documentation documentation

  • TA_CreateEntryPoint:为CA建立接入点,使得TA可以被CA调用。
  • TA_OpenSessionEntryPoint:建立CA与TA之间的通讯通道,作为CA连接TA的起点。
  • TA_InvokeCommandEntryPoint:接收CA传送的指令和参数,并在这TEE侧执行。
  • TA_CloseSessionEntryPoint:关闭CA与TA的通讯通道
  • TA_DestroyEntryPoint:移除CA的接入点,结束TA的功能。

安全分析

【看雪议题分享】深入Android 可信应用漏洞挖掘


Android可信执行环境学习
https://chujian521.github.io/blog/2023/11/27/Android可信执行环境学习/
作者
Encounter
发布于
2023年11月27日
许可协议