3. 安全威胁建模
安全基线与验收不是“把能关的端口都关掉”,而是先回答三个问题:我们要保护什么、对手会怎么打、打成功后会造成什么后果。威胁建模就是把这三个问题结构化,让后续的基线项、测试用例和验收判据都有出处。本节围绕 STRIDE 分类、攻击树分析、嵌入式典型威胁场景与资产识别展开,形成可落地的建模流程。
一、核心原理:从资产到威胁的结构化推导
威胁建模的起点是资产识别。嵌入式设备的资产不只是固件二进制,还包括:启动链(BootROM、SPL、U-Boot)、密钥与证书、调试接口(JTAG/SWD/UART)、通信通道(BLE、Zigbee、MQTT、CAN)、设备身份(Device ID、证书私钥)、用户数据与配置、以及设备被攻陷后可作为跳板进入的云端或内网资源。资产识别要标注“价值”和“暴露面”:价值决定保护强度,暴露面决定攻击可达性。
在资产清单之上,用 STRIDE 对每一条数据流和交互点做分类检查。STRIDE 是六类威胁的缩写:Spoofing(仿冒)、Tampering(篡改)、Repudiation(抵赖)、Information Disclosure(信息泄露)、Denial of Service(拒绝服务)、Elevation of Privilege(权限提升)。它的价值在于“不遗漏”:对每个接口、每条消息、每个存储点逐项过一遍,比凭经验拍脑袋更可靠。
二、方法流程:STRIDE 与攻击树的配合使用
推荐流程为:资产识别 → 画数据流图(DFD)→ 标注信任边界 → STRIDE 逐项分析 → 对高危路径建攻击树 → 映射到基线与验收项。数据流图不必复杂,标出外部实体、进程、数据存储、数据流和信任边界即可。信任边界是重点:跨边界处就是攻击者最可能下手的位置。
STRIDE 分析时,对每个元素问对应的问题:外部实体是否可被仿冒?数据流是否可被篡改或窃听?进程是否可被提权?数据存储是否可被非授权读取?设备是否可被拒绝服务?操作是否可被抵赖?把答案记录为“威胁—影响—可能性—缓解措施”。
攻击树用于对高价值目标做纵深推演。根节点是攻击者目标(如“获取固件中的私钥”),子节点是达成目标的子目标或手段,叶子节点是具体攻击动作。攻击树能暴露“多条路径中只要一条成立即可成功”的现实,帮助确定优先级。
攻击树示例:获取设备私钥
根:读取设备私钥
├─ 物理接触
│ ├─ 读取未加密 Flash
│ ├─ 通过 UART 进入 U-Boot 并 dump
│ └─ 利用 JTAG 调试口读取内存
├─ 网络攻击
│ ├─ 利用固件升级接口上传恶意固件
│ ├─ 利用调试服务命令执行
│ └─ 利用弱口令登录管理页面
└─ 供应链
├─ 从固件包中提取硬编码密钥
└─ 从日志或配置文件中获取凭据
攻击树建好后,对叶子节点标注“可行性”和“所需条件”,再与 STRIDE 结果合并,形成威胁清单。清单中的每一项都要有明确的缓解措施和验收方法,例如“关闭 JTAG”对应“物理接口测试:尝试连接 JTAG 应无法读取内存”。
三、嵌入式设备典型威胁场景
嵌入式设备的威胁场景与通用 IT 有明显差异,常见的有:
- 固件提取与逆向:Flash 未加密、调试口未关闭,攻击者可直接读取固件并提取密钥、算法和硬编码凭据。
- 固件篡改与降级:升级包未签名或未校验版本,攻击者刷入恶意固件或降级到有漏洞的旧版本。
- 调试接口滥用:UART 暴露 shell、JTAG 可读写内存,攻击者获得设备控制权。
- 通信窃听与重放:BLE/Zigbee/无线通信未加密或未做防重放,攻击者可窃取数据或重放控制指令。
- 拒绝服务:资源受限设备易被大量连接、畸形报文或耗尽内存的攻击打瘫。
- 供应链与云侧风险:设备证书共用、云端接口鉴权不足,单台设备被攻陷后可横向影响其他设备。
这些场景的共同点是:攻击面往往来自“为了方便而保留的接口”和“为了省成本而省略的校验”。威胁建模的作用就是把这些“默认存在”的风险显式化。
四、资产识别清单与 STRIDE 映射表
下表给出一个可复用的资产—威胁映射模板,实际项目中可按设备类型增删。表中“验收关注点”直接对应后续基线测试项。
| 资产 | STRIDE 主要威胁 | 典型场景 | 验收关注点 |
|---|---|---|---|
| 启动链(BootROM/SPL/U-Boot) | 篡改、提权 | 刷入未签名引导程序 | 安全启动是否强制校验签名 |
| 固件与升级包 | 篡改、信息泄露 | 提取固件、降级攻击 | 签名校验、防回滚、加密存储 |
| 调试接口(JTAG/UART/SWD) | 提权、信息泄露 | 通过调试口读内存 | 量产是否关闭或鉴权 |
| 密钥与证书 | 信息泄露、仿冒 | 硬编码密钥被提取 | 密钥是否安全存储、是否可导出 |
| 无线通信通道 | 窃听、重放、仿冒 | 重放开锁指令 | 加密、防重放、双向认证 |
| 设备身份 | 仿冒、抵赖 | 伪造设备接入云端 | 一机一密、证书唯一性 |
| 云端接口 | 提权、DoS | 越权访问其他设备数据 | 鉴权、限流、输入校验 |
五、误区与复盘
复盘时建议检查三件事:第一,每条高危威胁是否都有明确的缓解措施和验收方法;第二,攻击树中“低成本高收益”的叶子节点是否已被基线覆盖;第三,信任边界是否随架构变化重新标注。只有把威胁建模的结论落到基线项和验收判据上,安全基线才不是一张静态清单,而是可验证、可迭代的工程约束。