导语
前阵子,关于“智能汽车语音误操作导致车灯被关闭,夜间行车险酿事故”的讨论,让很多人第一次直观感受到:车一旦越来越像带轮子的电脑,失效方式就会越来越像软件问题,但代价却远比手机死机大得多。问题来了——如果你面对的是一堆黑盒 ECU,没有源码、没有仿真、也不想先逆向半年,还能不能系统、高效地把它们测一遍?
这篇论文的价值,不在于“又来一篇 CAN 安全论文”,而在于它把“黑盒 ECU 自动模糊测试”这件事做成了一个闭环:报文生成 → 物理响应感知 → Oracle 判断 → 自动回放识别。
一、为什么这件事值得写?因为汽车软件,真的已经复杂到离谱
现代汽车不是一个单体程序,而是一整张由多个 ECU 组成的分布式控制网络。发动机、制动、转向、仪表、车身电子、信息娱乐,很多功能都要靠 ECU 之间通过 CAN 总线等通信系统协作完成。
这就带来一个很尴尬的问题:攻击面在涨,复杂度在涨,测试成本也在涨。尤其是在很多现实场景里,测试人员拿到的不是源码,而是一块已经上电、已经连线、但内部逻辑完全不可见的黑盒。
以前怎么做?很大程度上靠人工盯。发一组包,看灯亮没;再发一组包,看指针动没;再换一组包,看是不是死机了。说白了,就是网络安全版“盯着仪表盘猜脾气”。效率低、覆盖差,还特别吃经验。
而你上传的这篇总结里提到,这项工作正是针对这个痛点:它不要求先逆向固件,也不依赖仿真,而是通过传感器去观测 ECU 的物理反应,把这些反应反向喂给 Fuzzer 作为 Oracle。
二、这篇论文到底做了什么?先别急着把它理解成“乱发 CAN 包”
很多人一听 Fuzz,就以为是“随机乱打,能撞上算运气”。这篇论文不是这么干的。作者把汽车 ECU 的模糊测试拆成了三个关键部件:
第一,Fuzzer 本身,负责生成和发送 CAN 报文;第二,Oracle,负责判断系统有没有出现“有意思”的状态;第三,运行配置,负责限定报文生成范围、发送节奏、报文遗漏策略,以及传感器线束怎么接、怎么采样。
妙就妙在 Oracle 不是靠看源码,也不是靠软件埋点,而是靠可观察输出——比如 LED 指示灯、指针、显示器、继电器,甚至未来可以扩展到声音、功耗和振动。只要 ECU 有“表情”,这套方法就能去捕捉。

图 1 论文核心思路:把黑盒 ECU 的物理响应变成 Fuzzer 可用的反馈信号
三、论文里这几种 Fuzz 玩法,个个都很接地气
作者并没有只停留在“随机发包”层面,而是设计了多种互相配合的策略。
随机 Fuzz,适合快速摸底,先看看什么 ID、什么载荷能激起反应;暴力 Fuzz,适合锁定怀疑区域,把特定字段穷举一遍;突变 Fuzz,适合围绕已知触发报文做小范围位翻转,找出真正起作用的语义位;识别 Fuzz,则是在事件已经发生后回放日志,尽量缩出最小触发消息集。
最有意思的是“遗漏 Fuzz”。有些 ECU 不是你发什么它才有反应,而是你少发了什么它就闹脾气——比如某些周期性报文一断,它就掉线、迟钝,甚至直接故障。这个时候,遗漏本身就是测试手段。

