汽车网络安全之——CAN网关测试

测试内容

本部分为网关测试标准整理而来。
1 硬件信息安全测试
网关硬件信息安全测试应按照下列流程及要求依次进行: a) 拆解被测样件设备外壳,取出PCB板,通过5倍率以上的光学放大镜,观察网关PCB板,检查PCB 板硬件是否存在后门; b) 检查是否有存在暴露在PCB板上的JTAG接口、USB接口、UART接口、SPI接口等调试接口,如存在则使用测试工具尝试获取调试权限
2 通信测试

  1. 访问控制策略测试:设置规定的访问控制策略(若被测样件的访问控制策略无法通过软件配置修改,则由送样方提供已预置的访问控制策略列表),检测设备向列表指定的源端口发送符合策略规定的数据帧与不符合规定的数据帧,并在列表指定的目的端口检测接收数据帧;(基于ID的访问控制)
  2. 泛洪测试:确认网关连接车辆对外通信接口的CAN通道,检测设备对此通道以大于80%总线负载 率发送符合通信矩阵的泛洪攻击数据帧,在指定的目的端口检测接收到的数据帧,并收集样件日志。如果有多个此类通道,则依次分别测试;
  3. 数据帧内容测试:检测设备分别发送一条或者多条信号帧分别以及组合改变其长度,内容的有效性,收集日志。
  4. 数据帧周期测试:检测设备对网关连续发送一个或多个周期不符合通信矩阵定义(实际周期相比定义周期偏差 大于±50%)的周期型数据帧,在指定的目的端口检测接收到的数据帧,并收集样件日志。如 果有多个此类通道,则依次分别测试;
  5. UDS会话测试:检测设别确认网关连接OBD-II端口的通道和连接车载信息交互系统(如T-Box)的通道UDS会话是否正常;检测设备对除此类通道以外的通道,发送UDS诊断数据帧,在指定的目的端口检测接收到的数据帧,并收集样件日志。
    其中硬件测试可以参照 :汽车网络安全之——工具汇总.中硬件工具一项。本文主要讲如何在没有实物情况下,模拟测试,便捷的开发测试工具。

仿真环境

基于Linux下的虚拟can总线
利用现有工具
Can-utils
ICSim
UDS-Server
(本部分工具主要为汽车黑客大曝光一书中的工具,感谢opengarages社区!,本部分工具笔者在Ubuntu16.04下测试)

CAN-Utils

CAN-Utils为一个轻量的can命令行工具
sudo apt-get install can-utils
主要使用 cansend和candump两个模块
cansend vcan0 7df#021003
candump vcan0

ICSim

ICSim是一个ECU的模拟工具
安装 ICSim
Sudo apt-get install linsdl2-2.0
Sudo apt-get install linsdl2-dev
Sudo apt-get install linsdl2-image-dev
Sudo apt-get install linsdl2-ttf-dev
Sudo apt-get install can-utils
使用ICSim
创建一个 vcan
打开 ./controls vcan0
打开 ./icsim vcan0
controls是一个可以用键盘控制的仪表,一直按上 加速 下 减速
汽车网络安全之——CAN网关测试

Uds-Server

使用方法
编译: make

  1. 打开icsim
  2. 打开uds-server
  3. 使用can-utlis工具进行测试(默认ID为0x710)

汽车网络安全之——CAN网关测试

基于Peach的CAN模糊测试探索

Peach是一个应用较多的模糊测试工具,可以进行协议的测试。
使用Peach进行fuzzing的主要步骤如下:
1、创建模型
2、选择/配置Publisher
3、配置代理/监视器
4、配置记录
使用Peach进行模糊测试主体需要添加一个Publisher,在peach源码Peach.Core.OS.Linux/Publishers/ 目录下。
目前 UDSim项目发布了一个基于socketcan的CAN Publisher。
编译注意事项:
1.要用python2 执行编译
2.在按照Peach和UDSim项目给的编译方法的基础上,还需要将Peach.Core.Analysis.Pin.Coverage/wscript_build 删除
3.在Peach.Core/wscript_build 脚本里,要添加 Mono.Posix.dll的引用。
但目前Peach在Linux下支持不好,需要将制定硬件驱动,改写Publisher,在Windows下使用。