鉴源实验室 | DoIP协议网络安全攻击

作者 | 付东杰 上海控安可信软件创新研究院工控网络安全组

来源 | 鉴源实验室

社群 | 添加微信号“TICPShanghai”加入“上海控安51fusa安全社区”

01

背 景

随着科技的迅猛发展,汽车行业正经历着前所未有的数字化变革。现代汽车中使用70多个电子控制单元(ECU),而且这个数字仍在上升[1]。在这场数字化革命中,诊断通信过程协议(Diagnostic communication over Internet Protocol,简称DoIP)崭露头角,成为汽车制造商和维修服务提供商之间进行远程诊断和维修的核心通信工具。DoIP协议的重要性在于它使汽车制造商能够通过互联网连接到汽车的电子控制单元(ECU),实时监测和远程维修车辆,为车主提供更加高效和方便的服务。然而,随着DoIP的普及,网络安全威胁也在日益增多。本文将探讨DoIP协议的基本原理,并研究可能的攻击方式,以及如何采取措施保护现代汽车免受潜在威胁。

02

DoIP协议

DoIP协议是一种关键的汽车诊断和通信协议,能够高效传输大量数据,提供快速响应,并支持远程诊断,其在ISO13400[2-5]标准中定义。这一标准不仅定义了DoIP协议本身,还涵盖了开放系统互连基本参考模型(OSI)的第一层到第四层,包括了Ethernet、IP及其他协议的使用细则。DoIP协议并不是一个完整的诊断协议,而是一种扩展传输协议。它负责诊断数据包的传输,而诊断服务仍由专门的诊断协议(如KWP2000协议和UDS协议)规定和说明。DoIP协议的存在为现代汽车系统的高级诊断和通信提供了强有力的支持,确保了兼容性和一致性,使其能够有效地在汽车领域中运行。

图2.1 与DoIP部分相关的OSI模型标题

如下图2.2所示为DoIP系统车辆网络架构示意图,分为内部网络和外部网络。这两个部分之间通过两组线束进行信息交互。一组是用于数据传输的以太网线,另一组是用于激活诊断功能的激活线。一般来说,在工程师或者售后人员控制下的网络节点被称为外部测试设备(External Test Equipment),外部测试设备向车辆发送诊断请求,然后等待被诊断车辆的响应。但是在智能网联汽车丰富的使用场景中,诊断测试设备可能出现布置在车辆内部的情况,对车辆进行诊断,如OTA技术和远程诊断,在这些使用场景中,诊断测试设备会作为车辆节点或将此功能集成在其他节点中。ISO13400标准对DoIP系统中不同作用的节点进行了分类,这些分类包括:

1)DoIP实体(DoIP Entity):DoIP实体是实现DoIP协议的网络节点,例如DoIP节点或DoIP网关。

2)DoIP网关(DoIP Gateway):DoIP网关是一个网络节点,它实施DoIP协议,从而提供对其自身及其连接的车辆子网的ECU的访问。

3)DoIP节点(DoIP Node):DoIP节点是一个网络节点,该节点实施DoIP协议以提供对其自身的访问,但不将DoIP协议数据路由到车辆子网。

4)DoIP边缘节点(DoIP Edge Node):DoIP边缘节点是连接ISO 13400-3中定义的以太网激活线的节点。

图2.2 DoIP系统车辆网络架构示意图标题

DoIP(Diagnostic communication over Internet Protocol)协议崭露头角,作为一种以太网诊断软件架构的中间件,它不仅重新定义了车辆的诊断通信方式,还提供了一系列关键功能,以确保车辆系统的稳定性、安全性和可靠性:

1)车辆发现

车辆发现是DoIP协议的关键功能之一。它用于检测目标车辆中的ECU是否在线。诊断仪发送广播式的车辆发现报文,所有网络中的ECU都会响应并提供自身的身份信息。通过分析这些响应,诊断仪可以确定在线的ECU,并对其进行分类。

2)路由激活

DoIP协议中的“路由激活”与传统网关的“路由”不同,它指的是诊断仪与被诊断节点之间的报文传输。在与外部测试仪建立通信连接之后,必须发送路由激活请求。此请求需要DoIP节点验证,以确保合法性。这个过程还包括了DoIP节点对外部诊断仪的安全认证,其中ECU开发人员可以自定义安全认证算法,以阻止非法诊断仪对ECU的访问。

3)诊断仪在线监测

DoIP诊断要求预先建立与ECU的通信连接,即TCP socket。因为建立socket连接会占用内存资源,所以连接数量是有限的。因此,ECU在设计阶段会定义支持的并行连接的数量。如果并行连接达到上限,将无法建立新的诊断通信连接。为防止无效占用连接通道,设计了诊断仪在线监测机制。DoIP节点会定期向现有的连接通道发送在线监测请求,如果连接通道未收到诊断仪的响应,则将复位该连接,以待新的诊断仪接入。

