当前位置: 首页 > news >正文

车联网安全入门——CAN总线模糊测试

文章目录

  • 车联网安全入门——CAN总线模糊测试
    • 介绍
      • 主要特点
      • 使用场景
    • 模糊测试(Fuzz Testing)
      • CAN 总线模糊测试(CAN Packet Fuzzing)
        • 主要步骤
        • 工具和软件
        • 主要目标
      • Can-Hax
        • 安装
        • 使用
          • 获得指纹
          • 模糊测试
      • SavvyCAN
    • 总结
    • 参考

车联网安全入门——CAN总线模糊测试

🚀🚀最近对于车联网安全非常有兴趣,但是不知道怎么入门,无意间发现了ICSim,可以用来简单模拟一下汽车,学习了一段时间后决定写一下笔记,怕自己学完就忘记了(仅供学习参考)。

介绍

🚀🚀ICSim 是一个用于模拟车辆仪表集群的工具,专门为 SocketCAN 设计。SocketCAN 是 Linux 内核中的一个模块,用于支持控制器局域网(CAN)接口。

主要特点

  1. 仪表集群模拟:ICSim 可以模拟车辆仪表盘,包括速度表、转速表、燃油表等。这对于开发和测试基于 CAN 总线的汽车电子系统非常有用。
  2. 与 SocketCAN 集成:ICSim 与 Linux 的 SocketCAN 接口集成,允许用户通过标准的 SocketCAN 工具与模拟器进行通信和调试。
  3. 教育和开发:它是汽车网络和协议学习的一个极佳工具,可以帮助工程师、研究人员和学生理解 CAN 总线的工作原理和应用。

使用场景

  • 软件开发:在开发车辆电子控制单元(ECU)时,可以使用 ICSim 进行初步测试,而无需实际的车辆硬件。
  • 教学和培训:提供一个虚拟的车辆环境,便于教学 CAN 总线通信。
  • 调试和验证:与实际车辆硬件的连接前,先在模拟环境中验证通信和功能。

🚀🚀项目地址如下所示:

zombieCraig/ICSim: Instrument Cluster Simulator (github.com)

🚀🚀安装教程如下:

车联网安全入门——ICSim模拟器使用-CSDN博客

模糊测试(Fuzz Testing)

🚀🚀模糊测试(Fuzz Testing)是一种用于发现软件漏洞和缺陷的自动化测试技术。其核心思想是通过向系统输入大量随机或半随机的数据,观察系统的响应,从而发现潜在的错误和安全漏洞。模糊测试常用于安全性测试和稳定性测试。

CAN 总线模糊测试(CAN Packet Fuzzing)

🚀🚀CAN Packet Fuzzing 是将模糊测试应用于控制器局域网(CAN)总线的一种技术。CAN 总线是现代汽车中用于电子控制单元(ECU)之间通信的关键协议。模糊测试在这个上下文中的主要目标是通过发送异常或无效的 CAN 数据帧,来发现车辆网络协议栈中的漏洞和缺陷。

主要步骤
  1. 定义测试范围:确定要测试的 CAN 网络的节点和消息类型。
  2. 生成模糊数据:使用随机或半随机的方法生成 CAN 数据帧。这些数据帧可以是完全随机的,也可以在现有合法数据的基础上进行变异。
  3. 发送模糊数据:将生成的模糊数据帧发送到 CAN 总线上,模拟正常通信环境。
  4. 监控系统行为:观察系统对这些模糊数据的响应,记录任何异常行为或系统崩溃。
  5. 分析和报告:分析捕获的异常行为,找出潜在的漏洞,并生成测试报告。
工具和软件
  • ICSim:虽然主要是用于模拟和测试,但也可以配置为进行初步的 CAN 模糊测试。
  • SavvyCAN:用于捕获和分析 CAN 数据,结合其他模糊测试工具一起使用。
  • 其他模糊测试工具:例如 Can-Hax,CANard、CANalyzat0r 以及定制的脚本和程序,可以生成和发送模糊数据帧。
主要目标
  • 安全性测试:发现并修复可能被恶意利用的漏洞。
  • 稳定性测试:确保系统在异常输入情况下的稳定性,避免意外崩溃或错误。
  • 协议验证:验证 CAN 协议实现的健壮性,确保其能正确处理所有类型的数据帧。

Can-Hax

🚀🚀这个工具是我刷视频的时候刷到的,是一个油管博主的开源工具,个人感觉还比较好用,就来介绍一下,当然了SavvyCAN是真的无敌!!!!!!

