像电影中一样黑客入侵你的汽车

作者: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

在你的树莓派磁盘上克隆此项目 (通过 scprsync),并执行以下操作:

# => 从你的 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 开发人员,请随意加入并贡献您的代码,我们非常欢迎您的参与。

资源

标签:思路分享, 学习笔记, 物联网安全, IOT安全, 车载安全