给SoC配免疫系统:基于神经网络的硬件威胁智能监控实战

发布时间:2026/10/20 6:29:26
给SoC配免疫系统:基于神经网络的硬件威胁智能监控实战 给芯片配“免疫系统”听起来像比喻其实是个很实际的工程目标。我们小组接手某个SoC原型验证项目时遇到一个很典型的问题常规的电压监控、看门狗、寄存器校验都能挡住“一眼就能看穿”的故障但面对刻意设计过的硬件攻击比如在特定时钟沿插入电源毛刺、用电磁干扰改变某几个触发器状态、或者从调试接口重新配置安全寄存器整个安全响应链条根本没有反应时间。于是我们开始尝试把基于神经网络的硬件威胁智能监控直接搬进SoC内部让芯片像生物体识别病原体一样根据自身电压、电流、时钟和总线行为的连续变化判断“自己是不是正在被异常干扰”。这篇内容就是把这次实战从威胁建模到片上部署的完整过程拆开讲适合做SoC安全设计、处理器验证、嵌入式AI落地的团队参考。1. 先搞明白威胁从哪来硬件攻击的本质是扰动SoC的体内平衡1.1 三类最让人头疼的硬件攻击路径先说为什么会选这个方向。我们在前期做威胁分析时把SoC可能碰到的硬件攻击归成三类。第一类是电源毛刺注入。攻击者用外部设备快速拉低或抬高供电电压让逻辑门在错误的建立/保持时间边沿采样从而引起寄存器写入错误。这类攻击成本低一套简单的开关电路就能做但危害极高。它不针对软件漏洞而是直接打半导体物理层的“软肋”。第二类是电磁或激光注入通过局部能量扰动让特定触发器翻转常见手法是做安全启动绕过让BootROM里的校验逻辑执行到错误分支。第三类是调试接口和片上协处理器后门利用SoC内部调试总线权限划分不当把安全CPU的关键寄存器读走甚至改写。这三种路径的共同点是攻击发生时SoC并没有立刻崩溃只是行为出现短暂偏离。这个“偏离”如果没被察觉后续的密钥泄漏、控制流劫持都只是时间问题。1.2 传统安全监控为什么反应不过来传统SoC普遍有的防护手段是这些电源监控比较器、温度传感器、看门狗定时器、关键寄存器的奇偶校验/ECC以及安全启动时的逐级签名校验。这些手段有效但都存在结构性盲区。电源监控比较器是静态阈值判断只有电压跌出下限才告警攻击者完全可以把毛刺幅度控制在比较器阈值以内让电压变化看起来像一个正常负载跳变。看门狗主要用于“程序跑飞”兜底但硬件攻击导致的安全寄存器改写未必会让程序跑飞系统的处理流程可能继续“正常”运行。奇偶校验能发现翻转但只能在校验时刻发现而且对数据总线之外的检测能力有限。逐级校验只在启动阶段起作用对运行阶段的动态攻击基本无能为力。更麻烦的是这些防护是零散部署的互相没有关联。电压监控归电源域管温度传感器归系统管理控制器管ECC上报到中断控制器管。攻击者在电压域制造一个异常在总线域制造另一个异常任何一个单点看都是“在合理波动范围内的偶发事件”但把多维信号放在同一个时间窗口看就会意识到这根本不可能是正常负载变化。1.3 我们给“免疫系统”定的三条设计原则基于上述分析项目组把目标定义为不是阻断所有攻击因为物理层面的攻击很难完全防御而是要在攻击造成实质危害前做到“感知、定位、告警、联动”。围绕这个目标我们定下三条设计原则不依赖攻击特征库。我们不想只识别“已知毛刺形状”神经网络应当学习电压、电流、时钟抖动、总线行为的多维分布把“偏离正常时空模式”本身当成异常信号。不显著拖慢主频和增加功耗。推理引擎可以是一颗独立的小IP挂在系统总线上但它的功耗预算必须控制在峰值几毫瓦以内推理延迟控制在毫秒级别。每个告警都要能解释。哪怕最后是一堆概率分数也要把触发告警的主要特征维度回溯出来方便验证组定位是电压异常、时钟异常还是总线异常。这三条原则在后续所有选型中都起了决定性作用包括传感器点位、模型结构、片上实现方式。2. 画靶子再开枪把攻击转换成神经网络能学习的可观测信号2.1 把攻击路径映射成SoC内部可观测的“生命体征”做AI监控最容易犯的错是一开始就堆数据却没有定义“异常到底长什么样”。我们花了两周时间做用例梳理把三类攻击路径逐条映射到SoC内部可观测的信号上形成一张映射表。电源毛刺注入主要影响的是模拟电源域中的电压值、流经芯片总电流、以及部分关键触发器的供电电压纹波。电磁/激光注入除了影响电压外还会在时钟网络上留下相位抖动同时可能触发一组ECC错误计数异常。调试接口后门一般不会造成电压和时钟明显变化但会让总线事务模式发生突变比如安全配置寄存器在非预期时间被访问DMA通道出现从未见过的传输长度。所以最终选定的观测点有这几类电压传感器、电流传感器、时钟抖动计数器、总线事务特征计数器、ECC错误计数器以及安全寄存器访问记录。这就像给SoC建了一份基础体检档案每类测量值在正常负载下的分布范围都提前统计过。2.2 一条训练样本应该包含什么我们最初的样本格式是“某时刻的一组传感器读数”训出来的模型几乎不可用。原因是单点读数丢失了时间上下文。后来改成“一个时间窗口内的多维时序向量”效果才落下来。具体来说每条样本是一个1×512×N的张量512是采样窗口点数N是观测通道数。窗口对应的物理时间是约10毫秒。也就是说采样频率约50kHz覆盖了毛刺注入常见的几百纳秒到几微秒扰动同时能看完整十个“负载状态变化”周期。每一个时间窗口还会标注一个场景标签正常负载模式、电压毛刺注入、时钟干扰注入、调试接口异常访问以及这几种情况的组合。这种标注策略的好处是模型既能做“正常/异常”二分类也能在异常时进一步输出一个大类编号方便SoC安全软件根据类型选择响应动作。2.3 数据从哪来仿真注入和真实故障注入一个都不能少训练数据有两个来源。第一是RTL仿真层的故障注入我们在仿真环境里通过脚本在特定时间翻转内部信号、拉低电源域电压、篡改寄存器值跑出一大批带精确时间标签的波形。第二是FPGA原型平台上的真实故障注入实验用可控电源纹波注入电路和时钟干扰发生器对部署在FPGA上的SoC原型施加物理扰动再用高速ADC和逻辑分析仪采集真实运行数据。两条路各有不可替代的价值。仿真注入覆盖场景范围广、时间标签精确但波形整洁与真实电路噪声差异大。真实注入最接近实际攻击效果但实验重复采样成本高而且不同温度、不同负载下的波形差异很大。我们把两组数据都纳入训练另外用了一组不参与训练的真实注入数据做最终验证避免模型只是在仿真波形上过拟合。2.4 评价指标不能只看准确率硬件监控场景里准确率是一个非常容易被误导的指标。因为正常样本远多于异常样本模型只要把所有样本都判成正常准确率也能到99%以上但攻击检出率等于零。我们最终以三个指标作为准入门槛攻击检出率ADR真正例占比不低于99.5%、误报率FPR不超过0.1%、从攻击发生到告警置位的中位延迟不超过1毫秒。后面调优时这三个指标经常互相打架但先把硬指标定下来才不会在模型迭代过程中被“单个指标变好”带偏。3. 搭采集链路让SoC的生命体征变成干净的训练数据3.1 片上探针选型与布置位置先讲传感器选型。电压和电流通道我们用模拟前端加高速ADC采样率50kHz12位精度挂在SoC的电源管理子系统中。时钟抖动检测没有直接测量模拟时钟波形而是用两个计数器一个由参考时钟驱动一个由目标时钟域驱动每个采样周期比较两者的相位差从而得到抖动噪声计数值。这个方法成本低不需要额外的模拟PLL就能让神经网络拿到“时钟是否被干扰”的信息。数字观测点放在SoC内部总线上一组总线事务计数器统计主设备访问频率、传输长度、地址区间的分布熵一组寄存器访问监视器记录安全关键寄存器的读写历史重点记录“哪些模块在什么时间访问过它们”。这两类数字探针不会引入额外的模拟噪声但在检测调试接口后门这类“非能量型攻击”时是主力信号。需要强调的是探针位置必须挨着实际风险点。电压探针如果放在远离被攻击电源域的干净供电线上什么都测不到。我们在FPGA原型上做过对照实验同一组毛刺注入探针放在CPU电源域和放在外设电源域测到的信号差异可以达到五倍以上。3.2 时间对齐问题采样数据必须知道攻击发生在哪一瞬数据质量最关键的坑不是分辨率而是时间对齐。一开始我们直接把ADC采样数据和故障注入脚本的时间标签放在一起训练时发现模型完全学不到特征。后来查清楚原因FPGA原型平台的事件响应延迟不确定注入脚本打到电路上的时刻和ADC实际采到电压跌落时刻之间有几十微秒到两百微秒的随机偏差。这个偏差在50kHz采样率下意味着好几个采样点神经网络拿到的是“窗口起点和攻击位置随机错位”的训练数据。解决办法是增加一个硬件同步机制。故障注入设备在发起异常的同时会给片上采集模块发一个硬件触发信号采集模块收到触发后打一个高精度时间戳同时把触发前后各256点数据打包成样本。这样每个训练样本都自带“攻击相对位置”标签模型才能学到“从正常到异常再到恢复”的完整过渡形状。3.3 预处理流程和样本增强采集到的原始数据不是直接进网络的。我们的预处理流水线是中值滤波去除单点毛刺噪声按通道做Z-score归一化然后滑窗切片。这里有个小经验Z-score归一化的均值和标准差不能用全量训练数据的统计值直接算而要按“一段连续运行数据”为单位计算。否则会因为不同负载阶段的均值漂移把正常负载切换误判成异常。更稳妥的做法是按场景分窗口统计先验分布比如空闲态、加载态、计算密集态分别统计再做归一化。样本增强方面我们用了三类手段。第一窗口重叠采样正常数据以2ms步长滑窗让相邻样本之间有内容重叠训练数据量直接扩十倍第二加传感器噪声给正常样本叠加实测噪声底提升模型对硬件噪声的鲁棒性第三时序拉伸与压缩把异常样本在时间轴上随机缩放0.8到1.2倍模拟不同攻击速度下的波形差异。整套增强之后有效训练样本从原始的一万多条变成十几万条。4. 模型选型与训练轻量级神经网络的工程化取舍4.1 为什么没有直接上大模型看到多维时序数据第一反应可能是用很深的卷积网络或者更复杂的注意力结构。但在SoC里面这条路走不通。资源预算摆在那里推理引擎最终要以硬件IP形式实现能够给神经网络使用的存储空间大概是2MB SRAM外部DDR不能依赖因为攻击发生时可能连DDR控制器都处于异常状态。计算资源大约是一个小型DSP阵列同时在线做推理时必须把功耗控制在峰值20毫瓦以内。在这个预算下一个参数量超过五百万的模型基本不可能按时序完成推理。我们最终定的是一个1D卷积加GRU的混合结构。前面两层1D卷积负责提取局部时间特征比如电压的急剧跌落后回升、时钟抖动的连续高频震荡GRU层负责捕捉跨时间窗口的依赖关系判断这种局部异常是持续演变的攻击还是偶发的负载波动。最后接一个三层全连接网络输出类别概率。整个模型参数量控制在八十万左右FP32规模约3.2MB量化到8bit后约0.8MB刚好能放进片上SRAM。4.2 训练配置和最关键的数据划分训练本身用的是常规的Adam优化器初始学习率1e-3余弦退火调度。损失函数是加权交叉熵异常样本权重比正常样本高一些用来对抗类别不平衡。这些都不是新鲜事真正影响结果的是数据划分方式。我们一开始按样本随机划分训练集和验证集验证准确率非常漂亮但拿到真实注入数据上一测就垮。原因在于同一个故障注入批次产生的样本高度相似随机划分会把同一批样本同时分到训练集和验证集造成严重的数据泄露。后来改成“按注入批次划分”——同一批注入实验的所有样本只能进同一个集合验证集里全部是训练时完全没见过的攻击形态指标立刻变得真实可信。这条教训我觉得值得写在这因为很多嵌入式AI项目都会踩同样的坑。训练完成后模型在验证集上的攻击检出率约99.7%误报率约0.15%离目标还差一点。我们又把GRU隐藏层从128调成160增加少量dropout再观察发现误报率降到0.1%左右中位告警延迟约0.7毫秒。后来在真实注入数据上测ADR略有下降到99.2%但整体已经可以接受。考虑到真实数据复杂度更高这个差距符合预期。4.3 模型还能不能更小结构化剪枝与通道压缩虽然0.8MB的模型已经达标但我们在后续版本里继续做了一个实验把1D卷积的通道数从64/128降到48/96用结构化剪枝去掉贡献小的通道参数量少了约三成推理延迟降了30%。代价是ADR掉了0.1个百分点。对于监控任务来说这个代价可以接受毕竟我们更关注的是延迟而不是把每条攻击都“稳准狠”地分类到具体类型。剪枝完成后我们还做了一轮针对硬件实现的定点化校准。校准集选取的是训练集里的正常样本和异常样本各一半用KL散度统计每一层的数值分布范围确定8bit量化参数。这个环节如果省略模型很容易在片上出现个位数百分比的精度崩塌。安排好量化校准之后模型在FPGA原型上的推理输出和PC端浮点结果基本一致。5. 片上落地把神经网络跑成一段可靠的硬件流程5.1 从Python模型到硬件代码的工程化路径模型定稿后剩下的事情是把网络结构翻译成能在芯片上跑的逻辑。我们没有手工写全套硬件代码而是先用Python把模型推理逐层展开验证每一层算子的数学输出然后基于一个开源的神经网络推理生成器自动生成硬件代码再手工优化几个关键模块。具体路径分成三步第一步把训练好的模型导出成开放神经网络交换格式第二步做8bit定点量化生成量化参数表第三步由推理生成器产出卷积、GRU、全连接对应的硬件模块。GRU的循环结构在硬件上比较占资源我们把它按时间步展开成三步循环每次循环复用同一套计算单元换取面积上的大幅节省。三步循环用三个时间窗实际效果比一股脑展开十步要好因为GRU在第三步之后输出概率已经收敛。5.2 采集、推理、告警的流水线时序预算给SoC做AI监控最怕的是时序失控。我们设计成四级流水线采样缓冲、滑动窗口拼接、推理计算、告警输出。采样缓冲由DMA把ADC和计数器读数连续写入片上SRAM的环形缓冲区。滑动窗口拼接模块每2ms生成一个新的512点窗口当窗口填满时触发推理引擎工作。推理引擎把量化后的输入张量流过三层网络产生分类结果。告警输出模块根据结果和阈值比较决定是否向安全中断控制器发送高优先级中断。这张表是我们实测的流水线预算阶段触发条件耗时/资源说明采样缓冲每20us一次DMA传输占用8KB SRAM双缓冲交替写避免读写冲突窗口拼接每2ms滑窗8个时钟周期用硬件地址映射完成不搬数据推理计算窗口满触发约0.7ms8bit定点卷积GRU告警输出推理结果过阈值3个时钟周期同时记录原因特征字从攻击发生到告警的中位延迟实测为0.8毫秒整个监控引擎自身功耗约15毫瓦占SoC总面积的0.4%。对这个项目来说预算完全可接受。5.3 和SoC现有安全机制握手联动模型给出“异常”的判断之后最终怎么处置是另一个容易忽略的环节。我们没有让监控引擎直接切断电源或复位置位那太粗暴了误报一次就是一次可用性事故。我们设计了三档响应策略由安全软件根据告警可信度动态选择。低可信度告警只记录事件日志不打断任务后续由软件核对“是否同时出现其他异常信号”。中可信度告警给安全软件发中断允许软件在若干个毫秒内完成现场保存和上下文迁移。高可信度告警比如电压异常和总线异常在同一时间窗内同时出现才触发系统安全复位并把告警原因特征字写入一次性可记录区域方便事后复盘。这个分层响应非常重要。监控系统如果只会一键复位那它在工业控制、车载场景里根本部署不下去因为偶发误报会被当成重大故障处理。把“告警”和“响应”解耦给上层软件留出决策空间才符合真实产品对可靠性和可用性的双重要求。5.4 片上验证的完整闭环最后是验证闭环把生成的硬件代码放进FPGA原型平台跑三组用例。第一组是纯正常负载验证系统长时间运行不产生误报第二组是受控故障注入验证每种攻击都能在1毫秒内触发对应等级的告警第三组是混合场景模拟正常负载切换和攻击同时出现考察监控引擎在复杂状态下的鲁棒性。这三组用例跑完大概用了三个调试周。比较耗时间的不是代码本身而是排查“为什么模型离线判断正确、片上判断偶尔异常”。最后定位到是量化参数在某个极端输入下溢出修正方法是在量化表里给信号绝对值上限留出了5%余量之后片上结果就和PC端对齐了。这类问题在文档里通常不会写但每个做AI硬件落地的团队大概率都遇到过。6. 攻防拉练实测暴露的三个意外与调优过程6.1 复位毛刺把模型吓成了惊弓之鸟第一次拿到FPGA原型上做长时间运行测试时误报率不是0.1%而是接近5%。查了整整两天才发现所有误报都集中在系统复位的瞬间。复位期间电源域电压会被拉低又恢复总线会有一大堆未初始化的事务时钟也可能出现短暂的不稳定。这些现象在物理特征上和攻击注入高度相似属于天然的“类攻击样本”。我们的训练集里虽然包含了一些复位场景但数量少而且没有明确标注成“非攻击异常”。模型学到的是“电压大波动异常”于是每次复位都报警。解决办法分两步第一步是在采样链路上加复位屏蔽窗口系统复位的50毫秒内不让监控引擎输出告警第二步是在数据集里补充大量复位、冷启动、睡眠唤醒等非攻击但波动剧烈的场景并显式标注为正常。这个改动之后误报率才真正回到训练时的水平。6.2 攻击波形伪装成正常负载突变第二个意外更有点意思。我们把电源毛刺幅度逐渐调小调到一定程度后发现模型分不清毛刺和正常的CPU高负载电流波动。因为CPU在高负载状态下本身就会拉低电源电压、拉高电流毛刺注入造成的电压凹陷和负载冲击的电压凹陷在单一时序通道上几乎无法区分。解决这个问题的关键是引入第二个观测维度做交叉验证。模型被改成同时接收电源通道和总线事务通道的输入如果电压凹陷伴随的是正常的高总线事务率那大概率是负载突变如果电压凹陷发生时总线事务率很低、但时钟抖动计数明显上升那就是典型的攻击注入。把两类特征放进同一个GRU之后小幅度毛刺的检出率从78%提升到95%。这里也再次印证了项目一开始的结论异构信号组合比单一信号拆解的鲁棒性好得多。6.3 固定阈值怎么调都不完美于是做了场景门控修完前两个问题后我们开始做细粒度调优。调优过程中发现固定阈值必然在某个场景吃亏。CPU空闲态下一点电压扰动都很显眼误报率比较低CPU高负载态下电压波动天然就大同一个阈值会导致大量漏报。把阈值调低漏报减少但空闲态误报猛增调高反过来。后来我们做了一个不算复杂但很有效的改进场景门控。先用一个非常轻量的规则分类器判定当前SoC处于哪种负载模式再根据模式选择不同的异常阈值和模型参数。空闲态用更敏感的参数高负载态用更保守的参数。实测下来误报率从0.15%降到0.08%小幅度攻击检出率从95%升到98%。这个改进只增加了不到10%的硬件资源性价比很高。6.4 攻防拉练之后的复盘数据三轮拉练结束后我们把结果汇总成一张表作为这个监控方案的基线结论攻击形态攻击检出率告警延迟误报率响应等级大幅电源毛刺99.8%0.5ms0.02%高小幅电源毛刺98.1%0.8ms0.05%中时钟干扰99.3%0.6ms0.03%中调试接口异常访问96.8%1.0ms0.08%低组合攻击99.1%0.9ms0.06%高从这些数据可以看出越依赖数字侧特征的类型延迟相对越高因为需要积累更多总线事务样本。不过整体还是满足最初设置的门槛。考虑到这是一套完全在SoC内部闭环运行的监控系统这个结果已经达到我们预期的工程目标。7. 复盘与可复用思路这套监控架构还能用在哪些地方7.1 这次实战里最值钱的三个判断如果让我自己复盘排个序这三个判断最值钱。第一先定义“要能检测什么”再碰传感器。项目前两周我们基本没写代码一直在做威胁模型到观测点的映射。很多类似项目失败不是因为模型不够强而是因为信号和风险不对应拿到再多数据也是噪声。第二数据切分按注入批次做不按样本做。这个细节几乎决定了训练出来的模型是否可信。如果不这么做后面所有攻防拉练评估都会虚高项目组会在一个自欺欺人的指标上浪费大量时间。第三把“告警”和“响应”分开设计。神经网络负责感知安全软件负责处置。两者不耦合监控引擎的能力边界才清晰误报也不会直接变成设备事故。这个设计让系统获得了很大的工程灵活性。7.2 可复用的四层监控框架这套方案沉淀下来可以拆成四层采集层、特征层、推理层、响应层。采集层负责把电压、电流、时钟抖动、总线事务、ECC错误这些异构信号统一同步到采样缓冲区特征层负责滑窗、归一化和时间对齐推理层负责轻量级神经网络推理和分类响应层负责把告警翻译成中断、日志、复位等安全动作。这四层之间的接口都是一组标准化的内存描述符和中断向量不绑定具体的网络模型或传感器型号。后续如果换了更先进的模型只需要替换推理层如果加新的攻击观测点也只需要给采集层加一个探针通道再跑一遍数据训练。这种分层方式让后续维护成本低了很多。7.3 后续演进方向这次的原型验证完成后我们列出了三个后续方向。一个是把单芯片监控改成多芯片协同监控让安全监控的结果在板级多个SoC之间交叉验证降低单芯片误报。另一个是给推理引擎加“片上增量学习”能力在系统重启后根据少量新样本快速调整模型权重适应芯片老化和环境漂移。还有一个更远期但很有意思的方向是把形式化验证的断言和神经网络模型的输出绑定让“模型告警”能直接映射到可验证的安全性质例如“在告警后的N毫秒内禁止密钥导出操作”。如果这个能落地AI监控就不只是事后报警而是能被安全设计规范真正量化约束的一部分。我最后想说的是做这类项目的核心耐心往往不在模型训练而在数据链路的打磨。从选探针、做时间对齐、跑故障注入到把几十万个样本喂给一个不到一MB的模型每一步都比想象中更琐碎。但只要把路径走通那种“芯片自己能感知异常并主动告警”的实感确实比跑通一个Demo要有意思得多。如果你们也在琢磨给自家SoC加智能监控希望这篇实战记录能帮你们少踩几个坑尤其是按注入批次划分训练数据、以及给正常复位和负载波动留够样本这两条一定不要省。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询