trustzone
恩智浦基于cortex m33内核的mcu,lpc55s6x/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,安全故障地址寄存器)。
sfsr寄存器用于指示出现错误的类型,例如非安全区试图访问安全区,从安全区到非安全区的非法跳转等。
sfar寄存器用于指示出现错误的内存地址。
看起来这两个寄存器就足以帮助我们查到问题的根源了。但是,有时候,我们从这两个寄存器拿到了错误的原因和地址,仔细检查后发现无论是安全区还是非安全区的程序,都没有显式的访问这个地址。
这是由于mcu系统愈发复杂,总线上除了m33内核之外,还有许许多多的其他的外设,例如dma,usb等等。肇事者不一定是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寄存器,用来指示肇事的信息,例如违规操作是读操作引起的还是写操作引起的等等,最重要的是会指出肇事者的身份:
每个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加油站
虹科BM131超紧凑型IPC荣获2021年度最佳产品奖!
高云半导体扩展入门级GW1NZ家族FPGA产品
5G时代信息触手可及,但安全问题值得注意
5G会将我国数字经济发展提升到一个新的高度
如何分辨一台PoE交换机是否标准供电
调试TrustZone时,如何处理HardFault?
热烈祝贺捷易科技加入深圳软件行业协会
Jochen Hanebeck将担任英飞凌新任CEO
长三角集成电路产业公共服务机构联盟正式揭牌成立 将推动一体化发展及产业深度融合
可能出现某些运算放大器中的差动钳位二极管
中国数据中心产业将迎来新的发展,超大型IDC成趋势
长电科技获增资48亿元 加快汽车芯片成品制造封测一期项目建设
sick数据传输传感器
郭明錤:苹果A16处理器仍将采用台积电5nm工艺
多元需求升级,曙光存储应对海量高校科研数据!
关于无人驾驶车辆的发展分析和介绍
全球语音辨识产值2021年将达159.79 亿美元
有什么方法可以使Matter智能家居设备脱颖而出呢
常用承压设备焊接工艺评定规范冲击试验免除条件介绍
晶电MiniLED产品已小量生产 预计明年首季放量