域控软件安全隔离关键技术剖析:MCU域 VS SOC域

安全隔离的需求

        功能安全开发中,软件阶段由软件V模型左边的软件安全需求SSR开始。SSR是从技术安全需求TSR中提取出软件的功能安全需求,大多数情况下具有不同的ASIL等级。

图1 功能安全软件开发V模型

        随后,软件安全需求会被分配到软件架构中的软件组件中。不同ASIL等级的软件安全需求被分配到软件组件过后,带来了级联失效的问题。若放任不同ASIL等级软件组件在一个系统中运行,可能会存在低ASIL等级软件组件失效从而引发高ASIL等级软件组件失效的风险。

        ISO26262 对软件组件之间的交互进行了分析并提出了免于干扰(Freedom from Interference)的需求,安全隔离则旨在隔离软件系统中安全相关与安全无关的软件组件,以及不同ASIL等级的软件组件。

软件内存基础

        首先让我们来了解内存的基本知识。RAM与ROM是ECU中常见的存储器类型,它们在数据存储和访问方面扮演着重要的角色。

        RAM(Random Access Memory)是一种临时存储器,用于存储计算机正在运行的程序和数据。它具有快速的读写速度和随机访问的特点。

        ROM(Read-Only Memory)是一种只读存储器,用于存储固定的程序指令和数据。ROM中的数据在计算机断电时不会丢失,因此被称为非易失性存储器。

        然而在软件视角中,软件被编译后会被分为不同的段进行存放。具体分段方式可能根据架构有细微区别在,以Tc3xx系列芯片为例,包含以下几段:

(1)已初始化的数据段

(2)未初始化的数据段

(3)只读数据段

(4)代码段

(5)task栈区

(6)启动栈区

(7)CSA区

        这些段被编译器分配到物理内存中,可能由不同的存储器来存放。每当程序需要使用某处数据或者加载某处的指令时,会根据地址来取出所需的数据或是指令进行运算,再将运算结果写入某处物理内存中。

        在这个过程中,安全隔离的目标是阻止安全无关的软件组件写入安全相关的软件组件使用的内存区域;低ASIL等级的软件组件写入高ASIL等级的软件组件所使用的内存区域。

MCU上的安全隔离模块

        MCU上的安全隔离通常借助内存分区机制和内存保护单元MPU完成。经典AUTOSAR架构中,允许对软件进行内存分区(Partition),借助内存映射(memory map)将软件组件的代码和数据划分到指定的区域内。这种方式虽然能有效地将不同ASIL等级的变量和代码分布到不同的地址范围中,但无法杜绝指针越界、数组越界导致跨区域访问的风险。

        MPU(memory protection unit)内存保护单元是一种按内存区域提供保护和隔离的硬件原件,与内存分区配合使用可以阻止不同软件分区的软件组件之间相互访问,从而达到内存隔离的效果。

        以Tc3xx系列芯片为例,MPU可以按照保护范围分为两种,一种为系统级的SMPU(System Memory Protection Unit),另一种为核心级的CMPU(Core Memory Protection Unit)。

  • 系统级的SMPU

        SMPU有时候也被称为Bus MPU,表示其工作在芯片总线上。其保护原理如图2所示,总线上所有主机对于内存的访问都会经过SMPU,当主机拥有所请求内存地址的对应访问权限(读/写)时,才能允许访问。

        Tc3xx中的Bus MPU可以维护8个地址保护区域(每个保护区域范围由两个寄存器控制),每个保护区域都记录了64个总线主机的权限。当主机访问内存区域时,首先寻找对应的区域,再根据主机TAG ID检查主机是否拥有对应的权限,检查通过后才能进行读写访问,否则会触发系统定义的故障。

        SMPU通常用于多核系统和使用DMA设备的系统,其保护范围有限,且不能覆盖所有的内存区域。

图2 SMPU保护原理

  • 核心级的CMPU

        核心级的CMPU则是每个CPU核心独有的,提供应用级别的隔离。经典AUTOSAR中,软件组件被组织成OSA(OS Application)。OSA内部存在共享资源,OSA之间则需要考虑内存隔离。

        CMPU保护原理如图3所示,CMPU隔离对象为CPU中运行的软件。CMPU也会预先划分保护区域,这通常也是内存分区的结果。对于这些内存区域,每一个在核心中运行的OSA可能都具有不同的权限。当上下文切换时,MPU的保护范围也会动态切换,以适配不同的OSA。

        同CMPU一样,只有拥有对应内存区域访问权限的OSA,才能成功完成访问,否则会触发系统定义的故障。CMPU通常拥有更多的保护区域,且能覆盖所有的内存空间。在这基础上,CMPU还支持保护集的预设,使CPU进行上下文切换时,更快地切换地址空间地MPU保护权限。一般来说,CMPU的应用更为广泛,在一些不那么复杂的系统中甚至只用CMPU就足以完成内存隔离的需求。

图3 CMPU隔离原理

