山石岩读丨前沿领域探析——汽车CAN总线协议详解及攻击面分析

2023-10-30

1 、CAN总线的基本概念以及由来

CAN(Controller Area Network)总线协议是由 BOSCH 发明的一种基于消息广播模式的串行通信总线,它起初用于实现汽车内ECU之间可靠的通信,后因其简单实用可靠等特点,而广泛应用于工业自动化、船舶、医疗等其它领域。

要了解CAN总线协议,我们首先知道的一个概念是汽车ECU是指的什么?ECU(Electronic Control Unit)电子控制器单元,又称为汽车的“行车电脑”,它们的用途就是控制汽车的行驶状态以及实现其各种功能。主要是利用各种传感器、总线的数据采集与交换,来判断车辆状态以及司机的意图并通过执行器来操控汽车。

简而言之CAN总线是用于各个ECU之间互相通信的网络以及协议

图片

发展历史

图片

1983年,BOSCH开始着手开发CAN总线

1986年,在SAE会议上,CAN总线正式发布

1987年,Intel和Philips推出第一款CAN控制器芯片

1991年,奔驰 500E 是世界上第一款基于CAN总线系统的量产车型;

1991年,Bosch发布CAN 2.0标准,分 CAN 2.0A (11位标识符)和 CAN 2.0B (29位标识符);

1993年,ISO发布CAN总线标准(ISO 11898),随后该标准主要有三部分:

ISO 11898-1:数据链路层协议

ISO 11898-2:高速CAN总线物理层协议

ISO 11898-3:低速CAN总线物理层协议

2、 CAN总线协议详解

2.1 CAN协议标准

CAN总线协议大的分类包含底层的标准协议上层协议两种;其中以ISO 11898-1;ISO 11898-2和ISO11898-3这三种协议为主,下面介绍这三种协议的主要作用和应用方向。

ISO 11898-1: 2015 定义CAN总线的数据链路层(DLL)和电气信号标准,描述CAN总线的基本架构,定义不同CAN总线设备在数据链路层通信方式,详细说明逻辑链接控制(LLC)和介质访问控制(MAC)子层部分;

ISO 11898-2: 2003 定义高速CAN总线(HS-CAN)物理层标准,最高数据传输速率 1Mbps ,应用为两线平衡式信号(CAN_H, CAN_L),HS CAN是汽车动力和工业控制网络中应用最为广泛的物理层协议;

ISO 11898-3: 2006 定义低速CAN总线(LS-CAN, Fault-Tolerant CAN)物理层标准,数据传输速率在 40Kbps ~ 125Kbps 。Fault-Tolerant是指总线上一根传输信号失效时,依靠另外的单根信号也可以通信,LS CAN主要应用于汽车车身电控单元之间通信;

图片

然而上层协议就更加丰富了,几乎每个厂商都有自己的can总线协议。下图就列举了一些CAN总线的常用上层协议类型:

图片

2.2 CAN总线特性

CAN总线具有多种特点其中包括:多主的工作方式;每条协议具有不同的优先级;采用非破坏性总线仲裁技术;CAN可以通过报文实现点对点、一点对多点以及全局广播方式传送数据;节点数取决于总线驱动电路;采用短帧结构(8/16字节),传输时间短,鲁棒性强,抗干扰;CRC帧校验,数据出错率低。

这其中最重要的特点是多主的工作方式,一般操作系统都有一个大脑,对整个操作系统的环境进行管理,但是CAN总线的是多主的工作方式,各个ECU只负责往总线上收发它们的协议帧即可,所以当多个ECU同时收发消息时,就会导致冲突,这就又和它第二三个特点相关了。仲裁的特点是基于协议的优先级进行仲裁的,主要是为了给CAN总线上的协议进行优先级排序,决定发生冲突的时候哪个协议先占用CAN总线进行通讯。同时CAN协议的一些特点比如短帧结构,鲁棒性强,抗干扰等等能力也让CAN总线具有了在汽车上适用的条件。

2.3 CAN总线的布局

