“汽车人”眼中的网络安全---关于AUTOSAR E2E及测试开发实践:E2E概念介绍 | E2E的机制介绍 | E2E测试实践

本文主要是介绍“汽车人”眼中的网络安全---关于AUTOSAR E2E及测试开发实践:E2E概念介绍 | E2E的机制介绍 | E2E测试实践,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.前言

上篇文章“聊聊网络安全的5W1H”对网络安全知识体系和技术脉络做了深入浅出的介绍,提到AUTOSAR所定义的网络和通信安全相关的技术,本期我们将介绍其中的E2E策略(严格来说属于Safety的范围),并分享在项目中的测试实践。

2.E2E概念介绍


2.1 E2E是什么?

E2E全称为End to End,代表的是AUTOSAR中的一种数据保护机制,从名称中可以看出,这是一个终端到终端的逻辑。那么这里的终端是指ECU吗?

答案是否定的。在AUTOSAR的架构中,最上层为包含SW-C(Software Component)的应用层,类似于手机应用程序中的各种APP。对于E2E来说,数据的传递不是针对ECU到ECU的层级而是SW-C到SW-C层级。

在这里插入图片描述

图1 AUTOSAR软件概貌

在车载网络中,信息交换通常是从一个ECU发送信号,另一个ECU接收信号。对E2E而言,通常是从源SW-C生成信号,经过RTE(Run-Time Environment)、BSW(Basic Software)并在物理总线上传输后到达目标SW-C。在这个过程中,信号的传递可能由于一些故障情况(比如软件运行错误)无法到达目标终端,或是信号本身被干扰/损坏,尤其对于安全相关的信号(车速、档位、车辆/电源模式等)来说,这种情况会带来很大的隐患。而E2E正是通过一些机制,使发送终端和接收终端的数据保持一致,保证信息的完整性。


在这里插入图片描述

图2 错误来源的示意

2.2 E2E的适用范围

E2E可适用于各种总线通信,以北汇信息参与的项目为例,E2E机制已应用于CAN、CAN FD、LIN、FlexRay总线通信中,对于以太网当然可应用E2E机制,但是需考虑和留意如下的问题:

不同于上文介绍的发送端/接收端的通信模式,以太网中将会广泛应用基于SoA的客户端/服务器的通信模式,将涉及诸如客户端及其操作的序列号变化、超时检测等问题,对此应该如何定义E2E机制?

在TSN网络中Follow_Up报文每次经过交换机后都会更新其内容,此时的E2E机制又应该做何种变化?


2.3关于E2E与SecOC

除了E2E保护机制外,AUTOSAR还定义了针对PDU(Protocol Data Unit)的保护策略,即SecOC(Secure Onboard Communication)。关于SecOC更多细节后续将有专门文章介绍,先对SecOC与E2E两者进行简要对比如下图3,供大家参考。

在这里插入图片描述

图3 SecOC与E2E简要对比图


3.E2E的机制介绍

E2E策略的整体思路是CRC校验和计数,在原始数据的基础上增加控制段形成E2E报头,AUTOSAR提供了多种E2E的配置来适用各种场景,本文以E2E Profile 1这种配置为例来说明。

在这里插入图片描述

图4 E2E报头

在E2E Profile 1中,发送到RTE的数据需要包含3个部分:4个bit的Counter,1个字节的CRC以及需要被保护的原数据。其中Counter为计数器,每发送一次值就增加;CRC按照E2E Profile 1的计算方式,对Data ID、Counter和原数据进行CRC计算,并将结果填入CRC字节:

在这里插入图片描述

图5 E2E Profile 1配置示意图

Data ID是一个预先定义的密钥,不会被发送到总线上。整个E2E的过程为:

—— SW-C生成原数据
—— 将Counter和原数据组成待校验数据
—— 使用Data ID进行CRC的校验
—— 将原数据、Counter和CRC值发送给RTE
—— 经过诸如总线通信等路径,原数据、Counter和CRC传递到目标RTE
—— 将接收的数据拆包,校验Counter和CRC
—— 目标SW-C接收到原数据

在这里插入图片描述

图6 E2E流程示例