SOC上的安全隔离

        相比MCU,SOC拥有更强大的性能,可以运行一些复杂操作系统(比如linux)。这种情况下,基于地址范围进行保护的MPU就显得“力不从心”了。进程是操作系统进行资源分配的基本单位,一些应用程序可能由多个进程组成,在某些场景中(比如座舱域)还需要虚拟机来运行不同的操作系统。

        因此,我们把SOC上的内存隔离场景划分为两个层级:进程级隔离、应用程序级隔离和操作系统级隔离。本文主要介绍进程级隔离。

        MMU(Memory Management Unit)是SOC中常见的硬件,用于提供进程级别的内存分配和隔离。进程在运行时,操作系统会使进程认为自己独占整个寻址空间(32位机器寻址空间为4GB),并使用连续的物理地址进行操作。但实际上,这个内存空间要么尚未分配,要么部分存在于磁盘中。并且其使用的虚拟地址会由MMU进行翻译,对应到分散的物理地址中。

        MMU的工作原理如图4所示。内存空间被划分为若干页面(Page),每个页面占用4KB内存。进程使用的连续虚拟页面被MMU翻译到具体的分散的物理页面中。

        MMU最主要的功能其实是将虚拟页翻译到物理页。那为什么MMU可以实现进程级隔离呢?

        因为MMU的翻译是基于页表进行的,页表记录了进程虚拟页到物理页的映射。操作系统为不同的进程分配的不同的页表起始地址,存储在对应寄存器中。当MMU翻译地址时,根据页表起始地址加偏移量定位到具体的页表项,进而完成地址翻译。不难看出,这种机制使得进程拥有天然隔离的零散的地址空间。

图4 MMU工作原理

安全隔离小结

        安全隔离的底层原理是避免软件对内存的不合理访问,以满足功能安全要求。硬件层面上,有MPU、MMU这样的硬件进行程序内存空间的保护和约束;软件层面上,容器化技术和虚拟化技术也能帮助用户制定更灵活的隔离策略。但并不是说实现了这些安全隔离机制就等于完全满足了安全隔离需求,还需要结合软件和系统的正确设计来共同达成目标。

        经纬恒润功能安全团队成立于2008年,系国内较早从事功能安全技术研究的团队。作为功能安全、预期功能安全国家标准委员会成员,经纬恒润的研发流程、生产流程已通过功能安全开发过程认证,功能安全开发过程达到ASIL-D,相关产品已成功服务于近百家国内外整车及零部件企业。

        经纬恒润功能安全软件团队可提供功能安全软件开发技术咨询服务,包括功能安全软件阶段流程/产品咨询、L2监控算法开发集成和L3安全机制(安全通信、隔离、监控、执行和芯片AOU)的开发集成,控制器覆盖动力域、底盘域、智驾域和车身域等。

        未来,经纬恒润将紧跟行业发展趋势和市场需求,结合自身汽车电子产品研发和国内外咨询实践,一如既往地坚持自主创新道路,为智能汽车安全保驾护航。

了解更多:请致电 010-64840808转6115或发邮件至market_dept@hirain.com(联系时请说明来自CSDN)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/306494.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode110:平衡二叉树

题目描述 给定一个二叉树,判断它是否是 平衡二叉树 解题思想 使用递归依次计算左子树的高度和右子树的高度 代码 class Solution { public:int height(TreeNode* node) {if (node nullptr) return 0;int leftT height(node->left);if (leftT -1) return -1;…

Kivy 学习2

from kivy.app import App from kivy.uix.button import Button from kivy.uix.floatlayout import FloatLayout from kivy.graphics import Rectangle, Colorclass FloatLayoutApp(App):def build(self):def update_rect(layout, *args):设置背景尺寸,可忽略layout…

PlayerSettings.WebGL.emscriptenArgs设置无效的问题

1)PlayerSettings.WebGL.emscriptenArgs设置无效的问题 2)多个小资源包合并为大资源包的疑问 3)AssetBundle在移动设备上丢失 4)Unity云渲染插件RenderStreaming,如何实现多用户分别有独立的操作 这是第381篇UWA技术知…

【动态规划】【01背包】Leetcode 1049. 最后一块石头的重量 II

【动态规划】【01背包】Leetcode 1049. 最后一块石头的重量 II 解法 ---------------🎈🎈题目链接🎈🎈------------------- 解法 😒: 我的代码实现> 动规五部曲 ✒️确定dp数组以及下标的含义 dp[j]表示容量为…

Maven的scope详解

依赖范围介绍 maven 项目不同的阶段引入到classpath中的依赖是不同的,例如,编译时,maven 会将与编译相关的依赖引入classpath中,测试时,maven会将测试相关的的依赖引入到classpath中,运行时,mav…

路由器端口映射是什么意思?

路由器端口映射是一种网络配置技术,在私有网络中允许外部网络访问特定的服务或应用程序。通过将路由器的端口映射到内部客户端设备,可以实现从公共网络访问内部网络资源的目的。 天联组网介绍 天联是一款异地组网内网穿透产品,由北京金万维科…