安装

🚀🚀我们直接从GitHub克隆下来就好了,这点比较的简单:

git clone https://github.com/rybolov/Can-Hax.git
cd Can-Hax
使用

🚀🚀Can-Hax是使用can-utils的指纹和模糊控制器区域网络(CAN)数据包/帧的实用程序,可用于大多数Linux。

🚀🚀CAN有效载荷模板有以下几种:0=在使用中未观察到,H=观察到的十六进制值,N=观察到的十进制值,所以它看起来像00NHHHHH。

获得指纹

🚀🚀我们使用如下命令来获得我们的指纹,xxxxxxx.log是我们使用candump存储下来的日志文件,xxxxxx.json是我们的指纹文件。

python ./can-hax.py --fingerprint --input xxxxxxx.log -d "ICSIM Vehicle Simulator" -o xxxxxx.json

🚀🚀比如我使用如下命令,便得到了以下输出:

python ./can-hax.py --fingerprint --input candump-2024-06-01_104423.log -d "ICSIM Vehicle Simulator" -o can_1_fingerprint.json

🚀🚀输出:

/  __ \                 | | | |           
| /  \/ __ _ _ __ ______| |_| | __ ___  __
| |    / _` | '_ \______|  _  |/ _` \ \/ /
| \__/\ (_| | | | |     | | | | (_| |>  < \____/\__,_|_| |_|     \_| |_/\__,_/_/\_\
Can-Hax: Fingerprint and fuzz CAN traffic.Testing if candump-2024-06-01_104423.log is a file.
candump-2024-06-01_104423.log is most definitely a file.Found cansend. We can use this to send CAN packets.
First 3 lines read in as:
(1717253063.833375) vcan0 161#000005500108001C
(1717253063.833432) vcan0 191#010010A141000B
(1717253063.833439) vcan0 164#0000C01AA8000004Date of last log line: 2024.06.01
Found 37 CAN IDs.
{"date": "2024.06.01","description": "ICSIM Vehicle Simulator","fingerprints": {"039": "00NH","095": "N0000NHN000000NN","133": "00000000HN","136": "000N0000000000NH","13A": "00000000000000NH","13F": "0000000N000000NH","143": "NHNH00HH","158": "00000000000000NH","161": "00000NN00N0N00NH","164": "0000H0NHHN0000NN","166": "H0NN00NN","17C": "00000000N00000NN","183": "000000NH0000N0NH","188": "00000000","18E": "0000NH","191": "0N00N0HNNN00NH","19B": "00000H000000","1A4": "0000000N000000NH","1AA": "NHHH00000000NNNH","1B0": "000H0000000NNN","1CF": "N00N000000NH","1D0": "000000000000000H","1DC": "0N0000NH","21E": "0NHNNNNNNN0NNH","244": "0000000NHH","294": "0N0H000NHHNH00NH","305": "N0NN","309": "00000000000000HN","320": "0000NN","324": "NNNN000000000HNH","333": "000000000000NH","37C": "HH00HH000NNH00NH","405": "00000N00000000NH","40C": "0NNHNNNHNNNNNNNH","428": "0N0N0000NNNHNH","454": "NNHHNN","5A1": "NN0000000000NNNH"},"version": "2"
}
Done. Total realtime was 0:00:01.

🚀🚀我们来简单介绍一下里面的数据大概是什么意思:

 "133": "00000000HN",

🚀🚀133代表的是can总线ID号,后面0代表的是从来没有变化,一直是0;H表示的是十六进制,也就是说,这一位出现过十六进制数;N代表十进制,也就是这一位没有出现过十六进制的数。

模糊测试

🚀🚀接下来我们开始进行模糊测试了,这个就是全部模糊(可能需要很长时间,可以缩短时延),会一个一个进行测试。

python ./can-hax.py --fuzz --input xxxxxx.json --can vcan0
_____                   _   _            
/  __ \                 | | | |           
| /  \/ __ _ _ __ ______| |_| | __ ___  __
| |    / _` | '_ \______|  _  |/ _` \ \/ /
| \__/\ (_| | | | |     | | | | (_| |>  < \____/\__,_|_| |_|     \_| |_/\__,_/_/\_\
Can-Hax: Fingerprint and fuzz CAN traffic.Testing if can_1_fingerprint.json is a file.
can_1_fingerprint.json is most definitely a file.Found cansend. We can use this to send CAN packets.
CANID 161 00000NN00N0N00NH complexity is 7
Sending CAN frame:  161#0000000000000000
Sending CAN frame:  161#0000000000000001

–input,–can可以使用-i和-c简化。

🚀🚀除了全部测试之外,我们还可以测试特定的CAN ID,我们可以指定–canid。

python ./can-hax.py --fuzz --canid 19B --input can_1_fingerprint.json --can vcan0
 _____                   _   _            
/  __ \                 | | | |           
| /  \/ __ _ _ __ ______| |_| | __ ___  __
| |    / _` | '_ \______|  _  |/ _` \ \/ /
| \__/\ (_| | | | |     | | | | (_| |>  < \____/\__,_|_| |_|     \_| |_/\__,_/_/\_\
Can-Hax: Fingerprint and fuzz CAN traffic.Testing if can_1_fingerprint.json is a file.
can_1_fingerprint.json is most definitely a file.Found cansend. We can use this to send CAN packets.
CANID 19B 00000H000000 complexity is 2
Sending CAN frame:  19B#000000000000

-timing 1,表示的是时延,然后时延为一秒,使用命令如下所示

python ./can-hax.py --fuzz --canid 19B --input can_1_fingerprint.json --can vcan0 --timing 1

🚀🚀我们还可以使用–Quick或–Superquick快速指定一组简化的可能值。

python ./can-hax.py --fuzz --canid 19B --input can_1_fingerprint.json --can vcan0 --timing 1 --quick
 _____                   _   _            
/  __ \                 | | | |           
| /  \/ __ _ _ __ ______| |_| | __ ___  __
| |    / _` | '_ \______|  _  |/ _` \ \/ /
| \__/\ (_| | | | |     | | | | (_| |>  < \____/\__,_|_| |_|     \_| |_/\__,_/_/\_\
Can-Hax: Fingerprint and fuzz CAN traffic.Testing if can_1_fingerprint.json is a file.
can_1_fingerprint.json is most definitely a file.Found cansend. We can use this to send CAN packets.
CANID 19B 00000H000000 complexity is 2
Sending CAN frame:  19B#000000000000
Sending CAN frame:  19B#000001000000
Sending CAN frame:  19B#000009000000
Sending CAN frame:  19B#00000A000000
Sending CAN frame:  19B#00000B000000
Sending CAN frame:  19B#00000F000000
Running zeroize now.

Quick是只有0,1,9,A,B,F这几个数,然后Superquick只有0,9,F这几个极端的值。

🚀🚀自适应测试计算有效负载模板复杂程度的指标,并使用一组简化的可能值。

python ./can-hax.py --fuzz --adaptive --input can_1_fingerprint.json --can vcan0

🚀🚀这个就是自适应,但是我一直是递增一,所以感觉不是很好用,我们搭配上面那些就能进行简单的模糊测试了。

SavvyCAN

🚀🚀这个就是直接模糊测试了,比较无脑,当然我们也可以自己设置一些规则,但是我在测试的时候就已经把我的车门给打开了,裂开,太强啦!!!

在这里插入图片描述

总结

🚀🚀CAN 总线模糊测试是一种强大的方法,用于发现和修复汽车网络系统中的安全漏洞和稳定性问题。通过系统地生成和发送异常 CAN 数据帧,测试人员可以识别出潜在的缺陷,从而增强车辆电子系统的安全性和可靠性。结合 ICSim, Can-Hax和 SavvyCAN 等工具,可以有效地进行 CAN 总线模糊测试,并为车辆网络安全提供坚实的保障。

参考

https://www.youtube.com/watch?v=fXTJ6TH32Vg

相关文章:

车联网安全入门——CAN总线模糊测试

文章目录 车联网安全入门——CAN总线模糊测试介绍主要特点使用场景 模糊测试&#xff08;Fuzz Testing&#xff09;CAN 总线模糊测试&#xff08;CAN Packet Fuzzing&#xff09;主要步骤工具和软件主要目标 Can-Hax安装使用获得指纹模糊测试 SavvyCAN 总结参考 车联网安全入门…...

JDBC常见异常(10)—预编译模式下占位符动态排序字段失效

场景需求 需要根据不同的列进行对应的排序操作&#xff0c;实现动态列名排序 类似&#x1f41f;动态查询或更新 但是JDBC预编译模式下占位符的排序字段失效 SQL语句 分页查询 select * from (select t.*, rownum rn from(select * from emp order by empno desc) t where …...

爬虫入门教程:爬虫概述

在数字化时代&#xff0c;数据已经成为我们生活和工作中不可或缺的一部分。而如何高效、准确地获取这些数据&#xff0c;成为了许多领域面临的共同问题。今天&#xff0c;我们就来一起探讨一下爬虫技术&#xff0c;这个能够自动从互联网上抓取信息的神奇工具。 一、什么是爬虫…...

【工具】windows下VMware17解锁mac安装选项(使用unlocker427)

目录 0.简介 1.环境 2.安装前后对比 3.详细安装过程 3.1 下载unlocker427 1&#xff09;下载地址 2&#xff09;下载unlocker427.zip 3&#xff09;解压之后是这样的 4&#xff09;复制iso中的两个文件到你本地的VMware的安装目录下 5&#xff09;复制windows下的所有…...

JS 自测题 —— 手写 class

现有三种菜单&#xff1a;button 类型&#xff0c;select 类型&#xff0c;modal 类型。 共同特点 title icon 属性isDisabled 方法&#xff08;可直接返回 false&#xff09;exec 方法&#xff0c;执行菜单的逻辑 不同 button 类型&#xff0c;执行 exec 时打印 helloselect …...

Keras深度学习框架实战(7):使用YOLOV8和KerasCV进行高效的图像物体识别

1、绪论 1.1 KerasCV简介 KerasCV是一个专注于计算机视觉任务的模块化组件库&#xff0c;基于Keras构建&#xff0c;可与TensorFlow、JAX或PyTorch等框架配合使用。 概念与定位&#xff1a; KerasCV是Keras API的水平扩展&#xff0c;提供了一系列新的第一方Keras对象&#x…...

Django视图层探索:GET/POST请求处理、参数传递与响应方式详解

系列文章目录 Django入门全攻略&#xff1a;从零搭建你的第一个Web项目Django ORM入门指南&#xff1a;从概念到实践&#xff0c;掌握模型创建、迁移与视图操作Django ORM实战&#xff1a;模型字段与元选项配置&#xff0c;以及链式过滤与QF查询详解Django ORM深度游&#xff…...

磁盘配额的具体操作

磁盘配额&#xff1a; linux的磁盘空间有两个方面&#xff1a;第一个是物理空间&#xff0c;也就是磁盘的容量 第二个inode号耗尽&#xff0c;也无法写入 linux根分区&#xff1a;根分区的空间完全耗尽&#xff0c;服务程序崩溃&#xff0c;系统也无法启动了。 为了防止有人…...

STM 32_HAL_SDIO_SD卡

STM32的SDIO&#xff08;Secure Digital Input Output&#xff09; 接口是一种用于SD卡和MMC卡的高速数据传输接口。它允许STM32微控制器与多种存储卡和外设进行通信&#xff0c;支持多媒体卡&#xff08;MMC卡&#xff09;、SD存储卡、SDI/O卡和CE-ATA设备。STM32的SDIO控制器…...

人脸识别系统之动态人脸识别

二&#xff0e;动态人脸识别 1.摄像头人脸识别 1.1.导入资源包 import dlib import cv2 import face_recognition from PIL import Image, ImageTk import tkinter as tk import os注&#xff1a;这些导入语句允许您在代码中使用这些库和模块提供的功能&#xff0c;例如创建…...

Opencv实用笔记(一): 获取并绘制JSON标注文件目标区域(可单独保存目标小图)

文章目录 背景代码 背景 如果我们想要根据json标注文件&#xff0c;获取里面的指定目标的裁剪区域&#xff0c;那么我们可以根据以下代码来实现&#xff08;也可以校验标注情况&#xff09;。 代码 from tqdm import tqdm import os, json, cv2, copy import numpy as npdef…...

LabVIEW在高校电力电子实验中的应用

概述&#xff1a;本文介绍了如何利用LabVIEW优化高校电力电子实验&#xff0c;通过图形化编程实现参数调节、实时数据监控与存储&#xff0c;并与Simulink联动&#xff0c;提高实验效率和数据处理能力。 需求背景高校实验室在进行电机拖动和电力电子实验时&#xff0c;通常使用…...

rtsp python实现

1. rtsp rtp rtcp https://hope-wisdom.blog.csdn.net/article/details/138259027 2.rtsp加速 https://mp.weixin.qq.com/s/0C1b-8pFw0HaE1xpNbrxxw 3. 实现了一部分获取数据 import socket import base64 import threading import struct# 定义 RTSP 请求 def send_rtsp_…...

RHCE (Linux进阶) Ubuntu 操作系统安装教程

一、在官网下载iso镜像文件 下载地址&#xff1a; https://cn.ubuntu.com/download/server/step1#downloads&#xff08;下载最新的Ubuntu 20.04 LTS服务器版本&#xff09; 二、VMware安装配置过程 基本安装过程 1、新建虚拟机 2、选择典型即可 3、设置下载好的Ubuntu对应路…...

vue-router 源码分析——1. 路由匹配

这是对vue-router 3 版本的源码分析。 本次分析会按以下方法进行&#xff1a; 按官网的使用文档顺序&#xff0c;围绕着某一功能点进行分析。这样不仅能学习优秀的项目源码&#xff0c;更能加深对项目的某个功能是如何实现的理解。这个对自己的技能提升&#xff0c;甚至面试时…...

百度云下载不限速方式集合

使用解析网站配合Motrix工具软件 下载Motrix工具&#xff1a;Motrix下载链接打开解析网址&#xff1a;解析网站获取&#xff0c;将百度网盘链接粘贴到解析网站&#xff0c;获取下载链接。在Motrix中配置Aria2 RPC地址&#xff1a;ws://localhost:16800/jsonrpc开始下载&#x…...

2024年6月1日 (周六) 叶子游戏新闻

Embracer探讨单机游戏大作涨价超过70美元的可能性在Embracer集团等待公布新公司名称的同时&#xff0c;他们对游戏大作的价格上涨做出了评论。几年来&#xff0c;游戏大作的价格已经达到了70美元的门槛。Embracer集团的CEO Lars Wingefors在采访中表示&#xff0c;电子游戏行业…...

MathorCup挑战赛获奖名单公示,第九届研讨会及颁奖典礼即将举行

近日&#xff0c;备受瞩目的2024年第十四届MathorCup高校数学建模挑战赛圆满落幕&#xff0c;竞赛组委会于近日公示了获奖名单初稿。本届竞赛自2024年4月12日至16日举行&#xff0c;吸引了来自全国740所高校的9119支队伍踊跃参与&#xff0c;其中包括本科生、研究生、专科生及教…...

vulnhub靶机xptosystem

下载地址&#xff1a;https://download.vulnhub.com/xpto/xptosystem.ova 主机发现 端口扫描 服务扫描 漏洞扫描 看一下web 目录爆破 那不用说肯定看看robots.txt 要检查readme去看看 看不懂 这个是靶场吧很像 在最后看着挺像url路径的 还真是&#xff0c;我直接base64 坏了还…...

Spring Boot详解:深入了解与实践

文章目录 1. Spring Boot简介1.1 什么是Spring Boot&#xff1f;1.2 Spring Boot的历史背景1.3 Spring Boot的核心特点 2. Spring Boot的核心概念2.1 自动配置2.1.1 自动配置原理2.1.2 自定义配置 2.2 Spring Boot Starter2.3 Spring Boot CLI 3. Spring Boot的主要功能模块3.1…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战&#xff1a;腾讯云IM群组成员管理&#xff08;增删改查&#xff09; 一、前言 在社交类App开发中&#xff0c;群组成员管理是核心功能之一。本文将基于UniApp框架&#xff0c;结合腾讯云IM SDK&#xff0c;详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT&#xff0c;橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版&#xff1a;职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

QT3D学习笔记——圆台、圆锥

类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体&#xff08;对象或容器&#xff09;QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质&#xff08;定义颜色、反光等&#xff09;QFirstPersonC…...

mac 安装homebrew (nvm 及git)

mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用&#xff1a; 方法一&#xff1a;使用 Homebrew 安装 Git&#xff08;推荐&#xff09; 步骤如下&#xff1a;打开终端&#xff08;Terminal.app&#xff09; 1.安装 Homebrew…...

STM32---外部32.768K晶振(LSE)无法起振问题

晶振是否起振主要就检查两个1、晶振与MCU是否兼容&#xff1b;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容&#xff08;CL&#xff09;与匹配电容&#xff08;CL1、CL2&#xff09;的关系 2. 如何选择 CL1 和 CL…...

SpringAI实战:ChatModel智能对话全解

一、引言&#xff1a;Spring AI 与 Chat Model 的核心价值 &#x1f680; 在 Java 生态中集成大模型能力&#xff0c;Spring AI 提供了高效的解决方案 &#x1f916;。其中 Chat Model 作为核心交互组件&#xff0c;通过标准化接口简化了与大语言模型&#xff08;LLM&#xff0…...