汽车安全确实令人兴奋,也是许多安全研究人员感兴趣的研究课题。随着特斯拉等自动驾驶汽车的出现,汽车安全只会变得更加重要。今天当你开车时,你驾驶的是一台功能极其强大的计算机,它恰好有轮子和方向盘。
这一切的核心是控制器局域网络(简称 CAN,也称为 CAN 总线),它是汽车中负责通信的中枢神经系统。今天的文章是关于如何使用 CAN 逆向工程包来破解汽车。
Craig Smith 的 ICSim 软件包将用于 CAN 总线的实际使用。ICSim 包括一个带有速度表、门锁指示器、转向信号和控制面板的仪表板。控制面板允许用户与模拟汽车网络交互,应用加速、刹车、控制门锁和转向信号。
目录
第 1 部分 设置虚拟汽车
先决条件
CAN简介
CAN 操作
请注意,较低的 ID = 较高的优先级。
如果 CAN 从未被发明会怎样?
为什么您应该关心 CAN?
通过 OBD 访问 CAN 所需的硬件和软件
餐具、配件
机器 M2
CLX000
软件
设置虚拟环境
仪器模拟器需要 SDL 库
CAN Utils 安装
下载仪器模拟器
准备虚拟 CAN 网络
运行模拟器
第 1 部分:设置虚拟汽车
本指南的主要目的是帮助您开始了解汽车保险。与其他安全领域相比,汽车黑客的难度要高得多。
虽然汽车黑客和汽车安全是一个更广泛的领域,但本指南仅关注控制器局域网 (CAN),并且仅限于嗅探 CAN 流量、对其进行分析、进行逆向工程和对汽车执行重放攻击。
汽车安全确实令人兴奋,也是许多安全研究人员感兴趣的研究课题。随着特斯拉等自动驾驶汽车的出现,汽车安全将变得更加重要。
如今,当你驾驶汽车时,你驾驶的是一台功能极其强大的计算机,而这台计算机恰好有轮子和方向盘。
虽然我们确实会在仪表盘模拟器上进行这次攻击/研讨会,但这完全可以在配备额外硬件的真实汽车上完成。我将在本文末尾讨论所需的额外材料。
本文的目的是帮助您轻松开始学习汽车安全或汽车故障,而无需在硬件上花费大量资金。本文的目的只是帮助您开始将汽车入侵模拟器。
在本文中你将了解
CAN 操作
通过 OBD-II 访问 CAN
嗅探 CAN 流量
分析并逆向 CAN 流量
重放攻击
CAN 中的拒绝服务 [第 3 部分 TODO]
使用 Python 玩转 CAN 包
先决条件
在本教程中,您将需要:
任何 Linux 发行版(我将使用 Ubuntu)
可以
ICSim(ICSim是一个开源汽车模拟器)
,你可以从地址https://github.com/zombieCraig/ICSim下载
CAN简介
控制器局域网络(又名 CAN)是允许汽车所有/某些部件之间进行通信的中枢神经系统。
在 1985 年 BOSCH 首次开发 CAN 之前,汽车制造商使用点对点布线系统作为车载通信系统。随着汽车中电子元件的增多,这种系统变得笨重且维护成本高昂。后来,这个问题被 CAN 取代,从而得到解决。
简单来说,CAN 允许汽车内的不同电子模块相互通信和共享数据。CAN 提案的主要动机是它允许仅使用一根电缆进行多个 ECU(ECU = 发动机控制单元 = 汽车控制单元)的通信。现代汽车最多可以有 70 个 ECU。
在汽车中,您可以拥有发动机控制单元、安全气囊、变速箱、齿轮组、防抱死制动系统或 ABS、信息娱乐系统、空调、车窗、车门等配件。要在所有这些单元之间进行通信,它们的点对点布线将非常繁琐。想象一下,每个元件都连接到其他每个元件,这对于诊断和故障排除来说将是一个真正的混乱。但使用 CAN,可以用一根电缆代替,每个单元之间的通信要简单得多。
CAN-Bus 可以被视为以太网 LAN 的较慢版本,只是流量是 UDP 而不是 TCP。
值得注意的是,并非所有汽车控制系统都使用 CAN,并且 CAN 也不是汽车系统中使用的唯一通信协议。
可能还有其他协议,例如蓝牙、GSM/LTE 网络、卫星广播、LIN 等。请注意,CAN 并不是唯一可能受到攻击的程序。还有很多其他程序。
CAN 操作
一辆汽车可以有多个节点,这些节点可以发送和/或接收消息。每条消息本质上都包含一个 ID,它是消息的优先级,还可以包含一个 CAN 消息,该消息可以是 8 个字节或更少。
如果两个或多个节点同时开始发送消息,则ID 较低的消息将取代 ID 较高的消息。这称为基于优先级的总线仲裁。数字较低的标识符 (ID) 的消息具有较高的优先级,并且始终会首先发送。这就是节点在通道上定位和放置最高优先级消息的方式。
来自刹车的信息优先于来自音频播放器的信息。
请注意,较低的 ID = 较高的优先级。
如果两个或多个节点同时开始发送消息,则使用主导 ID 发送的消息将覆盖次主导 ID 发送的消息。
CAN 总线由两条不同的电缆组成。由于它是一条总线,因此许多设备可以连接到这些电缆。CAN 框架有 3 个主要部分:
仲裁标识符
数据长度代码
数据字段
我们先看一下CAN数据框架:
如果 CAN 从未被发明会怎样?
您可能会想到一个合乎逻辑的问题,即为什么选择 CAN 系统,而有许多其他方法可以轻松实现?在发明 CAN 总线之前,汽车制造商使用点对点布线系统。因此,如果汽车有三个部件,则所有三个部件都通过点对点的三角形布线系统相互连接。
考虑这三个要素:转向、变速箱和 ABS。现在,在标准的点对点布线系统中,您需要将转向系统与变速箱和 ABS 连接起来,以便一切都连接起来。此外,变速箱应通过一堆电缆连接到 ABS 和转向系统。
这对于零部件较少的汽车来说是完美的。你能想象一辆拥有多达 100 个不同 ECU 和其他零部件的现代汽车会这样吗?这不仅是一件苦差事,而且不可能检测到线路系统中的故障(如果有的话),诊断将是一场真正的噩梦,而且成本非常高。
这时,汽车制造商提出了 CAN 的想法。
点对点布线问题可以用两根电缆代替,即CANH 和 CANL,分别是 CAN HIGH 和 CAN LOW。现在,这种方式的通信速度更快、更简单,并且非常容易诊断。
为什么您应该关心 CAN?
因为几乎每辆汽车都使用 CAN,这是法律要求的,所以 CAN 不会很快停止使用。此外,CAN 总线的开发并没有考虑到现代安全性。
要访问汽车的 CAN 总线,您必须能够访问汽车诊断端口(也称为 OBD)。虽然可能有数百种其他诊断标准和端口,但基本上现在所有汽车都使用 OBD-II。这正是汽车技工用来诊断汽车损坏情况的方法。
OBD 是访问 CAN 的最直接方式。找到 OBD-II 相当容易。它位于前排乘客或驾驶员座位附近。而且应该无需螺丝刀即可访问。
这正是 OBD 的样子。
如果您对 OBD 引脚排列感到好奇,请在下图中查看所有这些 OBD 端口引脚的含义。
如果仔细观察,引脚 6 和引脚 14 与我之前提到的 CANH 和 CANL 相同。
通过 OBD 访问 CAN 所需的硬件和软件
要与 CAN 总线交互,由于您已经知道需要一个 OBD 端口,所以您需要类似“USB 转 CAN”适配器的东西,因为您的计算机无法直接与 CAN“对话”。
您需要一些东西,即连接到 OBD-II 端口,另一方面连接到 USB 端口,以便您可以发送/接收 CAN 数据包。同样作为软件,您需要一些可以读取和/或写入 CAN 数据包以及编码和/或解码 CAN 数据包的东西。只需一点硬件和软件,您绝对可以进入 CAN。
餐具、配件
连接 OBD-II 所需的硬件在市场上很容易找到。有昂贵的设备,也有便宜的设备。高端设备包括 Kvaser 和 EMS,它们价格昂贵且价格过高。
您可以获得 USB2CAN,这是一个性价比很高的 Linux 接口。价值 60 欧元。
您还会经常遇到这些基于 ELM327 和蓝牙的设备。它们非常容易被黑客入侵,因为它们的数据速率较慢,最终会丢失太多包裹。但它们的价值约为 10 欧元。
机器 M2
Macchina M2 是我个人最喜欢的(价值 85 欧元)。Macchina M2 是一个开源汽车接口,允许您通过 OBD-II 与 CAN 总线通信。Macchina M2 最好的部分是它是模块化的,这意味着您可以在 M2 上添加 WiFi、GSM、LTE、BLE 驱动器。M2 有 2 个 CAN 通道。M2 也有 LIN 吗?您可以在此处了解有关 Macchina M2 的更多信息。
我使用过 USB2CAN 和 Macchina M2,它们的品质很高,而且功能齐全。
CLX000
另一个低成本选项是 CSS Electronics 的 CLX000,它允许您记录和传输 CAN 数据,例如用于汽车违规目的。数据可以在免费的 Wireshark 开源软件中显示,并且附加组件允许使用有用的逆向工程功能。
CLX000 非常适合可视化和远程信息处理。
您可以在此处找到有关 CLX000 的更多信息,他们也有一些关于 CAN 的精彩文章。我建议您访问他们的博客:https://www.csselectronics.com/screen/page/reverse-engineering-can-bus-messages-with-wireshark/language/en
软件
在软件方面,有 SocketCAN、can-utils、vcan 嵌入在 Linux 内核中。它们用于发送和接收 CAN 数据包,以及对数据包进行编码和/或解码。
您还可以使用 Wireshark 来分析 CAN 包。
如果您想了解更多有关 CAN 操作的知识,而又不必担心损坏您的汽车,那么 ICSim 就是您必须使用的工具!
设置虚拟环境
练习汽车黑客攻击的最佳和最便宜的方法是运行仪表模拟器。感谢 Craig Smith 和名为 ICSim 的开源存储库。使用 ICSim,设置和学习如何操作 CAN 总线非常容易。
我们来做出调整吧。
仪器模拟器需要 SDL 库
SDL 是一个用于计算机图形和音频的多平台开发库。由于 ISCim 设计和制作虚拟控制面板动画,因此需要 SDL。它可以通过 apt-get 安装。
sudo apt-get install libsdl2-dev libsdl2-image-dev -y
CAN Utils 安装
要发送、接收和分析 CAN 数据包,我们需要 CAN 工具。Can-utils 是一组 Linux 实用程序,允许 Linux 与车载 CAN 网络通信。Can-utils 包含我们经常使用的 5 个主要工具:
cansniffer用于嗅探软件包
cansend写一个包
candump转储所有下载的包
canplayer重复播放 CAN 数据包
cangen创建随机 CAN 包
Can-utils 可以通过 apt-get 安装
sudo apt-get install can-utils -y
下载仪器模拟器
仪表组模拟器用于生成 CAN 的模拟运动。
您可以通过 git 存储库下载它:https://github.com/zombieCraig/ICSim
如果一切顺利的话,你应该会看到它
准备虚拟 CAN 网络
浏览 ICSim 目录后,你会发现一个名为setup_vcan.sh的 shell 脚本
这里的modprobe命令用于加载内核单元,例如can和vcan。最后两行将创建一个vcan0接口,以模拟汽车网络。
您可以运行以下命令来设置虚拟接口
./setup_vcan.sh
要验证 vcan0 接口,将显示 ifconfig vcan0
运行模拟器
现在是时候运行模拟器了。运行 ICSim 模拟器至少需要两个组件。仪表板和控制器用于模拟加速、刹车、车门控制、转向信号等。至少需要 3 个终端窗口才能运行。让这些终端有一个仪表板、一个控制器和另一个用于执行其他命令的窗口。
控制面板的执行
要运行控制面板,您必须运行一个名为icsim的文件,并带有参数vcan0(我们之前创建的接口)。
./icsim vcan0
此时,仪表板将不会运行,包括速度表、灯光、刹车或车门。这是因为 vcan0 接口中没有运动,为了模拟它,我们必须启动控制器。
控制面板可以使用以下命令启动
./controls vcan0
Vcan0 是虚拟 CAN 接口,ICSim 将通过该接口发送和接收 CAN 帧。启动控制面板后,您可能会注意到车速表有些波动。这是由于控制面板模拟的噪音造成的。
控制面板启动后,您可以使用键盘键来模拟运动。
使用以下组合键,您可以更改 ICSim 控制面板。
一旦我按下向上箭头和向左箭头键,您将看到下面会发生什么
这就是设置程序的全部内容。如果您按照我向您描述的一切操作,那么您一定已经完全控制了汽车。在第 2 部分中,我将讨论利用交通或其他汽车利用的方法。
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...