图 2 论文采用的几类 Fuzz 策略:不是一招鲜,而是组合拳
你上传的总结里专门提到,作者还注意到一个特别现实的问题:ECU 的响应经常有延迟。你这条消息刚打进去,系统可能还没来得及“表态”,下一条消息又已经覆盖上去了。于是论文用了“重放前半段日志 + 增加延迟”的识别思路,尽量把真正触发事件的那几条消息揪出来。
四、这篇论文真正封神的地方:它给黑盒装上了“眼睛”
如果说前面的 Fuzz 策略解决的是“怎么试”,那传感器线束解决的就是“怎么知道试出了什么”。
论文用了一套成本并不高、但非常实用的传感器方案:通过 FT232H 把 USB 接到 I2C,总线上挂 TCA9548A 多路复用器,再接 ISL29125 颜色/光强传感器,直接贴到仪表指示灯附近去读颜色值和亮度变化。
这套设计的意义非常大。因为它把过去靠人眼盯的事,变成了机器自动感知。灯亮了、灯灭了、颜色变了、环境光变化了,都不再只是“人感觉好像动了”,而是可采样、可比较、可阈值化、可回放分析的数据。

图 3 传感器线束的价值:让“盯仪表盘”这件事自动化
总结里还提到,作者对传感器做了校准:在灯亮和灯灭状态下分别读数,再用“更接近哪一边”来判定状态,而不是死用一个阈值。这一点很工程,也很重要。因为现实世界不是实验室 PPT,仪表表面会反光,环境光会变,人走过去都可能影响读数。
五、它真的测出了什么?这才是论文最硬的一部分
纸面思路说得再漂亮,最后还是得看能不能测出真东西。作者给了两个很有代表性的案例。
第一个案例是 VulCAN 演示平台。按照你上传的总结,Fuzzer 很快就测到了两个此前没被注意到的微妙问题:其一,扩展 CAN ID 相关异常能导致未授权显示输出;其二,在特定流量模式下还能触发拒绝服务问题。换句话说,这不是“看起来有趣”,而是实打实把漏洞从系统里勾了出来。
第二个案例更接地气:真实仪表盘组件。作者把传感器贴到仪表灯附近,让系统自己在反馈回路里“说话”。结果,左转、右转、大灯、车速、转速等功能对应的报文和位语义,都能通过识别、暴力和突变 Fuzz 逐步被摸出来。

图 4 两个案例研究说明:这套方法既能找漏洞,也能加速逆向
更抓人的是效率。总结里写到,11 位地址空间的暴力枚举大约半分钟就能跑完;基于突变的位语义探索,大约二十秒就能扫一轮;识别一次具体灯光触发消息,额外也就是几秒到几十秒量级。以前靠人工反复试错要几天的活,现在能被压缩到小时级。
六、这件事对今天的车联网安全意味着什么?
第一,它提醒我们:汽车安全测试不能只盯通信层,也不能只盯代码层。真正的系统行为,往往要落到物理世界里看。灯会不会亮,指针会不会动,蜂鸣器会不会叫,执行器是不是异常无响应——这些都该成为测试反馈的一部分。
第二,它给黑盒场景提供了一条非常现实的路。很多时候,研究人员、测试人员、供应链安全团队拿到的就是一个现成 ECU,而不是一份完整源码。那就别等“全部搞明白再测试”,先把反馈链路搭起来,让系统先开口。
第三,它也让人重新理解“模糊测试”这四个字。真正有价值的 Fuzz,不是数量堆出来的野蛮刷包,而是输入空间、运行节奏、报文上下文、反馈机制和后处理能力共同构成的一整套工程。
七、站在公众号读者角度,这篇论文最值得记住的一句话
以前我们总觉得汽车黑盒很难测,是因为“看不见里面发生了什么”。这篇论文的回答很妙:既然看不见里面,那就把外面的反应看清楚。
别小看这个思路。它不只是适用于 CAN,不只是适用于仪表盘,也不只是适用于学术演示。只要一个网络物理系统会对输入产生可感知的外部反应,这套“输入—物理反馈—Oracle—再识别”的闭环,就有机会迁移过去。
说得更直白一点:让 ECU 自己露馅,比你硬猜它在想什么,通常更快。
结尾
当汽车越来越智能,漏洞不一定都像电影里那样“远程接管一切”,很多时候,它先以一次误控、一次异常响应、一次不起眼的功能错位冒头。真正高水平的测试,不是等事故把问题放大,而是在黑盒还没来得及装傻之前,就让它自己说出答案。
—— 破壁智行
夜雨聆风