汽车信息安全--攻破SecOC,就在今天!

2024-08-26 22:20

本文主要是介绍汽车信息安全--攻破SecOC,就在今天!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1.SecOC和系统安全?

2.破解实录

 2.1 破解安全访问授权

2.2 程序控制的漏洞

3.小结


2020年左右,汽车信息安全开始在业内普及。

对于这种新概念,部分OEM仍采取以往开发模式,在不影响软件架构的大背景下,直接进行软件的功能堆叠。

毫无疑问,这种开发逻辑没有做任何TARA分析,后门漏洞肯定存在,因此今天就来聊聊一些已知的攻击事件。

1.SecOC和系统安全?

2021年,某日系车被爆出通过逆向工程可以提取到SecOC密钥,从而可以向任意ECU发送消息,控制大多数驾驶功能,例如AEB、ACC等等。

但根据AUTOSAR SecOC文档描述,理论上它的MAC生成逻辑是相对难以攻破的,首先用于MAC生成的数据包括了完整新鲜度值、ID以及原始数据,但接收或者发出报文的最终身份信息是由截断的新鲜度值和截断MAC值共同构成,如下;

而新鲜度值截取部分只包括了消息计数器低位和重置低位,如下:

在不知道Trip Counter、Reset Counter的情况下,想要正向破解SecOC几乎是不可能的。

但是总线上的同步报文全是明文,它将上述两个计数器完全暴露了出来:

那接下来就只需要提取到SecOC相关密钥,整套车内板端安全通信就被攻破了。

现如今,密钥一般存放在HSM或者SHE内部,想要直接逆向是比较困难的; 

但如果从整体ECU软件架构上来思考这个问题,一切就变得奇怪了起来。

首先我们回忆一下,关于密钥更新的这部分逻辑,很多ECU仍然采用UDS进行更新,这就意味着必定有相关的DID;

其次目前汽车ECU成熟且比较典型的ECU Flash 布局如下:

在迭代比较慢的ECU里,A\B升级还没完全普及,仍然采用Bootlaoder升级App的方式;

按照之前经验,Bootlaoder中的Flash Driver运行一般有两种方式:

  • 解密存在Flash中的FlsDriver并搬运到RAM运行;
  • 接收上位机下发的FlsDriver,并在指定RAM位置运行。

而我们知道,Bootlaoder的更新流程大部分沿用ISO 14229、ISO 15765、不外乎企标在细节上有所不同。这种升级必然有接口对外,而这就有可能被成为攻击向量。

日系车SecOC密钥被提取,也正是从上述方向找到了突破口,我们来看看他们是如何一步一步对系统进行破解。

2.破解实录

破解的目标ECU为EPS,通过拆解发现了该ECU的MCU型号为RH850\P1M-E,该芯片有ICU-S,符合EVITA-Light;

虽然该芯片调试端口量产时被锁住了,但通过电压故障注入攻击,代码仍旧被逆向提取,如下:

当然这不是今天的重点。

通过对这些代码进行审计,梳理出了对SecOC报文的MAC计算流程,攻击者惊讶地发现:该ECU的SecOC软件模块竟然没有使用HSM,并且所有AES计算全是软件完成,这意味着SecOC相关密钥有可能仅仅是加密存储,但没有受到保护。

这就是比较奇怪的一点:明明这颗芯片带有ICUS,为什么不使用?有没有可能是成本原因?甚至说是为了赶进度,在不修改整体软件架构的情况下把该模块迅速实现了?

进一步的,通过梳理Bootloader中的更新流程,攻击者发现了一个致命的漏洞,通过该漏洞可以任意提取芯片内部数据,那就是前面我们提到的“接收上位机下发的FlsDriver,并在指定RAM位置运行”。

