汽车安全测试终极指南,第三篇(译文)

qing16 2022-03-08 10:23:00

在上两篇文章中,我们介绍了如何安装汽车模拟软件,以及进行安全测试所需的其他软硬件。在今天的文章中,我们将详细介绍安全测试过程。

首先,我们将为大家介绍SavvyCAN,以及如何与ICSIM搭配使用。之后,我们将演示如何用SavvyCAN进行模糊测试,以及通过脚本控制SavvyCAN。

关于SavvyCAN

如今,已经有很多种软件都可以用于监控和过滤CAN通信。其中,有昂贵的专有工具,也有免费的开源工具。

这篇文章的目的,是向大家介绍如何免费对汽车进行安全测试,所以,昂贵的工具不在我们的介绍范围之内。

在前面的文章中,我已经详细介绍了这些昂贵的CAN通信工具的廉价和免费的替代品。实际上,像can-utils、Wireshark这样的工具就非常好用。

但是,SavvyCAN为我们提供了更多的功能。对于初学者来说,它提供了一个很好的GUI,可以帮助你轻松地浏览、过滤数据包、ID等。对于那些已经进入汽车安全测试领域的人来说,SavvyCAN提供了真正伟大的功能——我个人最喜欢的功能包括以脚本方式来处理CAN帧。

下面,让我们来看看官方网站对SavvyCAN的定义:

“SavvyCAN是一个基于多个QT平台的C++程序,主要用于CAN数据的逆向分析和捕获。它最初是为了介绍EVTVDue和CANDUE等EVTV硬件的用法而编写的。此后,它被扩展到适用于任何socketCAN兼容设备,以及Macchina M2和Teensy 3.x板。它可以同时捕获并发送至多个总线和CAN摄像机。”

您可以在这里找到更多信息:https://www.savvycan.com/。

我发现与can-utils相比,SavvyCAN非常容易上手。还是那句话,争论哪个工具最好,哪个工具不好是没有意义的,主要看是否适合自己。

SavvyCAN的安装

安装SavvyCAN是一个非常容易和简单的过程。您可以通过https://www.savvycan.com,下载适用于Linux、Mac和Windows平台的预编译二进制文件。

在Ubuntu上安装和运行SavvyCAN

wget https://github.com/collin80/SavvyCAN/releases/download/V199.1/SavvyCAN-305dafd-x86_64.AppImage

下载appimage时,无需安装,直接运行相应的可执行文件即可!

chmod 744 SavvyCAN-305dafd-x86_64.AppImage
# and
./SavvyCAN-305dafd-x86_64.AppImage

运行SavvyCAN后,我们可以看到:

1.png

我们建议大家不妨花点时间来熟悉SavvyCAN的界面。如果您想在Macchina M2或其他兼容的硬件上使用SavvyCAN,无需额外安装任何东西。

我们打算将SavvyCAN与ICSim搭配使用,所以,我们还需要安装qtserialbus。

打开SavvyCAN窗口后,导航到Connection -> Open Connection Window -> Add New Connection选项,会发现qtserialbus是处于关闭状态的。

1.png

为了在ICSim中使用qtserialbus,首先需要完成相应的安装工作。

安装qt5

$ wget https://download.qt.io/official_releases/qt/5.14/5.14.4/qt-opensource-linux-x64-5.14.2.run

下载qt5后,我们需要安装/运行它,具体命令如下所示:

$ chmod a + x ./qt-opensource-linux-x64-5.14.2.run

$ sudo ./qt-opensource-linux-x64-5.14.2.run

记下路由名称,因为后面会用到的。

一旦安装了qt5,接下来就得安装qtserialbus了,因为该软件没有包含在官方的Ubuntu存储库中,所以,我们还得自己动手,才能丰衣足食。

安装qtserialbus

$ sudo apt install qtdeclarative5-dev qttools5-dev g ++

$ git clone https://github.com/qt/qtserialbus

$ cd qtserialbus

$ /home/y0g3sh/Qt5.14.2/5.14.2/gcc_64/bin/qmake .

$ make

$ sudo make install

编译SavvyCAN

为了使用qtserialbus,我们还需要通过qmake编译之前下载的SavvyCAN的AppImage文件,具体命令如下所示:

$ git clone https://github.com/collin80/SavvyCAN $ cd SavvyCAN $ /home/y0g3sh/Qt5.14.2/5.14.2/gcc_64/bin/qmake CONFIG + = debug $ make

1.png

注意,安装过程可能需要一些时间,请耐心等待。

