3、威胁场景建模:使用STRIDE方法论、识别威胁场景、绘制数据流图(DFD)、建立威胁树
好,咱们进入第三章节。前面两章我们把TARA的框架和资产识别搞定了,现在手里有一堆资产清单。接下来要干什么?
说白了,就是要站在攻击者的角度,想想这些资产到底会怎么被搞坏。这就是威胁场景建模。
我个人习惯把这一章叫做「攻击者思维训练」。你想想看,如果你是一个黑客,你会怎么下手?
3.1 STRIDE方法论:六类威胁的「照妖镜」
STRIDE是微软提出来的威胁分类模型。六个字母,六类威胁。我在项目中遇到过不少团队,一上来就天马行空地 brainstorm,结果漏掉一大片。STRIDE就是帮你系统化地「扫雷」。
| 字母 | 威胁类型 | 核心问题 | 汽车场景举例 |
|---|---|---|---|
| S | Spoofing(欺骗) | 身份造假? | 伪造ECU ID,冒充合法节点发送CAN报文 |
| T | Tampering(篡改) | 数据被改? | 篡改OTA升级包,注入恶意固件 |
| R | Repudiation(抵赖) | 干了不认? | 攻击后删除日志,无法追溯是谁刷了ECU |
| I | Information Disclosure(信息泄露) | 秘密被看? | 通过OBD-II接口窃取车辆VIN、密钥 |
| D | Denial of Service(拒绝服务) | 服务瘫痪? | 向CAN总线发送大量高优先级报文,阻塞正常通信 |
| E | Elevation of Privilege(权限提升) | 越权操作? | 从信息娱乐系统提权到网关,控制制动系统 |
我的小技巧: 每次做威胁分析,我都会拿STRIDE清单一个一个过。别嫌麻烦。我曾经在一个TARA项目中,团队觉得「抵赖」在车里不重要,结果审核时被客户怼回来——没有日志完整性保护,出了事故谁负责?
3.2 绘制数据流图(DFD):把系统「解剖」开
DFD是威胁建模的骨架。没有DFD,你就是在黑盒里瞎猜。
DFD的核心元素就四个:外部实体、过程、数据存储、数据流。画的时候记住一个原则:先粗后细,逐层分解。
- 外部实体:人、云端、其他系统。比如驾驶员手机、TSP后台。
- 过程:执行操作的功能模块。比如「网关路由」、「OTA下载管理」。
- 数据存储:存放数据的地方。比如「密钥存储区」、「日志文件」。
- 数据流:数据移动的路径。比如「CAN报文」、「诊断请求」。
嗯,这里要注意。DFD不是架构图,别把硬件连线画进去。我们关注的是数据,不是电线。
避坑指南: 我曾经见过一个团队,把DFD画成了网络拓扑图,交换机、路由器全上去了。结果威胁分析时全在讨论物理攻击,忽略了应用层的威胁。记住:DFD是数据视角,不是硬件视角。
下面这张图是我常用的DFD示例,针对一个典型的OTA升级场景:
3.3 识别威胁场景:从「可能」到「具体」
有了DFD,我们就可以对着每个数据流、每个过程问STRIDE问题了。
举个例子,看上面DFD中「云端 -> TBOX」这条数据流:
- Spoofing:攻击者能不能伪造云端身份,下发假固件?
- Tampering:OTA包在传输过程中能不能被篡改?
- Information Disclosure:固件内容会不会被窃听泄露?
- Denial of Service:能不能阻塞下载通道,让升级失败?
你看,一条数据流就能问出四个威胁场景。整个DFD走下来,几十个场景很正常。
注意: 别把威胁场景写得太抽象。比如「通信可能被攻击」这种描述,审核时会被打回来。要写具体:谁、通过什么方式、攻击哪个资产、造成什么后果。比如:「攻击者通过伪造云端服务器身份,向TBOX下发恶意固件,导致ECU被刷入后门程序。」
3.4 建立威胁树:把威胁「拆」到根
威胁树,也叫攻击树。它的作用是把一个高层的威胁场景,一步步拆解成具体的攻击步骤。
我习惯用威胁树来回答一个问题:这个威胁到底能不能实现?
举个例子,针对「攻击者篡改OTA升级包」这个威胁,威胁树可以这样建:
威胁树的好处是什么?
- 可量化:每个叶子节点都可以评估「攻击难度」、「所需资源」、「攻击代价」。
- 可追溯:审核时,你可以指着树说:「这个威胁我们考虑了三种攻击路径,其中两种已经被安全措施阻断。」
- 可复用:同一个威胁树,换个车型,换个ECU,稍微改改就能用。
我的经验: 威胁树别画得太深,三层就够了。太深了分析工作量爆炸,而且很多叶子节点其实根本不可能实现。我曾经见过一个团队把威胁树画了六层,最后发现最底层的攻击需要「国家级黑客团队+物理接触车辆+拆解芯片」,这种威胁其实可以降级处理。
3.5 本章小结:威胁建模的「三板斧」
回顾一下,这一章我们干了三件事:
- 用STRIDE 系统化地分类威胁,不漏项。
- 画DFD 把系统数据流可视化,找到攻击面。
- 建威胁树 把威胁拆解到可评估的攻击步骤。
这三板斧下来,你的威胁场景清单应该已经相当完整了。下一阶段,我们就要对这些威胁场景进行「风险评定」——也就是给每个威胁打分,看看哪些是必须要处理的。