当然,与数据发送方相比,数据接收方需要处理的内容就显得更加复杂。包含序列丢失处理、序列无效处理、序列重复处理、超时处理等。


在这里插入图片描述

图7 E2E接收行为示例

E2E本身有很大的灵活性,除了本文示例外(本文示例使用了E2E Protection Wrapper),还有多种使用方式(比如COM E2E Callouts),感兴趣的小伙伴可以参考AUTOSAR规范。



4.E2E测试实践

对于网络中的ECU而言,E2E测试包含E2E发送测试和E2E接收测试。

典型的E2E发送测试是将ECU发送的包含E2E信息的数据源按照E2E Profile 1的方式,计算一个CRC,如果与原始发送的CRC相等则验证通过,反之亦然。

E2E接收测试包括正向和逆向测试,逆向测试主要是验证ECU在接收到错误的E2E时的行为(如丢弃该数据信息,记录E2E错误DTC等)以及再次接收到正确E2E时的行为测试,此类测试需软件层面的支持,比如定义相关的DTC方可实现黑盒测试,或提供相关的内部数据的访问接口和方法,或与功能测试相结合,总之依赖特定的条件。

本文将主要介绍E2E发送测试。以CAN总线为例,当接收到总线上发送的一帧包含E2E信息的报文时,首先获取该E2E对应的所有信号的值,然后将信号组成数据位流进行CRC计算,在这个过程需要注意以下几点:

—— 信号的打包
—— 信号排序方式(取决于OEM需求)
—— 信号位置的排序规则(取决于OEM需求),本例中的规则在ARXML中做了属性定义,包括CRC信号和Counter信号位置。

在这里插入图片描述

图8 信号位置的排序规则在ARXML中的属性定义

根据属性定义和计算规则,可得到待校验的数据为04 00 00 01 00 00 01 81 04h;然后,在ARXML中获取该E2E的DATA ID=34;最后,使用AUTOSAR_SWS_E2ELibrary定义的算法,计算得到CRC的值为0xE6,与发送的CRC一致,则该E2E发送是正确的。

根据上面的描述,可以了解E2E验证的具体过程。但是,当网络中有多个ECU,每个ECU又有多个E2E时,手动测试验证显然不是明智之举。那么,如何进行自动化测试呢?首先需要解决以下技术难点:


E2E测试对象的提取

在ARXML文件中定义了ECU的E2E发送和E2E接收集合,其中包含了每个E2E的详细信息,可以查询该E2E原型对应的真实载体。为此,我们专门开发了ARXML文件解析软件,通过软件来提取E2E测试对象。


在这里插入图片描述

图9 ARXML文件E2E信息

数据库兼容性问题

E2E属性信息是在ARXML中定义的,为了实现测试环境的仿真,可能需加载DBC、LDF、FIBEX等不同格式通信数据库。此时,不同数据库之间信号名称的一致性问题就突显出来。为此,开发了“位流”的解析方案,解决了数据库的兼容问题。

技术难点已被攻克,自动化测试不再是难事。我们基于Vector 的CANoe软件,开发了一套自动化在线测试脚本,已经支持了CAN、LIN、CAN FD、FlexRay总线E2E测试。


在这里插入图片描述

图10 CANoe E2E测试工程和自动生成报告

自动化在线测试有很多优点,比如可以实时监控ECU报文发送状态,可以模拟故障注入等场景.

但是,在线测试也有无法解决的场景:

并行分析,发现潜在的或偶发的问题

针对OEM而言,ECU尚未交样的情况提前验证,或同时交样时多样件同时测试时的资源占用问题

针对以上问题,我们专门开发了一套完整的离线测试软件工具链,通过ECU通信的log数据或者实车GL记录仪存储的log数据,就可以完成E2E离线测试,过程如下。


在这里插入图片描述

图11 E2E离线测试流程

E2E测试对象的提取

通过ARXML

文件解析软件,提取出E2E测试对象,作为E2E测试的输入文件。


Log文件解析和通道映射

该离线工具支持CAN、CAN FD、LIN、FlexRay等报文的解析,可实现对BLF文件的解析,同时支持多总线多ECU同时测试,根据实车记录的数据,在软件中进行通道和总线的映射,实现一次性测试。

