像电影中一样黑客入侵你的汽车
作者:Sec-Labs | 发布时间:
项目地址
https://github.com/duraki/jeep
Jeep
相关技术点
- CAN接口
- vxcan
- Metasploit
项目用途
Jeep是一个类似于Metasploit的CAN接口框架,主要应用于车辆和汽车系统。Jeep的作用是允许用户以Wireshark方式与设备进行交互,实现嗅探和回复技术。Jeep还提供了可重用和快速模块编写的API头文件。
Jeep使用C语言编写,整个框架非常不稳定。为了创建一个CAN总线的虚拟网络接口,Jeep使用了vxcan,需要在Raspberry Pi等SBC上进行安装,并设置默认配置,例如SSH和VNC。
Jeep的作用是帮助用户测试车辆和汽车系统中的安全漏洞,以此来保证系统的安全性。
Jeep
jeep 是一个类似于 Metasploit 的 CAN 接口框架,主要用于车辆和汽车系统。这个工具应该允许你以 Wireshark 的方式与你的设备进行交互,实现嗅探和回复技术。还有一个 API 头文件可供重复使用和更快的模块编写。
代码主要以 Bosch 标准为基础进行伪代码文档编写。整个框架都是用 C 写的,非常不稳定。
安装
对于 GNU/Linux 操作系统
$ git clone https://github.com/duraki/jeep
$ cd jeep
$ make all
对于基于 XNU 的操作系统
$ docker-compose up
$ docker exec -it jeep /bin/bash
构建并编译程序
$ make all
硬件
为了创建一个进行 CAN 总线传输的虚拟网络接口,我们使用了 vxcan 实现的外部硬件模块。此项目的先决条件是树莓派 (已测试) 或 LeMaker 的 SBC (未经测试) 这样的 SBC。安装 Raspbian 操作系统并设置默认配置,如 SSH 和 VNC,通过 rasp-conf 完成。
阅读更多关于 Linux 虚拟网络接口 的内容。默认的 Docker 网络接口位于 192.168.65.0/24,使用 IPAM 和 subnet: 127.17.0.0/16/gateway: 172.17.0.1。
vxcan 是一个 Linux 内核驱动程序/模块,可用于在网络命名空间中设置虚拟 CAN 隧道。例如,它允许你在主机上生成虚拟 CAN 帧并将其发送到容器;或者在 USB-CAN 适配器和容器之间转发真实的 CAN 流量,而不会将整个主机网络暴露给容器。
vcan-interface 容器位于 172.17.0.2/16。Docker 自动创建桥接网络的子网和网关,并自动将容器添加到其中。在同一网络上的任何容器都可以通过 IP 地址相互通信。你必须使用 --link 选项在 docker run 命令中连接容器。
你可以通过以下方式创建一个隔离的桥接:
$ docker network create --driver bridge isolated_bridge
# ... hash ...
$ docker network inspect isolated_bridge
# ... "Subnet": "172.20.0.0/16",
# ... "Gateway": "172.20.0.1"
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
00478aaa04a5 isolated_bridge bridge local
...
然后设置其他要求,如用于跨命名空间通信的 vcan 隧道和驱动程序:
pi@raspberrypi:~ $ sudo apt install raspberrypi-kernel-headers can-utils
pi@raspberrypi:~ $ sudo apt install git bc bison flex libssl-dev make
在你的树莓派磁盘上克隆此项目 (通过 scp 或 rsync),并执行以下操作:
# => 从你的 Host OS
$ scp -r dev/jeep pi@raspberrypi.local:/home/pi/jeep
# => 在你的 SCB 上
pi@raspberrypi:~ $ cd /home/pi/jeep/drivers/vxcan/
pi@raspberrypi:~ $ make clean && make all
CC [M] /home/pi/jeep/drivers/vxcan/vxcan.o
...
pi@raspberrypi:~ $ sudo chown root:root vxcan.ko
sudo chmod 0644 vxcan.ko
sudo mv vxcan.ko "/lib/modules/$(uname -r)/kernel/net/can/"
sudo depmod -A
sudo modprobe vxcan
sudo modprobe can-gw
你现在应该可以在 dmesg -w 中看到 vcan 隧道驱动程序已被加载:
$ dmesg -w
[ 758.020199] vxcan: loading out-of-tree module taints kernel.
[ 758.020640] vxcan: Virtual CAN Tunnel driver
$ modinfo vxcan # => 显示内核/so 模块信息
设置模块自动加载
我们还需要在 /etc/modules-load.d 中添加一个文件,以便在启动时加载模块。创建 /etc/modules-load.d/can.conf 并添加以下内容:
# cat /etc/modules-load.d/can.conf
vxcan
can-gw
硬件环境的烟雾测试
在 Host OS 上的单独终端中,启动一个容器并在容器内安装 canutils:
$ docker run --rm --net=isolated_bridge --net=host -it --name vcan-interface ubuntu:20.04
# ... 20.04: Pulling from library/ubuntu
# ... 3b65ec22a9e9: Pull complete
root@8b60433051c0:/# apt-get update && apt-get install -y can-utils iproute2 -y
# ...
设置 vxcan 网络并将其一端移动到容器的网络命名空间中:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8b60433051c0 ubuntu:20.04 "bash" 2 minutes ago Up 2 minutes cantest
49de7daaded5 jeep_jeep "bash" 8 hours ago Up 7 seconds jeep
移除 vxcan 内核模块
$ rmmod squashfs.ko $ rm -rf /lib/modules//kernel/net/can/vxcan.ko
项目介绍
jeep 是基于 Bosch 在早期定义的 CAN 协议实现的。通过使用 jeep 并与您的汽车配合使用,您可以从中提取有趣的信息,或尝试使用各种功能,包括解锁您的汽车或甚至窃取他人的汽车!(我不建议这样做,我再次重申,这只是用于教育目的的项目)。
我曾经谈过车辆黑客技术,并撰写了一些研究论文,您可以在 YouTube 上观看。jeep 在2015年末获得了第一个吸引力,当时我有最多的时间进行这些研究。它都写在纸上和一些 LaTeX 文档中。第一个开源发生在我在 lobsters 上写了一篇文章。
我继续开发
jeep,它是一种类似于 WireShark 的东西,但是用于车辆/汽车系统(即:用于您的汽车的黑客工具)。它基于 CAN 协议,应该支持 SocketCAN 中的 fd(ext frame struct)。我写这篇文章的原因是因为这很有趣,而且我需要一个可扩展的 can-utils。Jeep 应该支持通过具有内置 API 的模块进行扩展。项目的目标是创建类似于 Metasploit 的系统并保持开源。本周我正在开发嗅探模块。
该软件需要您使用基于 UNIX 的 Linux 操作系统。该软件在 RedHat EL 中进行了测试和开发,而某些功能在 CentOS 派生版本中无法工作,但在例如 Ubuntu 中可以。这完全取决于您的内核和 SocketCAN 版本。
如果您毁了您的汽车,您将负责。
项目状态
该程序处于非常早期的阶段。我目前正在开发 API 和 sniff 模块,后者应该建立在相同的 API 之上。随后,我将通过最新模块扩展此框架。
如果您是 C 开发人员,请随意加入并贡献您的代码,我们非常欢迎您的参与。