4)节点信息

节点信息包含了节点的属性,例如支持的并行诊断仪连接数量、可接受的诊断报文长度以及当前节点的电源状态。这些信息在诊断通信前进行检查,以确保后续的诊断通信不受外部因素的干扰。

5)诊断通信

作为DoIP协议的核心功能,诊断通信负责诊断报文的传输。每个诊断报文包括:发送方的逻辑地址(SA)、接收方的逻辑地址(DA)以及诊断数据。在DoIP网络中,DA的作用类似于CAN总线网络中的CANID,用于寻址目标ECU以进行诊断,诊断过程如图2.3所示。

图2.3 诊断过程题

DoIP协议的五大功能共同促成了基于车载以太网的高速诊断服务,其允许更高速率的数据传输,从而提高了车辆诊断的效率。如图2.4所示为一个完整的DoIP会话流程图,其中涉及四个关键端口号:UDP_DISCOVERY(13400)、UDP_TEST_EQUPMENT(49152-65535)、TCP_DATA(13400)和动态分配(49152-65535)。诊断会话的建立经过以下步骤:

1)物理连接:诊断仪与车辆建立物理连接。

2)IP地址配置:配置IP地址,以确保诊断仪和车辆都能够正确地通信。配置的方法有两种,DHCP和Auto-configuration。当DHCP配置未成功时,会触发Auto-configuration。在DHCP配置流程中,通常由外部诊断仪扮演DHCP Server角色。

3)车辆发现:车辆发现是通过UDP进行数据传输的关键步骤。DoIP实体主动发送三次Vehicle announcement message,以宣告其存在。若未收到DoIP实体发送的Vehicle announcement message,诊断仪将主动发送Vehicle identification request请求,DoIP实体接收后会发送Vehicle identification response响应。

4)TCP连接:车辆识别后,诊断仪会发起TCP同步,并与DoIP实体建立TCP连接。

5)路由激活:TCP连接建立后,诊断仪发送Routing activation request,DoIP实体接收并响应Routing activation response,从而建立DoIP逻辑连接。

6)诊断服务传输:接下来,可以进行诊断服务的传输。诊断仪发送Diagnostic message request,DoIP实体接收并响应Diagnostic message response。DoIP message ACK表示DoIP层级的确认报文(0x8002、0x8003等)。

图片
图2.4 DoIP会话流程图标题

03

DoIP攻击

DoIP协议为汽车行业带来了巨大的好处,但它也引入了潜在的风险,包括中间人攻击、拒绝服务攻击、数据篡改等威胁,这些威胁可能导致数据泄露、车辆失控和用户隐私侵犯等严重后果。

中间人攻击是一种网络攻击,攻击者通过拦截无线网络通信或入侵车辆网络的中间设备等方式来截获DoIP通信,截获通信后通过伪装成合法的通信方来欺骗车辆或设备,在伪造通信的过程中,攻击者可以查看、修改、插入数据。在攻击过程中,攻击者可以通过访问车辆传输的敏感信息,如车辆位置,车主信息,车辆性能等数据,从而导致用户的数据泄漏;攻击者可以通过伪造、修改诊断数据,导致错误的诊断结果,从而使维修人员采取不必要的维修操作;攻击者通过执行一些恶意的维修操作,如禁用车辆的部分功能或危害车辆的性能,从而威胁驾驶员的人身财产安全。中间人攻击是DoIP协议所面临的关键威胁之一,因此必须采取适当的安全措施,以防止这种类型的攻击并保护车辆数据和通信的安全。

针对中间人攻击可以采用以下防范措施:

1)数据加密:使用加密算法保护DoIP通信,以确保数据的机密性和完整性。

2)身份验证:双方的身份验证是防范中间人攻击的关键,使用数字证书和身份验证来保证通信方的合法性。

3)网络监控:实施网络监控和入侵检测系统,以及时检测可疑活动和中间人攻击的迹象。

拒绝服务攻击旨在使目标系统、网络或服务无法正常运作,从而导致服务不可用。在DoIP协议的应用场景中,攻击者通过DoIP通信流量防洪、恶意DoIP消息注入、阻塞DoIP会话等多种攻击手段来引发拒绝服务攻击,从而严重干扰DoIP通信和车辆维修等操作,从而导致车辆无法进行远程诊断或维修,严重的话会引发系统崩溃,从而对人身财产安全造成威胁。因此必须采取有效的防范措施,以确保系统的可用性和稳定性。

针对拒绝服务攻击可以采用以下防范措施:

1)流量过滤:使用流量过滤和防火墙技术,识别和过滤出现在DoIP通信中的恶意流量。

