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

news2024/11/16 21:29:55

目录

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的软件架构势必会出现很大的改动。

我们拭目以待!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

企业级NoSql数据库Redis集群

一、关系型数据库和 NoSQL 数据库 1.1 数据库主要分为两大类:关系型数据库与 NoSQL 数据库 关系型数据库,是建立在关系模型基础上的数据库,其借助于集合代数等数学概念和方法来处理数据库中的数据主流的 MySQL、Oracle、MS SQL Server 和 …

OpenHarmony中的fastjson gson应该这样用

【问题背景】 随着越来越多的开发者开始投入北向应用的开发,无数的人开始问我:鸿蒙三方库是否有fastjson,是否有gson,当前json和对象的转换要怎么搞。 作为程序员,我的每个项目都逃不掉fastjson/gson等三方库&#x…

C++基础知识5 string

string 1. string类1.1 C语言中的字符串 2. 标准库中的string类2.1 string类(了解)2.2 auto和范围for2.3 string类的常用接口说明 3. string类对象的访问及遍历操作4. string类对象的修改操作5. string类非成员函数6. vs和g下string结构的说明7. string类的模拟实现8.写时拷贝(…

认知杂谈35

今天分享 有人说的一段争议性的话 I 《日常藏宝,多留意》 嘿,你想想看哈,生活里那些让咱佩服得不行的小窍门,其实都藏在咱平常的小事儿里呢。 I 就好比啊,很多有用的道理其实就在咱身边晃悠,就看咱有没有…

nginx访问控制、用户认证、https

nginx访问控制 用于location段 Allow:设定允许哪台或哪些主机访问,多个参数间用空格隔开 Deny:设定禁止那台或哪些主机访问,多个参数间用空格隔开 //deny [rootnginx ~]# vim /usr/local/nginx/conf/nginx.conflocation /stat…

【数据结构篇】~链式二叉树(附源码)

链式二叉树 前言(含头文件)头文件 1.链式二叉树的组成2.前、中、后、层序遍历1.前序遍历2.中序遍历3.后序遍历 3.结点个数以及高度等​4.判断二叉树是否为完全二叉树 前言(含头文件) 之前的堆是特殊的二叉树是顺序结构的二叉树&a…

python库(20):Jsonschema库描述JSON数据的规范

1 Jsonschema简介 在当今信息时代,数据规范与交换变得越来越重要,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,被广泛应用于网络通信与前后端数据交互。 JSON Schema是一种用于描述JSON数据的规范…

计算机二级题--函数(scanf)章节

1.scanf函数 1. 2. A:默认使用scanf函数的时候,如果空格,回车或跳格就结束了,不能再继续输入了 (同上知识点)

【JavaEE初阶】HTTP协议与使用Fiddler抓包

目录 🎍HTTP协议是什么? 🍀应用层协议(HTTP)存在的意义 🎄HTTP 协议的工作过程 🌴HTTP 协议格式 🌳Fiddler抓包工具的使用 🚩如何抓HTTPS的包? &#…

“视频号小店分销:让你的微信小店也能分销”

在数字时代的浪潮中,微信视频号利用其深厚的社交根基和庞大的用户基础,正逐渐成为新零售领域的一股新兴力量。特别是其视频号小店功能的推出,为商家提供了一个集商品展示、销售促进和营销策略于一体的全方位运营平台,实现了业务流…

医疗器械法规笔记

目录 前言医疗器械法规体系医疗器械监管注册与备案前言 之前的文章中介绍了与软件开发过程中相关的法规(网络安全),同时介绍了如何查找相关行业标准,这些都是平时工作中遇到的细节问题,没有系统性的呈现出医疗器械法规相关的框架,一直想对法规与标准有一个全面的认识和总…

java之继承与多态 1

1.继承的概念:它允许一个类(子类)继承另一个类(父类)的属性和方法,从而实现代码的重用和扩展。 父类(超类):被继承的类。子类:继承父类的类。子类可以访问父…

OpenHarmony实战开发:Launcher应用安装问题分析报告

1 关键字 Launcher;Storage 2 问题描述 问题现象:安装应用到达 20 个以上后,重启设备,Launcher 页面没有任何应用图标 运行环境:硬件 dayu200,软件:3.1release 测试步骤: 使用…

DrawDB数据库设计工具本地部署结合内网穿透实现团队异地协作办公

文章目录 前言1. Windows本地部署DrawDB2. 安装Cpolar内网穿透3. 实现公网访问DrawDB4. 固定DrawDB公网地址 💡 推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击跳转到网站】 前言…

Redis集群技术

目录 一、Redis安装部署 二、Redis主从复制 三、Redis哨兵模式 1、开启Redis哨兵模式 2、Redis哨兵模式选举MASTER全过程 3、Redis哨兵模式数据丢失风险的解决方案 四、Redis Cluster 1、Redis集群部署 2、Redis集群扩容 1、加入MASTER集群 2、分配槽位 3、添加slav…

Linux:开发工具(3)

一、版本控制器git 安装git指令 yum install git 1.1 举例理解版本控制器 举个例子: 比方说老师要求我们交一份实验报告,而你的室友张三是一个非常勤奋的人,所以他很早就写好了第一版交给老师,但老师的要求很高,他觉得…

将 github 仓库同步到个人服务器

场景 把本地项目推送到Github仓库后,如果想部署到服务器上,可以尝试此方案 我的博客是hugo搭建的,每次更新文章会手动推送到Github仓库, 然后利用Actions 脚本自动推送到cf或者vercel 之前我写过一篇 将 hugo 博客搬迁到服务器…

STM案例一:灯闪烁

一、使用元件 STlink,STM32F103C8T6 二、接线方法 STM32与STLINK的接线方法为: GND-->GND DCLK-->SWCLK DIO-->SWDIO 3.3-->3.3V 三、配置调试器 选择魔术棒按钮,单击Debug,选择ST-link Debug,选…

免费JSON在线解析工具网址

1,https://tool.juhe.cn/ JSON在线解析 (juhe.cn) 2,https://www.sojson.com/ JSON在线 | JSON解析格式化—SO JSON在线工具

阿卡迈2.0逆向

阿卡迈(akamai)我也是第一次第一次搞 阿卡迈检测挺多例如 ua 屏幕 document 自动化检测等等 ,还有tls指纹 仅供学习参考吧 当cookie的_abck为 0表示通过,1表示不通过!!! 测试了两个2.0站全都通…