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

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

3天内不再提示

调试TrustZone时,如何处理HardFault?

jf_pJlTbmA9 来源:恩智浦MCU加油站 作者:恩智浦MCU加油站 2023-09-27 16:33 次阅读

TrustZone

恩智浦基于Cortex M33内核的MCULPC55S6x/LPC55S1x, RT600/RT500等产品提供了对TrustZone的支持,并在SOC上提供了安全AHB控制器等功能,旨在帮助客户完成良好的安全隔离,并建立可信执行环境。

在产品设计之初,我们就要有一个基本的“隔离”的概念。

需要考虑的问题大致有以下两个方面:

产品中的哪些功能和模块应该放在安全区?(这部分代码往往是核心且精简,且经过安全审查的,安全区的内容不允许非安全区的代码触碰);

哪些功能应该放在非安全区?(这样放在非安全区中的代码,即使出现安全漏洞(例如栈溢出漏洞等等)后被攻击,MCU的安全区中的资源和外设也无法被攻击者利用)。

令人头疼的HardFault

对于MCU工程师,TrustZone是一个比较新的技术,在开发调试过程中,由于TrustZone配置问题,时常遇到各种意料之外的HardFault,我们也经常调侃,这个TrustZone也太安全了,连我们自己都进不去。

其实这种问题往往是由于在开发阶段,我们实际的行为和我们对TrustZone的划分不一致。

平常我们认为正常的行为与操作,对于TrustZone来说,已经越界违规了,这就会使TruztZone触发HardFault,并阻止违规行为。

在这种情况下,我们就需要找到导致HardFault的原因,并调整对于TrustZone的配置。

注:TrustZone相关的故障会触发SecureFault异常。在芯片上电后的默认情况下,SecureFault异常并没有被使能,因此,此异常会被“升级”为HardFault。在通常情况下,建议使用默认的设置,因为HardFault拥有更高的中断优先级,可以使故障在第一时间被响应。

获取违规操作的蛛丝马迹

Cortex M33内核本身在SAU中提供了两个寄存器:SFSR(Secure FaultStatus Register,安全故障状态寄存器)和SFAR(Secure Fault Address Register,安全故障地址寄存器)。

wKgZomUD8tuAGxXSAAH1BBYq2ps696.png

SFSR寄存器用于指示出现错误的类型,例如非安全区试图访问安全区,从安全区到非安全区的非法跳转等。

SFAR寄存器用于指示出现错误的内存地址。

看起来这两个寄存器就足以帮助我们查到问题的根源了。但是,有时候,我们从这两个寄存器拿到了错误的原因和地址,仔细检查后发现无论是安全区还是非安全区的程序,都没有显式的访问这个地址。

这是由于MCU系统愈发复杂,总线上除了M33内核之外,还有许许多多的其他的外设,例如DMAUSB等等。肇事者不一定是M33内核,还有可能是其他的外设,例如DMA。

下面是一种常见的事故:被划分为非安全的DMA在工作中访问了安全区的地址或外设,违反了TrustZone的配置,造成了HardFault。

恩智浦的MCU在SOC层面提供了一个安全AHB控制器,能够帮我们侦查肇事现场,找出肇事者的蛛丝马迹。

其实原理很简单,安全AHB控制器提供了三个寄存器,SEC_VIO_INFO_VALID,SEC_VIO_MISC_INFO和SEC_VIO_ADDR。

SEC_VIO_INFO_VALID用来指示肇事现场,这个寄存器中存储了肇事现场的AHB 的端口号(port number),端口号与外设的对应关系参见用户手册的”Memory map overview”章节。

每一个AHB端口都相应有一个SEC_VIO_MISC_INFO寄存器,用来指示肇事的信息,例如违规操作是读操作引起的还是写操作引起的等等,最重要的是会指出肇事者的身份:

wKgaomUD8t2AAKgTAALdYPGhYrk767.png

每个AHB端口还有一个SEC_VIO_ADDR,用来指示肇事现场的地址。

有了上述信息,我们就捉到了真正的肇事者。在开发阶段,我们就可以利用这些信息去调整我们的TrustZone的配置。

更进一步

当然,上述功能不只能在开发阶段帮我们排查HardFault。我们也可以利用这个机制在产品出厂之后为我们提供防御措施。

产品出厂后,当我们检测到由TrustZone产生的HardFault的原因之后,可以将其记录,以便于后续分析。如果设备有联网能力,可以将其传输至服务器。利用这些信息我们可以发现产品的哪些模块受到了攻击,方便我们后续针对性地进行OTA升级。云端和设备本地也可在此时检测镜像以及存储介质的完整性,以检查程序和存储介质是否被恶意篡改。

小结

综上所述,利用SAU和安全AHB控制器调查HardFault的方法并不复杂,NXP的MCUXpresso SDK也提供了一个完整的demo。

以LPC55S69为例,demo的路径如下:SDKboardslpcxpresso55s69trustzone_examplessecure_faults。

这个demo中,人为制造了几种TrustZone触发HardFault的案例,在产生HardFault后,使用上文描述的方法,处理相关寄存器并打印事故信息。

通常来说,在开发阶段,我们可以参考demo中HardFault的处理代码,按需移植到自己的工程中。

来源:恩智浦MCU加油站