2)负载均衡:采用负载均衡技术,分散流量负载,减轻单一点的压力,提高系统的弹性。

3)引入反向代理服务器:作为DoIP通信的中间层,处理和缓解攻击。

4)容灾计划:建立容灾计划,以便在遭受拒绝服务攻击时迅速恢复服务。

数据篡改攻击则是通过试图在传输过程中修改、插入或删除数据,以操纵信息,导致错误的诊断结果或损害车辆的功能,在DoIP协议的应用场景中,攻击者通过中间人攻击、嗅探网络流量或其他方式实现拦截DoIP通信中的数据包,以获得访问数据的机会。一旦获得数据,攻击者会修改、插入或删除其中的信息, 然后重新传输已篡改的数据,使其看起来像是合法的数据,车辆制造商或维修服务提供商接收到篡改的数据后,可能依赖于这些数据来进行诊断和维修操作。由于数据已被篡改,可能会导致错误的诊断结果和错误的维修操作,影响车辆功能和安全性。

针对数据篡改攻击可以采用以下防范措施:

1)数据完整性验证:使用数据完整性检查技术,确保数据在传输过程中没有被篡改。

2)加密数据传输:采用强大的数据加密措施,以保护数据的机密性和完整性,使攻击者无法修改数据。

3)数字签名:使用数字签名验证数据的真实性,确保数据未经篡改。

4)访问控制:实施访问控制措施,限制对车辆数据的访问,并确保只有授权用户才能对数据进行修改。

参考文献:

[1] Staron M. Automotive software architectures[M]. Cham, Switzerland: Springer, 2021.

[2] ISO. 2011. ISO 13400–1:2011, Road Vehicles – Diagnostic Communication over Internet Protocol (DoIP): Part 1: General Information and Use Case Definition. https://www.iso.org/obp/ui/#iso:std:iso:13400:-1:en

[3] ISO. 2016. ISO 13400–3:2016, Road Vehicles – Diagnostic Communication over Internet Protocol (DoIP): Part 3: Wired Vehicle Interface Based On IEEE 802.3. https://www.iso.org/obp/ui/#iso:std:iso:13400:-3:ed-2:v1:en

[4] ISO. 2016. ISO 13400–4:2016, Road Vehicles – Diagnostic Communication over Internet Protocol (DoIP): Part 4: Ethernet-Based High-Speed Data Link Connector. https://www.iso.org/obp/ui/#iso:std:iso:13400:-4:ed-1:v1:en

[5] ISO. 2019. ISO 13400–2:2019, Road Vehicles – Diagnostic Communication over Internet Protocol (DoIP): Part 2: Transport Protocol and Network Layer Services. https://www.iso.org/obp/ui/#iso:std:iso:13400:-2:ed-2:v1:en

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/146708.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【入门篇】1.2 Redis 客户端之 Jedis 详解和示例

文章目录 1. 简介2. Jedis的依赖下载Jedis导入Jedis jar包配置Redis服务器的地址和端口 3. Jedis 的基本操作连接 Redis 服务器设置和获取字符串类型的键值对判断键是否存在删除键设置键的过期时间 4. Jedis 的数据类型操作字符串类型列表类型集合类型哈希类型有序集合类型 5. …

YOLOv5独家原创改进:最新原创WIoU_NMS改进点,改进有效可以直接当做自己的原创改进点来写,提升网络模型性能精度

💡该教程为属于《芒果书》📚系列,包含大量的原创首发改进方式, 所有文章都是全网首发原创改进内容🚀 💡本篇文章为YOLOv5独家原创改进:独家首发最新原创WIoU_NMS改进点,改进有效可以直接当做自己的原创改进点来写,提升网络模型性能精度。 💡对自己数据集改进有效…

12.Oracle的索引

Oracle11g的索引 一、什么是索引二、索引的分类三、索引的语法四、分析索引四、索引的作用及使用场景 一、什么是索引 在Oracle数据库中,索引是一种特殊的数据结构,用于提高查询性能和加速数据检索。索引存储了表中某列的值和对应的行指针,这…

批量替换WordPress文章内图片链接

在WordPress使用过程中,如果中途更换了域名,原先文章内的图片使用的是原来的域名,就会造成文章页里面的图片链接无法显示。如果从后台文章挨个修改就比较麻烦。可以通过数据库进行批量替换即可。 使用 PHPMyadmin 打开 数据库,登…

WPF xaml Command用法介绍

WPF (Windows Presentation Foundation) 中的命令设计模式是一种用于分离用户界面逻辑和业务逻辑的方法。在WPF中,这种模式通过命令接口(如 ICommand)实现,使得用户界面组件(如按钮、菜单项等)可以触发不直…

JDK1.8 新特性(二)【Stream 流】