数据治理项目——深铁集团数据治理规划

目录 一、前言 二、数据治理内容与主要措施 2.1 实施背景 2.2 主要举措 2.2.1 制定数据战略目标 2.2.2 绘制数据治理蓝图 2.2.3 绘制数据治理制度 2.2.4 梳理数据资产目录 三、 应用效果 3.1 数据资产可视化管理 3.2 数据标准治理 3.3 集团大数据平台优化建设 一、…

若依vue中关于字典的使用

文章目录 字典管理页面列表点击某个字典类型展示具体字典数据修改某一条字典数据 字典的应用一般用于select多选框中代码实现根据字典Dict的value获取Label,类似于通过key获得value 源码解析 字典管理页面 列表 点击某个字典类型展示具体字典数据 修改某一条字典数…

力扣HOT100 - 189. 轮转数组

解题思路: 三次反转。 先反转一次,再根据 k 拆分成两部分各反转一次。 class Solution {public void rotate(int[] nums, int k) {k % nums.length;reverse(nums, 0, nums.length - 1);reverse(nums, 0, k - 1);reverse(nums, k, nums.length - 1);}pu…

关于DNS解析那些事儿,了解DNS解析的基础知识

DNS,全称Domain Name System域名系统,是一个将域名和IP地址相互映射的一个分布于世界各地的分布式数据库,而DNS解析就是将域名转换为IP地址的过程,使人们可以轻松实现通过域名访问网站。DNS解析是网站建设非常关键的一步&#xff…

防火墙搭建内网 安装路由器

经典网络情况 也就是网吧 先配置网段 科普:子网掩码代表IP前面几位不能动 安装防火墙虚拟机 配置两个网卡 第一个 第二个桥接 设置子网掩码 虚拟机有DHCP 可以不用防火墙的DHCP 配置有网站的ip地址和网关 利用防火墙映射出去外网 然后看防火墙外网ip 然后…

[lesson20]初始化列表的使用

初始化列表的使用 类成员的初始化 C中提供了初始化列表对成员变量进行初始化 语法规则 注意事项 成员的初始化顺序与成员的声明顺序相同成员的初始化顺序与初始化列表中的位置无关初始化列表先于构造函数的函数体执行 类中的const成员 类中的const成员会被分配空间的类中…

C++ primer 第十八章

C语言的三大特性:异常处理、命名空间、多重继承。 1.异常处理 异常处理机制允许我们能够将问题的检测与解决过程分离开来。 1.1、抛出异常 在C语言中,我们通过抛出一条表达式来引发一个异常。 当执行一个throw时,程序的控制权从throw转移…

(学习日记)2024.04.12:UCOSIII第四十节:软件定时器函数接口讲解

写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈。 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录&a…

ArcGIS和ArcGIS Pro快速加载ArcGIS历史影像World Imagery Wayback

ArcGIS在线历史影像网站 World Imagery Wayback(网址:https://livingatlas.arcgis.com/wayback/)提供了数期历史影像在线浏览服务,之前不少自媒体作者在文中宣称其能代表Google Earth历史影像。 1、一点对比 (1)同一级别下的版本覆盖面 以下述区域为例,自2014年2月20…

java 邮件发送表格

邮件发送表格 问题导入效果图 实现方案1. 拼接HTML文件(不推荐)2. excel 转HTML使用工具类来转化依赖工具类代码示例 使用已工具包 如 aspose-cells依赖代码示例 3.使用模板生成流程准备模板工具类代码示例 问题导入 在一些定时任务中,经常会…

liunx环境变量学习总结

环境变量 在操作系统中,环境变量是一种特殊的变量,它们为运行的进程提供全局配置信息和系统环境设定。本文将介绍如何自定义、删除环境变量,特别是对重要环境变量PATH的管理和定制,以及与环境变量相关的函数使用。 自定义环境变…

《哈迪斯》自带的Lua解释器是哪个版本?

玩过《哈迪斯》(英文名:Hades)吗?最近在研究怎么给这款游戏做MOD,想把它的振动体验升级到更高品质的RichTap。N站下载了一些别人做的MOD,发现很多都基于相同的格式,均是对游戏.sjon文件或.lua文…

LeetCode-64. 最小路径和【数组 动态规划 矩阵】

LeetCode-64. 最小路径和【数组 动态规划 矩阵】 题目描述:解题思路一:动态规划五部曲。定推初遍举解题思路二:动态规划优化空间,直接改grid解题思路三:dfs 题目描述: 给定一个包含非负整数的 m x n 网格 …

Python代码识别minist手写数字【附pdf】

一、概述 对于人类而言,要识别图片中的数字是一件很容易的事情,但是,如何让机器学会理解图片上的数字,这似乎并不容易。那么,能否找出一个函数(模型),通过输入相关的信息&#xff0…