审核编辑:汤梓红

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

    关注

    146

    文章

    16977

    浏览量

    350212
  • 内核
    +关注

    关注

    3

    文章

    1362

    浏览量

    40216
  • soc
    soc
    +关注

    关注

    38

    文章

    4115

    浏览量

    217896
  • trustzone
    +关注

    关注

    0

    文章

    20

    浏览量

    12530
收藏 人收藏

    评论

    相关推荐

    怎样调试STM32硬件错误HardFault

    在用 Keil 对STM32的程序进行仿真时程序有时会跑飞,停止仿真程序会停在HardFault_Handler 函数里的死循环while(1)中。
    发表于 07-18 09:59 1170次阅读
    怎样<b class='flag-5'>调试</b>STM32硬件错误<b class='flag-5'>HardFault</b>

    HardFault错误调试的定位方法是什么

    HardFault 错误调试定位方法1、首先更改 startup.s 的启动文件,把里面的 HardFault_Handler 代码段换成下面的代码:HardFault
    发表于 02-15 07:22

    何处理HardFault函数?

    STM32 MCU 中有一个名为 HardFault_Handler 的函数(完整代码如下)。我通常在调试时使用此功能,但不确定如何使用它来处理错误。在此函数中处理错误的正确协议是什么
    发表于 02-06 07:52

    STM32 MCU TrustZone开发调试技巧分享

    系统隔离与ARM V8-M TrustZone技术、TrustZone地址安全区及资源安全属性配置、TrustZone架构下的HardFault调试
    发表于 09-05 06:16

    调试串口的时候,终端回显错误如何处理

    调试串口的时候,发现出现回显错误 可以肯定,全部输出都是英文,不存在中文输出的情况。 而且输入的字母也是显示乱码,但似乎可以被板子正确识别,不知这种情况应该如何处理
    发表于 09-28 06:16

    ARM 架构中TrustZone 安全处理技术的研究

    对基于 ARMv6 架构的全新TrustZone 安全处理技术进行了研究,着重从该技术的实现原理、运行模式和软硬件支持等方面,论证TrustZone 技术实现整体系统安全的有效性和可行性,并
    发表于 08-28 11:23 18次下载

    手把手教你查找stm32 HardFault_Handler调试及问题方法

    手把手教你查找stm32 HardFault_Handler调试及问题方法
    发表于 12-03 09:36 22次下载
    手把手教你查找stm32 <b class='flag-5'>HardFault</b>_Handler<b class='flag-5'>调试</b>及问题方法

    S32K1XX调试--快速定位HardFault

    1、背景程序运行,发现程序跑飞到HardFault,但不清楚为什么会跑到HardFault中断处理函数去。2、分析要想知道为什么会跑到HardFault_Handler中去,就很有必要
    发表于 12-03 15:21 5次下载
    S32K1XX<b class='flag-5'>调试</b>--快速定位<b class='flag-5'>HardFault</b>

    STM32进入HardFault调试方法

    STM32进入HardFault调试方法我们在设计STM32程序时,经常由于内存越界等,使得程序意外进入了HardFault中断。但我们一时半会又不知道,这个中断,究竟是代码运行到哪里,才触发
    发表于 01-12 18:44 4次下载
    STM32进入<b class='flag-5'>HardFault</b>的<b class='flag-5'>调试</b>方法

    AN028 Cortex-M3内核HardFault错误调试定位方法

    AN028 Cortex-M3内核HardFault错误调试定位方法
    发表于 02-27 18:32 0次下载
    AN028 Cortex-M3内核<b class='flag-5'>HardFault</b>错误<b class='flag-5'>调试</b>定位方法

    STM32 MCU TrustZone开发调试技巧分享

    电子发烧友网站提供《STM32 MCU TrustZone开发调试技巧分享.pdf》资料免费下载
    发表于 07-28 13:35 1次下载
    STM32 MCU <b class='flag-5'>TrustZone</b>开发<b class='flag-5'>调试</b>技巧分享

    实战经验 | TrustZone 架构下 LPBAM 使用导致的 HardFault

    关键词:TrustZoneHardFault 目录预览 1、简介 2、问题分析 3、总结 01 简介 客户使用 STM32U5 进行开发,并使能了 TrustZone 架构,程序需要
    的头像 发表于 10-20 15:05 580次阅读
    实战经验 | <b class='flag-5'>TrustZone</b> 架构下 LPBAM 使用导致的 <b class='flag-5'>HardFault</b>

    HardFault 调试处理

    电子发烧友网站提供《HardFault 调试处理.pdf》资料免费下载
    发表于 12-18 09:05 1次下载
    <b class='flag-5'>HardFault</b> <b class='flag-5'>调试</b>与<b class='flag-5'>处理</b>

    STM32 TrustZone 开发调试技巧

    电子发烧友网站提供《STM32 TrustZone 开发调试技巧.pdf》资料免费下载
    发表于 12-18 11:16 2次下载
    STM32 <b class='flag-5'>TrustZone</b> 开发<b class='flag-5'>调试</b>技巧

    STM32 TrustZone 开发调试技巧— 地址安全区及资源安全属性配置

    电子发烧友网站提供《STM32 TrustZone 开发调试技巧— 地址安全区及资源安全属性配置.pdf》资料免费下载
    发表于 12-18 11:10 0次下载
    STM32 <b class='flag-5'>TrustZone</b> 开发<b class='flag-5'>调试</b>技巧— 地址安全区及资源安全属性配置