0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何掌握用于ARMv8-M软件开发的信任区

星星科技指导员 来源:嵌入式计算设计 作者:Diya Soubra 2022-10-20 14:13 次阅读

ARM 信任区技术是一种系统范围的片上系统 (SoC) 设计安全性方法。它使得安全设计成为可能,从最小的微控制器(用于 Cortex-M 处理器的信任区)到高性能应用处理器(采用适用于 Cortex-A 处理器的信任区技术)。它是基于硬件的安全性,内置于CPU和系统的核心中,供希望为设备(如信任根)提供安全性的半导体芯片设计人员使用。TrustZone技术可用于任何基于ARM Cortex-A的系统,现在有了Cortex-M23和Cortex-M33处理器,它也可以在最新的基于Cortex-M的系统上使用(参见托马斯·恩塞尔盖克斯关于Cortex-M23和Cortex-M33的博客 - 数十亿台设备的安全基础)。

pYYBAGNQ5w-AMV5vAALs0GqX1aU118.png

[图1|信任区安全性可实现共享资源的受控分离]

TrustZone 方法的核心是硬件彼此分离的安全和非安全世界的概念。在处理器内,软件要么驻留在安全世界,要么驻留在非安全世界中;这两个世界之间的切换是通过Cortex-A处理器(称为安全监视器)中的软件以及Cortex-M处理器中的硬件(核心逻辑)完成的。这种安全(可信)和非安全(非可信)世界的概念超出了 CPU。它还涵盖 SoC 中的存储器、片上总线系统、中断、外设接口和软件。

由 ARMv8-M 信任区保护的系统内的软件模块

对于安全解决方案,安全专家建议将受信任的代码减少到最低限度,以减少攻击面并简化安全审核。也就是说,只有在代码经过详尽的检查和攻击测试后,才将代码放在受信任的空间中。需要测试此受信任的代码是否适用于规范,并且需要对其进行测试以确保它不会按预期工作。如果我们应用此建议,则我们想象一个代码分布,如上面的图 1 所示。

安全启动、设备资源管理器和安全 API 将驻留在特权受信任的空间中。这是对所有资源具有访问控制并具有最高优先级的框。受信任的库驻留在无特权但受信任的空间中。这些库由资源管理器控制,并使用内存保护单元进一步相互保护。在不受信任的一面,我们看到与今天的任何Cortex-M相同的代码分布。特权框中的操作系统和用户空间中的应用程序。这是 TRUSTZone 为 ARMv8-M 带来的强大优势之一,在系统获得安全性的同时,用户端保持不变。高效和用户友好的安全性 - 这是信任区对ARMv8-M的承诺。

大部分工作是在受信任方的代码开发人员的阵营中进行的。建议对代码进行安全审核,这就是建议使用较小代码的原因。

顺便说一句,对于开发人员来说,新的机会将会打开。例如,现在物联网节点的“健康监视器”将出现一个新的市场,如果可信空间中的一小段代码将观察系统的行为以检测异常并破解采取纠正措施的尝试。如果我们认为物联网节点将在现场停留多年而无需人为干预,那么这可能是确保长使用寿命所需的最重要的代码。

对于那些对 TrustZone 的要素感兴趣的人,我向您介绍三大主要新概念:

概念1:由地址定义的安全

处理器使用新引入的安全归因单元来检查地址的安全属性。系统级接口可能会根据整体 SoC 设计覆盖该归因。选择状态后,地址也会通过相应的内存保护单元(如果系统中存在)。

概念2:附加状态

ARMv7-M 和 ARMv6-M 架构定义了两种执行模式:处理程序模式和线程模式。处理程序模式是特权模式,可以访问 SoC 的所有资源,而线程模式可以是特权模式,也可以是非特权模式。使用 TrustZone 安全扩展,处理器模式被镜像为形成安全状态和非安全状态,每种模式都有一个处理程序模式和一个线程模式。安全状态和处理器模式是正交的,从而产生状态和模式的四种组合。在安全存储器中运行软件时,处理器会自动设置为安全状态。同样,当处理器在非安全存储器中执行软件时,处理器会自动设置为非安全状态。这种设计消除了任何安全监控软件来管理状态开关的需要,从而减少了内存占用和功耗,如上文所述。

概念 3:跨域调用

