安全视角下的CAN协议分析

安全视角下的CAN协议分析目录相关背景CAN节点介绍CAN帧结构介绍CAN总线攻击面分析CAN总线安全缺陷基于ID的仲裁机制安全缺陷针对CAN总线的攻击方式[2]参考文章相关背景控制器局域网(CANbus)由罗伯特·博世公司于1983年开发。该协议于1986年美国密歇根州底特律市举行的国际汽车工程师学会(SAE)会议上正式发表。第一个CAN控制芯片,由英特尔和飞利浦生产,并且于1987年发布。世界上第一台装载了基于CAN的多重线系统的汽车是1991年推出的梅赛德斯-奔驰W140。..

大家好,又见面了,我是你们的朋友全栈君。

目录

相关背景

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消息。CAN帧结构,包括帧起始标志SOF、帧结束标志EOF、仲裁字段、控制字段、数据字段、CRC校验字段ACK字段七个组成部分。

安全视角下的CAN协议分析

 CAN帧格式(图片来自维基百科)

 CAN总线有四种不同的帧类型,分别是数据帧、远程帧、错误帧和过载帧。数据帧用来传送数据,远程帧通过特殊的Identifier请求指定消息,当节点检测到错误时会发送一个错误帧,过载帧用来在数据帧和远程帧之间设置延迟。CAN帧格式各个字段解释如下:

安全视角下的CAN协议分析

CAN帧各字段解释(表格来自维基百科)

CAN总线攻击面分析

CAN总线攻击面包括远程攻击面和物理接触攻击面两个大的方面,其中远程攻击面有远程信息处理单元(TBOX,或5G模块)、车载信息娱乐系统(HU)、蓝牙模块、WIFI、遥控钥匙和远程诊断接口等,物理接触攻击面主要为OBD-II诊断端口和各类传感器。

安全视角下的CAN协议分析

 CAN总线攻击面

(该图片及“针对CAN的攻击”一节的图片来源:Security Issues with In-Vehicle Networks, and Enhanced Countermeasures Based on Blockchain

CAN总线安全缺陷

基于ID的仲裁机制

CAN帧没有标识发送者和接收者,CAN协议使用一种叫“带有冲突检测的载波侦听多路访问”机制进行仲裁。当多个节点同时发送消息时,ID最小的节点拥有最高的优先级。当任意一个节点发送控制位时,其他节点均会读取控制位,无论控制位的值是多少。当一个节点检测到更高优先级的数据帧时,它将停止发送。

我们以两个不同ID的节点简单介绍以下仲裁机制生效的方式。假设在同一个CAN总线上存在节点15和节点16,两个节点在CAN总线空闲时同时抢占总线,它们即将发送的帧数据如下表所示:

安全视角下的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总线上传输的数据的机密性也无法得到保证。

针对CAN总线的攻击方式[2]

由于CAN总线没有提供认证机制和保密性机制,攻击者可以对CAN总线发起DOS攻击、Fuzzy攻击、嗅探与重放攻击以及节点伪造等等。

安全视角下的CAN协议分析

针对CAN总线的攻击方式

针对没有认证机制的缺陷,攻击者可以以高频率的方式频繁发送最高优先级的消息:

安全视角下的CAN协议分析

DOS攻击示意图

同样地,攻击者可以使用Fuzzy的方式随机注入消息,测试CAN总线和节点是否存在逻辑漏洞和内存相关的安全缺陷: 

安全视角下的CAN协议分析

Fuzz攻击示意图

针对缺少保密性和认证的缺陷,攻击者可以先嗅探CAN总线,然后对消息进行重放,通过这种方式可以实现多种针对车辆控制系统的操作: 

安全视角下的CAN协议分析

嗅探与重放攻击示意图

节点伪造攻击也同样适用于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%AF安全视角下的CAN协议分析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%AF

 [2].Security Issues with In-Vehicle Networks, and Enhanced Countermeasures Based on Blockchain

N KhatriR ShresthaSY Nam – Electronics, 2021 – mdpi.com 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/154156.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • initramfs-kernel_deepin initramfs

    initramfs-kernel_deepin initramfsOtherlanguages:一些基于Linux的计算机系统系统需要一个intramfs才能正常启动。在本指南中,将说明initramfs的概念,以及如何正确地创建和管理initramfs。Initramfs是什么介绍许多用户是没有必要关心initramfs系统的。他们的系统使用了简单的分区方案,而且没有奇奇怪怪的驱动程序或者设置(如加密的文件系统),因此Linux内核完全能够把…

    2022年8月11日
    6
  • 测试技术提升分享_测试技术分享

    测试技术提升分享_测试技术分享在腾讯课堂上分享测试技术相关的课程也有一段时间了,同时在博客(http://blog.sina.com.cn/u/1760715297)和微信公众号上也分享了不少相关文档。现在已经有相当关注度,也有很多同学加入了我们的QQ群(867446822)积极地进行交流。但在交流过程中,也存在不少问题,有相当的同学不了解我们的课程,也不清楚如何学习,所以我写这篇文章,给大家做个指导:一,测…

    2022年9月15日
    6
  • 导航栏跳转页面[通俗易懂]

    导航栏跳转页面[通俗易懂]一个页面有多个导航栏跳转页面一定要有这三步html结构部分<el-menu:default-active=”path”class=”el-menu-vertical-demo”:unique-opened=”true”@select=”listChange”><el-menu-itemindex=”/index/aiIdentify/achievementWall”>

    2022年5月30日
    51
  • 什么是泛型

    什么是泛型//泛型:就是一种不确定的数据类型。//比如:ArrayList&lt;E&gt;E就是泛型。这种不确定的数据类型需要在使用这个类的时候才能够确定出来。//泛型可以省略,如果省略,默认泛型是Object类型。//泛型的好处://1.省略了强转的代码。//2.可以把运行时的问题提前到编译时期。publicclassDemo01Generic{…

    2022年6月29日
    30
  • 常用vbs代码[通俗易懂]

    常用vbs代码[通俗易懂] 将域用户或组添加到本地组SetobjGroup=GetObject(“WinNT://./Administrators”)SetobjUser=GetObject(“WinNT://testnet/Engineers”)objGroup.Add(objUser.ADsPath)修改本地管理员密码Setobjcnlar=GetObject(“WinNT://./a

    2022年5月22日
    218
  • idea怎么搭建springboot(搭建服务器教程)

    一、创建项目1.File->new->project;2.选择“SpringInitializr”,点击next;(jdk1.8默认即可)3.完善项目信息,组名可不做修改,项目名可做修改;最终建的项目名为:test,src->main->java下包名会是:com->example->test;点击next;4.Web下勾选Spri…

    2022年4月18日
    52

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号