2、威胁建模:STRIDE模型、攻击树分析、资产识别与风险评估方法
威胁建模这事,说白了就是「先想好敌人会怎么打你」。
我做了这么多年嵌入式安全,见过太多产品上线后被攻破的案例。
大部分问题都出在一个地方——根本没想过谁会攻击、怎么攻击。
所以这一章,咱们把威胁建模的几把刷子捋清楚。
STRIDE模型、攻击树分析、资产识别、风险评估,一个一个来。
2.1 资产识别:先搞清楚你要保护什么
很多人一上来就谈攻击,我觉得顺序反了。
你得先问自己:我的系统里,什么东西最值钱?
在嵌入式主控系统里,常见的资产包括:
- 固件镜像——这是核心知识产权,丢了就完了
- 密钥证书——签名密钥、加密密钥、设备身份证书
- 敏感配置——网络参数、服务器地址、调试接口密码
- 用户数据——如果涉及个人信息或业务数据
- 安全启动链——整个信任链的根
举个例子,我曾经帮一个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(欺骗)。
因为启动链的核心就是「验证代码没被改过,且来源可信」。
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的列为「低危」,可以接受或后续优化。
2.5 知识体系总览
下面这张图,把本章的核心逻辑串起来了:
你看,整个流程是环环相扣的。
先知道有什么资产,再用STRIDE找出威胁,用攻击树细化路径,最后用DREAD排优先级。
这样出来的结果,才是可落地、可执行的。
嗯,这一章就到这里。
记住:没有完美的安全,只有经过权衡的安全。
威胁建模就是帮你做权衡的工具。
公众号:蓝海资料掘金营,微信deep3321