ARMv8-M是为具有确定性实时操作的Cortex-M配置文件而设计的。任何状态下的任何函数都可以直接调用处于其他状态的任何其他函数,只要根据预定义的安全状态入口点遵守某些规则即可。此外,正如预期的那样,每个状态都有一组不同的堆栈和指向这些堆栈的堆栈指针,以保护安全端的资产。函数调用开销大大减少,因为不需要 API 层来管理调用。给定预定义的入口点,调用将直接进入被调用的函数。

现在您已经完全熟悉了ARMv8-M的TrustZone的工作原理,我们深入研究编写软件的机制,以便仅使用三个有用的提示来利用它。

提示 1:利用新的 ARM C 语言扩展功能

ARMv8-M 的信任区引入了一些新的指令来支持安全状态切换。软件开发人员不应创建程序集包装器来生成这些指令,而应利用 ARM C 语言扩展 (ACLE) 中定义的新编译器功能,使软件工具能够了解函数的安全用法并生成所需的最佳代码。ACLE功能由多个编译器供应商实现,因此,代码是可移植的。

例如,在创建可从非安全状态调用的安全 API 时,应在声明函数时使用名为“cmse_nonsecure_entry”的新函数属性。在函数结束时,以安全状态调用 - 处理器内的寄存器可能仍包含机密信息。使用正确的函数属性,编译器可以自动插入代码以清除 R0-R3、R12 和应用程序状态寄存器 (APSR) 中可能包含机密信息的寄存器,除非这些寄存器用于将结果返回给不安全的软件。寄存器 R4 到 R11 的处理方式不同,因为它们的内容在函数边界处应保持不变。如果它们的值在函数的中间发生更改,则在返回到非安全调用方之前,应将这些值还原为原始值。

提示 2:验证不受信任的指针

在某些情况下,非安全代码可能会根据设计提供不正确的指针,以尝试访问安全内存。为了对抗这种可能性,在ARMv8-M中引入了一个新的指令,即测试目标(TT)指令。TT 指令返回地址的安全属性,因此 Secure 软件可以确定指针是指向安全地址还是非安全地址。

为了使指针的检查更加高效,安全配置定义的每个内存区域都有一个关联的区域编号。软件可以利用此区域编号来确定连续的内存范围是否具有类似的安全属性。

TT 指令从地址值返回安全属性和区域编号(以及 MPU 区域编号)。通过在存储器范围的开始和结束地址上使用TT指令,并识别两者驻留在同一区域编号中,软件可以快速确定存储器范围(例如数据阵列或数据结构)完全位于非安全空间中。

poYBAGNQ5xGAIdm7AAKyKs1CbHU770.png

[图2 |检查有效区域边界的指针]

使用此机制,为安全端提供 API 服务的安全代码可以确定来自非安全软件的指针引用的内存是否具有 API 的相应安全属性。这可以防止非安全软件在安全软件中使用 API 来读出或损坏安全信息。

提示 3:针对异步非安全内存修改进行设计

非安全中断服务例程可能会更改由安全软件处理的不安全数据。因此,在验证步骤之后,已由安全 API 验证的输入数据可以通过非安全 ISR 进行更改。避免这种情况的一种方法是在安全存储器中制作该输入数据的本地副本,并使用安全副本进行处理(包括验证输入数据),并避免读取非安全存储器。在不需要这种复制的情况下(例如,当处理特定内存区域中的大量数据时),则替代方法是对安全归因单元进行编程以使该内存区域安全。

总结

TrustZone 旨在成为一种高效的用户友好型技术,供所有开发人员创建安全的嵌入式解决方案。安全方的软件开发人员有责任确保整个系统是安全的,并且没有安全数据泄漏到非安全方。为了实现这一目标,概述了三个关键的 TrustZone 概念,以及安全软件开发人员可以采取的三个关键操作来帮助创建安全的系统。ACLE技术保护被调用函数寄存器中的数据。用于验证指针的TT指令,最后,开发人员需要记住,非安全端可能会通过中断安全端来更改数据。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • soc
    soc
    +关注

    关注

    38

    文章

    3750

    浏览量

    215724
