当前位置: 首页 > news >正文

鉴源实验室丨SOME/IP协议安全攻击

作者 | 张昊晖 上海控安可信软件创新研究院工控网络安全组

来源 | 鉴源实验室

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

01

引 言

随着汽车行业对于数据通信的需求不断增加,SOME/IP作为支持汽车以太网进程和设备间通信的一种通信协议应运而生。根据研究[1]表明,第一代使用SOME/IP的汽车以太网包含了几个交换机和少量以太网ECU,每个ECU提供了十余种服务。SOME/IP具有轻量化、高效、以接收方的需求为主导的特点,并且能够提供过程调用和事件通知,逐渐被多种汽车设备所使用。然而,正是由于其被广泛使用和其重要性,SOME/IP协议也成为了潜在的攻击目标。本文将介绍SOME/IP协议的基本原理,并探讨可能的攻击方式和防范措施。

02

SOME/IP协议

可扩展的面向服务的IP中间件(Scalable service-Oriented MiddlewarE over IP,简称SOME/IP)[2]是一种中间件规范,专门用于传输和序列化控制信号,特别是在汽车应用场景中。SOME/IP建立在(汽车)TCP/IP或UDP/IP协议栈之上,为应用程序提供了一个抽象的面向服务的接口(参见图1)。因此,应用程序无需处理IP地址和端口,而是使用服务进行通信。SOME/IP的主要目标是实现灵活且带宽高效的通信。

8431.png

图 1 SOME/IP架构

SOME/IP可以大致分为三个部分:服务发现(Service Discovery,SD)、远程过程调用(Remote Procedure Call,RPC)和对进程数据的访问。SD使服务器ECU能够发布服务,并使客户端ECU能够订阅车辆网络中的服务,这些服务由服务ID标识,并可根据需要附加选项,例如终端选项(即IP地址、传输协议(UDP/TCP)和端口号)。网络中可以存在多个具有相同服务ID的服务实例,并通过不同的实例ID进行唯一标识。可以使用RPC访问提供的服务,并可以接收有关事件的通知。应用程序可以使用set和get来访问进程数据。

SOME/IP-SD用于定位服务实例、检测服务实例是否正在运行,并实现发布/订阅处理[3]。为了提供服务实例,服务器会发送一个多播服务提供消息OfferService(Service ID,Instance ID),可选择包括上述终端选项在内的其他选项。服务器可以通过发送StopOffer(Service ID,Instance ID)消息来停止提供服务实例。如果客户端未收到具有所需服务ID的合适服务提供消息,则可以主动发送FindService(Service ID,Instance ID)消息,服务器可以回答并提供所请求的服务。实例ID可以设置为特定值,也可以设置为0xFFFF,以找到所有服务实例。发布/订阅机制可用于客户端需要从服务器获取一组信号,但又不想每次手动请求该信息的情况。客户端通过SubscribeEventgroup(Service ID,Instance ID)向事件组订阅,并由服务器确认SubscribeEventgroupACK(Service ID,Instance ID)。客户端通过StopSubscribeEventgroup(Service ID,Instance ID)消息取消订阅。在订阅活动期间,服务器会定期向客户端发送事件消息。此外,SOME/IP为服务实例提供了负载平衡选项。服务器可以在其服务提供中设置优先级和权重。客户端应选择具有最高优先级的服务。如果具有相同优先级的多个服务实例,则应基于服务实例的权重随机选择服务实例。SOME/IP协议定义了以下几种主要的通信模式:

(1)请求-响应方法(Request&Response Method):在请求-响应方法下,一个模块作为Client端在寻找所需服务时发现其正在有效生存时间内,发送一个请求消息,另一个提供该服务的Server端必须回复该请求消息。若请求消息存在差错,会回复错误信息给到Client端。Client端期望在发送请求后,接收到相应的响应消息。这种模式适用于需要请求和获取特定数据或执行特定操作的场景,如传感器数据获取、控制指令下发等。