在这里插入图片描述

图12 E2E离线测试配置

测试执行

导入E2E测试对象文件、通道映射文件和实车BLF log文件,执行测试。该离线软件支持高并发处理,1GB的log数据可在几分钟内完成测试


在这里插入图片描述

图13 E2E离线测试执行及测试结果分析

测试结果分析

从测试执行结果分析,该ECU有两个E2E计算错误,经分析为DATA ID配置错误;1个E2E对应的报文未发送,定位为Com层问题;1个E2E对应的信号组的Update Bit始终未置1,与功能触发有关引起。


5.总结

道路千万条,安全第一条。AUTOSAR所定义的安全机制较容易落地,目前在国内主流OEM中已经得到了应用,北汇也有幸参与其中。愿与各位共同努力,分享经验,提供专业的网络安全测试解决方案。

注:文中部分图片来源于AUTOSAR


参考文献

[1] AUTOSAR_SWS_E2ELibrary

[2] AUTOSAR_SWS_SecureOnboardCommunication

作者:北汇信息-蒋露、张恒



----------------------------------------------------------------------------------------------------------------------



喜欢此篇文章的话欢迎一键三联支持小编吧~!

更多相关资讯及业务介绍,欢迎访问上海北汇信息官方网站:上海北汇信息科技有限公司
北汇官方知乎账号:北汇信息-知乎

联系方式:

电话:021-34716271
邮箱:info@polelink.com

北汇信息成立于2010年,是一家技术驱动的创新型服务企业。北汇信息始终专注于汽车电子领域的新技术和新产品,为整车厂和零部件企业提供完整的研发、测试解决方案。从测试工具、专用测试设备、完整测试方案到实车测试服务,我们与我们的客户一起努力,让中国的汽车变得越来越安全、越来越舒适、越来越智能。

这篇关于“汽车人”眼中的网络安全---关于AUTOSAR E2E及测试开发实践:E2E概念介绍 | E2E的机制介绍 | E2E测试实践的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/697102

相关文章

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.

一文带你理解Python中import机制与importlib的妙用

《一文带你理解Python中import机制与importlib的妙用》在Python编程的世界里,import语句是开发者最常用的工具之一,它就像一把钥匙,打开了通往各种功能和库的大门,下面就跟随小... 目录一、python import机制概述1.1 import语句的基本用法1.2 模块缓存机制1.

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制

Redis缓存问题与缓存更新机制详解

《Redis缓存问题与缓存更新机制详解》本文主要介绍了缓存问题及其解决方案,包括缓存穿透、缓存击穿、缓存雪崩等问题的成因以及相应的预防和解决方法,同时,还详细探讨了缓存更新机制,包括不同情况下的缓存更... 目录一、缓存问题1.1 缓存穿透1.1.1 问题来源1.1.2 解决方案1.2 缓存击穿1.2.1

Java如何通过反射机制获取数据类对象的属性及方法

《Java如何通过反射机制获取数据类对象的属性及方法》文章介绍了如何使用Java反射机制获取类对象的所有属性及其对应的get、set方法,以及如何通过反射机制实现类对象的实例化,感兴趣的朋友跟随小编一... 目录一、通过反射机制获取类对象的所有属性以及相应的get、set方法1.遍历类对象的所有属性2.获取

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

MySQL中的锁和MVCC机制解读

《MySQL中的锁和MVCC机制解读》MySQL事务、锁和MVCC机制是确保数据库操作原子性、一致性和隔离性的关键,事务必须遵循ACID原则,锁的类型包括表级锁、行级锁和意向锁,MVCC通过非锁定读和... 目录mysql的锁和MVCC机制事务的概念与ACID特性锁的类型及其工作机制锁的粒度与性能影响多版本

Python实现NLP的完整流程介绍

《Python实现NLP的完整流程介绍》这篇文章主要为大家详细介绍了Python实现NLP的完整流程,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 编程安装和导入必要的库2. 文本数据准备3. 文本预处理3.1 小写化3.2 分词(Tokenizatio