原文始发于跳跳糖(qing16):汽车安全测试终极指南,第三篇(译文)
在上两篇文章中,我们介绍了如何安装汽车模拟软件,以及进行安全测试所需的其他软硬件。在今天的文章中,我们将详细介绍安全测试过程。
首先,我们将为大家介绍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后,我们可以看到:
我们建议大家不妨花点时间来熟悉SavvyCAN的界面。如果您想在Macchina M2或其他兼容的硬件上使用SavvyCAN,无需额外安装任何东西。
我们打算将SavvyCAN与ICSim搭配使用,所以,我们还需要安装qtserialbus。
打开SavvyCAN窗口后,导航到Connection -> Open Connection Window -> Add New Connection选项,会发现qtserialbus是处于关闭状态的。
为了在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
注意,安装过程可能需要一些时间,请耐心等待。
安装就绪后,请启动ICSim模拟器,以及除can-utils以外的所有工具——在这里,我们不会借助于can-utils来记录CAN通信,而是使用SocketCAN。
启动SavvyCAN
启动我们刚刚编译好的SavvyCAN,而不是我们之前下载的appimage文件。
请记住,如果您想在真正的汽车上运行它,而不是使用qtserialbus的话,则可以直接使用appimage文件,而不必费劲巴拉地编译SavvyCAN了。
$ cd SavvyCAN $ ./SavvyCAN
现在你可以打开登录窗口,这时会发现QT SerialBus已经启用。
将vcan0添加到SocketCAN上
要为SavvyCAN创建一个新的连接,可以:
打开SavvyCAN
选择LOG IN -> Open a login window -> Add a new device connection选项
选择具有以下设置的连接
连接类型为QT SerialBus Devices
串行总线设备类型为socketcan
端口为vcan0
然后创建一个新的连接。
一旦创建好连接,在SavvyCAN窗口中就能看到CAN帧了——这说明一切正常。
为了更好地理解SavvyCAN,让我们重复之前用can-utils所做的事情,但这次是用SavvyCAN。
SavvyCAN提供了一个漂亮、直观的界面来完成基于ID的帧过滤。您可以从右窗格中剔除不需要的ID,这样,就可以快速识别相关的ID。
另一个非常好的功能是“替换模式”。如果启用此选项,将以相同的顺序替换帧。
重放攻击
使用SavvyCAN完成重放攻击要容易得多:直接在Send Frames菜单中选择playback选项即可。此外,您可以从文件中上传数据,或者直接上传记录的数据,甚至可以从ID过滤菜单中选择要重放的ID。
确定仲裁ID
很多人问过我这个问题:如何确定某ID在车上的具体作用。老实说,寻找仲裁ID有时是件非常困难的任务。
不过,好消息是SavvyCAN提供了许多逆向分析工具。其中,我最常使用的一个工具是“Sniffer”,它可以用来“剔除”不活跃的字节并快速识别ID。
例如,让我们考察一下转速表的ID。为了识别转速表的ID,我们可以打开Sniffer并“剔除”不活跃的字节。
假设有20个ID可用,那么,识别它们的方法是:至少关闭其中的三分之一,然后在汽车/ICSim中加大油门,并观察帧的变化情况。重复这个过程,直到只剩下一个ID为止。
下面,让我们看看Sniffer,它是SavvyCAN的逆向工具之一。
在这里,没有发现任何与上述操作相对应的字节变化。因此,我将转向其他ID。
看来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复选框被选中。
好了,我们的汽车安全测试系列文章到此就结束了。希望大家能够喜欢,并提出您宝贵的意见和建议。
原文地址:https://hakin9.org/car-hacking-the-ultimate-guide-part-iii-by-anastasis-vasileiadis/