8432.png

图 2 请求-响应方法(Request&Response Method)

(2)请求-无响应方法(Fire&Forget Method):在请求无响应方法下,一个模块作为Client端在寻找所需服务时发现其正在有效生存时间内,发送一个请求消息,另一个提供该服务的Server端无需回复该请求消息。即使请求消息存在差错,也不会回复错误信息。

8433.png

图 3 请求-无响应方法(Fire&Forget Method)

(3)事件通知(Event):在事件通知模式下,作为Server端的模块会对已经订阅其服务的Client端发送状态值或者触发事件的通知。这种模式适用于实时共享状态信息和事件通知的场景,如交通事件发布、环境变化通知等。

8434.png

图 4 事件通知(Event)

(4)域值通知(Field):域值通知模式是对于Method和Event数据包的组合,它提供了3种通信流程:

① Notify:Notify报文一般会在Client订阅服务之后,由Server端发送,用于通知域值。

8435.png

图 5 Notify

② Getter:Getter报文使用请求响应方法的模式,当Client端向Server端发送获取域值的请求时,Server端返回当前域值。

8436.png

图 6 Getter

③ Setter:Setter报文使用请求响应方法的模式,当Client端向Server端发送设置域值的请求时,Server端返回更新后的域值。

8437.png

图 7 Setter

这些通信模式为SOME/IP协议提供了灵活的通信方式,使得车辆内部模块和车辆与外部实体之间可以以适当的方式进行通信和数据交换。通过选择合适的通信模式,车辆系统可以实现高效的数据交换、实时的事件通知和灵活的方法调用,以满足各种复杂的应用需求。

03

SOME/IP攻击

SOME/IP协议最经常出现的攻击类型是中间人攻击。中间人攻击是攻击者在受害两方都未发现攻击者身份的情况下实施数据窃听和篡改的攻击类型。在以太网环境下,可以通过与受害方同时连接同一个交换机达到中间人攻击的效果。对于SOME/IP的通信,有以下3种不同的中间人攻击方式[4]:

(1)服务提供上的复制攻击

此类攻击的操作与重放攻击类似,但实现的环境是在中间人的环境下。图8简单地展示了这种攻击的实现方式:

首先客户端、攻击者和服务端均处在同一个交换机网络下,互相都能接收到彼此的数据。接着服务端在启动服务并进入到正式阶段(Main Phase)后,会周期性地在这个交换机网络中广播自己提供的服务,例如图中所示服务端提供了0x1234和0x5678这2个服务ID的服务,并让客户端和攻击者都收到了这条广播数据。此时,采用复制攻击的攻击者会立刻复制这条广播报文,修改IP地址和端点信息,伪造自己在这个交换机网络中也提供同样的服务。当然因为攻击者只能在SOME/IP协议层面进行复制攻击,无法对下层通信进行干预,因而客户端就会在短时间内收到2条宣称自己具有0x1234和0x5678服务的广播报文,然后可能会选择攻击者发送的这条广播报文进行回复,即图中的请求服务。一旦攻击者收到客户端的请求服务,就会把这条报文带有客户端的身份信息修改为自己的身份信息,但请求服务内容不变地发送到服务端。攻击者再接着把服务端回复的服务内容转发给客户端,这样就完成了一次中间人转发操作。并且对于服务端,攻击者会被认为是真正的客户端,而对于客户端会把攻击者当成提供服务的节点。在成功进入这个中间人环境后,攻击者可以进行下一步深层次的攻击。

8438.png

图 8 服务提供上的复制攻击

(2)服务提供上的断连攻击

第一种复制攻击看似很容易能进入到中间人的环境中,但具有一定的局限性:

① 客户端可能已经与服务端建立了连接,不会再对攻击者的广播作出反应。

 即使客户端未与服务端建立连接,也不能保证客户端选择攻击者的广播报文发送请求,因为服务端永远比攻击者先发出去原始报文。

 根据SOME/IP官方文档,不可复用服务端提供的Instance ID,但还要根据客户端能够接受的Instance ID伪造Offer报文。

