3. MCU安全基础
在TinyML项目中,MCU作为部署神经网络模型和敏感数据的物理载体,其安全性直接决定了整个AI系统的可信边界。与云端或PC端不同,MCU通常暴露在物理可接触的环境中(如工业传感器节点、智能门锁、可穿戴设备),攻击者不仅可以通过网络发起攻击,更可以借助物理手段直接探测芯片内部状态。理解MCU面临的威胁模型,是设计可信执行环境(TrustZone)的前提。本章将系统梳理固件篡改、侧信道攻击、逆向工程三类核心威胁,并深入解析安全启动与加密存储这两项基础防护机制的工程实现路径。
上图展示了MCU安全威胁与基础防护机制之间的整体映射关系。在实际工程中,这三类威胁往往相互交织:攻击者可能先通过逆向工程获取固件结构,再实施精确的固件篡改;侧信道攻击则可能被用于提取加密存储的密钥,从而瓦解整个防护体系。因此,基础防护机制必须协同工作,形成纵深防御。
3.1 固件篡改:从外部Flash到代码执行的攻击路径
核心原理
固件篡改是指攻击者修改MCU外部或内部Flash中存储的程序代码、模型参数或配置数据,从而改变设备行为。MCU的固件通常存储在外部SPI Flash或内部Flash中,攻击者可以通过物理探针、JTAG/SWD调试接口、或者利用固件升级流程中的漏洞,将恶意代码写入Flash。篡改后的固件可能导致AI模型输出错误结果、绕过安全认证、甚至将设备变成僵尸网络的一部分。
判断方法与攻击面分析
评估固件篡改风险时,需要从以下三个层面进行审查:
- 调试接口暴露:检查JTAG/SWD端口是否在生产后仍处于开启状态。若未锁定,攻击者可直接连接调试器读取和修改Flash内容。
- 固件升级机制:分析升级包是否经过数字签名验证。若升级过程仅做CRC校验或完全无校验,攻击者可伪造升级包实施篡改。
- 物理访问可能性:评估设备部署环境。工业控制器、智能电表等设备可能被拆解,攻击者可使用SPI探针直接嗅探或改写外部Flash。
案例拆解:智能门锁固件篡改攻击
某智能门锁产品使用STM32L4系列MCU,固件存储在外部SPI Flash中。攻击者通过以下步骤实施篡改:
- 物理获取:从市场上购买同款门锁,拆解后使用逻辑分析仪监听SPI总线,捕获固件升级时的通信数据。
- 固件提取:利用未锁定的SWD接口,通过ST-Link工具直接读取内部Flash镜像,分析固件结构。
- 逆向定位:在固件中找到密码验证函数,通过补丁方式跳过验证逻辑,生成恶意固件。
- 回写篡改:将恶意固件通过SPI编程器写回Flash,重新封装设备。
攻击结果:攻击者制作的“万能钥匙”门锁可被任意开启。复盘发现,该产品未启用安全启动,且SWD接口未锁定,导致攻击成本极低(仅需约200元工具)。修复方案为:启用安全启动验证固件签名,同时将RDP级别设为最高,彻底关闭调试接口。
常见误区与总结
- 误区一:认为“固件加密存储”即可防篡改。实际上,加密只保证机密性,无法防止被修改后的固件运行。必须使用签名机制保证完整性。
- 误区二:忽略内部Flash与外部Flash的差异。内部Flash通常有硬件保护机制,而外部SPI Flash完全暴露在总线中,需要额外的认证机制。
- 总结:固件篡改防护的核心是“验证而非隐藏”。通过安全启动链,确保任何未签名的代码都无法在MCU上执行。
3.2 侧信道攻击:从物理泄露中提取秘密信息
核心原理
侧信道攻击利用MCU在执行密码运算或AI推理时泄露的物理信息(功耗、电磁辐射、执行时间)来推断秘密数据。在TinyML场景中,攻击者尤其关注模型参数和密钥的提取。例如,在执行AES加密时,MCU的功耗波形与密钥位存在相关性;在执行神经网络推理时,不同层的计算功耗特征可能泄露模型结构信息。
攻击类型与检测方法
| 攻击类型 | 物理信道 | 目标数据 | 检测难度 |
|---|---|---|---|
| 简单功耗分析(SPA) | 功耗波形 | 密钥/操作序列 | 中 |
| 差分功耗分析(DPA) | 多条功耗曲线统计 | 密钥字节 | 高 |
| 电磁辐射分析(EMA) | 近场电磁探头 | 密钥/数据总线 | 高 |
| 时序分析 | 执行时间 | 密钥位/分支条件 | 低 |
检测侧信道风险的方法包括:使用高精度示波器(至少1GHz带宽)采集功耗曲线,通过统计测试(如TVLA测试)判断泄露是否存在。对于AI模型,可通过分析推理时间与输入数据的相关性,判断是否存在时序侧信道。
实战场景:基于功耗分析的模型参数提取
某TinyML语音唤醒词模型部署在Cortex-M4 MCU上。攻击者使用100Ω采样电阻串联在MCU电源路径中,以50MS/s采样率采集推理过程中的功耗轨迹。通过分析不同层激活函数计算时的功耗特征,攻击者能够:
- 识别出模型的总层数和每层类型(卷积层功耗峰值较高且规律明显)。
- 通过对比已知输入下的功耗差异,推断出部分权重值的符号位。
- 结合模型结构知识,重构出简化版模型,实现“模型窃取”。
常见误区与总结
- 误区一:认为侧信道攻击只针对密码算法。实际上,任何依赖秘密数据的操作都可能泄露信息,包括AI模型推理。
- 误区二:过度依赖单一防护手段。掩码、隐藏、恒定时间等对策需要组合使用,且需经过实际攻击验证。
- 总结:侧信道防护是安全性与性能的权衡。在TinyML场景中,应优先保护密钥和模型IP,对非关键路径可适当放宽。
3.3 逆向工程:固件分析与知识产权保护
核心原理
逆向工程是指攻击者通过静态分析(反汇编、反编译)和动态分析(调试、跟踪)手段,从固件中提取算法逻辑、密钥、模型结构等敏感信息。MCU固件通常以二进制形式存储,但现代反汇编工具(如Ghidra、IDA Pro)能够高效地将其还原为可读的汇编代码甚至伪C代码。对于TinyML项目,逆向工程的主要目标是窃取训练好的神经网络模型——这往往是最核心的知识产权。
逆向工程的主要手段
- 静态分析:通过反汇编器将固件转换为汇编代码,识别关键函数(如密码验证、模型推理入口),提取硬编码密钥或模型权重表。
- 动态调试:使用JTAG/SWD调试器在运行时修改寄存器值、跳过安全检查、dump内存中的模型参数。
- 故障注入:通过电压毛刺、时钟毛刺或激光照射,使MCU在特定时刻执行错误分支,绕过安全校验。
案例拆解:工业传感器AI模型窃取
某工业振动分析传感器使用MCU内置的神经网络进行故障诊断。竞争对手通过以下步骤窃取模型:
- 固件获取:拆解传感器,使用SPI探针读取外部Flash中的固件镜像(约2MB)。
- 静态分析:使用Ghidra加载固件,定位到模型推理函数。通过分析权重存储格式,发现模型为3层全连接网络,权重以FP32格式连续存储。
- 参数提取:编写脚本从固件二进制中提取全部权重和偏置,共约150KB数据。
- 模型复现:在PC端使用Python重建模型,输入相同测试数据,输出结果与原设备完全一致。
整个攻击过程耗时约3天,成本仅为拆解工具和软件许可费用。复盘发现,该产品未对模型参数进行加密存储,且未启用任何代码混淆措施。改进方案包括:使用加密存储保护模型参数,在固件中加入反调试检测,以及考虑使用模型混淆技术。
防护策略与总结
| 防护层级 | 具体措施 | 有效性 | 性能影响 |
|---|---|---|---|
| 存储加密 | 使用AES-128/256加密模型参数 | 高 | 低(解密开销) |
| 代码混淆 | 控制流平坦化、指令替换 | 中 | 中(代码膨胀) |
| 反调试 | 检测调试寄存器、时序校验 | 中 | 低 |
| 硬件保护 | TrustZone隔离、安全存储 | 高 | 低 |
3.4 安全启动与加密存储:构建可信根
安全启动的核心原理
安全启动(Secure Boot)是一种逐级验证的机制,确保MCU只执行经过授权的固件。其基本流程为:芯片内置的ROM代码(信任根)首先验证Bootloader的签名,Bootloader再验证应用程序的签名,形成一条完整的信任链。任何一级验证失败,MCU将拒绝启动或进入恢复模式。
典型安全启动流程(以Cortex-M33为例):
1. ROM代码读取Bootloader头部信息
2. 使用公钥A验证Bootloader的签名(RSA-2048或ECDSA-P256)
3. 验证通过后,跳转到Bootloader执行
4. Bootloader读取应用程序头部信息
5. 使用公钥B验证应用程序的签名
6. 验证通过后,跳转到应用程序执行
7. 若验证失败,进入安全恢复模式(仅允许固件升级)
加密存储的实现要点
加密存储用于保护MCU Flash中的敏感数据(模型参数、密钥、用户数据)。实现时需注意:
- 密钥管理:加密密钥应存储在MCU内部的安全存储区(如OTP区域或TrustZone安全世界),而非Flash中。
- 加密算法选择:推荐使用AES-128-GCM,兼顾机密性和完整性校验。
- 随机数生成:使用硬件真随机数发生器(TRNG)生成初始化向量(IV),避免IV重用。
实战案例:TinyML设备的安全启动部署
某可穿戴健康监测设备选用NXP i.MX RT1062(Cortex-M7)作为主控,部署心率异常检测模型。安全方案设计如下:
- 信任根建立:在芯片出厂时,将NXP提供的根公钥哈希烧录到eFuse中,并锁定RDP级别。
- Bootloader签名:使用NXP提供的工具链,对Bootloader进行RSA-2048签名。
- 应用签名:在CI/CD流水线中集成签名步骤,每次构建自动对固件进行ECDSA-P256签名。
- 模型加密:使用AES-128-GCM加密模型参数,密钥由芯片内部OTP密钥派生。
- 启动验证:设备上电后,ROM验证Bootloader签名,Bootloader验证应用签名,应用在加载模型时解密并校验完整性。
部署后,攻击者即使物理获取Flash内容,也无法运行篡改固件或提取明文模型参数。实测启动时间增加约120ms(主要为RSA验证),在可接受范围内。
常见误区与总结
- 误区一:认为安全启动可以防止所有攻击。实际上,它只能保证固件完整性,无法防止侧信道攻击或运行时漏洞利用。
- 误区二:忽略密钥轮换和吊销机制。当私钥泄露时,需要能够通过固件升级更新公钥。
- 总结:安全启动和加密存储是MCU安全的基础,但必须与TrustZone隔离、运行时保护等措施结合,才能构建完整的可信执行环境。
本章详细剖析了MCU面临的三大类安全威胁及对应的基础防护机制。理解这些威胁模型和防护原理,是后续掌握TrustZone在TinyML中应用的关键前提。在实际项目中,应根据威胁分析结果、性能预算和成本约束,选择合适的安全组件组合,构建纵深防御体系。