车联网学习笔记1

记录一下转车联网安全后的学习,因为是刚接触,有些东西理解不够透彻或有误,后续会更新

报文审计

CRC

待记

SecOC机制

安全通讯模块。在原始CAN帧上面加入一些标识,在解析的时候先识别标识,再解析数据,否则认为数据是无效的,通俗一点就是发送CAN原始数据的时候进行加密,解析CAN原始数据的时候进行解密。

SecOC机制报文的CAN数据必须是CANFD格式的,CAN标准格式的实施不了SecOC机制,因为SecOC的加密信息需要占用8字节(传统CAN标准最多只有8字节报文,而CANFD最多能64)

DLC = 16

1
2
3
4
5
6
7
8
9
普通报文:
ID DLC DATA
0x123 16 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16
//全是有效数据

SecOC报文:
ID DLC DATA
0x123 16 01 02 03 04 05 06 07 08 00 01 AD 3B 34 CF BC 67
//前8个是有效数据,9-10是新鲜度值,11-16是MAC值

DLC = 32

1
2
3
4
5
6
7
8
9
普通报文:
ID DLC DATA
0x123 32 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
//全是有效数据

SecOC报文:
ID DLC DATA
0x123 32 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 00 01 AD 3B 34 CF BC 67
//前24个是有效数据,24-25是新鲜度值,26-32是MAC值

可以看得出,一条用了SecOC机制的报文是由原始CAN数据、新鲜度值信息和 MAC值信息组成

报文识别

扩展帧和标准帧

18daxxxx 是扩展帧标识符
前两个字节是UDS标识符,后两个字节是子功能码
18DB
18DA
7DF 是标准帧标识符
7DF
7FF

报文解释(以标准帧为例)

1
7DF#02 11 01 00 00 00 00

7DF:CAN消息标识符
02:服务ID(从后面的功能ID开始数,有几个字节就是零几,比如11 01两个字节就是02,27 02 11 22就是4个字节,用04)
11:功能ID
01:数据ID(功能参数)
xx…: 数据报文

Can通信

发送报文11 01响应的是51 01,发送10 01响应的是50 01
观察报文的收发发现,服务端响应的报文里,功能ID会比发送的多40,比如发送27 01 ,响应则是67 01 ,发送22 f1,响应则是62 f1,了解这个规则有利于查找对应的响应报文

使用UDS诊断时先发送10 03切换模式(00为保留 01位默认模式 02为编程模式 03为扩展模式)

扩展帧18DBFFF1 寻址

先发送18DBFFF1确认通信地址,比如发送18DBFFF1,回复的是18DAF1EE,其中18DB回复对应的标识符18DA,回复的EE是通信ID,所以后续要跟EE进行通信,最终通信地址就是18DAEEF1

xx 7F xx(功能id)是否定响应,比如发送02 11 01 00 00 00 00 00,肯定响应是02 51 01 00 00 00 00 00,如果响应被否定,则是03 7F 11 12 00 00 00 00,其中11是请求的功能ID,12是响应码

响应码说明

0x12(子功能不支持)
0x13(报文长度错误或格式非法)
0x22(条件不满足,处于变编程状态)

结合响应码得知03 7F 11 12 00 00 00 00意思是返回了3个字节,响应内容为不支持11服务

主板

串口通信

调试口一般是RX TX GND,其中GND是地线,RX是接收,TX是发送,引脚线两端要对好,一般板子都会标明,如果没有标明,则用万用表测试。

1
2
3
通断档:黑表笔接到板子的电路或者金属上,红表笔依次触碰测试,如果响了就表示是地线
电压档:黑表笔接到板子的电路或者金属上,红表笔依次触碰测试,如果电压为0表示是地线
测试RX:万用表显示1.4左右的话就是有数据

板子一般是12v,万用表调到20就够用了

测试JTAG或UART:查询芯片丝印,用万用表按照芯片datasheet测试引脚

目前复测过的漏洞(真实车零部件):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
CAN_FD软硬件强制复位:通过发送复位报文让设备重启

CAN_FD DOS:通过一直发送高优先级报文导致拒绝服务

CAN抗重放测试:没有实车时,审计报文,查看会不会存在重放漏洞,有实车时,重放报文查看车的重放效果

2E服务未授权写入测试:通过2E篡改DID数据,22请求查看篡改后的数据

27服务测试: 了解了uds安全访问诊断流程,先是1、客户端发送27 01请求种子,然后2、服务端返回67 01 [种子], 3、客户端使用收到的种子以及一些事先约定的算法,生成一个对称密钥(会话密钥)使用27 02 + 密钥发送,4、服务端收到客户端发送的密钥后,使用预共享的密钥生成算法(通常是与客户端相同的算法),计算出相同的对称密钥,如果密钥是对的,响应67 02 + 密钥,ECU自动解锁,接下来就积极跟客户端通信,如果不对会返回否定响应

安全刷写测试: 上位机是本地校验,通过反编译调试绕过本地校验进行固件刷写

CAN FUZZ

等等

ECU刷写

截至目前见过刷写原理(通过查看OTA升级日志)其实就是上位机通过发送2E来写入数据

诊断服务参考:

UDS的安全访问服务(0x27)与CAPL实现自动处理
https://blog.csdn.net/u013391094/article/details/130911357

安全访问(ISO14229系列之27服务)
https://blog.csdn.net/weixin_44536482/article/details/93340252


声明:
本文章用于学习交流,严禁用于非法操作,出现后果一切自行承担,阅读此文章表示你已同意本声明。

Disclaimer:
This article is for study and communication. It is strictly forbidden to use it for illegal operations. All consequences shall be borne by yourself. Reading this article means that you have agreed to this statement.