ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

基于 LSTM 的车载 CAN 总线入侵检测:从 125 万条真实数据的“毒打”到工程化落地

基于 LSTM 的车载 CAN 总线入侵检测:从 125 万条真实数据的“毒打”到工程化落地

一、项目背景与真实数据的挑战
智能网联汽车里,CAN 总线是连接各个 ECU 的核心网络。不过 CAN 总线在设计之初极度缺乏安全认证与加密机制,很容易遭到黑客的 DoS、重放、模糊测试等攻击。

这个项目主要是利用深度学习(LSTM)的时序特征提取能力,结合极其受限的车载算力环境,构建一个高效的车载入侵检测系统(IDS)。
整体技术链路可以概括为下面这张图:

CAN 总线原始报文

数据解析与清洗

双模式时序切分

LSTM 时序特征提取

类别权重 + 学习率衰减训练

阈值调优(0.247)

车载 IDS 实时检测输出

开源代码在这里:https://github.com/Jinxiaoxi520/SmartGuard-Vehicle-AI

项目刚开始的时候,我用一些简单的开源小数据集跑通了模型,准确率达到了 99%。当时确实有点膨胀,以为项目差不多搞定了。

直到我拿到了韩国高丽大学 HCRL 实验室的 125 万条真实车载报文数据集。换上真实数据,并开启严谨的时序切分模式后,成绩直接暴跌:准确率只剩 57%,模型彻底变成了“疯子”。

原因很简单。真实的汽车在 99% 的时间里都在发送正常报文,黑客攻击的占比极低。模型为了走捷径,开始疯狂地把正常报文误判为攻击。

二、数据与策略的重构
为了让模型真正学到东西,我开始了漫长的调参和工程重构:

处理极度不平衡(Class Weight)
我引入了类别权重,强行给罕见的攻击样本加上更高的惩罚。但调参是个技术活:给到 15 倍,模型变成惊弓之鸟,到处乱报警;降到 3 倍,模型又摆烂躺平。最终我把它固定在了一个相对平衡的区间。

引入学习率衰减(ReduceLROnPlateau)
训练轮数增加后,损失函数开始反复震荡。我加了学习率衰减机制,当模型发现损失不再下降时,自动把步子迈小,进行细致的微调。

双模式切分(防样本泄漏)
为了保证工程的严谨性,我写了双模式开关:

严谨模式:严格按时间顺序切分(无重叠),真实模拟实车流量。

展示模式:采用滑动窗口重叠切分(Stride=1),最大化学习攻击特征。
两种切分模式的差异如下:

严谨模式

展示模式

原始时序报文序列

切分模式选择

按时间顺序切分,无重叠

滑动窗口切分,Stride=1

真实模拟实车流量,防样本泄漏

最大化学习攻击特征

模型评估与调参

三、最终战报与硬核指标
在经历了数十次推翻重来后,最终模型在 125 万条数据规模下,交出了这份答卷:

推理性能:测试集单条报文平均推理耗时仅 0.0134 毫秒。这个速度已经能满足绝大多数车载 MCU/边缘网关的实时性要求。

安全优先:在最佳安全阈值(0.247)下,召回率(Recall)达到了 79.44%。在“宁可错杀,不可放过”的车载安全标准下,系统能拦截近八成的黑客攻击。



这里贴一下评估数据汇总,真实的高噪数据下,ROC-AUC 拿到 0.791,PR-AUC 拿到 0.2682。
从训练到最终评估的完整流程如下:

125 万条真实报文

类别权重调参(3x ~ 15x)

ReduceLROnPlateau 学习率衰减

LSTM 模型训练

阈值扫描,选定 0.247

Recall 79.44% / ROC-AUC 0.791

单条推理 0.0134 ms,可上车

分数看着没有假数据华丽,但这是能真正在现实复杂环境中落地测出来的表现。

评估指标 (最佳安全阈值 0.247) 数值
单条报文推理耗时 0.0134 毫秒
召回率 (Recall) 79.44%
准确率 (Accuracy) 67.77%
F1-Score 0.3312
ROC-AUC 0.791
PR-AUC 0.268

四、踩坑复盘盘
开发过程中遇到了几个典型问题,这里做个记录:

数据格式的伪装:真实车载数据文件后缀可能是伪装的 Excel,导致 pandas 报 FileNotFoundError 或格式错误。必须加上 engine=‘openpyxl’ 等强制读取,并把原代码里死板的 DLC 长度限制去掉。

版本兼容性:原开源代码使用了 pandas 中被废弃的 applymap,运行时报一堆警告。我把它重构成了 apply(lambda col: col.map(…)) 解决了兼容问题。

五、后续计划 (TODO)
目前代码已经全量开源了。接下来的优化方向主要是这几个:
后续演进路线规划如下:

当前已开源版本

模型轻量化:剪枝 + INT8 量化

流式推理封装:deque 滑动窗口

多基线对比:1D-CNN / XGBoost

部署到低成本单片机

在线实时检测 Demo

完整消融实验

车载边缘端落地

□ 模型轻量化:尝试对模型进行剪枝和 INT8 量化(TFLite),把它塞进几十块钱的单片机里。
□ 流式推理封装:利用 deque 实现实时滑动窗口,打造在线检测 Demo。
□ 多基线对比:引入 1D-CNN 和 XGBoost 作为对照组,完成完整的消融实验。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进