🤒
Structure-Aware, Diagnosis-Guided ECU Firmware Fuzzing
作者
背景知识
- ECU: Electronic Control Unit,主要负责车上具体功能控制
- ECU通过Transceiver链接到其他ECU,Transceiver负责将差分信号转换成为数字信号
- 专用集成电路(ASIC,Application Specific Integrated Circuit)负责处理和调节各种输入信号并转发给MCU,同时集成电源管理、系统监控、唤醒逻辑等支持功能为ECU操作提供支持
- AUTOSAR框架:AUtomotive Open System ARchitecture,提供标准化软件框架
- 应用层:包含实现ECU核心功能的软件组件(SWC,SoftWare Components)
- 运行时环境层(RTE,RunTime Environment):负责SWC和BSW之间的通信
- 基础软件层(BSW,Basic SoftwareWare):提供内存管理、诊断和通信接口等基本服务


整体框架

大致分为两条主线
- 初始记录的SPI -> 转化成为CAN序列 -> 输入到模拟外设中 -> 转化成为SPI -> 输入到MCU中
- 初始记录的CAN -> 输入到MCU中
Q1: 为什么要将SPI输入到模拟外设中转一圈?
Q2: 大多数车的CAN来说都是黑盒的,直接输入到MCU中意义何在?
SPI种子生成
ECU遵循固定的上电序列,所以使用逻辑分析仪来抓取MCU和ASIC之间从ECU上电到初始化阶段最后到运行阶段的完整SPI通信

对于捕捉到的每个SPI报文,将其整理为图中的格式L=<t,cs,mout,min>,其中t为时间戳,cs为片选信号,mout为MOSI信号,min为MOSO信号

针对每组L,对其进行解析为元组I=<inst,{fmosi1,...,fmosin},{pmosi1,...,pmosin},{fmiso1,...,fmison},{pmiso1,...,pmison},{rmiso1,...,rmisok}> ,其中inst表示MOSI的instruction_id,fmosin表示MOSI中第n个字段的名称,pmosin表示MOSI中第n个字段所在的bit,rmosik表示第k个MOSI中字段的值域,在变异过程中仅变异MISO
结构化变异策略
对于每一个I,都提供一个变异元组M=<I,{Omiso1,...,Omisok}>,其中Omisok代表对于MISO中第k个字段的变异算子
- AFL标准变异算子:位翻转
- 边缘情况变异算子:生成正好在rmisok之外的值
- 约束范围内变异算子:生成在rmisok之内的值
在变异之后重新计算CRC的值,防止CRC校验失败
CAN种子生成
从CAN DBC中构造
都有了CAN DBC相当于拥有了私有CAN的定义,这玩意怎么获取的?