由于以上的问题,一种基于复制攻击的断连攻击被提出了,如图9所示:

可以看到图的下半部分与复制攻击的后半部分一致,就是攻击通过伪造提供服务的报文,让客户端与自己连接,完成客户端与服务端之间的消息传递。但区别就在于服务端广播提供服务报文时,攻击者会立刻向客户端发送一条伪造成服务端身份的单播停止提供服务报文,同时再把自己伪造的服务广播在这个网络中。

与复制攻击相比,断连攻击会让客户端断绝与服务端建立连接的机会,无论它是已经与客户端相连还是刚选择了服务端提供的服务。伪造StopOffer可以帮助攻击者稳定地与客户端建立连接。

断连攻击看似更加好用,实际也存在一些限制。停止提供服务的报文必须要通过单播的方式发送到客户端手中,这是因为一旦服务端收到了这条消息,它会认为存在其他服务端提供相同的服务,不会再提供重复服务。这样就会导致中间人环境无法建立,因为服务端不会再对攻击者转发的请求进行任何回复。由于单播这一限制条件,攻击者必须知道对该服务感兴趣的客户端。换言之就是知道可能与服务端建立连接的客户端的信息,这样才能成功将单播的断连报文发送到客户端手中,达成后续目的。

8439.png

图 9 服务提供上的断连攻击

(3)发布订阅上的攻击

前2种攻击在成功后,表现形式均为能够正常转发请求/回复数据。除了转发请求或回复的数据,也可以通过退订的操作最终导致可以转发事件信息。图10清晰地展示了整个流程:

服务端还是按照惯例广播自身提供的服务,接着客户端和攻击者都订阅了服务端的事件组,并收到了服务端的确认帧,此时说明服务端也记录下了客户端和攻击者分别的断端点信息。

然后攻击者会通过上面2种服务提供上的攻击的其中一种,让客户端信任自己具有它需要的服务事件组,客户端就会订阅攻击者的事件组。攻击者一收到订阅报文,就会回复确认帧,并立刻伪造一条包含客户端端点信息的退订事件组报文,让服务端不再将事件信息发送给客户端。而此时,攻击者与服务端之间的连接还存在,因此可以把服务端的事件更新信息转发给客户端,达到中间人攻击的环境。

84310.png

图 10 发布订阅上的攻击

参考文献:

[1] Seyler, N. Navet, and L. Fejoz. 2015. Insights on the Configuration and Performances of SOME/IP Service Discovery. SAE Int. J. Passeng. Cars – Electron. Electr. Syst. 8 (04 2015), 124–129.

[2] AUTOSAR. 2018. Specification on SOME/IP Transport Protocol - CP Release 4.4.0.

[3] AUTOSAR. 2018. Specification of Service Discovery - CP Release 4.2.2.

[4] Daniel Zelle, Timm Lauser, Dustin Kern, Christoph Krauß, Analyzing and Securing SOME/IP Automotive Services with Formal and Practical Methods, ARES 21: Proceedings of the 16th International Conference on Availability, Reliability and SecurityAugust 2021, Article No.: 8 Pages 1–20

相关文章:

鉴源实验室丨SOME/IP协议安全攻击

作者 | 张昊晖 上海控安可信软件创新研究院工控网络安全组 来源 | 鉴源实验室 社群 | 添加微信号“TICPShanghai”加入“上海控安51fusa安全社区” 01 引 言 随着汽车行业对于数据通信的需求不断增加,SOME/IP作为支持汽车以太网进程和设备间通信的一种通信协议应…...

什么?200?跨域?

情景复现 今天我遇到了一件很奇怪的事情就是,当我请求后端网关,然后通过网关去请求相应的服务,都进行了跨域处理 但是,奇怪的是我在请求的时候,回来的响应码是200,但是报错了,报的还是200的同…...

