安全视角下的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)
上一篇 2022年6月28日 上午6:46
下一篇 2022年6月28日 上午6:46


相关推荐

  • Claude Code 安装与 Skills 使用完整教程

    Claude Code 安装与 Skills 使用完整教程

    2026年3月16日
    2
  • git添加远程仓库(保姆级教程)

    git添加远程仓库(保姆级教程)1 添加远程仓库 github 是有墙的 比较慢 在国内的话 我们一般使用 gitee 公司中有时候会搭建自己的 gitlab 服务器 1 注册登录码云 完善个人信息 2 设置本机绑定 SSH 公钥 实现免密码登录 免密码登录 这一步挺重要的 码云是远程仓库 我们是平时工作在本地仓库 进入 C Users Administrato ssh 目录 生成公钥 ssh keygen 如果没有的话 在 C Users lenovo 中直接新建一个 ssh 的文件夹在文件夹中

    2026年3月18日
    1
  • 【Typescript入门手册】函数

    【Typescript入门手册】函数TypeScript 入门手册 记录了出场率较高的 Ts 概念 旨在帮助大家了解并熟悉 Ts 本系列会持续更新并更正 重点关照大家感兴趣的点 欢迎同学留言交流 在进阶之路上 共勉

    2026年3月17日
    1
  • Spring Cloud GateWay网关集群搭建「建议收藏」

    Spring Cloud GateWay网关集群搭建「建议收藏」SpringCloudGateWay网关集群搭建1.环境nginx:1.19.0nacos:1.3.1openjdk:1.8.0_181nacos集群:192.168.8.81192.168.8.82192.168.8.832.实现网关注册nacos中心1)配置依赖pom.xml因为是搭建网关集群,每一个网关应用使用的依赖都是一致的2)修改配置文件配置网关服务gatewaya的nacos集群注册中心地

    2022年10月10日
    6
  • c#线程的使用_线程定义

    c#线程的使用_线程定义Unity3d之截图方法分类: Unity3D2013-11-2817:13 1014人阅读 评论(2) 收藏 举报AnYuanLzhunityunity3d截屏下面是我总结的、在u3d中的,三种截屏方法:1、使用Application类下的CaptureScreenshot方法。[csharp] viewplaincopyvoid CaptureScreen()   {      App

    2022年10月16日
    6
  • codeblocks怎么设置中文[通俗易懂]

    codeblocks怎么设置中文[通俗易懂]1下载语言包local2将语言包解压后放进新的位置codeblocks里面share的位置例如E:\新建文件夹\codeblocks\CodeBlocks\share\CodeBlocks然后进入codeblocks点击导航条的setting然后点击第二的大图标(视图)在里面选择长条框里选择中文就可以了。重启一下语言包的资源:https://pan.baidu.com/s/1SXYKt…

    2022年7月15日
    84

发表回复

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

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