车联网安全入门——CAN总线模糊测试
文章目录
- 车联网安全入门——CAN总线模糊测试
- 介绍
- 主要特点
- 使用场景
- 模糊测试(Fuzz Testing)
- CAN 总线模糊测试(CAN Packet Fuzzing)
- 主要步骤
- 工具和软件
- 主要目标
- Can-Hax
- 安装
- 使用
- 获得指纹
- 模糊测试
- SavvyCAN
- 总结
- 参考
车联网安全入门——CAN总线模糊测试
🚀🚀最近对于车联网安全非常有兴趣,但是不知道怎么入门,无意间发现了ICSim,可以用来简单模拟一下汽车,学习了一段时间后决定写一下笔记,怕自己学完就忘记了(仅供学习参考)。
介绍
🚀🚀ICSim 是一个用于模拟车辆仪表集群的工具,专门为 SocketCAN 设计。SocketCAN 是 Linux 内核中的一个模块,用于支持控制器局域网(CAN)接口。
主要特点
- 仪表集群模拟:ICSim 可以模拟车辆仪表盘,包括速度表、转速表、燃油表等。这对于开发和测试基于 CAN 总线的汽车电子系统非常有用。
- 与 SocketCAN 集成:ICSim 与 Linux 的 SocketCAN 接口集成,允许用户通过标准的 SocketCAN 工具与模拟器进行通信和调试。
- 教育和开发:它是汽车网络和协议学习的一个极佳工具,可以帮助工程师、研究人员和学生理解 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 数据帧,来发现车辆网络协议栈中的漏洞和缺陷。
主要步骤
- 定义测试范围:确定要测试的 CAN 网络的节点和消息类型。
- 生成模糊数据:使用随机或半随机的方法生成 CAN 数据帧。这些数据帧可以是完全随机的,也可以在现有合法数据的基础上进行变异。
- 发送模糊数据:将生成的模糊数据帧发送到 CAN 总线上,模拟正常通信环境。
- 监控系统行为:观察系统对这些模糊数据的响应,记录任何异常行为或系统崩溃。
- 分析和报告:分析捕获的异常行为,找出潜在的漏洞,并生成测试报告。
工具和软件
- 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总线模糊测试介绍主要特点使用场景 模糊测试(Fuzz Testing)CAN 总线模糊测试(CAN Packet Fuzzing)主要步骤工具和软件主要目标 Can-Hax安装使用获得指纹模糊测试 SavvyCAN 总结参考 车联网安全入门…...
JDBC常见异常(10)—预编译模式下占位符动态排序字段失效
场景需求 需要根据不同的列进行对应的排序操作,实现动态列名排序 类似🐟动态查询或更新 但是JDBC预编译模式下占位符的排序字段失效 SQL语句 分页查询 select * from (select t.*, rownum rn from(select * from emp order by empno desc) t where …...
爬虫入门教程:爬虫概述
在数字化时代,数据已经成为我们生活和工作中不可或缺的一部分。而如何高效、准确地获取这些数据,成为了许多领域面临的共同问题。今天,我们就来一起探讨一下爬虫技术,这个能够自动从互联网上抓取信息的神奇工具。 一、什么是爬虫…...
【工具】windows下VMware17解锁mac安装选项(使用unlocker427)
目录 0.简介 1.环境 2.安装前后对比 3.详细安装过程 3.1 下载unlocker427 1)下载地址 2)下载unlocker427.zip 3)解压之后是这样的 4)复制iso中的两个文件到你本地的VMware的安装目录下 5)复制windows下的所有…...
JS 自测题 —— 手写 class
现有三种菜单:button 类型,select 类型,modal 类型。 共同特点 title icon 属性isDisabled 方法(可直接返回 false)exec 方法,执行菜单的逻辑 不同 button 类型,执行 exec 时打印 helloselect …...
Keras深度学习框架实战(7):使用YOLOV8和KerasCV进行高效的图像物体识别
1、绪论 1.1 KerasCV简介 KerasCV是一个专注于计算机视觉任务的模块化组件库,基于Keras构建,可与TensorFlow、JAX或PyTorch等框架配合使用。 概念与定位: KerasCV是Keras API的水平扩展,提供了一系列新的第一方Keras对象&#x…...
Django视图层探索:GET/POST请求处理、参数传递与响应方式详解
系列文章目录 Django入门全攻略:从零搭建你的第一个Web项目Django ORM入门指南:从概念到实践,掌握模型创建、迁移与视图操作Django ORM实战:模型字段与元选项配置,以及链式过滤与QF查询详解Django ORM深度游ÿ…...
磁盘配额的具体操作
磁盘配额: linux的磁盘空间有两个方面:第一个是物理空间,也就是磁盘的容量 第二个inode号耗尽,也无法写入 linux根分区:根分区的空间完全耗尽,服务程序崩溃,系统也无法启动了。 为了防止有人…...
STM 32_HAL_SDIO_SD卡
STM32的SDIO(Secure Digital Input Output) 接口是一种用于SD卡和MMC卡的高速数据传输接口。它允许STM32微控制器与多种存储卡和外设进行通信,支持多媒体卡(MMC卡)、SD存储卡、SDI/O卡和CE-ATA设备。STM32的SDIO控制器…...
人脸识别系统之动态人脸识别
二.动态人脸识别 1.摄像头人脸识别 1.1.导入资源包 import dlib import cv2 import face_recognition from PIL import Image, ImageTk import tkinter as tk import os注:这些导入语句允许您在代码中使用这些库和模块提供的功能,例如创建…...
Opencv实用笔记(一): 获取并绘制JSON标注文件目标区域(可单独保存目标小图)
文章目录 背景代码 背景 如果我们想要根据json标注文件,获取里面的指定目标的裁剪区域,那么我们可以根据以下代码来实现(也可以校验标注情况)。 代码 from tqdm import tqdm import os, json, cv2, copy import numpy as npdef…...
LabVIEW在高校电力电子实验中的应用
概述:本文介绍了如何利用LabVIEW优化高校电力电子实验,通过图形化编程实现参数调节、实时数据监控与存储,并与Simulink联动,提高实验效率和数据处理能力。 需求背景高校实验室在进行电机拖动和电力电子实验时,通常使用…...
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镜像文件 下载地址: https://cn.ubuntu.com/download/server/step1#downloads(下载最新的Ubuntu 20.04 LTS服务器版本) 二、VMware安装配置过程 基本安装过程 1、新建虚拟机 2、选择典型即可 3、设置下载好的Ubuntu对应路…...
vue-router 源码分析——1. 路由匹配
这是对vue-router 3 版本的源码分析。 本次分析会按以下方法进行: 按官网的使用文档顺序,围绕着某一功能点进行分析。这样不仅能学习优秀的项目源码,更能加深对项目的某个功能是如何实现的理解。这个对自己的技能提升,甚至面试时…...
百度云下载不限速方式集合
使用解析网站配合Motrix工具软件 下载Motrix工具:Motrix下载链接打开解析网址:解析网站获取,将百度网盘链接粘贴到解析网站,获取下载链接。在Motrix中配置Aria2 RPC地址:ws://localhost:16800/jsonrpc开始下载&#x…...
2024年6月1日 (周六) 叶子游戏新闻
Embracer探讨单机游戏大作涨价超过70美元的可能性在Embracer集团等待公布新公司名称的同时,他们对游戏大作的价格上涨做出了评论。几年来,游戏大作的价格已经达到了70美元的门槛。Embracer集团的CEO Lars Wingefors在采访中表示,电子游戏行业…...
MathorCup挑战赛获奖名单公示,第九届研讨会及颁奖典礼即将举行
近日,备受瞩目的2024年第十四届MathorCup高校数学建模挑战赛圆满落幕,竞赛组委会于近日公示了获奖名单初稿。本届竞赛自2024年4月12日至16日举行,吸引了来自全国740所高校的9119支队伍踊跃参与,其中包括本科生、研究生、专科生及教…...
vulnhub靶机xptosystem
下载地址:https://download.vulnhub.com/xpto/xptosystem.ova 主机发现 端口扫描 服务扫描 漏洞扫描 看一下web 目录爆破 那不用说肯定看看robots.txt 要检查readme去看看 看不懂 这个是靶场吧很像 在最后看着挺像url路径的 还真是,我直接base64 坏了还…...
Spring Boot详解:深入了解与实践
文章目录 1. Spring Boot简介1.1 什么是Spring Boot?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…...
批量图片添加随机边框工具:Windows 操作指南与场景说明
本文介绍如何在 Windows 桌面上批量为图片加边框,并重点说明「随机边框」模式与固定样式模式的差异。工具名称:【批量图片添加随机边框】。适用场景电商、社群物料需要统一「有框」观感,但不希望每张边框完全一样。文件夹内大量 JPG、PNG、GI…...
Pixel Aurora Engine应用场景:复古游戏机主题网站AI生成视觉系统集成
Pixel Aurora Engine应用场景:复古游戏机主题网站AI生成视觉系统集成 1. 项目背景与核心价值 Pixel Aurora Engine(像素极光引擎)是一款专为复古游戏风格设计的AI视觉生成系统。它巧妙地将现代AI技术与怀旧像素美学相结合,为网站…...
保姆级教程:用微信小程序NFC读写M1门禁卡(附完整代码与认证避坑指南)
微信小程序NFC开发实战:M1门禁卡读写全流程解析 周末在改造小区老旧门禁系统时,我发现传统IC卡存在易丢失、难管理的痛点。借助微信小程序的NFC能力,我们完全可以用手机替代实体门禁卡。本文将手把手带你实现M1卡的读写操作,重点…...
ZYNQ调试别再傻等Program FPGA了!一个函数搞定PL端软复位(Vitis 2021.2)
ZYNQ高效调试:用软复位替代FPGA重编程的技术解析 调试ZYNQ项目时,最令人抓狂的莫过于每次修改代码后漫长的Program FPGA等待。作为一名长期与ZYNQ打交道的工程师,我深知这种重复操作不仅消耗时间,更会加速Flash芯片的老化。本文将…...
PPTist:4大突破性功能重塑Web端演示文稿创作体验
PPTist:4大突破性功能重塑Web端演示文稿创作体验 【免费下载链接】PPTist PowerPoint-ist(/pauəpɔintist/), An online presentation application that replicates most of the commonly used features of MS PowerPoint, allowing for the…...
HarmonyOS 6学习:Canvas实现圆角矩形进度条
在HarmonyOS应用开发中,进度条是展示任务进度、加载状态和数据可视化的重要组件。虽然系统提供了Progress组件,但在需要高度定制化、复杂视觉效果或特殊交互的场景下,开发者常常面临以下困境:样式限制:Progress组件难以…...
数据仓库大规模数据处理:海量存储与高效访问实战优化方案
数据仓库大规模数据处理:海量存储与高效访问实战优化方案一、引言二、核心挑战:大规模数据带来的3大问题三、整体解决方案流程图(海量数据存储与访问)四、一、大规模数据存储优化方案(核心)4.1 方案1&#…...
7大能力解锁:让浏览器成为你的全能Markdown工作站
7大能力解锁:让浏览器成为你的全能Markdown工作站 【免费下载链接】markdown-viewer Markdown Viewer / Browser Extension 项目地址: https://gitcode.com/gh_mirrors/ma/markdown-viewer 据开发者生态调研显示,超过90%的技术文档工作者面临本地…...
Gerbv:免费开源Gerber文件查看器的终极指南,PCB设计验证的得力助手
Gerbv:免费开源Gerber文件查看器的终极指南,PCB设计验证的得力助手 【免费下载链接】gerbv Maintained fork of gerbv, carrying mostly bugfixes 项目地址: https://gitcode.com/gh_mirrors/ge/gerbv 你是否曾经为PCB设计文件的查看而烦恼&#…...
Thorium浏览器:重新定义现代网页浏览体验的高性能解决方案
Thorium浏览器:重新定义现代网页浏览体验的高性能解决方案 【免费下载链接】thorium Chromium fork named after radioactive element No. 90. Source code and Linux releases. Windows/MacOS/ARM builds served in different repos, links are towards the top of…...
