写在前面:
在与从事功能安全开发行业的同事以及SASETECH 社区的成员讨论时,笔者经常被问及有关芯片内存保护单元(MPU)的问题。ISO 26262的第6部分和第11部分都提及了MPU,但并未详细描述MPU在功能安全开发中的具体要求。因此,本文旨在讨论以下问题:什么是MPU?MPU解决哪些问题?功能安全开发对MPU的功能安全需求有哪些?
01.MPU简述
微处理器单元内的内存保护单元(Memory Protection Unit,简称MPU)是执行内存访问控制和隔离的硬件机制。其核心功能是确保系统中的每个程序或进程只能访问其被分配的内存区域。这一机制有效防止了非法内存访问,保护系统不受恶意软件攻击及数据损坏的威胁。此外,它还支持多任务环境下的上下文切换,确保了任务间的独立性及系统整体的稳定性。
几乎所有具备功能安全等级的芯片均集成了MPU,例如英飞凌(Infineon)的AURIX系列、瑞萨(Renesas)的RH850系列以及恩智浦(NXP)的S32K系列等。
在功能安全相关产品开发的背景下,MPU的主要目标可概括为以下几点:
● 代码访问保护:通过定义存储器区域之间的访问规则,确保数据安全和系统稳定。
● 内存或外设保护:为不同的存储区域配置存储器访问权限,这包括指令/数据缓存(I/D Cache)、静态随机存取存储器(SRAM)以及外设存储。
MPU主要防御的故障模式包括:
● 数据完整性破坏:防止用户应用程序破坏操作系统所依赖的数据。
● 任务隔离:避免一个任务异常地访问另一个任务的数据区域,确保任务之间的隔离。
● 意外存储访问:防止诸如堆栈溢出或数组越界等意外的存储访问行为。
● 关键数据保护:通过将不可写的关键数据区域设为只读,防止对该区域数据的错误篡改。
02.MPU工作原理
MPU负责实现一系列内存保护功能,其工作原理主要包括以下几个方面:
● 内存区域定义:MPU可以定义多个内存区域,通常能够保护多达16个不同的内存区域。
● 访问权限设置:操作系统(OS)可以根据安全策略为每个内存区域配置特定的访问权限。这意味着可以指定哪些进程或任务有权读取、写入或执行内存中的数据。例如,可以设定Region A仅允许执行任务Task X,而Region B仅允许执行任务Task Y。如果一个属于Task X的4字节指令“DCBA”被放置在Region A中,并且该指令的一部分延伸到了不允许执行的Region B,则该指令将无法执行。
● 地址映射与检查:MPU与内存管理单元(Memory Management Unit,MMU)协同工作,负责将虚拟地址映射到物理地址。在映射过程中,MPU会检查每个内存访问请求的权限,确保其与内存区域的访问设置相匹配。
● 异常生成:一旦检测到违反内存区域访问权限的请求,MPU将触发一个异常或中断,以阻止非法访问。这会通知操作系统,操作系统随后可以采取措施,如终止非法访问进程或记录安全事件以供后续分析。以英飞凌(Infineon)的AURIX系列芯片为例,当MPU激活时,任何未包含在活动保护集选择的MPU范围内的指令或数据访问都将立即导致CPU陷入陷阱(trap),并可向安全管理单元(Safety Management Unit,SMU)发出警报。
作为硬件组件,MPU的执行速度通常优于软件实现的内存保护机制,这使得它能够高效地处理大量的内存访问请求,同时保持系统的响应性。MPU是现代计算机系统中的一个关键部分,它为操作系统提供了一种强有力的方法来隔离任务、保护数据,并防御恶意软件攻击。通过这种方式,MPU有助于维护整个系统的稳定性和安全性。
03.功能安全开发中对于MPU的要求
在功能安全开发中,MPU扮演着至关重要的角色。其核心要求主要遵循ISO 26262这一国际功能安全标准。对于不同功能安全完整性等级要求的软件组件,必须满足要素共存的设计原则。对于没有安全相关功能的软件组件,其安全要求遵循无干扰原则,确保:
◆ 安全的内存访问
◆ 正确的时间执行
◆ 安全的数据交换
以操作系统(OS)为例,MPU可用于实现空间隔离保护,以防止内存错误。在这种情况下,MPU的目的是确保:
●同一软件分区内的任务(Task)之间不会相互干扰。一个软件分区不能修改其他分区的代码或数据,也不能控制其他分区的非共享资源。如下图所示。
●在操作系统切换正在运行的任务或中断服务例程时,执行上下文切换。此时,上下文数据被存储,MPU重新配置,仅激活当前任务或中断服务例程所需的内存分区。这可以保护任务Task1和Task2免受应用程序Application B的未授权访问。如下图所示。
在功能安全开发过程中,MPU主要保护的对象包括安全相关的应用程序数据、寄存器数据和堆栈数据等。
04.总结
通常,在功能安全开发过程中,MPU主要用于确保不同ASIL(Automotive Safety Integrity Level)等级的任务或不同执行任务之间的独立性。通过进行故障模式与影响分析(FMEA)和独立性故障分析(DFA),我们可以确定分区保护的软件安全需求。
作者:边俊
文章来源:sasetech
推荐阅读
- 内核 | little-kernel分析
- arm-trusted-firmware分析(上)
- arm-trusted-firmware分析(下)
- ARM/Linux嵌入式面经(十四):ARM体系架构基础知识
- 搞DDR必懂的关键技术笔记:DDR RAS—内存中的纠错码 (ECC)
- 牛掰!这老哥用显微镜摄取芯片ROM,还原了芯片的二进制固件。
更多物联网安全,PSA等技术干货请关注平台安全架构(PSA)专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入PSA技术交流群,请备注研究方向。