零成本入门车联网安全研究(二)

这篇具有很好参考价值的文章主要介绍了零成本入门车联网安全研究(二)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文是《零成本入门车联网安全研究》系列第二篇,第一篇简单介绍了下车内网络的架构,让大家对车内ECU组网的方式有了最基本的了解。本文则在车内网络的基础上,部署了真实的网络业务——基于以太网的车辆诊断服务,该服务基于doip(Diagnose On IP)协议栈实现通用诊断协议UDS。本文相比于第一篇文章更具可操作性与可玩性,可操作性的点在于大家根据文章介绍的步骤,可以搭建好自己的实验环境;可玩的点在于,本实验会在开源项目的基础上,加入可实际利用的协议漏洞,通过漏洞利用能够模拟远程控制车辆。此外,本文在描述实验步骤的同时,还会穿插介绍一些相关基础,包括:

  • CAN网络基础
  • UDS协议基础
  • DoIP协议基础
  • 远程诊断的实现原理

等等。为了帮助大家更好地开始,有必要先介绍下实验环境。本次实验的系统使用ubuntu20.04模拟车辆边缘节点,节点上运行DoIPServer,win10模拟DoIP诊断仪,诊断仪包含DoIPClient,其中win10与ubuntu组成可相互通信的局域网,即DoIP诊断仪可以通过以太网连接DoIPServer。车内CAN网络通过linux vcan实现,边缘节点、ICSim及车内UDS节点均连接到CAN网络,车内UDS节点上运行UDSServer,该Server能实现基于CAN网络的UDS诊断。整体网络架构如下图所示:

零成本入门车联网安全研究(二)

 

基于如上部署,DoIP诊断仪能够通过以太网连接边缘节点,通过发送诊断协议包的方式,直接对边缘节点执行远程诊断。另外,因为车内UDS节点也实现了UDS协议,因此DoIP诊断仪可以发送诊断协议包至边缘节点,由边缘节点执行DoIP转DoCAN,将基于DoIP的诊断协议包格式转换为基于CAN的诊断包格式,发送至车内UDS节点。

另外,由于ICSim未实现UDS协议,因此DoIP诊断仪的数据包理论上是不会被转发至ICSim,但我们在DoIPServer中插入了一个漏洞,将不合法的DoIP数据包转发至CAN网络,这样通过构造,便可以使用DoIP诊断仪远程发送控制报文至ICSim,实现远程车控。

关于实验环境就介绍这么多,接下来上手配置。首先在ubuntu上安装虚拟CAN网络的工具:

# 安装python can
pip3 install python-can

# 按照can-utils
sudo apt-get install can-utils

# 安装can驱动,设置can网络
sudo modprobe can
sudo modprobe vcan
sudo ip link add dev vcan0 type vcan
sudo ip link set up vcan0

设置完CAN网络后,通过ifconfig查看状态:

零成本入门车联网安全研究(二)

配置ubuntu与windows10的通信环境,在同一个局域网可以相互ping通即可,ip地址不必完全按照本文配置。

其中ubuntu的网络配置如下:

零成本入门车联网安全研究(二)

windows10的网络配置如下:

零成本入门车联网安全研究(二)

安装ICSim依赖工具:

sudo apt-get install libsdl2-dev libsdl2-image-dev can-utils

下载ICSim源代码,make编译ICSim,运行ICSim:

git clone https://github.com/zombieCraig/ICSim.git
cd ICSim
make

# 运行ICSim,绑定vcan0
./icsim vcan0

下载DoIPServer与DoIPClient源码:

git clone https://gitlab.com/rohfle/doip-simulator.git

下载uds-server并编译:

https://github.com/zombieCraig/uds-server.git

启动uds-server并绑定到vcan0,uds-server用于模拟车内uds节点:

./uds-server vcan0

接下来对doipserver做一些修改,用来转发UDS报文给uds节点,以及插入漏洞代码:

修改一:

~/study/vehicle/doip-simulator$ git diff lib/server.py

diff --git a/lib/server.py b/lib/server.py

index 16f0248..6315479 100644

--- a/lib/server.py

+++ b/lib/server.py

@@ -20,6 +20,7 @@ import time



 from . import uds

 from . import doip

+from . import utils



 from . import simulator as sim



@@ -90,6 +91,22 @@ class DOIPServer(object):



                         if not self.simulator.has_target_address(target_address):

                            logger.error('Error: target_address 0x{:02x} is unknown'.format(target_address))

+

+                            # send fake message to vcan0

+                            # print(utils.bytes_to_hex(userdata))

+                            data_len = len(userdata) + 1

+                            can_data = bytearray(data_len)

+

+

+                            laddr = target_address

+                           if target_address != 0x188 and userdata[0] == 0x22:

+                                can_data[0] = 0x02

+                                can_data[1:] = userdata

+                           else :