之前汽车的各个ECU之间是通过点对点连接的,但是随着现代汽车内的ECU单元愈发增多,CAN总线连接的方式可以显著降低汽车内部布线的复杂程度。

图片

现代汽车各个ECU的总数加起来可能超过70个如传动控制、安全气囊、ABS等装置;如果考虑到未来无人驾驶汽车的传感器装置,ECU的数量将会达到120个。CAN总线实现汽车内互连系统由传统的点对点互连向总线式系统的进化,大大降低汽车内电子系统布线的复杂度。当然从安全角度出发,总线的布局也更容易导致汽车安全问题。

如下图所示,汽车CAN总线的控制布局大致如下图所示,主要包括四个部分:动力CAN部分,车身CAN,组合仪表CAN,诊断CAN。动力CAN部分总线主要控制汽车动力以及制动装置部分,这部分对时效性要求比较高,所以一般会使用高速CAN。车身CAN一般是控制空调,车窗,后视镜等等,对时效性要求比较低,一般使用低速CAN。组合仪表部分则是控制汽车组合仪表的CAN。另外还有对汽车接口进行诊断的CAN。

图片

高速CAN(按BOSCH说法,也叫CAN-C),数据速率在 125kbps ~ 1Mbp;低速CAN(CAN-B),数据速率在 5kbps ~ 125kbps。高速CAN用在速率比较高的总线上,低速CAN则在实时性要求低的节点,主要在舒适和娱乐领域。这些节点对实时性要求不高,而且分布较为分散,线缆较易受到损坏,低速CAN的传输速度即可满足要求。CAN总线在汽车诊断领域使用的也非常多,汽车诊断领域ECU挂载在总线上。

2.4 CAN总线结构特征

CAN总线定义四种帧类型,分别为数据帧、远程帧、错误帧和过载帧。各种帧的用途分别为:

(1)数据帧:用于发送单元向接收单元传送数据的帧;总线上传输用户数据的帧,其最高有效载荷是 8 Byte,除了有效载荷外,数据帧还包括必要的帧头帧位部分以执行CAN标准通信,比如消息标识符(Identifier)、数据长度代码、校验信息等。

图片

数据帧的帧结构如图所示,图中示例标准数据帧(Standard)扩展数据帧(Extended)两种格式。各字段定义及长度分别为:

SOF:表示数据帧开始;(1 bit)

Identifier:标准格式11 bit,扩展格式29 bit包括Base Identifier(11 bit)和Extended Identifier(18 bit),该区段标识数据帧的优先级,数值越小,优先级越高;

RTR:远程传输请求位,0时表示为数据帧,1表示为远程帧,也就是说RTR=1时,消息帧的Data Field为空;(1 bit)

IDE:  标识符扩展位,0时表示为标准格式,1表示为扩展格式;(1 bit)

DLC:数据长度代码,0~8表示数据长度为0~8   Byte;(4 bit)

Data Field:数据域;(0~8 Byte)

CRC Sequence:校验域,校验算法G(x) = x15 + x14 + x10 +   x8 + x7 + x4 + x3 + 1;(15 bit)

DEL:校验域和应答域的隐性界定符;(1 bit)

ACK:应答,确认数据是否正常接收,所谓正常接收是指不含填充错误、格式错误、 CRC 错误。发送节点将此位为1,接收节点正常接收数据后将此位置为0;(1 bit)

SRR:替代远程请求位,在扩展格式中占位用,必须为1;(1 bit)

EOF:连续7个隐性位(1)表示帧结束;(7 bit)

ITM:帧间空间,Intermission (ITM),又称Interframe Space (IFS),连续3个隐性位,但它不属于数据帧。帧间空间是用于将数据帧和远程帧与前面的帧分离开来的帧。数据帧和远程帧可通过插入帧间空间将本帧与前面的任何帧(数据帧、遥控帧、错误帧、过载帧)分开。过载帧和错误帧前不能插入帧间空间。