【数据结构与算法——TypeScript】算法的复杂度分析、 数组和链表的对比

【数据结构与算法——TypeScript】 算法的复杂度分析 什么是算法复杂度(现实案例)? ❤️‍🔥 前面已经解释了什么是算法? 其实就是解决问题的一系列步骤操作、逻辑。 ✅ 对于同一个问题,我们往往有很多种解决思路和方法&#x…...

搜索综合训练

搜索综合训练 选数详细注释的代码 小木棍详细注释的代码 费解的开关详细注释的代码 选数 详细注释的代码 #include <iostream> #include <vector>using namespace std;// 判断一个数是否为素数 bool isPrime(int num) {if (num < 1)return false;// 判断从2到s…...

snowboy+新一代kaldi(k2-fsa)sherpa-onnx实现离线语音识别【语音助手】

背景 本系列主要目标初步完成一款智能音箱的基础功能&#xff0c;包括语音唤醒、语音识别(语音转文字)、处理用户请求&#xff08;比如查天气等&#xff0c;主要通过rasa自己定义意图实现&#xff09;、语音合成(文字转语音)功能。 语音识别、语音合成采用离线方式实现。 语…...

APT80DQ20BG-ASEMI快恢复二极管80A 200V

编辑&#xff1a;ll APT80DQ20BG-ASEMI快恢复二极管80A 200V 型号&#xff1a;APT80DQ20BG 品牌&#xff1a;ASEMI 芯片个数&#xff1a;双芯片 封装&#xff1a;TO-3P 恢复时间&#xff1a;≤50ns 工作温度&#xff1a;-55C~150C 浪涌电流&#xff1a;600A*2 正向电流…...

Go的任务调度单元与并发编程

摘要&#xff1a;本文由葡萄城技术团队于CSDN原创并首发。转载请注明出处&#xff1a;葡萄城官网&#xff0c;葡萄城为开发者提供专业的开发工具、解决方案和服务&#xff0c;赋能开发者。 前言 本文主要介绍Go语言、进程、线程、协程的出现背景原因以及Go 语言如何解决协程的…...

PDFbox教程_编程入门自学教程_菜鸟教程-免费教程分享

教程简介 PDFBox是一个开源Java库&#xff0c;支持PDF文档的开发和转换.使用此库&#xff0c;您可以开发用于创建&#xff0c;转换和操作PDF文档的Java程序.除此之外&#xff0c;PDFBox还包括一个命令行实用程序&#xff0c;用于使用可用的PDF对PDF执行各种操作Jar文件. PDFB…...

Node.js-模块化理解及基本使用

模块化的定义 讲一个复杂的程序文件按照一定的规则拆分成多个独立的小文件&#xff0c;这些小文件就是小模块&#xff0c;这就是模块化。 每个小模块内部的数据是私有的&#xff0c;可以暴露内部数据给外部其他模块使用。 模块化优点 减少命名的冲突提高复用性提高可维护性按需…...

arguments 和 剩余参数

加油 &#xff01;&#xff01; &#x1f495; 文章目录 前言一、arguments二、arguments转成array三、箭头函数不绑定arguments四、剩余参数 ... 前言 其实在es6之后不推荐使用 arguments , 建议使用剩余参数 一、arguments arguments 是一个 对应于 传递给函数的参数 的 类数…...

【BASH】回顾与知识点梳理(十二)

【BASH】回顾与知识点梳理 十二 十二. Linux 文件与目录管理12.1 目录与路径相对路径与绝对路径相对路径的用途绝对路径的用途 12.2 目录的相关操作cd (change directory, 变换目录)pwd (Print Working Directory, 显示目前所在的目录)mkdir (make directory, 建立新目录)rmdir…...

本地构建包含java和maven的镜像

