大家好,又见面了,我是你们的朋友风君子。
目录
相关背景
CAN节点介绍
CAN帧结构介绍
CAN总线攻击面分析
CAN总线安全缺陷
基于ID的仲裁机制
安全缺陷
针对CAN总线的攻击方式[2]
参考文章
相关背景
控制器局域网(CAN bus)由罗伯特·博世公司于1983年开发。该协议于1986年美国密歇根州底特律市举行的国际汽车工程师学会(SAE)会议上正式发表。第一个CAN控制芯片,由英特尔和飞利浦生产,并且于1987年发布。 世界上第一台装载了基于CAN的多重线系统的汽车是1991年推出的梅赛德斯-奔驰 W140。[1]
CAN节点介绍
连接到CAN总线上的单元被称为CAN节点,所有连接到同一个CAN总线上的节点同CAN总线一起组成了CAN网络。CAN节点一般由以下几个模块组成:
1)中央处理器、微处理器或主处理器
处理器对收发到的消息进行解析和处理,类似于CAN节点的大脑,经由该大脑的分析之后将指令下发给传感器、驱动器和控制设备。
2)CAN控制器,用于收发消息的控制模块
接收:CAN控制器将从总线上串行接收的字节流,直到整个消息接收完毕,然后将消息发送给处理器进行分析处理。
发送:主处理器发送信息到CAN控制器,之后当总线空闲时将信息以比特流的方式串行发送至总线。
3)收发器,由ISO11898-2/3标准定义
接收:把数据流从CAN总线层转换成CAN控制器可以使用的标准。
传输:把来自CAN控制器的数据流转换至CAN总线层。
CAN总线上的每个节点都能够发送和接收信息,但不能够同时进行。 一个消息或帧主要包括标识符ID)、CRC、ACK等字段。ID表示信息的优先级,最多八个数据字节。消息采用不归零NRZ)格式串行传送到CAN总线,并且可被所有节点接收。
CAN节点示意图(图片来自维基百科 )
被CAN网络连接的设备通常是传感器,驱动器和其他控制设备。 这些设备通过一个中央处理器、一个CAN控制器,和一个CAN接收器连接至总线。
CAN帧结构介绍
CAN节点在CAN总线上以帧结构发送CAN消息。CAN帧结构,包括帧起始标志SOF、帧结束标志EOF、仲裁字段、控制字段、数据字段、CRC校验字段ACK字段七个组成部分。
CAN帧格式(图片来自维基百科)
CAN总线有四种不同的帧类型,分别是数据帧、远程帧、错误帧和过载帧。数据帧用来传送数据,远程帧通过特殊的Identifier请求指定消息,当节点检测到错误时会发送一个错误帧,过载帧用来在数据帧和远程帧之间设置延迟。CAN帧格式各个字段解释如下:
CAN帧各字段解释(表格来自维基百科)
CAN总线攻击面分析
CAN总线攻击面包括远程攻击面和物理接触攻击面两个大的方面,其中远程攻击面有远程信息处理单元(TBOX,或5G模块)、车载信息娱乐系统(HU)、蓝牙模块、WIFI、遥控钥匙和远程诊断接口等,物理接触攻击面主要为OBD-II诊断端口和各类传感器。
CAN总线攻击面
(该图片及“针对CAN的攻击”一节的图片来源:Security Issues with In-Vehicle Networks, and Enhanced Countermeasures Based on Blockchain)
CAN总线安全缺陷
基于ID的仲裁机制
CAN帧没有标识发送者和接收者,CAN协议使用一种叫“带有冲突检测的载波侦听多路访问”机制进行仲裁。当多个节点同时发送消息时,ID最小的节点拥有最高的优先级。当任意一个节点发送控制位时,其他节点均会读取控制位,无论控制位的值是多少。当一个节点检测到更高优先级的数据帧时,它将停止发送。
我们以两个不同ID的节点简单介绍以下仲裁机制生效的方式。假设在同一个CAN总线上存在节点15和节点16,两个节点在CAN总线空闲时同时抢占总线,它们即将发送的帧数据如下表所示:
(表格数据来自维基百科)
Node 15和Node 16在同一时间想要发送数据,两个节点分别发送最高的位,一次发送一位,使用“线与”机制判断,0为显性,1为隐性,前面6个比特两个节点都发送0,接收到0;第七比特位,Node 15发送0接收0,Node 16发送1接收0,Node 15胜出。
安全缺陷
针对这种仲裁机制,大家很容易就能想到攻击者可以伪造高优先级的报文,频繁地向CAN总线上发送,导致CAN总线上合法节点无法正常发送报文,即拒绝服务攻击。究其原因,CAN协议没有标识发送者和接收者的机制,也没有额外的认证手段;此外,在CAN总线上传输的数据的机密性也无法得到保证。
针对CAN总线的攻击方式[2]
由于CAN总线没有提供认证机制和保密性机制,攻击者可以对CAN总线发起DOS攻击、Fuzzy攻击、嗅探与重放攻击以及节点伪造等等。
针对CAN总线的攻击方式
针对没有认证机制的缺陷,攻击者可以以高频率的方式频繁发送最高优先级的消息:
DOS攻击示意图
同样地,攻击者可以使用Fuzzy的方式随机注入消息,测试CAN总线和节点是否存在逻辑漏洞和内存相关的安全缺陷:
Fuzz攻击示意图
针对缺少保密性和认证的缺陷,攻击者可以先嗅探CAN总线,然后对消息进行重放,通过这种方式可以实现多种针对车辆控制系统的操作:
嗅探与重放攻击示意图
节点伪造攻击也同样适用于CAN总线,因为总线没有认证节点身份的机制,攻击者可以通过物理接触的方式添加任意节点:
节点伪造攻击示意图
参考文章
[1]. 来自维基百科的介绍https://zh.wikipedia.org/wiki/%E6%8E%A7%E5%88%B6%E5%99%A8%E5%8D%80%E5%9F%9F%E7%B6%B2%E8%B7%AFhttps://zh.wikipedia.org/wiki/%E6%8E%A7%E5%88%B6%E5%99%A8%E5%8D%80%E5%9F%9F%E7%B6%B2%E8%B7%AF
[2].Security Issues with In-Vehicle Networks, and Enhanced Countermeasures Based on Blockchain
N Khatri, R Shrestha, SY Nam – Electronics, 2021 – mdpi.com