2、威胁建模:STRIDE模型、攻击树分析、资产识别与风险评估方法

威胁建模这事,说白了就是「先想好敌人会怎么打你」。
我做了这么多年嵌入式安全,见过太多产品上线后被攻破的案例。
大部分问题都出在一个地方——根本没想过谁会攻击、怎么攻击。

所以这一章,咱们把威胁建模的几把刷子捋清楚。
STRIDE模型、攻击树分析、资产识别、风险评估,一个一个来。

2.1 资产识别:先搞清楚你要保护什么

很多人一上来就谈攻击,我觉得顺序反了。
你得先问自己:我的系统里,什么东西最值钱?

在嵌入式主控系统里,常见的资产包括:

  • 固件镜像——这是核心知识产权,丢了就完了
  • 密钥证书——签名密钥、加密密钥、设备身份证书
  • 敏感配置——网络参数、服务器地址、调试接口密码
  • 用户数据——如果涉及个人信息或业务数据
  • 安全启动链——整个信任链的根
我的经验: 我建议用一张表格把资产列出来,标上「机密性、完整性、可用性」三个维度的影响等级。这样后面做STRIDE时,就知道哪些资产值得重点保护。

举个例子,我曾经帮一个IoT网关做评估。
客户说「我们没什么机密数据」。
结果一查,固件里硬编码了云平台的API密钥。
嗯,这就是典型的「不知道自己有什么资产」。

2.2 STRIDE模型:六种攻击视角

STRIDE是微软提出的威胁分类模型。
每个字母代表一种威胁类型:

字母 威胁类型 含义 举例(嵌入式场景)
S Spoofing(欺骗) 冒充合法实体 伪造固件签名、冒充合法设备
T Tampering(篡改) 修改数据或代码 篡改Flash中的固件、修改配置参数
R Repudiation(抵赖) 否认做过某操作 攻击者否认刷过恶意固件
I Information Disclosure(信息泄露) 敏感数据被窃取 通过调试接口dump固件
D Denial of Service(拒绝服务) 系统不可用 反复触发看门狗复位、耗尽Flash寿命
E Elevation of Privilege(权限提升) 获得更高权限 从用户态提权到内核态

我个人习惯,在做安全启动链设计时,重点看 T(篡改)S(欺骗)
因为启动链的核心就是「验证代码没被改过,且来源可信」。

避坑指南: 我曾经遇到一个团队,只关注了固件完整性(防篡改),却忽略了欺骗攻击。结果攻击者伪造了一个合法的签名证书,直接绕过了验证。记住,STRIDE要一起看,不能只盯一个。

2.3 攻击树分析:把攻击路径画出来

攻击树是一种树形结构。
根节点是攻击者的最终目标,子节点是达成目标需要的步骤。

举个例子,针对「绕过安全启动」这个目标:

攻击目标:绕过安全启动
├── 1. 篡改BootROM代码
│   ├── 1.1 利用硬件漏洞(如JTAG未锁)
│   └── 1.2 利用ROM代码漏洞(如缓冲区溢出)
├── 2. 伪造签名
│   ├── 2.1 窃取私钥
│   │   ├── 2.1.1 从服务器侧窃取
│   │   └── 2.1.2 从设备侧提取(如未加密存储)
│   └── 2.2 破解签名算法(计算上不可行,忽略)
└── 3. 绕过验证流程
    ├── 3.1 篡改验证逻辑(如修改跳转条件)
    └── 3.2 利用时间窗口攻击(如复位时序攻击)

画攻击树的好处是什么?
你一眼就能看出,哪些路径是「低成本高收益」的。
比如上面这个树,「JTAG未锁」就是典型的低挂果实。

我的做法: 我一般先画一个粗粒度的攻击树,然后针对每个叶子节点做风险评估。叶子节点越容易实现,风险越高,就要优先加固。

2.4 风险评估方法:给威胁排个优先级

威胁不可能全部解决,资源有限。
所以你得知道哪些威胁最要命。

常用的方法是 DREAD模型,每个维度打分(1-10):

维度 含义 评分标准(举例)
Damage(损害) 攻击成功造成的损失 固件泄露=9分,临时拒绝服务=3分
Reproducibility(可复现性) 攻击能否稳定复现 每次都能成功=10分,需要特殊条件=2分
Exploitability(可利用性) 攻击难度 公开工具可用=9分,需要定制硬件=3分
Affected Users(受影响用户) 波及范围 所有设备=10分,个别设备=2分
Discoverability(可发现性) 漏洞是否容易被发现 公开已知=10分,需要逆向工程=4分

总分 = (D + R + E + A + D) / 5。
我一般把总分大于7的列为「高危」,必须修复。
4-7的列为「中危」,尽量修复。
小于4的列为「低危」,可以接受或后续优化。

注意: 评分是主观的,不同人打分可能差很多。我建议团队至少3个人一起打分,取平均值。另外,别忘了定期重新评估——攻击技术在进步,去年的低危今年可能就变高危了。

2.5 知识体系总览

下面这张图,把本章的核心逻辑串起来了:

威胁建模核心流程 1. 资产识别 固件/密钥/配置/数据 2. STRIDE分析 S/T/R/I/D/E 六类威胁 3. 攻击树分析 画出攻击路径 4. 风险评估(DREAD) 损害/可复现/可利用/影响/可发现 输出:威胁优先级列表 高危(≥7)→ 必须修复 中危(4-7)→ 尽量修复 迭代更新 威胁建模不是一次性的工作,需要随着系统演进持续更新

你看,整个流程是环环相扣的。
先知道有什么资产,再用STRIDE找出威胁,用攻击树细化路径,最后用DREAD排优先级。
这样出来的结果,才是可落地、可执行的。

核心观点: 威胁建模不是写文档交差,而是指导你「钱往哪花、力往哪使」。我见过太多团队花大价钱做加密,结果调试接口裸奔——这就是没做威胁建模的后果。

嗯,这一章就到这里。
记住:没有完美的安全,只有经过权衡的安全。
威胁建模就是帮你做权衡的工具。


公众号:蓝海资料掘金营,微信deep3321