(2)远程帧:用于接收单元向具有相同标识符的发送单元请求数据的帧,远程帧用来向总线上其它节点请求数据的帧,它的帧结构与数据帧相似,只不过没有有效载荷部分。数据帧和远程帧有标准格式和扩展格式两种格式。标准格式有 11 位的标识符 , 扩展格式有 29 位标识符。一般地,数据是由发送单元主动向总线上发送的,但也存在接收单元主动向发送单元请求数据的情况。远程帧的作用就在于此,它是接收单元向发送单元请求发送数据的帧。远程帧与数据帧的帧结构类似,如上图所示。远程帧与数据帧的帧结构区别有两点:1.数据帧的 RTR 值为“0”,远程帧的 RTR 值为“1” (2远程帧没有数据块远程帧的 DLC 块表示请求发送单元发送的数据长度(Byte)。当总线上具有相同标识符的数据帧和远程帧同时发送时,由于数据帧的 RTR 位是显性的,数据帧将在仲裁中赢得总线控制权。

(3)错误帧:用于当检测出错误时向其它单元通知错误的帧。表示通信出错的帧。

错误标志:6-12 个显性/隐性重叠位。主动错误标志(6个显性位):处于主动错误状态的单元检测出错误时输出的错误标志;被动错误标志(6个隐性位):处于被动错误状态的单元检测出错误时输出的错误标志。错误界定符:8 个隐性位

图片

(4)过载帧:用于接收单元通知发送单元它尚未完成接收准备的帧。在两种情况下,节点会发送过载帧:接收单元条件的制约,要求发送节点延缓下一个数据帧或远程帧的传输;

帧间空间(Intermission)的 3 bit 内检测到显性位。每个节点最多连续发送两条过载帧。过载帧由过载标志和过载界定符(8 个隐性位)构成。数据帧的帧结构如图所示。

图片

3 、汽车CAN总线的仲裁机制

前面我们提到过,如果多个节点同时往总线上发送消息,总线的使用权是通过消息帧标识符的逐位仲裁机制决定的,在仲裁过程中消息是不会丢失的。这里的不会丢失的意思是指仲裁完成后,获得总线控制权的消息内容没有被仲裁过程篡改,将继续在总线上发送没有传输完的消息。

在CAN总线上,标识符值越小,消息的优先级越高。标识符全零的消息,由于它将总线电平保持在显性的时间最长,因此优先级最高。

图片

按照“非破坏性逐位”仲裁机制,就可以从ID一直仲裁到CRC段,可是CAN传输标准并不是这样,CAN标准要求,仲裁仅从基本ID第一位开始,到标准帧的IDE位或扩展帧的RTR位结束。这个区域被定义为仲裁场。如图所示

图片

根据仲裁场范围,CAN总线仲裁流程如图所示:

图片

以上就是CAN总线的所有内容的总结。CAN总线及其协议是汽车安全中非常重要的一个组成部分。想要获取对汽车的控制,对CAN总线协议的了解必不可少。当然,现代汽车的攻击面并不只有CAN总线一个部分,同时还包括其他方面。通过对汽车其他组件的漏洞进行挖掘,同样也能对汽车进行攻击。

4 、现代汽车攻击面分析

这里粗略的将汽车的攻击方式分为物理接触攻击和远程攻击。

图片

4.1 物理攻击的方式

(1)访问车载诊断II(OBD-II)操纵CAN来控制各种模块,达到的效果是可以控制制动以及发动机模块。另外还可以产生虚假的仪表盘数据,改变发动机参数。

对OBD端口进行 Dos服务。只需要产生传输错误即可达到攻击效果,破坏CAN网络。具体的Dos攻击方式如下:(i)给支持的参数组号(PGN)发送过量的请求消息,使接收方ECU过载;(ii)发送操纵的虚假请求发送(RTS),并在接收方缓冲区造成溢出;(iii)通过清除发送(CTS)消息保持连接开放,并占用整个网络。

(2)另外就是使用U盘等物理插入的方式,对车内多媒体设备进行攻击

图片

4.2远程攻击方式

当今的汽车,包含了与被动防盗、胎压监测系统(TPMS)、蓝牙、无线电数据、远程报文处理等系统通信所需的不同类型的无线接口。这些无线接口需要与CAN通信,通常通过网关ECU来保护网络。黑客可以入侵网关ECU并获得隔离CAN的访问权限。

研究员通过逆向工程入侵了汽车的TPMS、蓝牙、FM通道和蜂窝网络,并且小偷可以通过CAN报文解锁车门,轻松盗取车辆。另有研究团队提出了可通过恶意自诊断应用对车辆进行远程攻击。如果有人使用恶意应用程序监测/诊断车辆的情况,攻击者就可以远程控制车辆,实现远距离攻击。

两位白帽黑客对12个汽车品牌和21辆商用车开展了远程攻击调查,确定了远程攻击面和攻击对每辆车的危害程度。攻击分为三个阶段。第一阶段是入侵负责无线接口的ECU。第二阶段是注入报文,与安全关键的ECU进行通信。最后一个阶段是修改ECU,使ECU表现出恶意行为。研究人员表示,虽然汽车中的日益增多的网络物理系统会增加车辆的脆弱性,但由于汽车中拥有很多不同种类的应用,因此,研究人员无法实际验证车辆的脆弱性。此外,2014年,他们还成功地远程入侵了一辆Jeep切诺基,并使该车的发动机失灵。在发动本次攻击后,他们发布了一则公告,指出了机动车在面对远程攻击时的脆弱。

2016年,通过商用远程报文处理控制装置,可以成功地控制了一辆雪佛兰科尔维特的刹车和挡风玻璃雨刷。同时该攻击可通过售后设备渗透到CAN的漏洞中,而对于此,汽车整车厂却无能为力。

2016年,通过无线和蜂窝接口,多名研究员对特斯拉Model S实现了远程攻击。腾讯的Keen安全实验室发现了宝马汽车的多个攻击面,这表明即使是高端的商用车也会无法完全避免网络攻击。

另外,通过OTA软件进行攻击也是一种方法。OTA软件是一种低成本、可扩展、可远程更新的软件解决方案。但同时,这也成为其受攻击的一面。黑客可以通过此软件潜入车辆的通信网络。Beek和Samani通过OTA更新实现了勒索软件攻击。

和物理攻击面相比,现代汽车的远程攻击面所面临的问题更严重。随着汽车连接性的不断增多,无线攻击面的数量也与日俱增。在不久的将来,汽车将配备车对车(V2V)和车对基础设施(V2I)通信,从而组成车载特设网络(VANETs)。VANETs旨在优化交通、避免碰撞。为了实现上述功能,VANETs使用车辆的传感器并进行无线连接。在车联网中,车辆会接收或传输欺骗报文,车内通信网络可能会因此受到干扰,也会受到攻击。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

山石岩读丨前沿领域探析——汽车CAN总线协议详解及攻击面分析 的相关文章

  • [C语言]分支语句:if语句、switch语句

    分支语句也称为选择结构 条件判断语句 顾名思义 要么选择A 要么选择B 或选择其他的一种结构 在c语言中 常见的分支语句分别有 if语句和switch语句 目录 1 if语句 1 1if语句的结构 1 2if语句的注意点 2 switch语
  • 【MATLAB】rem和mod函数的区别

    求整数x y的余数 rem x y 求模 mod x y 如果x和y的符号相同 同为 同为 那么rem x y mod x y 正数与正数 负数与负数 取整结果两个函数效果一样 如果x和y的符号相反 那么mod x y rem x y y
  • 存储过程的概念,函数与存储过程的区别

    存储过程 为了完成特定功能的sql语句集进行编译优化后 存储在数据库服务器中 用户通过指定存储过程的名字来调用执行 区别 本质上没有区别 1 存储过程作为一个独立部分 函数可以作为查询语句的一个部分 2 存储过程功能较为复杂 函数功能针对性
  • Linux系统下安装Python爬虫环境+模拟浏览器插件

    一 服务器版本 Centos7以上版本 二 配置python环境 1 安装依赖包 yum y install gcc gcc c yum y install zlib zlib devel yum y install bzip2 bzip2
  • 如何通过gradle来导入jar包

    很多android项目在lib文件夹下看不到任何的jar包 但是项目中确实导入了很多的第三方jar包 这里我们来看看androidstudio通过gradle来导入jar包的方法 首先我们需要进入ProjectStructure界面 打开这
  • C8051 不能写数据

    问题 使用C8051f520芯片 在线调试发现不能给变量赋值 解决 芯片ram只有256B 我在keil设置了pdata 改成data就行了 网友资料显示 pdATa 外部扩展RAM的低256个字节 地址出现在A0 A7的上时读写 用mov
  • ipad未能与itunes连接到服务器,为什么无法连接到iTunes Store?iPhone/iPad解决方法

    一些用户在使用iPhone时 偶尔会发现在登录Apple ID或者是在Apple Store中下载软件时 会显示无法连接到iTunes Store 出现这个提示 也就无法在Apple Store中进行相关操作了 那么 大家知道为什么无法连接
  • Eigen库中vector.transpose()函数什么意思

    在使用Eigen库时 我们阅读源码的时候可能看到在输出 显示 一个向量时 有如下表示形式 定义一个向量 Vector3d p2 打印该向量 cout lt lt p2 lt lt endl 列向量显示 cout lt lt p2 trans
  • 【2D标注】cvat-canvas添加标尺线

    一 场景概述 在使用cvat canvas做2D标注开发时 有时我们需要对2D图形添加一些标尺线 例如前方距离当前摄像头的距离标尺 这时候我们需要添加标尺线 基于cvat canvas现有的框架设计模式 实现逻辑如下 在canvasView
  • 16-4_Qt 5.9 C++开发指南_Qt 应用程序的发布

    文章目录 1 应用程序发布方式 2 Windows 平台上的应用程序发布 1 应用程序发布方式 用 Qt 开发一个应用程序后 将应用程序提供给用户在其他计算机上使用就是应用程序的发布 应用程序发布一般会提供一个安装程序 将应用程序的可执行文
  • 取消idea双击shift时出现的搜索框

    快捷键 Ctrl Shift A 有可能没反应 Help gt Find Action 输入registry 选择第一个 找到ide suppress double click handler 勾选它 双击shift不会再弹出搜索框

随机推荐

  • reportlab 使用中文报错 reportlab.pdfbase.ttfonts.TTFError: Not a recognized TrueType font

    使用reportlab 使用中文报错过程中 注册了 simsun 字体 然后就报这个错误 reportlab pdfbase ttfonts TTFError Not a recognized TrueType font version 0
  • thread_create 和 thread_resume

    在lk中我们一般通过thread create 来新建一个thread 但这个thread 是THREAD SUSPENDED 必须要调用thread resume 才能开始运行 enum thread state THREAD SUSPE
  • 城市内涝及桥洞隧道积水在线监测系统

    一 方案概述 近几年 全国频频爆发暴雨等极端天气 这对社会管理 城市运行和人民群众生产生活造成了巨大影响 加之部分城市排水防涝等基础设施建设滞后 调蓄雨洪和应急管理能力不足 出现了严重的暴雨内涝灾害 城市中的隧道和立交桥等低洼路段在遭遇短时
  • YOLOv3使用笔记——Kmeans聚类计算anchor boxes

    anchor boxes用来预测bounding box faster rcnn中用128 128 256 256 512 512 分三个尺度变换1 1 1 2 2 1 共计9个anchor来预测框 每个anchor预测2000个框左右 使
  • qedl中的fixDepth()简化

    如果将PerspectiveMode的设置为1 则会传递zNear和Zfar 在fixDepth 中 而将perspectiveMode 0 则大大简化fixDepth float fixDepth float depth return c
  • 贷款预测问题(探索性分析+多种解决方案)

    用到的数据集 train 链接 https pan baidu com s 1hCQKvLYxTb5MkltJDa1QlQ 提取码 jsh8 test 链接 https pan baidu com s 16SkJ7fo1yEutv4CwnW
  • 工厂方法(Factory Method):对象创建型模式

    文章目录 1 代码示例 2 工厂方法模式的定义 实现意图 1 代码示例 工厂方法模式 简称工厂模式或者多态工厂模式 与简单工厂模式相比 引入了更多的新类 灵活性更强 实现也更加复杂 符合开闭原则 付出的代价是需要新增加多个新的工厂类 如下
  • linux 卸载iscsi,iscsi挂载和删除

    iscsi挂载和删除 2011 01 01 11 54 01 分类 存储 字号 iscsi操作 http blog csdn net do2jiang archive 2009 12 29 5097730 aspx trune2fs c l
  • Python学习之:如何根据经纬度来实现地图的可视化(将这些点在地图上标注出来)

    文章目录 最终效果展示 实操步骤 第一步 打开高德地图的控制台 gt 数据可视化 第二步 创建可视化项目 第三步 上传CSV数据 注意格式要求 一定要包含经纬度信息 第四步 创建可视化实例 最终效果展示 这些红色的点 就是我们给出的经纬度的
  • javascript实现回到顶部按钮特效

    有时由于页面内容过多 每次回到顶部比较麻烦 所以记录一下JavaScript实现回到顶部按钮特效的代码 便于以后备用 css代码 实现回到顶部按钮特效 box position fixed right 10px bottom 10px he
  • Hadoop伪分布模式配置

    Hadoop共有三种部署方式 本地模式 伪分布模式及集群模式 本次安装配置以伪分布模式为主 即在一台服务器上运行Hadoop 如果是分布式模式 则首先要配置Master主节点 其次配置Slave从节点 以下说明如无特殊说明 默认使用root
  • QT多窗口

    常用的窗体基类是 QWidget QDialog 和 QMainWindow 在创建 GUI 应用程序时选择窗体基类就是从这 3 个类中选择 QWidget 直接继承于 QObject 是 QDialog 和 QMainWindow 的父类
  • 在学习Python时遇到的一些项目bug

    启动线程 开启任务时 1 出现错误TypeError init got an unexpected keyword argument arg ok python没有能解析出来这个参数 好吧少写了个s 加上就没啥问题了 2 出现错误TypeE
  • 丑数打表 & 计算 (自用)

    丑数定义 只包含因子2 3 5的正整数被称作丑数 define min a b a lt b a b define min4 a b c d min min a b min c d int choushu 5850 int main int
  • 代理模型:最小二乘支持向量回归(LSSVR)--- MATLAB程序

    写在开头 代理模型是工程问题中常用的一个优化方法 当实际问题计算量很大 不容易求解时 可以使用计算量较小 求解迅速的简化模型来替代原模型 加速优化过程 代理模型采用一个数据驱动的 自下而上的办法来建立 首先 通过抽样得到有限个样本点 输入
  • java烟花代码_一个美丽的java烟花程序

    import java awt import java applet import java awt event import javax swing public class ChatApplet extends Applet imple
  • Shell 从入门到精通(二)

    变量的赋值方式 定义或引用变量时注意事项 双引号是弱引用 单引号是强引用 即单引号是所见即所得 双引号是进行了赋值操作 两个反引号等价于 反引号的中的shell命令会被先执行 变量数值运算 1 整数运算 expr 五颗星 2 整数运算 四颗
  • Spring源码解析4.createBean()方法解析

    createBeanInstance protected BeanWrapper createBeanInstance String beanName RootBeanDefinition mbd Nullable Object args
  • ​LeetCode刷题实战336:回文对

    算法的重要性 我就不多说了吧 想去大厂 就必须要经过基础知识和业务逻辑面试 算法面试 所以 为了提高大家的算法能力 这个公众号后续每天带大家做一道算法题 题目就从LeetCode上面选 今天和大家聊的问题叫做 回文对 我们先来看题面 htt
  • 山石岩读丨前沿领域探析——汽车CAN总线协议详解及攻击面分析

    1 CAN总线的基本概念以及由来 CAN Controller Area Network 总线协议是由 BOSCH 发明的一种基于消息广播模式的串行通信总线 它起初用于实现汽车内ECU之间可靠的通信 后因其简单实用可靠等特点 而广泛应用于工