ARMv8与MTK8766隔离区固件架构解析

ARMv8与MTK8766隔离区固件架构解析 ARM V8与 MTK8766各隔离区运行的实体固件详解ARMv8架构通过异常等级和安全状态将系统划分为多个隔离区每个隔离区运行着不同的实体固件负责不同的功能。理解每个隔离区运行的实体固件是掌握整个系统架构的关键。1.1 标准ARMv8隔离区实体1.1.1 EL3BL31 Secure MonitorEL3是整个系统的最高权限等级运行BL31 Secure Monitor固件。BL31是标准ATF的核心组件负责以下功能世界切换负责安全世界与非安全世界之间的切换。SMC处理处理来自两个世界的SMC调用。中断路由配置GIC中断控制器路由安全中断和非安全中断。电源管理提供PSCIPower State Coordination Interface电源管理服务。系统初始化初始化系统的核心硬件如GIC、TZC-400等。BL31的代码量通常在100KB左右完全开源代码位于ATF源码的bl31/目录下。1.1.2 SEL1TEE操作系统SEL1是安全世界的内核态运行TEE操作系统。主流的TEE操作系统有OP-TEE由Linaro维护的开源TEE完全符合GlobalPlatform标准支持多种硬件平台。Google Trusty由Google开发的开源TEE与Android系统深度集成主要用于Pixel设备。QSEE高通开发的闭源TEE用于骁龙平台。Trustonic KinibiTrustonic开发的闭源TEE广泛用于三星、联发科等平台。TEE操作系统负责以下功能可信应用管理加载、运行和管理可信应用TA。安全存储提供基于硬件加密的安全存储服务。加密运算使用硬件加密引擎执行加密、解密、签名、验证等操作。可信UI提供安全的用户界面防止钓鱼攻击。生物识别处理指纹、人脸等生物识别数据。TEE操作系统的代码量通常在1MB左右开源TEE的代码位于各自的源码仓库中。1.1.3 SEL0可信应用TASEL0是安全世界的用户态运行可信应用Trusted Application, TA。TA是专门用于处理敏感操作的应用程序运行在TEE操作系统提供的隔离环境中。每个TA都有自己独立的地址空间相互之间完全隔离。TA只能通过TEE操作系统提供的API访问系统资源无法直接访问硬件或非安全世界的内存。常见的TA有Keymaster TA负责密钥的生成、存储和运算。Gatekeeper TA负责密码验证防止暴力破解。Fingerprint TA负责指纹模板的存储和比对。Face TA负责人脸模板的存储和比对。Payment TA负责安全支付相关的操作。TA的代码量通常在几十KB到几百KB之间可以是开源的也可以是闭源的。1.1.4 NSEL1Linux内核NSEL1是非安全世界的内核态运行Linux内核。Linux内核是Android系统的核心负责以下功能进程管理管理系统中的所有进程。内存管理管理系统的物理内存和虚拟内存。设备驱动提供硬件设备的驱动程序。文件系统管理系统的文件系统。网络协议栈提供网络通信功能。Linux内核的代码量非常庞大超过2000万行完全开源代码位于Linux内核源码仓库中。1.1.5 NSEL0Android应用NSEL0是非安全世界的用户态运行Android应用。Android应用是普通用户直接交互的程序运行在Linux内核提供的隔离环境中。每个Android应用都有自己独立的用户ID和地址空间相互之间完全隔离。应用只能通过Android系统提供的API访问系统资源无法直接访问硬件或其他应用的内存。常见的Android应用有系统应用如电话、短信、相机、设置等。第三方应用如微信、支付宝、抖音等。Android应用的代码量差异很大从几十KB到几百MB不等。2.2 MT8766隔离区实体MT8766的隔离区实体与标准ARMv8基本一致但在EL3和SEL1做了一些定制化修改。2.2.1 EL3Preloader中的Secure MonitorMT8766的EL3运行preloader.img中的Secure Monitor模块。与标准BL31不同MT8766的Secure Monitor与BL2合并为一个单一的preloader.img镜像全程运行在EL3。MT8766的Secure Monitor负责以下功能世界切换负责安全世界与非安全世界之间的切换。SMC处理处理来自两个世界的SMC调用。中断路由配置GIC中断控制器路由所有中断到EL3然后转发给对应的世界。电源管理提供MTK特有的电源管理服务。系统初始化初始化DDR、时钟、电源等核心硬件。preloader.img的代码量通常在200KB左右部分开源包含大量闭源二进制blob代码位于MTK ATF源码的plat/mediatek/目录下。2.2.2 SEL1Kinibi TEE内核MT8766的SEL1运行Trustonic Kinibi TEE内核。Kinibi是一款闭源的微内核TEE具有体积小、安全性高、实时性好等特点。Kinibi TEE内核负责以下功能微内核管理提供最基本的进程调度和内存管理功能。驱动管理管理安全外设的驱动程序所有驱动都运行在S-EL0。TA管理加载、运行和管理可信应用。安全存储提供基于RPMB分区的安全存储服务。加密运算使用MTK的HACC硬件加密引擎执行加密运算。Kinibi TEE内核的代码量非常小只有约200KB完全闭源只有二进制镜像tee.img。2.2.3 SEL0Kinibi TA与驱动MT8766的SEL0运行Kinibi TA和驱动。与标准TEE不同Kinibi采用微内核架构所有驱动和服务都运行在S-EL0作为独立的TA。常见的Kinibi TA和驱动有Keymaster TA负责密钥的生成、存储和运算。Gatekeeper TA负责密码验证。Fingerprint TA负责指纹模板的存储和比对。HACC驱动硬件加密引擎的驱动程序。RPMB驱动RPMB分区的驱动程序。Kinibi TA和驱动都是闭源的编译为MCLF格式内置在tee.img中。2.2.4 NSEL1LK Bootloader与Linux内核MT8766的NSEL1首先运行LKLittle KernelBootloader然后由LK加载和启动Linux内核。LK是一款轻量级的Bootloader负责以下功能硬件初始化初始化非安全世界的硬件设备。镜像加载从eMMC加载Linux内核和Android系统镜像。安全启动验证验证Linux内核和Android系统镜像的签名。启动参数传递将启动参数传递给Linux内核。Linux内核的功能与标准Linux内核基本一致但包含了大量MTK特有的驱动程序和补丁。2.2.5 NSEL0Android应用MT8766的NSEL0运行Android应用与标准Android应用完全一致。3.3 对比总结隔离区标准ARMv8实体MT8766实体EL3BL31 Secure MonitorPreloader中的Secure Monitor模块SEL1OP-TEE/Trusty TEE内核Trustonic Kinibi TEE内核SEL0可信应用TAKinibi TA与驱动NSEL1Linux内核LK Bootloader Linux内核NSEL0Android应用Android应用