整体攻击逻辑总结如下:

  1. 通过UDS SID 0x10,从默认会话切换到编程会话;
  2. 通过UDS SID 0x27完成身份验证;
  3. 通过UDS SID 0x2E设置AES必要的密钥、IV等等;
  4. 使用UDS SID 0x34、0x36、0x37将上位机的FlsDriver下载到RAM,但是这个FlsDriver被攻击者替换为shellcode;
  5. 通过UDS SID 0x31 Routine Control对shellcode进行验证,包括CRC和CMAC;
  6. 通过Routine Control控制FlsDriver擦除目标区域,但实际上触发了shellcode的运行;
  7. 最终Dump出SecOC密钥。

 2.1 破解安全访问授权

27服务基本逻辑是上位机向ECU请求一个随机种子,然后对这个种子进行运算得要一个security key,并发送给ECU;ECU同时也算一个值,进行比较,相同则解锁授权,如下:

但在该ECU中,代码逻辑除了基本流程外,在请求种子时,ECU还需要上位机下发16byte数据参与到Security Key的计算,具体流程如下:

在ECU里包含一个AES KEY,长度128bit,用于加密Master下发的16字节数据,得到一个派生密钥Key1;然后继续使用Key1对种子进行解密,得到最终的Security Key。

因为Firmware已经被逆向出来,并且在由于没有使用ICUS,参与到上述计算的AES Key必定没有被加密(否则就需要对AES KEY进行解密,也可以从固件中看出逻辑);知道这个逻辑后,很容易绕开安全访问这个服务;

那么接下来就是如何shellcode下载到ram中。

2.2 程序控制的漏洞

RoutineControl是UDS里比较重要的一个服务,常见用法包括memory擦除、运行自举测试、校验等等,一旦27服务被破解后,31里面的各种routine即可任意使用。

在上面我们知道,该ECU的FlsDriver是通过上位机下载到RAM运行,因此篡改这个FlsDriver(shellcode),并保证它通过CRC、CMAC等校验,我们就可以通过shellcode 提取到SecOC密钥。

经过分析,该FlsDriver有特定格式,具体如下:

在 偏移0xFD0处,存放着Driver实际运行地址,该项目中为0xFEBF0000,意味着每次触发擦写程序,都会从跳转至这里开始运行;

除此之外,还有CRC以及AES CMAC用于身份和完整性验证,这里可以通过识别到的DID进行,具体逻辑如下:

使用固件中的另一个私密Key对写入的DID 0x201进行加密,得到AES Key,然后把写入的DID 0x202数据以及请求下载到的有效Payload(0xFF0字节)组合得到0x1000byte数据,用AES Key对其进行CMAC计算,得到最终的CMAC并添加到待下载的FlsDriver末位,这样就拼凑了上述格式的有效payload,并且可以完美通过校验;

最终,我们要dump SecOC密钥的程序就在shell code中实现。效果如下:

3.小结

可以看到,在获取到SecOC Key之后,我们只需要在总线上抓到同步报文的Reset\Trip Counter即可完整拼凑出带SecOC属性的报文,从而实现整车的控制。

这个ECU的开发很显然仍旧采用以前的软件架构和思路,这在面对汽车信息安全时显得不是特别契合,一方面功能能够按照规范完成,但另一方面由于之前开发思路基本没有考虑过网络攻击,这就很有可能留下了一些漏洞;因此,在未来几年,为弥补这方面的缺憾,OEM、Tier 1的软件架构势必会出现很大的改动。

我们拭目以待!

这篇关于汽车信息安全--攻破SecOC,就在今天!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

系统架构设计师: 信息安全技术

简简单单 Online zuozuo: 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo :本心、输入输出、结果 简简单单 Online zuozuo : 文章目录 系统架构设计师: 信息安全技术前言信息安全的基本要素:信息安全的范围:安全措施的目标:访问控制技术要素:访问控制包括:等保

提升汽车制造质量:矫平技术在车门平整化中的应用