前言 上节我们学了 lambda 表达式,很快我就在 Flink 的学习中用到了,我学的是 Java 版本的 Flink,一开始会以为代码会很复杂,但事实上 Flink 中很多地方都用到了 函数接口,这也让我们在编写 Flink 程序的时候可以使用 …

MIB 6.1810实验Xv6 and Unix utilities(2)sleep

难度:easy Implement a user-level sleep program for xv6, along the lines of the UNIX sleep command. Your sleep should pause for a user-specified number of ticks. A tick is a notion of time defined by the xv6 kernel, namely the time between two interrupts f…

2D 3D 工业组态技术 meta2d JavaScript

本心、输入输出、结果 文章目录 2D 3D 工业组态技术 meta2d JavaScript前言2D 3D 工业组态技术 meta2d JavaScript 简介2D 3D 工业组态技术 meta2d JavaScript 特性丰富的组态能力0代码数据通信组态的应用多端适配能力强大的扩展能力追求卓越性能丰富的组件库资源广泛的应用场景…

C语言变量与常量

跟着肯哥(不是我)学C语言的变量和常量、跨文件访问、栈空间 栈空间还不清楚,期待明天的课程内容 C变量 变量(Variable)是用于存储和表示数据值的名称。 主要包括四个环节:定义、初始化、声明、使用 在我刚…

什么是BT种子!磁力链接又是如何工作的?

目录 一.什么是BT?1.BT简介:1.1.BT是目前最热门的下载方式之一1.2.BT服务器是通过一种传销的方式来实现文件共享的 2.小知识:2.1.你知道吗BT下载和常规下载到底有哪些不同2.2.BT下载的灵魂:种子2.3.当下载结束后,如果未…

mysql客户端navicat的一些错误合集

关于mysql的客户端的使用的一些问题 问题描述: 在使用navicat prenium客户端的时候,连接数据库出现 Table ‘performance_schema.session_variables’ doesn’t exist 错误 解决方案: 首先找到mysql的bin目录 然后winR 进入到cmd界面 输入…

《循环双向链表》(带哨兵位的头节点)

目录 ​编辑 前言: 关于双向循环带头链表: 模拟实现双向循环带头链表: 1.typedef数据类型 2.打印链表 3.初始化链表: 4.创建节点 5.尾插 6.头插 7.尾删 8.头删 9.寻找节点 10.在节点前插入 11.删除指定节点 单链表和双链表的区别…

解析:什么是生成式AI?与其他类型的AI有何不同?

原创 | 文 BFT机器人 快速浏览一下头条新闻,你会发现生成式AI似乎无处不在。事实上,一些新闻标题甚至可能是通过生成式AI编写的,例如OpenAI旗下的ChatGPT,这个聊天机器人已经展现出了生成看起来像人类所写文本的惊人能力。 当人们…

maptalks三维地图网址

三维 地址: http://examples.maptalks.com/examples/cn/gltf/gltf-marker/shader

简朴博客系统测试报告

文章目录 一. 项目简介二. 测试概要三. 测试环境四. 测试执行概况及功能测试1. 手工测试1.1 手动测试用例编写1.2 执行的部分测试用例 2. 自动化测试Selenium2.1 编写测试用例2.2 自动化测试代码 3. 测试结果 五. 发现的问题 一. 项目简介 简朴博客系统是采用前后端分离的方式…

asp.net core mvc 之 依赖注入

一、视图中使用依赖注入 1、core目录下添加 LogHelperService.cs 类 public class LogHelperService{public void Add(){}public string Read(){return "日志读取";}} 2、Startup.cs 文件中 注入依赖注入 3、Views目录中 _ViewImports.cshtml 添加引用 4、视图使用…

Python每日一练@前言

Python每日一练前言 导读 人生苦短,我用Python 大家好,我是鹅不糊涂 欢迎大家来到Python每日一练 好处 加强编程能力: 每日一练可以帮助提升编程技能,通过解决各种编程问题和挑战,你能够不断锻炼自己的逻辑思维和解决问题的能力…

顺序表(数据结构与算法)

✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅ ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ 🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿&#x1…

2023.11.17 hadoop之HDFS进阶

目录 HDFS的机制 元数据简介 元数据存储流程:namenode 生成了多个edits文件和一个fsimage文件 edits和fsimage文件 SecondaryNameNode辅助NameNode的方式: HDFS的存储原理 写入数据原理: 发送写入请求,获取主节点同意,开始写入,写入完成 读取数据原理:发送读取请求,获取…

vim——“Linux”

各位CSDN的uu们好呀,今天,小雅兰的内容是Linux的开发工具——vim。下面,我们一起进入Linux的世界吧!!! Linux编辑器-vim使用 vim的基本概念 vim的基本操作 vim正常模式命令集 vim末行模式命令集 vim操…