目录 1.前提条件 2.下载 2.1.创建Dockerfile 3.构建镜像 参考文章 1.前提条件 本地环境需要的系统和软件 win10 Docker Desktop Powershell 图1 Win10安装Docker后&#xff0c;直接在Powershell使用Docker命令 有些Developer不习惯win10系统&#xff0c;却想要使用Lin…...

Programming abstractions in C阅读笔记:p76-p83

《Programming Abstractions In C》学习第42天&#xff0c;p76-p73总结。 一、技术总结 1.数组和指针 在C语言中&#xff0c;数组和指针非常相似&#xff0c;相似到必须将它们同时考虑&#xff0c;当看到数组就应该想到指针&#xff0c;当看到指针就应该想到数组。示例&#xf…...

已解决(三个问题)|neo4j Failed authentication attempt for ‘meter‘ from 127.0.0.1

问题1 py2neo.errors.ConnectionUnavailable: Connection has been closed 问题2 neo4j Failed authentication attempt for ‘meter’ from 127.0.0.1 问题3 py2neo.errors,ClientError: [Security.Unauthorized] Invalid username or password. 作者:xiao黄 博客地址:http…...

neo4j查询语言Cypher详解(二)--Pattern和类型

Patterns 图形模式匹配是Cypher的核心。它是一种用于通过应用声明性模式从图中导航、描述和提取数据的机制。在MATCH子句中&#xff0c;可以使用图模式定义要搜索的数据和要返回的数据。图模式匹配也可以在不使用MATCH子句的情况下在EXISTS、COUNT和COLLECT子查询中使用。 图…...

动态规划(用空间换时间的算法)原理逻辑代码超详细!参考自《算法导论》

动态规划&#xff08;用空间换时间的算法&#xff09;-实例说明和用法详解 动态规划&#xff08;DP&#xff09;思想实例说明钢条切割问题矩阵链乘法问题 应用满足的条件和场景 本篇博客以《算法导论》第15章动态规划算法为本背景&#xff0c;大量引用书中内容和实例&#xff0…...

Jmeter添加cookie的两种方式

jmeter中添加cookie可以通过配置HTTP Cookie Manager&#xff0c;也可以通过HTTP Header Manager&#xff0c;因为cookie是放在头文件里发送的。 实例&#xff1a;博客园点击添加新随笔 https://i.cnblogs.com/EditPosts.aspx?opt1 如果未登录&#xff0c;跳转登录页&#xf…...

【ArcGIS Pro二次开发】(58):数据的本地化存储

在做村规工具的过程中&#xff0c;需要设置一些参数&#xff0c;比如说导图的DPI&#xff0c;需要导出的图名等等。 每次导图前都需要设置参数&#xff0c;虽然有默认值&#xff0c;但还是需要不时的修改。 在使用的过程中&#xff0c;可能会有一些常用的参数&#xff0c;希望…...

React配置代理服务器的5种方法

五种方法的介绍 以下是五种在React项目中配置代理服务器的方法的使用场景和优缺点&#xff1a; 1. 使用 http-proxy-middleware 中间件&#xff1a; 使用场景&#xff1a;适用于大多数React项目&#xff0c;简单易用。优点&#xff1a;配置简单&#xff0c;易于理解和维护。…...

树莓派:5.jar程序自启运行

搞了好长时间才搞定&#xff0c;普通的jar文件好启动。神奇的在于在ssh里启动GPIO可以操作&#xff0c;但是自启动GPIO不能控制。第二天才想明白估计是GPIO的操作权限比较高&#xff0c;一试果然如此&#xff0c;特此记录。 1、copy程序文件和sh文件在Public下 piraspberrypi…...

Vivado中SmartConnect和InterConnect的区别

前言&#xff1a;本文章为FPGA问答系列&#xff0c;我们会定期整理FPGA交流群&#xff08;包括其他FPGA博主的群&#xff09;里面有价值的问题&#xff0c;并汇总成文章&#xff0c;如果问题多的话就每周整理一期&#xff0c;如果问题少就每两周整理一期&#xff0c;一方面是希…...

