一、前言:TEE介绍
1、数据隔离:
一个可信应用使用的数据不能被其他应用访问、修改,包括可信应用的数据对外部操作系统隔离以及多个可信应用之间的数据隔离。
2、计算隔离:
可信应用的计算和资源不能被其他应用观测和拦截,同时需要清理可信应用执行后的痕迹,防止来自侧信道的攻击。
3、通信控制:
非可信应用和可信应用、多个可信应用之间会话和数据交互不能破坏隔离性。
4、错误隔离:
非可信区域的安全漏洞不能扩散到可信应用中。
二、基于Arm架构的TEE
1、TrustZone
TrustZone 是 ARM 公司提供的硬件级别的安全解决方案,旨在为处理器提 供安全隔离和保护机制。它将处理器的内部划分为两个独立的安全区域:安全世界 和普通世界,从而实现了不同安全级别的隔离。
(1)两种执行环境:
TrustZone技术提供了两种执行环境,即正常世界和安全世界。正 常世界运行一个丰富的软件栈,称为富执行环境,由完整的操作系统和应用程序组成, 它被通常认为是不可信任的;安全世界和运行一个较小的软件栈,由可信操作系统和可 信应用组成。TrustZone执行系统范围内的世界间隔离,并在富执行环境调用可信应用的 服务时为世界切换提供受控的入口点。
(2)两种处理器安全状态:
Trust Zone启用了两种处理器安全状态:正常状态和安全状 态。在Arm架构中,有一种基于权限划分的防御机制,称为异常级别。一般来说,处于 异常级别El0和EL1的处理器核心运行在这两种安全状态中的任何一种;EL3始终处于安 全世界,并运行一个安全监控器,在改变安全状态方面发挥作用。典型的基于TrustZone 的系统使用资源分区的静态策略,只允许安全世界内存驻留几个固定的安全区域。
2、CCA
机密计算架构(Confidential Compute Architecture,CCA)旨在提供对敏感数据的保护,即使在运行计算任务的主机或云环境受到威胁时也能确保 数据的保密性和完整性。CCA 的目标是创建一个安全的执行环境,使得数据可以在不 受信任的环境中进行计算,同时保护数据不受未经授权的访问或监视。
3、核心概念:异常级别(Exception Level)
(1)EL0:Applications.
EL0 是最低特权级别,在这个级别上执行的是用户应用程序代码。
EL0 是设计用于运行用户空间的应用程序。这些应用程序通常是普通用户编写的软件, 例如应用程序、游戏等。
EL0 提供了最低的特权级别,应用程序在这个级别下运行时,只能访问其自己的内存空 间和受限制的系统资源。
用户应用程序在 EL0 下运行,通常无法直接访问底层硬件资源或执行特权指令。
(2)EL1:OS kernels
EL1 是操作系统内核运行的特权级别,也称为监管模式。
操作系统内核在 EL1 下运行,具有更高的特权级别,可以执行特权指令并直接访问硬 件资源。
EL1 是操作系统内核运行的特权级别,也称为监管模式。操作系统内核在这个级别下执 行,控制着系统的整体运行。
操作系统内核在 EL1 下运行,可以访问系统的全部硬件资源,执行特权指令,如修改 页表、处理中断等。因此,EL1 适用于操作系统内核和系统服务的执行。
(3)EL2:Hypervisor
EL2 是用于虚拟化的额外特权级别,是可选的,并不是所有的 ARM 架构实现都支持 EL2。
在 EL2 下,虚拟化管理程序(hypervisor)可以运行,用于管理虚拟机的创建、配置和 执行。
EL2 是为虚拟化技术设计的额外特权级别,用于虚拟机监控程序(hypervisor)的执行。
在 EL2 下运行的软件用于创建、管理和监控虚拟机,允许在单个物理处理器上运行多 个虚拟机实例。因此,EL2 适用于虚拟化管理程序的执行,如 KVM、Xen 等。
(4)El3:Secure monitor.
EL3 是用于处理安全功能的额外特权级别,也是可选的,并不是所有的 ARM 架构实现 都支持 EL3。
在 EL3 下,安全监视器(Secure Monitor)运行,用于处理安全相关的操作,例如 TrustZone 技术的实现和安全启动过程的管理。
EL3 是用于处理安全功能的额外特权级别,主要用于安全技术的实现,如 TrustZone 技 术。
在 EL3 下运行的软件用于处理安全相关的操作,如安全启动过程的管理、安全状态的 维护等。因此,EL3 适用于安全监视器的执行,用于实现安全启动和安全分区等功能。
其中,EL0和EL1是必须实现的,EL2和EL3是可选的。而且一个PE中实现的EL可以不连续, 例如只实现了EL0、EL1和EL3。
4、异常级别之间如何转换
(1)EL0 - >EL1
当用户应用程序执行一个特权指令或者触发一个需要内核处理的异常时,会 引发一个异常。异常处理程序会被启动,导致 CPU 从 EL0 转换到 EL1,进入内核模式。 这个过程被称为异常向量处理。在 EL1 下,操作系统内核处理异常,并执行必要的操 作,比如修改系统状态、处理中断、访问硬件资源等。
(2)EL1 - >EL0:
当操作系统内核完成异常处理或者需要返回到用户空间执行时,可以使用特 定的系统调用(例如 syscall)或者执行异常返回指令(例如 ERET)来进行 EL1 到 EL0 的转换。在这个过程中,内核会恢复用户应用程序的上下文,并将 CPU 从 EL1 转换 到 EL0,使得用户应用程序可以继续执行。
(3)EL1- >El2:
当操作系统内核需要启动虚拟化管理程序时,可以执行一个特定的指令(例如 HVC)来引发一个异常。异常处理程序会启动,导致 CPU 从 EL1 转换到 EL2,进入虚 拟化监管模式。在 EL2 下,虚拟化管理程序负责创建、管理和监控虚拟机的执行。
(4)El2 - >EL1:
当虚拟化管理程序完成其任务并需要返回到操作系统内核执行时,可以执行异 常返回指令(例如 ERET)来进行 EL2 到 EL1 的转换。在这个过程中,CPU 从 EL2 转 换到 EL1,并恢复操作系统内核的上下文,使得内核可以继续执行。
(5)El2- >EL3:
触发安全相关的事件:
当系统需要执行安全操作或者处理安全相关的事件时,例如安全启动过程、安全状态的 切换等,会触发一个特定的安全事件。
引发安全事件异常:
特定的安全事件会导致 CPU 从 EL2 转换到 EL3,进入安全监视器模式。
在这个过程中,会触发安全事件异常,启动安全监视器的异常处理程序。
执行安全操作:
在 EL3 下,安全监视器负责处理安全相关的操作,例如验证启动过程、管理安全状态 等。安全监视器可以执行必要的安全操作,并与安全世界(Secure World)进行通信, 确保系统的安全性。
(6)EL3 - >El2:
当安全操作完成后,安全监视器可能需要将控制权返回给 EL2,继续执行虚拟化管理程 序或其他任务。这时安全监视器可以执行特定的指令(如 ERET)来进行 EL3 到 EL2 的 转换。
三、参考文献
[1]Trusted Execution Environment: State-of-the-Art and Future Directions
[2]Learn the architecture - Introducing Arm Confidential Compute Architecture (Version 3.0)
[3]Learn the architecture - AArch64 Exception Model (Version 1.3)