欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 八卦 > 车联网安全入门——CAN总线逆向(ICSim)

车联网安全入门——CAN总线逆向(ICSim)

2024/11/30 8:47:32 来源:https://blog.csdn.net/weixin_66578482/article/details/139438547  浏览:    关键词:车联网安全入门——CAN总线逆向(ICSim)

文章目录

  • 车联网安全入门——CAN总线逆向(ICSim)
    • 介绍
      • 主要特点
      • 使用场景
    • 逆向
      • 二分法
      • 频率统计法
      • 瞪眼法
          • cansniffer
          • SavvyCAN
    • 总结
    • 参考

车联网安全入门——CAN总线逆向(ICSim)

🚀🚀孩子正在找实习,可以从事嵌入式,二进制安全,物/车联网安全,可私信或者联系rui6737321@gmail.com

🚀🚀最近对于车联网安全非常有兴趣,但是不知道怎么入门,无意间发现了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博客

逆向

🚀🚀其实上篇文章我们已经展示了如何通过重放攻击去操控汽车,但是我们有一个地方没有解释,那就是我们如何找到对应的can报文?所以接下来我会来介绍一下如何找到我们想要的CAN报文。

二分法

🚀🚀首先必须得是经典的二分法,核心思想很简答,就和二分查找一样,我们先将报文对半分,使用如下命令:

split -l 15000 candump-2024-06-01_104423.log a

🚀🚀将30000条数据对半分,然后分别发送给can设备,看一下哪一半报文产生了你需要的动作,那就保留下来继续二分,循环,最后就能找到了。

频率统计法

🚀🚀上面的方法虽然有用,但是有些时候太慢了,特别是对于那种只出现几次的can报文,我们显然可以通过频率分析来找到他们,代码如下所示,我都加上了详细的代码:

import sysdef read_can_data(file_path):"""读取文件并提取CAN ID和数据。参数:file_path (str): 文件路径。返回:tuple: (CAN ID 列表, CAN 数据列表)"""result_id = []result_data = []with open(file_path, "r") as file:for line in file:parts = line.split(' ')[2]can_id = parts.split('#')[0]result_id.append(can_id)result_data.append(parts)return result_id, result_datadef print_id_counts(result_id):"""打印每个CAN ID出现的次数。参数:result_id (list): CAN ID 列表。"""unique_ids = set(result_id)for can_id in unique_ids:print(f"{can_id}: {result_id.count(can_id)}")def search_data_by_id(result_data):"""根据用户输入的CAN ID搜索并打印对应的数据。参数:result_data (list): CAN 数据列表。"""while True:inp = input("please input id: ")for data in result_data:if inp in data.split("#")[0]:print(data)def main():"""主函数,执行读取数据、打印统计信息和搜索数据功能。"""if len(sys.argv) < 2:print("Usage: python script.py <input_file>")returnfile_path = sys.argv[1]result_id, result_data = read_can_data(file_path)print_id_counts(result_id)search_data_by_id(result_data)if __name__ == "__main__":main()
  1. read_can_data 函数用于读取文件并提取CAN ID和数据,返回一个包含CAN ID和数据的元组。
  2. print_id_counts 函数用于打印每个CAN ID出现的次数。
  3. search_data_by_id 函数根据用户输入的CAN ID搜索并打印对应的数据。
  4. main 函数是程序的入口,执行读取数据、打印统计信息和搜索数据的功能。
  5. if __name__ == "__main__": 确保脚本作为主程序运行时调用 main 函数。
python can.py candump-2024-06-01_104423.log

🚀🚀调用py代码之后显示如下:

324: 126
305: 118
136: 1246
18E: 1246
40C: 42
143: 1246
21E: 310
333: 122
1CF: 623
1DC: 623
309: 126
13F: 1246
405: 42
191: 1247
294: 310
17C: 1246
13A: 1246
454: 42
1B0: 620
244: 1066
158: 1246
428: 42
5A1: 12
1A4: 623
133: 1247
166: 1246
095: 1246
1AA: 620
039: 821
188: 24
1D0: 620
183: 1246
320: 126
161: 1247
164: 1246
37C: 126
19B: 6
please input id: 19B
19B#00000F000000                                             19B#00000F000000                                             19B#00000E000000                                             19B#00000F000000                                             19B#00000E000000                                             19B#00000F000000

🚀🚀对于那种出现次数很少的代码,我们就可以仔细研究一下,刚好就发现这个19B就是开车门,因为我们有过几次开关车门的动作,就被记录下来了。

瞪眼法

🚀🚀这个主要就是通过我们的sniffer来动态显示我们的数据包,通过我们的眼睛发现关键报文,比如汽车加速时有个报文数据一直在规律增长,就可以猜测是控制汽车油门的报文,这部分主要是看我们能不能发现报文的变化,如果后期有可能的话出个视频教程会清楚一点(挖坑),这里就简单介绍一下。

cansniffer

🚀🚀cansniffer能够动态显示我们的can报文变化状态,对于can报文的逆向起到很大的帮助作用,使用命令如下所示:

cansniffer -c vcan0

🚀🚀特别值得注意的就是,使用按下#键,然后enter,就可以屏蔽一些变化数据,更便于我们进行观察:

在这里插入图片描述

SavvyCAN

🚀🚀前面文章有介绍,不会使用的同学可以回去看一下。

🚀🚀然后就是SavvyCAN里面的sniffer,就会发现和之前那个命令行工具cansniffer很相似,这个的话,红色是无规律变化,绿色是有规律变化,下方还能过滤报文,非常好用哈!

🚀🚀使用右上角notch功能也能实现屏蔽一些变化,便于我们观察,而且我们还能点击View Bits来观察每一个字节是如何使用的。

在这里插入图片描述

🚀🚀还有更加逆天的功能,那就是画图,我们简单来看一下,这个是我按下油门之后的数据,详细的过程我会单独写一篇文章(狠狠挖坑),内容就是如何分析一段CAN报文,确定其功能以及如何攻击,感觉越来越好玩了!

在这里插入图片描述

总结

🚀🚀这篇文章简单介绍了一下常见的几种CAN逆向方法,希望能够帮助到大家,谢谢!!!

参考

Hacking All The Cars - CAN总线逆向-安全客 - 安全资讯平台 (anquanke.com)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com