汽车制造业对每一个部件的精细度都有着极高的要求,尤其是车门这样的关键组件。车门不仅需要提供良好的密封性,还要在外观上展现出车辆的高端品质。然而,生产过程中的不平整问题往往成为提升制造质量的障碍。矫平技术的应用,为解决这一问题提供了有效的手段。 车门平整度的重要性 车门的平整度对于车辆的整体性能和美观至关重要。不平整的车门可能导致密封不良、噪音增大,甚至影响车门的正常开启和关闭。因此,确保车门的

Java语言的Netty框架+云快充协议1.5+充电桩系统+新能源汽车充电桩系统源码

介绍 云快充协议+云快充1.5协议+云快充1.6+云快充协议开源代码+云快充底层协议+云快充桩直连+桩直连协议+充电桩协议+云快充源码 软件架构 1、提供云快充底层桩直连协议,版本为云快充1.5,对于没有对接过充电桩系统的开发者尤为合适; 2、包含:启动充电、结束充电、充电中实时数据获取、报文解析、Netty通讯框架、包解析工具、调试器模拟器软件等; 源码合作 提供完整云快充协议源代码

2024年9月7日历史上的今天大事件早读

251年9月7日 三国时期军事家司马懿逝世 1298年9月7日 马可-波罗与鲁思梯谦合著《马可-波罗行记》 1625年9月7日 魏忠贤下令禁毁东林书院 1689年9月7日 中俄《尼布楚条约》签订 1812年9月7日 俄法博罗季诺决战,标志着拿破仑的军队覆灭开始 1822年9月7日 巴西独立 1853年9月7日 上海小刀会起义 1901年9月7日 《辛丑条约》签订 1904

联众优车持续加大汽车金融服务投入与创新,赋能汽车消费新生态

近年来,中国汽车消费市场呈现出蓬勃发展的态势,而汽车金融服务作为降低购车门槛、优化购车体验的重要手段,正日益受到市场的青睐。《2023中国汽车消费趋势调查报告》显示,相较于前一年,今年选择汽车金融服务的市场消费者占比显著提升,其中潜在购车者占比高达67.8%,再购用户及现有用户占比也分别达到59.9%和49.4%。在这一背景下,作为汽车综合服务市场的领军企业,联众优车持续加大在汽车金融服务领域的投

蔚来汽车-测开日常实习-部分手撕代码题

基本上来自牛客的帖子,自己总结了一些题及其做法,之后也会更新其他公司的测开实习真题。 1.    【入门】- 输入十进制整数,输出该整数中1的数量。 感觉比较简单,不知道具体的用例,可能是特别长的输入?这样用字符串处理就行。 如果应规定输入的是long之类的数据类型,就用to_string 转为string类型即可。 int num = 123;std::string str = st

信息安全工程师模拟测试题

信息安全工程师:信息安全工程师证书属于软考中级资格证书之一,为了适应“十三五”期间计算机软件行业发展需要,满足社会多方对信息安全技术人员的迫切需求,信息安全工程师在2016年下半年首次开考,目前一年仅考一次。 信息安全工程师模拟测试题 一、基础知识二、软件应用 信息安全工程师 属于《国家职业资格目录(2021年版)》目录中的证书,通过考试将颁发由人社局和工信部盖章

今天做了freemaker 导出word文档 的bug修复,解决 \n换行 问题

结合Freemaker导出文件 public void exportSimpleWord() throws Exception{// 要填充的数据, 注意map的key要和word中${xxx}的xxx一致Map<String,String> dataMap = new HashMap<String,String>();dataMap.put("username", "张三");dataMap.

如何进行不同数据库的集群操作?--从部署谈起,今天来看MySQL和NoSql数据库Redis的集群

篇幅较长,主要分为mysql和Redis两部分。找想要的部分可见目录食用。。 目录 什么是集群?为什么要集群? 1.1 数据库主要分为两大类:关系型数据库与 NoSQL 数据库 1.2 为什么还要用 NoSQL 数据库呢?                       -------------------华丽分割线-------------- 一、关系型数据库MySQL 1.部署