安装就绪后,请启动ICSim模拟器,以及除can-utils以外的所有工具——在这里,我们不会借助于can-utils来记录CAN通信,而是使用SocketCAN。

启动SavvyCAN

启动我们刚刚编译好的SavvyCAN,而不是我们之前下载的appimage文件。

请记住,如果您想在真正的汽车上运行它,而不是使用qtserialbus的话,则可以直接使用appimage文件,而不必费劲巴拉地编译SavvyCAN了。

$ cd SavvyCAN $ ./SavvyCAN

现在你可以打开登录窗口,这时会发现QT SerialBus已经启用。

1.png

将vcan0添加到SocketCAN上

要为SavvyCAN创建一个新的连接,可以:

打开SavvyCAN
选择LOG IN ->  Open a login window  ->  Add a new device connection选项
选择具有以下设置的连接

连接类型为QT SerialBus Devices
串行总线设备类型为socketcan
端口为vcan0

1.png

然后创建一个新的连接。

一旦创建好连接,在SavvyCAN窗口中就能看到CAN帧了——这说明一切正常。

1.png

为了更好地理解SavvyCAN,让我们重复之前用can-utils所做的事情,但这次是用SavvyCAN。

SavvyCAN提供了一个漂亮、直观的界面来完成基于ID的帧过滤。您可以从右窗格中剔除不需要的ID,这样,就可以快速识别相关的ID。

另一个非常好的功能是“替换模式”。如果启用此选项,将以相同的顺序替换帧。

1.png

重放攻击

使用SavvyCAN完成重放攻击要容易得多:直接在Send Frames菜单中选择playback选项即可。此外,您可以从文件中上传数据,或者直接上传记录的数据,甚至可以从ID过滤菜单中选择要重放的ID。

确定仲裁ID

很多人问过我这个问题:如何确定某ID在车上的具体作用。老实说,寻找仲裁ID有时是件非常困难的任务。

不过,好消息是SavvyCAN提供了许多逆向分析工具。其中,我最常使用的一个工具是“Sniffer”,它可以用来“剔除”不活跃的字节并快速识别ID。

例如,让我们考察一下转速表的ID。为了识别转速表的ID,我们可以打开Sniffer并“剔除”不活跃的字节。

假设有20个ID可用,那么,识别它们的方法是:至少关闭其中的三分之一,然后在汽车/ICSim中加大油门,并观察帧的变化情况。重复这个过程,直到只剩下一个ID为止。

下面,让我们看看Sniffer,它是SavvyCAN的逆向工具之一。

在这里,没有发现任何与上述操作相对应的字节变化。因此,我将转向其他ID。

1.png

看来0x244就是我们要找的东西。踩下油门时,请注意字节变化的模式。随着速度的增加,转速表显示了第3和第4个字节的变化(从第0个字节开始计数)。

你可以对ICSim中的所有操作进行同样的处理。

发送自定义帧

SavvyCAN还有另一个功能,就是在发送自定义帧时,可以顺便修改数据包。要做到这一点,您必须通过Send Frames菜单打开Frame Sender。

好了,下面让我们来“愚弄”一下转速表。在上面剔除数据包的例子中,我们发现了转速表的工作原理。

第3和第4字节的值,会随着油门的加大而增加。因此,我们要做的是发送自定义帧,修改字节的值,并观察转速表的变化。

数据栏将由十六进制的数值组成,ID必须是0x123,触发器必须是以ms为单位的数值,每一帧之间的延迟和修改必须由以字节为单位进行。

例如我们想向总线0发送如下数据:ID为0x244(转速表),数据为0x00 0x00 0x00 0x00 0x00,并且将第3个字节的值递增2,所以,在修改过程中,可以表示成 d3= d3 + 2。完成修改后,要确保Enable复选框被选中。

1.png

好了,我们的汽车安全测试系列文章到此就结束了。希望大家能够喜欢,并提出您宝贵的意见和建议。

原文地址:https://hakin9.org/car-hacking-the-ultimate-guide-part-iii-by-anastasis-vasileiadis/

评论

Q

qing16

这个人很懒,没有留下任何介绍

twitter weibo github wechat

随机分类

软件安全 文章:17 篇
Java安全 文章:34 篇
木马与病毒 文章:125 篇
硬件与物联网 文章:40 篇
Web安全 文章:248 篇

扫码关注公众号

WeChat Offical Account QRCode

最新评论

Yukong

🐮皮

H

HHHeey

好的,谢谢师傅的解答

Article_kelp

a类中的变量secret_class_var = "secret"是在merge

H

HHHeey

secret_var = 1 def test(): pass

H

hgsmonkey

tql!!!

目录