了解HTTP代理日志:解读请求流量和响应信息

嗨&#xff0c;爬虫程序员们&#xff01;你们是否在了解爬虫发送的请求流量和接收的响应信息上有过困扰&#xff1f;今天&#xff0c;我们一起来了解一下。 首先&#xff0c;我们需要理解HTTP代理日志的基本结构和内容。HTTP代理日志是对爬虫发送的请求和接收的响应进行记录的文…...

排序-堆排序

给你一个整数数组 nums&#xff0c;请你将该数组升序排列。 输入&#xff1a;nums [5,2,3,1] 输出&#xff1a;[1,2,3,5] 输入&#xff1a;nums [5,1,1,2,0,0] 输出&#xff1a;[0,0,1,1,2,5] 思路直接看我录制的视频吧 算法-堆排序_哔哩哔哩_bilibili 实现代码如下所示&…...

挑战Open AI!!!马斯克宣布成立xAI.

北京时间7月13日凌晨&#xff0c;马斯克在Twitter上宣布&#xff1a;“xAI正式成立&#xff0c;去了解现实。”马斯克表示&#xff0c;推出xAI的原因是想要“了解宇宙的真实本质”。Ghat GPT横空出世已有半年&#xff0c;国内外“百模大战”愈演愈烈&#xff0c;AI大模型的现状…...

HTTP协议学习笔记1

初识HTTP 输入网址进入网页过程发生了什么&#xff1f; DNS解析&#xff1a;浏览器会向本地DNS服务器发出域名解析请求&#xff0c;如果本地DNS服务器中没有对应的IP地址&#xff0c;则会向上级DNS服务器继续发出请求&#xff0c;直到找到正确的IP地址为止。 建立TCP连接&…...

【网络基础实战之路】基于OSPF协议建立两个MGRE网络的实验详解

系列文章传送门&#xff1a; 【网络基础实战之路】设计网络划分的实战详解 【网络基础实战之路】一文弄懂TCP的三次握手与四次断开 【网络基础实战之路】基于MGRE多点协议的实战详解 【网络基础实战之路】基于OSPF协议建立两个MGRE网络的实验详解 PS&#xff1a;本要求基于…...

【学习日志】2023.Aug.6,支持向量机的实现

2023.Aug.6&#xff0c;支持向量机的实现 参考了大佬的代码&#xff0c;但有些地方似乎还有改进的空间&#xff0c;我加了注释 #codingutf-8 #Author:Dodo #Date:2018-12-03 #Email:lvtengchaopku.edu.cn #Blog:www.pkudodo.com数据集&#xff1a;Mnist 训练集数量&#xff1…...

LeetCode_动态规划_中等_1749.任意子数组和的绝对值的最大值

目录 1.题目2.思路3.代码实现&#xff08;Java&#xff09; 1.题目 给你一个整数数组 nums 。一个子数组 [numsl, numsl1, …, numsr-1, numsr] 的 和的绝对值 为 abs(numsl numsl1 … numsr-1 numsr) 。请你找出 nums 中和的绝对值 最大的任意子数组&#xff08;可能为空…...

无涯教程-Perl - 环境配置

在开始编写Perl程序之前&#xff0c;让我们了解如何设置我们的Perl环境。 您的系统更有可能安装了perl。只需尝试在$提示符下给出以下命令- $perl -v 如果您的计算机上安装了perl&#xff0c;那么您将收到以下消息: This is perl 5, version 16, subversion 2 (v5.16.2) b…...

QT显示加载动画

文章目录 一、前言二、使用1.FormLoading.h2.FormLoading.cpp 一、前言 项目中在下发指令时&#xff0c;结果异步返回&#xff0c;可能需要一段时间&#xff0c;因此需要用到加载动画。 用的比较简单&#xff0c;就是新建Widget子窗口&#xff0c;放一个Label&#xff0c;使用…...