3、威胁模型分析:攻击者如何物理接触设备、常见攻击路径(UART、JTAG、SPI、I2C、逻辑分析仪)、Flash读取风险概述

TinyML设备通常部署在物理可触及的环境中——智能家居传感器、工业监测节点、农业物联网终端、医疗穿戴设备等。与云端服务器不同,这些设备缺乏物理隔离保护,攻击者可以购买同款设备、拆解外壳、使用逻辑分析仪或编程器直接探测芯片引脚。本章将系统分析物理接触场景下的威胁模型,梳理UART、JTAG、SPI、I2C等常见调试与存储接口的攻击路径,并重点阐述Flash读取风险及其对模型权重保密性的影响。

物理攻击者 拆解/探针/编程器 UART调试口 Shell/日志/引导 JTAG/SWD 调试/内存读写/熔丝 SPI/I2C总线 外部Flash/传感器 逻辑分析仪 总线嗅探/时序分析 MCU/SoC Flash存储 模型权重 密钥/固件 读保护(RDP) 加密存储 风险等级 UART: 中 JTAG: 高 SPI/I2C: 高

上图展示了TinyML设备物理攻击的完整威胁链路。攻击者通过拆解设备外壳,接触PCB板上的调试接口、存储芯片或总线引脚,利用UART获取交互Shell,通过JTAG/SWD直接读写内存,或使用逻辑分析仪嗅探SPI/I2C总线上的数据流。最终目标均指向Flash中存储的模型权重、密钥和固件。下面将逐一分析各攻击路径的技术细节与防护要点。

3.1 核心原理:物理接触攻击的威胁建模框架

威胁建模的核心是识别资产、攻击面、攻击者能力与攻击路径。对于TinyML设备,最重要的资产是模型权重——它代表了训练数据的知识浓缩,是商业竞争力的核心。其次是加密密钥(用于OTA固件签名、通信加密)和固件本身(可能包含算法逻辑)。攻击者的物理接触能力决定了攻击路径的选择:

  • 无侵入式攻击:仅通过外部接口(如USB、网络)进行探测,不拆解设备。此类攻击获取的信息有限,但可尝试固件升级漏洞或侧信道分析。
  • 侵入式攻击:拆解外壳,使用逻辑分析仪、JTAG调试器、编程器等工具直接接触PCB上的测试点、芯片引脚或Flash芯片。这是本章讨论的重点。
  • 半侵入式攻击:通过化学腐蚀或激光照射去除芯片封装,但不破坏钝化层,利用聚焦离子束(FIB)或光子发射分析读取内部数据。此类攻击成本高,通常针对高价值目标。

威胁建模的关键在于评估攻击者的时间成本与设备价值。对于售价几十元的传感器节点,攻击者不太可能投入数万美元进行FIB逆向;但使用50美元的树莓派配合开源工具,即可在数小时内完成UART或SPI嗅探。因此,防护策略应优先阻断低成本攻击路径。

3.2 常见攻击路径详解

3.2.1 UART调试口攻击

UART(通用异步收发器)是嵌入式设备最常见的调试接口。许多TinyML设备在开发阶段保留UART用于日志输出、命令行交互或固件升级。生产时若未禁用,攻击者只需找到PCB上的TX/RX/GND测试点,使用USB转TTL适配器即可连接。

攻击流程:

  1. 拆解设备,目视寻找标有"UART"、"DEBUG"、"TX"、"RX"的排针或测试点。
  2. 使用万用表测量引脚电压,通常TX/RX在空闲时为3.3V或1.8V。
  3. 连接USB转TTL模块,使用minicom或PuTTY打开串口终端,尝试常见波特率(115200、57600、9600)。
  4. 若设备启动时输出引导日志,可能泄露内核版本、文件系统类型、甚至root shell。

实战中,部分设备在UART上提供uboot或bootloader交互界面,攻击者可中断启动过程,修改启动参数进入单用户模式,直接挂载文件系统读取Flash内容。即使没有Shell,UART日志也可能泄露内存地址、密钥片段或模型加载路径。

风险提示:UART接口在量产固件中必须禁用或至少移除调试Shell。若必须保留日志输出,应仅输出非敏感信息(如传感器读数),并确保日志中不包含内存地址、密钥哈希或文件路径。