收藏 人收藏

    评论

    相关推荐

    ARMv8-M平台开发安全软件的建议

    设计消除了本来用于管理状态切换的安全监控软件的必要性,从而实现减少存储足迹和功耗的目的。新增正交态概念3:跨域调用ARMv8-M为实现Cortex-M的性能专门设计,具备确定性实时运行
    发表于 01-11 14:37

    Armv8-M应用笔记上使用TrustZone

    本应用笔记介绍CMSIS和MDK中可用的功能,以利用ARMv8-M体系结构中的安全域和非安全域。它包含几个编程示例,其中包括一个RTOS应用程序,该应用程序显示了非安全线程执行与ARMv8-M系统安全域提供的库之间的交互。
    发表于 05-11 13:26

    如何在ARMv8-M架构处理器上集成FreeRTOS?

    用 (NSC) 的内存区域中。使用 TrustZone后,应用程序由两个独立的项目组成:1、在安全端运行的安全应用程序2、在非安全端运行的应用程序ARMv8-M 内核启动后默认为安全端,由安全软件负责
    发表于 08-04 14:46

    Armv8-M上PAC和BTI的功能扩展分析

    Trustzone for Armv8-M的通用规则,以下访问是允许的:安全软件可以访问安全和非安全密钥非安全软件只能访问非安全密钥每个安全状态和特权级状态有唯一的密钥,因此软件不需要
    发表于 08-01 14:56

    Armv8.1-M PAC和BTI扩展简析

    1、Armv8.1-M PAC和 BTI 扩展简析Armv8-M通过Trustzone for Armv8-M, Memory Protection Unit (MPU) 和Privileged
    发表于 08-05 14:56

    ARMv8-M trustzone IOT安全之基于Cortex-M33核的TFM测试

    Execution Environment,可信执行环境)无法运行在SPE,ARM给出了开源的TFM(Trusted Firmware-M)作为参考实现。本文编译运行TFM的代码,基于MPS2_AN521平台qemu模拟运行,分析各个测试项,进而理解ARMv8-M的安全
    发表于 09-14 14:41

    ARMv8-M处理器故障处理和检测

    错误检测和校正技术可用于帮助减轻硅器件。ARMv8-M处理器包括一些功能,可以检测这些错误。 在硅器件中,出现错误的原因可能是: •软件错误。 •使用错误,条件在正常操作条件之外。例如温度或电源电压
    发表于 08-02 06:28

    ARMv8-M异常处理手册

    ;对于例如,不存在IRQ或FIQ处理模式。ARMv8-M处理器还集成了嵌套矢量中断控制器(NVIC),用于识别核心的外部中断。这不同于其他ARM处理器,后者几乎没有对中断的直接硬件支持。 处理器核心
    发表于 08-02 06:09

    Armv8-M内存模型与内存保护用户指南

    本指南概述了Armv8-M内存模型和内存保护单元(MPU)在Cortex-M处理器中实现。本指南使用示例来帮助解释这些概念 它介绍了。 本章概述以下主题: •内存模型 •内存保护单元(MPU) •Armv7-M
    发表于 08-02 08:12

    如何在Cortex-M处理器中实现的Armv8-M异常模型

    本指南介绍在Cortex-M处理器中实现的Armv8-M异常模型。本指南还提供了示例,以帮助解释其介绍的概念。 Arm架构分为多个配置文件,针对不同细分市场的需求。微控制器配置文件或“M配置文件
    发表于 08-02 13:14

    ARMv8-M体系结构及其程序员模型简介

    Armv8体系结构有几个不同的配置文件。这些配置文件是体系结构的变体针对不同的市场和用例。Armv8-M体系结构就是其中之一配置文件。 Arm定义了三个体系结构配置文件:应用程序(A)、实时(R
    发表于 08-08 06:18

    用于ARMv8-M 2.0版的连接用户指南0.1版Acle扩展

    ACLE提供的工具允许您构建在ARMv8-M安全扩展的安全状态下运行的映像。 您还可以创建一个导入库包,非安全映像的开发人员必须拥有该导入库包,这些映像才能调用安全映像。 例如,使用amclang
    发表于 08-16 08:27

    基于ARMv8-M处理器的安全堆叠密封

    本建议概括介绍了软件对识别为CVE-2020-16273的漏洞的影响和缓解措施。 本咨询中讨论的方案涉及基于ARMv8-M的处理器,包括Cortex-M23、Cortex M
    发表于 08-17 06:31

    NuMicro M2351系列微控制器的安全特色与应用

    的就是如何确微控制器内部软件资产能受到严谨保护,同时又要能兼顾给合作厂商在软件开发上一定的弹性,正如图一的例子,Armv8-M 架构可以把有价值的通讯协议放到 TrustZone 或 Secure
    发表于 08-28 06:24

    ARMv8-M上使用TrustZone

    ®技术是片上系统(SoC)和CPU系统范围的安全方法。 针对ARMv8-M安全扩展的TrustZone针对超低功耗嵌入式应用进行了优化。 它支持多个软件安全域,限制对受信任软件的安全内
    发表于 09-04 07:11