Armv9-A:如何利用MTE和FF-A功能创建最先进的TEE

140 篇文章 27 订阅 ¥59.90 ¥99.00

安全之安全(security²)博客目录导读


目录

一、什么是MTE?

二、Trustonic如何在Kinibi 600中使用MTE?

三、什么是FF-A?

四、FF-A如何在Kinibi 600中工作?

五、总结


说明:本文为转载文章,来自Trustonic

Armv9-A于2021年3月推出,代表了ARM对未来十年未来3000亿芯片计算平台的愿景。上一次我们讨论了Armv9-A中添加的一些关键扩展,如无特权访问[PAN]、指针身份验证码[PAC]、分支目标标识[BTI]等。

然而,从Trustonic的角度来看,Armv9-A最重要的两个功能是其内存标记扩展[MTE]和构建Cortex-A固件框架[FF-a]的安全管理程序。这是因为这两个功能都构成了我们Kinibi 600操作系统[OS]的关键元素,有助于在正确的环境中形成可信执行环境[TEE]。

考虑到MTE和FF-A的复杂性,我们将在这文章中更深入地研究这些功能,解释为什么我们要在Kinibi 600中实现它们。

一、什么是MTE?

Arm在Armv8.5-A架构更新中引入了MTE,它是一种新的硬件机制,使用户能够标记虚拟内存的区域。

当一个内存区域被标记时,它只能通过包含相同标记的虚拟地址访问。如果使用不同的标签访问该区域,则中央处理单元[CPU]会阻止访问并中止。

MTE硬件成本相当大,因此有合理的限制:一个操作系统的每个应用程序可以使用16个不同的MTE标签,并且内存区域的最小大小是16个字节。

该规则已经适用Linux应用程序,可以使用mmap()和PROT_MTE来分配支持标记的内存区域。clang工具链也支持MTE,可以使用新的“-fsanitize=memtag”选项来保护堆栈。

二、Trustonic如何在Kinibi 600中使用MTE?

通过Kinibi,我们希望为TEE本身的可信应用程序[TA]提供新的MTE功能。这个想法是为了让TA尽可能无痛地采用MTE。

当硬件支持MTE时,它会自动启用,用于TA的动态内存管理。这意味着用TEE_Malloc()分配的缓冲区会被自动标记,并且每次调用TEE_Mallock()都会返回一个带有不同标记的缓冲区。

因此,如果应用程序试图访问超出分配大小的缓冲区,CPU将检测到它并立即停止TA。MTE还将检测缓冲区在释放后何时被访问,或者何时被释放两次。

通过检测所有这些常见的错误,MTE展示了它的威力,TA将从中受益,而无需更改一行代码。堆的结构——或者元数据——总是受到一个特殊标记的保护。

因此,应用程序无法错误访问元数据。

该过程如下图所示:

图片

当我们为Kinibi 600的动态分配启用MTE时,我们修复了TEE中的几个问题。

在这个项目中,我们不得不重写动态分配器[libheap]的大部分内容,使其与MTE兼容。我们利用这次开发的机会增加了单元测试的代码覆盖率,库中代码行的覆盖率达到了99.6%。

当我们开始这个项目时,我们没有任何可用的MTE硬件,因此我们决定使用Quick Emulator[QEMU]。可以通过“MTE=on”选项使用MTE启动QEMU。

MTE可以在正常世界(Linux和用户空间应用程序)和安全世界(TEE和TA)中独立启用和使用。当真正的硬件还不可用时,能够使用具有新硬件功能的QEMU是特别方便的。

以下代码片段显示了在QEMU中使用MTE进行动态分配的效果:

图片

图片

我们可以看到,可信应用程序被TEE杀死,因为它试图用相同的标签访问超出分配的缓冲区。

图片

在这里,我们可以看到TA被TEE杀死,因为它试图访问先前已释放的缓冲区。

MTE为抵御攻击提供了良好的保护,同时提供了一种使代码更加健壮的有效方法。此外,TA还可以使用MTE来保护其堆栈。为此,必须使用适当的选项重新编译TA。总之,我们强烈建议开发人员使用MTE。

该功能不仅具有高度可扩展性,而且在整个项目中我们没有遇到任何性能问题。

三、什么是FF-A?

2017年,ARM发布了Armv8.4,其中最突出的功能是SEL2中的安全管理程序。此后,我们一直与Arm保持定期联系,讨论对TEE的影响。2020年,我们提出了如何利用TEE中Hypervisor的愿景。

