这是“汽车黑客:终极指南!”系列的第二部分。在第一部分中,我们讨论了什么是 CAN 总线、一些帮助您开始使用 CAN 流量的信息以及如何使用 ICSim 设置虚拟汽车黑客系统。
在这里,我们将通过 CAN 流量嗅探汽车数据进行深入研究。
CAN 报文是什么样的?
这就是 CAN 消息在记录时的样子。如果我把列分开,第一列是接口,第二列是仲裁 ID,第三列是 CAN 消息的大小,它不能大于 8(如果你看一下 CAN 框架,你会更好地理解为什么它不能大于 8),第四列是 CAN 数据本身。
CAN 报文的含义
在此示例中,我们将看到一个 8 字节帧。该消息以 ID 0x111 发送。仪表板看到此消息后,将首先确认该消息是否是发给仪表板的。如果是,则读取消息 0x0BB8,转换为 3000(小数位)。现在仪表板将转速表上的指针移至 3000。
一旦我们理解了 CAN 消息,我们就可以进一步通过 ODB-II 将修改后的数据包注入 CAN 总线,以篡改速度计或任何我们想要的东西。
在开始介绍 ICSim 之前,我们先来看一下其他实用程序的工作原理。为此,我们首先配置虚拟接口。
设置虚拟 CAN 接口
sudo modprobe can
这将加载 CAN 的内核单元。我们还需要加载虚拟机的内核单元。
sudo modprobe vcan
如果您想验证所需的内核单元是否已加载,可以使用以下命令。
lsmod | grep
这将显示 CAN 和 VCAN 是否已加载。
现在让我们配置虚拟接口
sudo ip link add dev vcan0 type vcan sudo ip link setup vcan0
您可以使用以下命令验证虚拟 CAN 接口是否配置
ifconfig vcan0
配置虚拟 CAN 接口后,您现在就可以在此接口上发送/接收 CAN 数据包。现在让我们使用名为 cangen 的 can-utils 实用程序之一来创建虚拟 CAN 包。
坎根
cangen 创建 CAN 框架用于教育目的。要使用 cangen,您必须指定将在其中创建 CAN 框架的接口。
cangen vcan0
Vcan0是我们之前创建的虚拟CAN接口。
既然您已经创建了 CAN 框架,那么肯定有办法查看该框架!有许多可用的实用程序,其中之一就是 Wireshark。创建 CAN 框架后启动 Wireshark。
您可以看到许多可用的接口,具体取决于有多少个接口,vcan0 是创建 CAN 帧的接口。
单击要查看数据包的接口后,CAN 框将如下所示。
您还可以看到有关 CAN 框架的更多详细信息。
vcan0 中还有其他实用程序,例如cansniffer和candump,它们的作用与 Wireshark 基本相同。您可以使用任何您觉得最舒服的工具或实用程序。
candump
要使用candump丢弃或记录帧,您可以使用该命令
candump vcan0
下面我们将看到它向我们展示的结果。
在其中一个终端中,底部是创建 CAN 数据包,而顶部的终端则运行 candump 。如果我必须解析列,您首先看到的是 CAN 接口。第二个是 ID,第三个是 CAN 消息的大小,第四个是消息本身。
candump还可以为您记录框架。如果您想执行重复攻击,可以先记录帧,然后使用 canplayer 等小型实用程序重复这些帧。可以使用标志 -l 启用 CAN 框架记录。
candump -l vcan0
当您记录 CAN 帧时,将创建一个带有前缀 candump 的文件,后跟创建日期。
如果想查看文件的内容,可以随时使用Linux上的cat命令来查看。
我们使用candump记录的数据可以使用canplayer等实用程序播放。
坎普尔
顾名思义,canplayer将播放 CAN 帧。理想情况下,这在您需要进行重放攻击时很有用。首先,您将录制 CAN 帧,然后使用 canplayer 播放 CAN 框架。
想象一下,您想篡改转速表,但您不知道转速表读数在哪个 ID 下有效,您也不知道 CAN 消息中的内容。理想情况下,您应该先使用带有标志 -l 的 candump 丢弃并记录帧,然后使用 can player 重复记录的帧。
Canplayer 需要输入文件的 -i 选项。
canplayer-I canfile.log
canplayer 还有其他几个非常有用的选项,您可以使用man canplayer 来了解它们。
罐子嗅探器
使用 CAN 嗅探器查看 CAN 运动的变化。这对于查看特定字节的变化非常有用。Cansniffer 有一个 -c 选项,对于以彩色方式查看字节变化非常有用。它的作用是比较前一个字节和当前字节,如果有差异,则通过字节颜色的变化来指示。当您想知道在对汽车进行某些操作时是否有变化时,这非常有用。
cansniffer-c vcan0
我发现 cansniffer 非常有用,因为它还允许 ID 过滤。因此,如果您只想查看特定 ID(例如 0x011)的帧,您可以这样做。
您可以在开始嗅探后立即执行此操作,按 — 然后按 000000。这将首先清除所有帧。现在,您可以开始使用 + 添加 ID,然后添加要显示的 ID,然后按 Enter。这样您就可以过滤单个 ID 的帧。
可以发送
Cansend 用于将 CAN 帧发送到特定的 CAN 接口。
sudo modprobe vcan0
我们将把所有这些实用程序与 ICSim 一起使用。
启动 ICSim
按照我们撰写的第一篇文章学习如何安装 ICSim。
让我们启动 ICSim 并嗅探 CAN 帧。
sudo modprobe vcan1
如果您按照上一篇文章中讨论的每个步骤操作,您应该能够看到它们。您可能还会注意到速度表指针来回移动,这是由于噪音引起的,这是可以预料到的。
嗅探 ICSim 创建的 CAN 帧
我们将使用can-utils提供的实用程序cansniffer来捕获软件包。您可以打开一个新终端并使用以下命令启动 cansniffer
cansniffer-c vcan0
选择-c用于指示帧字节的变化。
您可以看到 CAN 帧中的变化非常快,很难跟上通信的速度。在真实的汽车中,这种通信会很快发生。为了跟上,您可以使用 ID ID 过滤。如果您只想查看来自 ID 40C 的帧,您可以随时按 —,然后按 000000,然后按 Enter 键。这将从 cansniffer 中删除所有 ID,然后您可以按 +,然后按 ID ID 进行过滤,然后按 Enter 键。
在这里,我使用上述相同的步骤过滤了 40c ID。您可以尝试按向上箭头键来增加油门,然后观察 CAN 帧的变化速度。颜色再次指示了变化。您可以随时试用它并了解其内部工作原理。
重放攻击
理解如此大量的数据将非常困难。而且,从如此大量的数据中找出需要输入帧的 ID 是不可能的。
因此,您需要捕获包,然后执行一些操作,例如打开闪光灯或在连接后按下加速器,然后拆分包,执行重放攻击并查看它是否有效。
现在要使用 ICSim 运行重放攻击,您必须已经启动了 ICSim,并且您应该能够使用cansniffer 查看帧。我们现在将使用带有-l 的选项candump来记录和保存帧,同时我们将通过按箭头键 <left> 和 <right> 来增加油门以激活闪光指示器。
candump -l vcan0
现在我们将停止 candump,并且我们将看到正在创建的 candump-XXXXX.log 文件。
CAN 帧重复
要重复这些包,我们将使用canplayer。由于我们将使用文件作为 canplayer 的输入,因此我们需要启用 -I 选项。
sudo modprobe vcan4
您可以看到重放攻击已经发生,并且闪光灯和速度计应该可以像我们之前那样工作。
包分析
在实际车辆中,CAN 总线可能更加复杂,CAN 帧出现的速度也更快,因此查找 ID 可能非常困难。因此,为了轻松识别 ID,您可以按照以下步骤操作。
分割CAN帧并执行重放攻击
如果您想将 CAN 帧分成两半并对每个帧运行重放攻击,最好的方法是使用 candump 捕获 CAN 帧并使用实用程序wc来计算 CAN 帧的数量,然后使用split将其均等地分成两半。
现在,您可以使用 canplayer 独立重复 CAN 帧。
到此,我们也结束了本指南。我们已经证明,一旦我们能够访问车辆并执行一些操作(例如加大油门、打开转向灯和打开车门),我们就可以进行攻击。因此,借助一些程序和低成本组件,我们能够完全访问车辆。
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...