1. 威胁建模入门:什么是威胁建模、为什么需要威胁建模、威胁建模在SDLC中的位置、课程整体介绍

什么是威胁建模?

威胁建模,说白了就是「在坏人动手之前,先把自己当成坏人想一遍」。

我经常跟团队讲一个比喻:你装修房子,总得先想想小偷会从哪进来吧?是翻窗户、撬门、还是钻通风管道?想清楚了,你才知道该装什么锁、加固哪扇窗、要不要装监控。威胁建模干的就是这件事——只不过对象换成了你的软件系统。

更正式一点的定义:威胁建模是一种结构化的方法,用来识别、评估系统面临的安全威胁,并制定相应的缓解措施。

它不是一个工具,也不是一张表格。它是一种思维方式。嗯,这点很重要,我后面会反复强调。

核心三问:

  • 我们在保护什么?(资产)
  • 谁想伤害我们?(攻击者)
  • 他们能怎么做?(攻击路径)

为什么需要威胁建模?

你可能会问:「我直接写代码的时候注意安全不就行了?干嘛还要专门搞一套建模?」

我刚开始做安全的时候也这么想。直到有一次,我负责的一个支付系统上线前做渗透测试,测试人员花了不到半小时就找到了一个逻辑漏洞——用户可以通过修改请求参数来篡改订单金额。那个漏洞其实在设计阶段就能发现,只要画一张数据流图,看看「用户输入→订单处理」这条路径上有没有校验。但当时没人做威胁建模,结果就是上线前紧急修复,差点跳票。

从那以后,我养成了一个习惯:任何新系统,先做威胁建模,再写一行代码。

为什么需要威胁建模?我总结了三个最直接的理由:

  • 省钱——设计阶段发现一个漏洞,修复成本可能是几百块;上线后才发现,那就是几万甚至几十万。我在项目中见过太多「上线前通宵修漏洞」的惨案了。
  • 系统化思考——靠「拍脑袋」找漏洞,你永远不知道漏掉了什么。威胁建模给你一张地图,告诉你哪里可能有坑。
  • 团队对齐——开发、测试、产品、安全坐在一起,用同一张图说话。你想想看,这比在群里互相甩锅高效多了吧?

避坑指南:我曾经见过一个团队,花了两周时间做了一份非常精美的威胁模型文档,然后...就没有然后了。文档被归档,代码该怎么写还怎么写。威胁建模不是交作业,是要真正指导开发的。记住:没有落地的威胁建模,就是一张废纸。

威胁建模在SDLC中的位置

SDLC(软件开发生命周期)大家应该不陌生。从需求分析到设计、开发、测试、部署、运维,每个阶段都有安全活动。威胁建模应该放在哪?

我个人习惯把它放在设计阶段,而且是设计阶段的早期。

为什么是设计阶段?因为这时候系统架构还没定死,改起来成本最低。你想想看,如果代码都写了一半了,突然发现架构上有安全缺陷,那改起来得多痛苦?

下面这张表可以帮你快速理解威胁建模在SDLC中的位置:

SDLC阶段 安全活动 威胁建模的作用
需求分析 安全需求定义 提供安全需求的输入
设计 威胁建模 识别设计缺陷,制定缓解措施
开发 安全编码规范 威胁模型指导编码注意事项
测试 安全测试、渗透测试 威胁模型提供测试用例
部署 安全配置检查 威胁模型中的缓解措施落地
运维 安全监控、事件响应 威胁模型帮助理解攻击面

注意看,威胁建模虽然放在设计阶段,但它不是一次性的。我建议每次架构有重大变更时,都重新审视一下威胁模型。比如加了一个新的外部接口、引入了第三方组件、改了数据存储方案——这些都可能引入新的威胁。

警告:不要把威胁建模当成「做完就扔」的文档。它应该是一个活着的 artifact,随着系统演进持续更新。我曾经见过一个项目,威胁模型还是两年前的,系统早就重构了三轮了——那玩意儿除了占硬盘空间,一点用都没有。

课程整体介绍

好了,说了这么多,你可能已经对威胁建模有了一个初步的印象。接下来,我简单介绍一下这门课的整体安排。

这门课一共30个章节,我把它分成了四个模块:

  1. 基础篇(第1-8章):带你入门,理解威胁建模的核心概念、常用框架(比如STRIDE、PASTA)、以及如何画数据流图。这部分是地基,我会尽量讲得通俗易懂。
  2. 实战篇(第9-18章):手把手带你做威胁建模。从一个小型Web应用开始,逐步深入到微服务架构、云原生环境。每个案例我都会给出完整的威胁模型示例。
  3. 进阶篇(第19-25章):聊一些更深入的话题,比如威胁建模自动化、与DevOps的集成、以及如何度量威胁建模的效果。这部分适合有一定基础的同学。
  4. 扩展篇(第26-30章):探讨威胁建模在AI系统、物联网、车联网等新兴领域的应用。嗯,这部分算是「彩蛋」,让你看看威胁建模还能玩出什么花样。

每一章我都会尽量做到:

  • 讲清楚「是什么」和「为什么」
  • 给出可以直接用的模板或示例
  • 分享我在实际项目中踩过的坑

最后说一句:威胁建模不是一门「学」出来的技能,而是「练」出来的。光看我的课程不做练习,效果会大打折扣。所以每章后面我都会留一个小作业,建议你真的动手做一做。

准备好了吗?那我们开始吧。