除了硬件方面的变化,ARM还宣布了一款名为Hafnium的开源Hypervisor,旨在使用ARM公开讨论的标准化通信协议。

最终,Hafnium被称为FF-A,对它的支持随后被添加到Linux内核、Trusted Firmware A[TF-A]–EL3–和Kinibi中。我们普遍认为FF-A可以在体系结构的任何级别上工作,并且即使一些组件不存在,例如在历史系统中,也可以工作。

为了实现这一目标,ARM联系了生态系统中的主要参与者,包括Trustonic,并在几个月的时间里讨论了这些要求。我们与Arm的会议始于2018年,并持续每两个月举行一次。

四、FF-A如何在Kinibi 600中工作?

作为我们未来发展项目的一部分,我们在ARM架构团队固定虚拟平台[FVP]初步工作的基础上,于2020年启动了FF-A原型。

2021年,我们将原型移植到HiKey960板上,并重新设计了内存管理,以支持ARM的Total Compute v0[TOC]平台上的Hafnium Hypervisor。

当年年底,我们与两个芯片客户共享了第一个FF-A版本。

然后,在2022年,为使我们的客户能够验证最常见的TEE用例,如Keymaster、Trusted User Interfaces[TUI](电话支付)和Widevine的数字版权管理[DDRM]系统, 我们集成了FF-A v.1.1的修改版本,还增加了DRM和TUI所需的应用程序编程接口[API],如drApiMapFfaBuffer()。

如今,2023年,我们已经在QEMU上建立了FF-A的原型,并为TF-A开源项目做出了贡献。

考虑使用FF-A的客户需要考虑几个重要方面:

  • 在Linux内核或任何选择的操作系统[OS]中支持FF-A。Trustonic可以提供支持,帮助将FF-A集成到操作系统中。

  • Hypervisor是否支持FF-A?

  • 应使用最新的TF-A固件在EL3中获得FF-A支持。

  • 客户可以使用Hafnium或他们自己的Hypervisor来实现安全世界。Kinibi可以在有或没有FF-a的设置中用于各种配置。

如今,FF-A主要由谷歌在基于Android的设备推出。然而,我们也有其他合作伙伴对FF-A的执行持积极支持的态度。

值得注意的是,FF-A是通用的,可以在Armv9平台上使用——在安全世界中有或没有Hypervisor均可,也以在Armv4上使用。这平稳的升级路径将现有的板支持包[BSP]改为FF-a,无需将Hypervisor作为初始步骤,而是在第二步骤中将其添加进来。

关于FF-A,安全世界中的虚拟机被称为安全分区。安全世界中的虚拟机监控程序称为安全分区管理器。

在Armv9-A架构上,Hypervisor分为两部分:运行在SEL2中的SPM核心[SPMC]和运行在EL3中的SPM-调度器[SPMD]。

在Armv8体系结构上,SPMC和SPMD都在EL3中运行。Kinibi现在还支持具有FF-A的设备树格式,这是TF-A实现所要求的。

一些最大的科技公司正在研究FF-A,并将对其的支持作为其即将推出的产品的一项要求。

Trustonic非常适合通过使用Kinibi 600来帮助原始设备制造商和硅供应商实现这一目标,该产品标配FF-A支持。Kinibi 600可供硅供应商评估,也可通过与我们现有的一些硅合作伙伴实施的集成供原始设备制造商(OEM)评估。

五、总结

Armv9-A是Arm处理器发展的下一步。作为一家安全公司,我们对MTE感到特别兴奋。虽然它的主要作用是早期检测程序中的错误,但在实践中,这增加了额外的安全层,因为攻击者无法再利用这些错误。

