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升级场景:

OTA升级场景数据流图(DFD) 云端服务器 手机APP TBOX 网关 密钥存储 固件存储 OTA包下载 触发指令 转发固件 读取密钥 写入固件 说明: 外部实体:蓝色 过程:绿色 数据存储:橙色 数据流:灰色箭头

3.3 识别威胁场景:从「可能」到「具体」

有了DFD,我们就可以对着每个数据流、每个过程问STRIDE问题了。

举个例子,看上面DFD中「云端 -> TBOX」这条数据流:

  • Spoofing:攻击者能不能伪造云端身份,下发假固件?
  • Tampering:OTA包在传输过程中能不能被篡改?
  • Information Disclosure:固件内容会不会被窃听泄露?
  • Denial of Service:能不能阻塞下载通道,让升级失败?

你看,一条数据流就能问出四个威胁场景。整个DFD走下来,几十个场景很正常。

注意: 别把威胁场景写得太抽象。比如「通信可能被攻击」这种描述,审核时会被打回来。要写具体:谁、通过什么方式、攻击哪个资产、造成什么后果。比如:「攻击者通过伪造云端服务器身份,向TBOX下发恶意固件,导致ECU被刷入后门程序。」

3.4 建立威胁树:把威胁「拆」到根

威胁树,也叫攻击树。它的作用是把一个高层的威胁场景,一步步拆解成具体的攻击步骤。

我习惯用威胁树来回答一个问题:这个威胁到底能不能实现?

举个例子,针对「攻击者篡改OTA升级包」这个威胁,威胁树可以这样建:

威胁树示例:篡改OTA升级包 篡改OTA升级包 1. 中间人攻击 2. 破解签名算法 3. 物理篡改存储 1.1 ARP欺骗 1.2 DNS劫持 2.1 密钥泄露 3.1 拆解芯片 威胁树解读: 根节点(红色):高层威胁场景 中间节点(紫色):攻击方法分类 叶子节点(青色):具体攻击步骤,可评估可行性

威胁树的好处是什么?

  • 可量化:每个叶子节点都可以评估「攻击难度」、「所需资源」、「攻击代价」。
  • 可追溯:审核时,你可以指着树说:「这个威胁我们考虑了三种攻击路径,其中两种已经被安全措施阻断。」
  • 可复用:同一个威胁树,换个车型,换个ECU,稍微改改就能用。
我的经验: 威胁树别画得太深,三层就够了。太深了分析工作量爆炸,而且很多叶子节点其实根本不可能实现。我曾经见过一个团队把威胁树画了六层,最后发现最底层的攻击需要「国家级黑客团队+物理接触车辆+拆解芯片」,这种威胁其实可以降级处理。

3.5 本章小结:威胁建模的「三板斧」

回顾一下,这一章我们干了三件事:

  1. 用STRIDE 系统化地分类威胁,不漏项。
  2. 画DFD 把系统数据流可视化,找到攻击面。
  3. 建威胁树 把威胁拆解到可评估的攻击步骤。

这三板斧下来,你的威胁场景清单应该已经相当完整了。下一阶段,我们就要对这些威胁场景进行「风险评定」——也就是给每个威胁打分,看看哪些是必须要处理的。