1. 固件存储安全威胁建模
固件存储安全不是“把 Flash 加密打开”这么简单。一个 IoT 设备从产线烧录、出厂运输、现场运行到 OTA 升级,固件会以镜像、分区、密钥、证书、配置等多种形态存在于不同介质中,每一处都可能成为攻击者的入口。威胁建模的价值,就是在写代码之前,先把“谁想攻击、攻击什么、从哪进来、会造成什么后果”讲清楚,让后续的加密、签名、访问控制有明确靶点。
一、先划清边界:资产、威胁源与攻击面
威胁建模的第一步是确定系统边界。以一台典型的 Wi-Fi 智能摄像头为例,其固件存储相关资产至少包括:
- 固件镜像:BootROM 之后的 SPL、U-Boot、Linux 内核、根文件系统,通常位于 SPI NOR 或 eMMC。
- 密钥与证书:设备私钥、TLS 客户端证书、OTA 验签公钥、对称密钥(如 AES-128 的设备密钥)。
- 配置与身份数据:Wi-Fi 凭据、设备序列号、云端接入 Token、调试口令。
- 启动状态:安全启动使能标志、回滚计数器、分区表与校验值。
威胁源可分为三类:远程网络攻击者(通过 OTA 接口、Web 管理页、云通道)、物理接触攻击者(拆机后接 SPI 编程器、UART、JTAG)、供应链内部人员(产线泄露密钥、植入后门)。攻击面则对应这些威胁源可触达的接口:SPI Flash 引脚、UART 调试口、USB 升级口、OTA 下载 URL、本地 Web 服务、以及固件包本身。
二、STRIDE 建模:把威胁翻译成可检查的条目
STRIDE 是微软提出的威胁分类方法,六类威胁分别对应不同的安全属性:Spoofing(身份伪造)破坏认证,Tampering(篡改)破坏完整性,Repudiation(抵赖)破坏不可否认性,Information Disclosure(信息泄露)破坏机密性,Denial of Service(拒绝服务)破坏可用性,Elevation of Privilege(权限提升)破坏授权。对固件存储而言,最常命中的是 Tampering、Information Disclosure 和 Elevation of Privilege。
建模时不要只写“固件可能被篡改”,而要落到具体数据流上。例如:OTA 包从云端下载到设备,经解密、验签、写入备用分区、重启切换。这条数据流上,Tampering 对应“攻击者替换 OTA 包或篡改下载后的临时文件”;Information Disclosure 对应“OTA 包内嵌私钥被提取”;Elevation of Privilege 对应“篡改后的固件获得 root 并关闭安全启动”。每条威胁再给出缓解措施和验证方法,模型才具备工程价值。
三、案例:智能摄像头固件存储威胁模型
下面给出一个可复用的建模案例。设备采用 SPI NOR Flash 存储 U-Boot、内核与根文件系统,OTA 通过 HTTPS 下载差分包,支持 A/B 分区。我们按数据流逐条分析。
| 数据流 / 环节 | STRIDE 威胁 | 缓解措施 | 验证方法 |
|---|---|---|---|
| 产线烧录固件到 SPI Flash | Tampering:产线工具被替换,写入恶意镜像 | 烧录站使用签名镜像,烧录后回读校验 SHA-256 | 随机抽检回读哈希与发布清单比对 |
| 设备启动加载 U-Boot | Elevation of Privilege:篡改 U-Boot 关闭验签 | BootROM 校验 SPL,SPL 校验 U-Boot,逐级签名 | 修改 U-Boot 一个字节,设备应停在 BootROM 阶段 |
| OTA 包下载到临时分区 | Spoofing:DNS 劫持指向假服务器 | 双向 TLS + 证书固定(pinning) | 用自签证书搭建假服务器,设备应拒绝连接 |
| OTA 包解密与验签 | Information Disclosure:包内私钥被提取 | 私钥不进入固件包,仅存于 OTP / 安全元件 | 解包后搜索 PEM 头与已知密钥指纹,应为空 |
| 写入备用分区并切换 | Tampering:写入过程中断电导致半包 | A/B 分区 + 写入完成后置有效标志,失败回滚 | 写入 50% 时断电,重启应仍运行旧版本 |
| 运行时读取配置分区 | Information Disclosure:Wi-Fi 凭据明文存储 | 凭据使用设备唯一密钥加密,密钥不落盘 | 直读 Flash 内容,凭据区域应为密文 |
四、把模型变成可执行的检查项
威胁模型如果只停留在文档里,很快会过期。建议把它转成一份“固件存储安全检查表”,在每次版本发布前逐项确认。以下字段可直接用于评审记录:
检查项 | 期望结果 | 证据
-------------------------------|-----------------------------|----------------------------
镜像签名覆盖 BootROM 之后全链 | 每一级均验签 | 启动日志 + 篡改测试记录
私钥是否出现在固件包内 | 否 | 解包扫描报告
Flash 中凭据是否加密 | 是 | 直读十六进制截图
OTA 是否校验版本回滚 | 拒绝低于回滚计数的包 | 降级测试日志
调试口是否在量产固件关闭 | UART/JTAG 不可交互 | 硬件连接测试
A/B 分区断电回滚是否有效 | 可回到旧版本 | 断电注入测试记录
最后要强调,威胁建模是迭代活动。当设备新增蓝牙配网、本地 AI 推理或第三方插件时,攻击面会变化,模型需要重新评审。建议把资产清单、数据流图和 STRIDE 表纳入版本管理,与固件代码同仓维护,让安全设计随产品一起演进。