MTE使攻击者的生活更加艰难,从而使我们客户的系统更加安全。

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
# 课程背景2021年ARM又推出了ARMv9架构,系统软件架构也在悄无声息地发生变化。在这种架构中,强调的是隔离技术,包括资源的隔离、运行时隔离,特权操作系统的权限也变得越来越小…不管您是什么领域,ARM服务器、汽车电子、手机或者是其它设备终端,安全都是其中的一个重要环节。我们常说的安全一般是只网络安全/业务安全/App安全,这些安全依赖的正是操作系统安全,操作系统安全所依赖的就是安全架构技术,在该安全架构中,首当要学习的就是Trustzone/TEE技术。只有设备安全/操作系统安全/APP安全/网络安全/服务器安全整个一条链都安全了,那么你的业务才算得上的安全.不管您是做什么的,您做不做安全或虚拟化,掌握整个系统软件架构也是一件必要的事情。您只有掌握了安全架构,你才具有全局的视野,才能进行全局的软件设计,才称得上架构师。  安全不仅仅是架构安全安全还是一种生态,安全还产生一类标准。安全出现在产品声明周期的任何一个角落,它可能零碎地出现在硬件中、零碎地出现在软件代码中。如果你不了解安全,你可能无法进行优秀的产品设计,你甚至无法去正确的阅读代码。 # 课程介绍(1) 讲解ARM最新硬件架构(ARM Core、ARM Architecture)、SOC架构(2) 讲解最新的Trustzone安全架构TEE架构、Secureboot等(3) 讲解软件组件:TF-A(ATF)、optee_os、Linux Kernel、CA/TA应用程序等,及其交互模型、设计模型(4) 多系统交互代码导读、安全论证实践、CA/TA示例实践、安全业务设计实践(5) 我们学习的是全部硬件、全部系统,软硬结合,或者是大系统的软硬件融合 # 课程收益1、安全不再神秘,能cover住全局2、熟悉ARM Architecture架构知识3、熟悉SOC架构知识4、熟悉主流的系统软件框架5、知道多系统之间是如何交互的,也能够进行系统级的设计6、深入了解当前的系统安全架构以及未来安全架构趋势7、熟悉基础的安全业务设计方法8、熟悉系统的启动流程、Secureboot等9、知道Linux Kernel在大系统中的位置,以及与其它系统交互的方法10、熟悉各类标准和规范11、学习资料的获取方法 # 课程大纲 《Trustzone/TEE/系统安全开发速成班》 --当前48节课/19小时说明: 本视频会持续更新,购买时请以课程目录为主。本EXCEL一个月更新一次。章节编号课程时常第一章基础和简介1课程介绍 8:332ARM和SOC的架构简介60:13第二章软硬件基础3armv8/armv9基础概念26:204ARMv8/ARMv9的Trustzone技术77:565ARMv7的Trustzone技术8:376安全架构及其未来趋势(FF-A/SPM/CCA)6:417ARMv9 CCA机密计算框架底层核心原理简介20:448ARMv9 RME安全扩展详解61:299ATF Quick Start0161:2710Optee Quick Start49:3411系统软件Quick Start21:0412Secureboot原理深度讲解60:2813Android AVB的介绍26:0914TZC400详解17:5615TZC400代码导读之ATF13:4416RPMB详解30:0617RPMB代码导读之optee14:0318efuse详解12:1919Anti-Rollback的介绍11:33第三章软件架构20TEE的组件介绍67:5921TEE的RPC反向调用31:1422TEE的调度模型21:3223各类标准和规范22:17第四章软件架构(高级)24多系统之间的管理模型(ABI/标准)10:3025多系统之间的调度12:2126多系统之间的中断(不含虚拟化)61:4727多系统之间的中断(虚拟化)6:5728再谈多系统之间的调度(多核多线程)10:3129其它(内存管理/PSCI...)10:12第五章安全应用开发基础30安全应用开发基础5:3731TEE环境:qemu_V8环境的使用4:2032TEE环境:编写一个CA和TA程序11:0433TEE环境:编写漂亮的文档4:1434TEE环境:搭建阅读代码神器opengrok3:2635TEE环境(必看):使用集成好的qemu_v8镜像程序20:2936[CA/TA开发]CA到TA的通信9:1837[CA/TA开发]CA到TA的传参27:1638[CA/TA开发]TEE中的存储系统20:5739[CA/TA开发]TEE中的密码学系统简介12:3740[CA/TA开发]TEE中的密码学系统简介-数字摘要Hash等33:2141[CA/TA开发]TEE中的密码学系统简介-对称密码学算法AES等12:2042[CA/TA开发]TEE中的密码学系统简介-消息摘要算法HMAC等15:4843[CA/TA开发]TEE中的密码学系统简介-非对称密码学算法RSA等7:33第六章安全业务设计高级44Gatekeeper的介绍29:3245keymaster/keymint/keystore/keystore213:2746生物认证(指纹/人脸)13:5747DRM的介绍21:3748TUI的介绍17:03总计时统计(分钟)1128:12 说明:本课程会持续更新…  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值