3.2.2 JTAG/SWD调试接口攻击

JTAG(联合测试工作组)和SWD(串行线调试)是芯片级调试接口,允许攻击者完全控制CPU:读写任意内存地址、设置断点、单步执行、甚至修改Flash内容。对于ARM Cortex-M系列MCU,SWD只需2根线(SWDIO和SWCLK),更容易被隐藏或禁用。

攻击路径分析:

接口类型 引脚数量 攻击能力 检测难度
JTAG 4-5 (TMS, TCK, TDI, TDO, TRST) 全内存读写、Flash编程、边界扫描 中(需找到测试点)
SWD 2 (SWDIO, SWCLK) 与JTAG类似,但引脚更少 高(引脚易隐藏)

攻击者使用OpenOCD或J-Link连接调试接口后,可执行以下操作:

# 读取整个Flash镜像
openocd -f interface/stlink.cfg -f target/stm32f1x.cfg -c "init" -c "dump_image flash_dump.bin 0x08000000 0x100000" -c "shutdown"

# 读取SRAM中的密钥
openocd -c "mdw 0x20000000 64"

即使MCU启用了读保护(RDP),部分芯片存在已知绕过漏洞(如STM32F1的RDP降级攻击)。攻击者可利用电压毛刺或温度冲击使保护机制失效,然后通过调试接口读取Flash。

3.2.3 SPI/I2C总线嗅探

TinyML设备常使用外部SPI Flash存储模型权重(如W25Q64),或通过I2C连接传感器。攻击者使用逻辑分析仪(如Saleae Clone,约100元)即可捕获总线上的所有通信数据。

SPI Flash读取攻击:

  1. 定位PCB上的SPI Flash芯片(常见封装SOIC-8),查阅数据手册确认引脚定义。
  2. 使用测试夹或飞线连接逻辑分析仪的8个通道到CS、CLK、MOSI、MISO、VCC、GND。
  3. 触发设备启动过程,捕获CPU对Flash的读取命令(0x03读命令、0x9F读ID等)。
  4. 使用SPI解码器解析数据,直接获得模型权重二进制文件。

I2C总线同样存在风险。若模型权重通过I2C从安全芯片加载,攻击者可嗅探通信内容。更隐蔽的是,攻击者可以主动注入I2C命令,伪装成合法主机修改设备配置,或读取传感器数据流中的敏感信息。

关键洞察:SPI/I2C嗅探攻击的难点不在于技术,而在于定位测试点。多层PCB板或BGA封装的芯片会增加攻击难度,但4层板以下的设计中,走线通常暴露在外层,使用放大镜即可追踪。

3.2.4 逻辑分析仪与侧信道分析

逻辑分析仪不仅用于总线解码,还可用于时序侧信道分析。例如,模型推理过程中,MCU访问Flash的地址序列与输入数据相关。攻击者通过分析CS/CLK信号的时序模式,可能推断出模型的分支结构或激活函数类型。更高级的攻击是功耗分析(SPA/DPA),通过测量MCU的电流变化来提取密钥或模型参数。

对于TinyML设备,功耗分析尤其危险,因为模型推理涉及大量MAC(乘加)运算,功耗波形与权重值存在相关性。攻击者采集数百次推理的功耗轨迹,使用差分功耗分析(DPA)即可恢复部分权重。

3.3 Flash读取风险概述

Flash是TinyML设备中模型权重的最终存储介质。无论使用内部Flash还是外部SPI Flash,攻击者的目标都是读取其中的二进制数据。Flash读取风险可分为三个层次:

风险层次 攻击方式 所需设备成本 成功概率
直接读取 编程器(如CH341A)直接读取SPI Flash 约50元 极高(若未加密)
调试接口读取 JTAG/SWD绕过RDP读取内部Flash 约200元 高(取决于芯片型号)
芯片级逆向 FIB、电子显微镜、化学腐蚀 数万至数十万元 中(针对高价值目标)

直接读取SPI Flash是最常见的攻击方式。攻击者只需热风枪拆下Flash芯片,放入编程器,即可读取全部内容。若模型权重以明文存储,攻击者可直接获得完整的神经网络参数。即使权重经过混淆(如XOR),攻击者也可通过分析固件中的解密代码找到密钥。