+                                can_data[:] = userdata[1:]

+                            utils.send2vcan0(bytes(can_data), target_address)

+                            time.sleep(1)

+

                            response = doip.DiagnosticMessageNegativeAck(source_address, target_address,

修改二:

~/study/vehicle/doip-simulator$ git diff lib/utils.py

diff --git a/lib/utils.py b/lib/utils.py

index 427de2c..802e58f 100644

--- a/lib/utils.py

+++ b/lib/utils.py

@@ -15,6 +15,15 @@

 """



 import inspect

+import can

+

+

+def send2vcan0(can_data, laddr):

+    bus = can.Bus(channel='vcan0', interface='socketcan')

+    msg = can.Message(arbitration_id=laddr, data=can_data, is_extended_id=False)

+    bus.send(msg)

+

+



 def get_subclasses(mod, cls):

在doipclient的源码中,加入canid为0x188及0x710的报文配置,分别针对ICSim和UDS节点:

config = {

   'datamap': {

       # target_address (hex) : {

       #   identifier (hex) : tuple(label (str), key (str), parser (func))

        # }

       0x188: { # control ICSim

           0x0100: ('Fake Msg', 'fake', parse_fake_msg),

           0x0200: ('Fake Msg', 'fake', parse_fake_msg),

       },

       0x3300: {

           0x3200: ('Dummy Accelerator', 'accelerator', parse_accelerator),

           0x3230: ('Dummy Brake', 'brake', parse_brake_pressure),

       },

       0x3301: {

           0x3250: ('Dummy Steering', 'steering', parse_steering_angle),

       },

       0x710: { # send to uds-server

           0xF187: ('Fake Msg', 'fake', parse_fake_msg),

       }

   }

}

修改完成之后,分别在ubuntu和windows10上将doipserver、doipclient运行起来:

# on ubuntu

python3 doipserver.py

# on windows10

python3 doipclient.py

此时,所有组件都开始工作。doipserver运行起来后会监听13400端口,等待doipclient连接。同时doipserver会周期性地发送广播帧向外报活,广播帧的内容主要包含车辆VIN码及边缘节点的逻辑地址,如下图所示:

零成本入门车联网安全研究(二)

广播节点逻辑地址的原因和UDS协议中的寻址方式有关系,UDS协议规定了两种寻址方式:功能寻址与物理寻址。功能寻址可以简单地理解为广播的形式,例如诊断仪发送一个广播帧询问有哪些节点存活着,它不针对指定的ECU;而物理寻址则是针对指定的ECU,因此每个ECU都会对应确定的逻辑地址,当诊断仪想要和指定的ECU进行通信时,就会采用物理寻址的方式,指定ECU的逻辑地址发起连接请求。

简单了解了UDS的寻址方式之后,我们就能明白Doipserver广播帧中携带逻辑地址的意义。

doipclient起来后首先接收广播帧,即协议中描述为“车辆发现”的动作,通过接收doipserver的广播帧,doipclient获得了server端的逻辑地址及车辆VIN码信息,接着连接13400端口,并发起激活路由的请求(Routing activation request)。UDS协议中,在执行针对某个ECU的诊断之前,首先要激活路由。接着发送具体的诊断报文“ReadDataByIdentifier”,“ReadDataByIdentifier”属于UDS的标准服务之一,诊断仪通过指定需要读取数据的Identifier,读取目标ECU中的对应数据:

零成本入门车联网安全研究(二)

通过调整doipclient的log级别,我们可以在终端输出doipclient接收到的数据,这些数据由边缘节点生成,包括accelerator、brake和steering的实时数据:

零成本入门车联网安全研究(二)

到目前为止,我们看到了doipclient连接doipserver的过程,并简单分析了doipclient与doipserver之间进行UDS诊断通信的过程。该过程仅包含了以太网的通信,接下来我们看看诊断报文转发到CAN网络的过程,首先上一张效果图: 

零成本入门车联网安全研究(二)

上面的gif效果显示,ICSim周期性地接收到了左转向和右转向信号,说明doipclient的报文被成功转发到了vcan0,即我们成功地通过远程诊断仪实现了对车辆功能的控制。通过candump验证vcan0接收到的消息:

零成本入门车联网安全研究(二)

vcan0上接收到的消息包括ICSim左转向、ICSim右转向、VCDS gateway request及VCDS response。candump的结果显示了can消息中包含的canid,消息id(方括号中的内容),以及can报文的data部分。canid 0x188即ICSim的逻辑地址,数据01表示开启左转向灯,数据02表示开启右转向灯。VCDS的request和response包含两个不同的逻辑地址0x710、0x77A,因为当ECU节点作为发送方和接收方时,分别对应一个逻辑地址。uds-server接收到的请求数据如下:

零成本入门车联网安全研究(二)

通过调整doipserver的log级别,我们可以看到doipserver收发请求的完整过程,如下图所示:

零成本入门车联网安全研究(二)

实验至此就结束了,过程中涉及到的相关知识点均轻笔带过,本文仅作为大家学习的一个引子,提供一种可实验、可操作的入门方式,感兴趣的朋友可以继续全面深入地学习相关的知识。文章来源地址https://www.toymoban.com/news/detail-420382.html

到了这里,关于零成本入门车联网安全研究(二)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 物联网与智能物流:提高物流效率和降低成本

    作者:禅与计算机程序设计艺术 随着经济全球化进程的加速,物流业也在经历一个从供需双方合作、互利共赢到互补竞争的转型过程。传统的物流方式虽然保障了商品运输的安全,但是效率低下,使得公司生产效率成为瓶颈。而物联网(IoT)的出现则改变了这一现状。物联网

    2024年02月07日
    浏览(53)
  • [车联网安全自学篇] Car Hacking之关于IoT安全该如何入门?你必须知道的那些事「3万字详解」

    也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 物联网,也称为物联网(IoT),代表可以连接到互联网或内部网络的设备和外围设备的集合。这些设备有多种形状和尺

    2024年02月04日
    浏览(59)
  • 华南理工大学研究人员提出一种用于VR环境的低成本、无线脑电图测量系统

    近年来,随着技术的进步,用于测量研究和医疗环境中大脑活动的系统和设备越来越先进。一个已被广泛探索但尚未有效实现的概念是,在人们浏览虚拟现实(VR)环境时收集脑电图(EEG)测量数据。 脑电图测量是对大脑自发电子活动的记录,通常使用连接在头皮上的小型电极

    2024年03月28日
    浏览(54)
  • IBM安全发布《2023年数据泄露成本报告》,数据泄露成本创新高

    近日,IBM安全发布了《2023年数据泄露成本报告》,该报告针对全球553个组织所经历的数据泄露事件进行深入分析研究,探讨数据泄露的根本原因,以及能够减少数据泄露的技术手段。 根据报告显示,2023年数据泄露的全球平均成本上升至445万美元,达到历史新高,比2022年的

    2024年02月05日
    浏览(36)
  • 集中成本、性能和安全优化(由 Vmware 赞助)

    : [Amazon Web Services re:Invent 2023, CloudHealth, Cost Optimization, Cloud Management, Multi-Cloud Visibility, Finops Practices, Cloud Cost Management] 本文字数: 1300, 阅读完需: 6 分钟 如视频不能正常播放,请前往bilibili观看本视频。 https://www.bilibili.com/video/BV1Hb4y1L7Sd 跨云和组织竖井管理工作负载可能会

    2024年02月21日
    浏览(38)
  • 架构篇07-复杂度来源:低成本、安全、规模

    关于复杂度来源,前面的专栏已经讲了高性能、高可用和可扩展性,今天我们来聊聊复杂度另外三个来源低成本、安全和规模。 当我们的架构方案只涉及几台或者十几台服务器时,一般情况下成本并不是我们重点关注的目标,但如果架构方案涉及几百上千甚至上万台服务器,

    2024年01月19日
    浏览(47)
  • 自养号测评低成本高效率推广,安全可控

    测评的作用在于让用户更真实、清晰、快捷地了解产品以及产品的使用方法和体验。通过买家对产品的测评,也可以帮助厂商和卖家优化产品缺陷,提高用户的使用体验。这进而帮助他们获得更好的销量,并更深入地了解市场需求。因此,测评在满足用户需求和帮助商家提升

    2024年02月22日
    浏览(53)
  • 架构篇07:复杂度来源(低成本、安全、规模)

    关于复杂度来源,前面的专栏已经讲了高性能、高可用和可扩展性,今天我们来聊聊复杂度另外三个来源低成本、安全和规模。 当我们的架构方案只涉及几台或者十几台服务器时,一般情况下成本并不是我们重点关注的目标,但如果架构方案涉及几百上千甚至上万台服务器,

    2024年01月23日
    浏览(56)
  • 区块链在车联网数据共享领域的研究进展

    摘要 车联网中实现高效、安全的共享数据对智慧交通的发展具有重要意义。将区块链技术与车联网相结合,在促进车联网数据共享和隐私保护改善方面都有巨大的潜力,但仍然存在区块链技术如何保证车联网数据安全共享的问题。针对这一问题,对区块链和车联网技术融合的最新

    2024年02月08日
    浏览(46)
  • Java智慧工地源码:进度、质量、 成本、安全尽在掌握

    智慧工地是一种崭新的工程全生命周期管理理念。智慧工地是智慧城市在建筑施工领域的延伸,是智慧城市的“基石”。随着工程信息化管理技术的发展,移动互联网、物联网、AI、大数据等新技术与施工现场业务场景深度融合,智慧工地已成为建筑工地信息化建设和创新的

    2024年02月11日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包