一句话定义
威胁建模(Threat Modeling)是在动手开发之前,用结构化的方式回答四个问题:我要保护什么、谁会来攻击、他会怎么攻击、我打算怎么办。
它不产出防火墙和加密库,产出的是一张优先级列表:哪些威胁必须先防,哪些可以明确接受、以后再说。这张列表决定了后面所有技术选型。
打个生活化的比方
装修前你多半会想:一楼窗户要不要装防盗网?门锁换到什么级别?有人冒充快递员敲门怎么办?经历过一轮思考,你就知道钱该花在哪。等装完再想,只能砸墙重来。
软件也一样。上线之后再补安全,往往发现权限模型缺乏分级、日志里没记关键操作、用户数据一开始就存在不该存的地方。这些靠增加防护规则补不上,因为它们属于设计问题。
四步,一张白板就能做
1. 画清楚数据怎么流动:从哪进、经过谁、存到哪、谁能读。
2. 逐个问「这里能被怎么打」。
3. 排优先级:按影响面和修正成本打分,不要指望一次全防。
4. 定对策,并写清楚哪些风险我们明确接受。
分类时常用的一个清单叫 STRIDE(仿冒、篡改、否认、信息泄露、拒绝服务、提权),按六个角度轮流问一遍,比凭空头脑风暴靠谱。
做 AI 系统时,这张清单还要加几项特有威胁:提示注入(prompt injection),即用户输入把原定指令带跑偏;训练数据投毒(data poisoning),即喂进去的样本本身就埋了雷;模型窃取(model extraction),即有人靠反复调用把你的能力「问」出来。它们的共同点是,往往不是代码写错了,而是模型的工作方式本身带来的。
别和相邻概念混了
| 威胁建模 | 渗透测试 | 护栏(guardrails) | |
|---|---|---|---|
| 时机 | 设计阶段 | 上线前后 | 运行中 |
| 产出 | 威胁清单与优先级 | 是否能突破成功的证据 | 拦截规则 |
| 回答的问题 | 该防什么 | 防住了没有 | 此刻拦住它 |
渗透测试只能验证你已经想到的东西;威胁建模负责「想到」。护栏是执行层,它拦什么,应该由威胁建模来定。
对从业者的实际意义
性价比最高的动作,是在需求评审时加一场三十分钟的会:架构图贴白板,问一句「如果我是个想搞钱或者想搞事的人,会从哪儿下手」。这一步几乎零成本,却能挡下很多问题。等系统上线、被真实攻击打穿、再回头改权限模型,代价是几十倍。
不写代码的人也用得上:手头的客户数据、那个接了公司文档权限的 AI 助手、那个多人共用的账号——先问一遍「谁会惦记它、图什么」,很多取舍就不用纠结了。