严重性说明:Flash读取风险不仅导致模型泄露,还可能暴露加密密钥。若设备使用相同的密钥加密所有通信数据,攻击者读取Flash后即可解密历史通信记录,造成更大范围的数据泄露。

3.4 案例拆解:智能门锁模型权重提取全过程

背景与约束:某智能门锁使用TinyML进行人脸识别,模型权重存储于外部SPI Flash(W25Q32),MCU为STM32L4系列。设备售价约800元,攻击者目标为提取模型权重以复制门锁系统。

初始现象:攻击者购买同款门锁,拆解后观察到PCB上有8脚SOIC封装芯片,丝印为"25Q32",确认为Winbond SPI Flash。同时发现PCB边缘有4个未标注的排针孔,疑似调试接口。

关键输入数据:

  • SPI Flash型号:W25Q32(容量4MB,标准SPI接口)
  • MCU型号:STM32L431(支持SWD调试,默认RDP级别0)
  • 排针孔电压测量:VCC=3.3V,GND=0V,另外两脚空闲时均为3.3V(疑似SWDIO和SWCLK)

分析判断过程:攻击者首先尝试直接读取SPI Flash。使用CH341A编程器配合夹子,无需拆焊芯片,直接读取4MB内容。分析二进制文件,发现前1MB为固件代码,后3MB为全零数据。在固件中搜索模型特征(如"tflite"、"model"字符串),未找到明显标记。进一步分析发现固件末尾有AES-256-CBC加密的密文块,密钥存储于MCU内部Flash。

实际操作步骤:

  1. 使用ST-Link连接SWD排针,OpenOCD尝试连接。由于RDP级别为0,直接连接成功。
  2. 读取MCU内部Flash(0x08000000起始,共512KB),保存为mcu_dump.bin。
  3. 在mcu_dump.bin中搜索AES密钥模式(32字节随机数据),结合固件中的密钥派生函数,定位到密钥存储地址0x0803F000。
  4. 使用密钥解密外部SPI Flash中的密文块,获得完整的TensorFlow Lite模型文件(约2.8MB)。
  5. 使用Netron可视化模型结构,提取全部权重参数。

结果对比:攻击总耗时约3小时,成本约150元(CH341A编程器+ST-Link)。成功提取模型后,攻击者可在树莓派上复现门锁的人脸识别功能,并绕过活体检测(因为模型权重完全一致)。

风险与代价:该攻击暴露了三个设计缺陷:外部Flash未加密、SWD接口未禁用、RDP未启用。修复方案为:启用RDP级别1、禁用SWD、使用MCU内部唯一ID派生密钥加密外部Flash。

复盘经验:对于TinyML设备,外部存储必须加密,且密钥不能存储在MCU内部Flash的固定地址。更安全的做法是使用独立安全芯片(如ATECC608A)存储密钥,或使用MCU的OTP区域存储密钥并启用RDP。

3.5 常见误区与总结复盘

误区一:认为"小设备不值得攻击"。实际上,攻击者可能批量提取低价值设备的模型,用于训练对抗样本或构建更强大的攻击工具。一次成功的提取可被无限复制。

误区二:混淆"固件加密"与"模型加密"。固件加密保护的是代码不被逆向,但模型权重可能以独立文件存储。攻击者即使无法解密固件,也可通过总线嗅探获取模型加载时的明文数据。

误区三:忽视调试接口的残留风险。许多开发板在量产时仅移除了调试排针,但PCB上仍留有焊盘。攻击者使用焊锡和飞线即可恢复连接。正确做法是在固件中永久禁用调试接口,并烧断对应的熔丝位。

误区四:依赖混淆而非加密。XOR、字节重排等混淆技术可被自动化解混淆工具在数分钟内破解。真正的安全必须依赖标准加密算法(AES-256)和硬件安全模块。

防护优先级建议:1) 启用MCU读保护(RDP最高级别);2) 禁用所有调试接口;3) 外部Flash数据加密存储;4) 密钥存储在安全元素或OTP区域;5) 在PCB设计时隐藏测试点,使用BGA封装或树脂灌封增加物理攻击难度。