核心概念扫盲:资产、威胁、漏洞、风险、攻击面、信任边界

好,咱们正式开始第一课的核心内容。

很多新手刚接触威胁建模,容易被一堆术语砸晕。什么资产、威胁、漏洞、风险……听着都像一回事,对吧?

我刚开始带团队的时候,也发现大家经常混着用。有一次评审会上,开发说“这个风险我们修了”,结果一看,他只是修了个漏洞,风险根本没动。嗯,这就是概念不清的代价。

今天咱们就把这几个词彻底掰扯清楚。

1. 资产(Asset)—— 你到底在保护什么?

资产,说白了就是“你觉得值钱的东西”。

在威胁建模里,资产不一定是服务器或者数据库。它可以是数据、用户隐私、甚至是一个API接口的调用权限。

我个人习惯把资产分成三类:

  • 数据资产:用户密码、订单记录、日志文件
  • 系统资产:服务器、容器、微服务实例
  • 能力资产:支付能力、发短信的接口、管理员权限
小技巧: 我每次做威胁建模,第一件事就是问业务方:“这个系统挂了,你最怕丢什么?” 答案往往就是核心资产。

举个例子。你做一个电商系统,资产清单里要有:

  • 用户手机号、地址(数据资产)
  • 订单数据库(数据资产)
  • 支付网关对接密钥(能力资产)

别漏了。漏掉一个资产,后面所有分析都是白搭。

2. 威胁(Threat)—— 谁想搞你?

威胁,就是“可能对你资产造成损害的动作或事件”。

注意,威胁是潜在的。它还没发生,但有可能发生。

我在项目中遇到过最典型的威胁:

  • 攻击者通过SQL注入窃取用户数据
  • 内部员工恶意导出客户信息
  • DDoS打垮你的登录服务

你想想看,威胁本身不是漏洞。威胁是“有人想偷你的钱”,漏洞是“你家窗户没锁”。这是两码事。

记住这个公式:
威胁 ≠ 漏洞
威胁是意图,漏洞是条件。

3. 漏洞(Vulnerability)—— 你的弱点在哪?

漏洞,就是系统里可以被利用的缺陷。

它可能是代码写错了,也可能是配置没改好,甚至是一个设计上的逻辑漏洞。

我曾经在一个支付系统里发现一个漏洞:订单状态校验只在前端做了,后端没做。结果呢?用户可以直接改请求包,把“未支付”改成“已支付”。嗯,这就是典型的逻辑漏洞。

常见的漏洞类型:

  • SQL注入、XSS、CSRF(技术漏洞)
  • 弱密码、默认配置(运维漏洞)
  • 权限校验缺失(设计漏洞)
避坑指南: 我曾经见过一个团队,把所有漏洞都归到“代码质量”上。其实很多漏洞是设计阶段就埋下的。威胁建模就是要提前发现这些设计漏洞,而不是等代码写完了再修。

4. 风险(Risk)—— 你到底有多危险?

风险,是威胁利用漏洞,对资产造成损害的可能性与影响程度的综合评估。

说白了,风险 = 可能性 × 影响程度。

举个例子:

  • 你的登录接口有暴力破解漏洞(漏洞)
  • 攻击者想撞库(威胁)
  • 如果撞库成功,用户账号被盗(影响)
  • 这个场景发生的概率高吗?影响大吗?—— 这就是风险

我习惯用一张表来评估风险:

风险等级 可能性 影响程度 举例
高 高 高 未授权访问管理员后台
中 中 高 日志泄露部分用户信息
低 低 低 非敏感接口返回调试信息

注意,风险是动态的。今天风险低,明天可能就高了。比如一个新漏洞曝光,你的风险等级就得重新评估。

5. 攻击面(Attack Surface)—— 敌人从哪进来?

攻击面,就是所有可能被攻击者接触到的系统入口点。

你想想看,一个系统暴露在外的东西越多,攻击面就越大。

常见的攻击面包括:

  • 开放的端口(比如 80、443、22)
  • API 接口(尤其是未认证的接口)
  • 用户输入框(搜索框、登录框)
  • 第三方集成(支付回调、OAuth 登录)
我的经验: 每次做架构评审,我都会让开发把系统所有的对外接口列出来。然后问一句:“这个接口真的需要暴露吗?” 很多时候,能砍掉一半的攻击面。

攻击面越小,防守越容易。这是铁律。

6. 信任边界(Trust Boundary)—— 哪里是安全区?

信任边界,是系统里不同信任等级区域之间的分界线。

举个例子:

  • 用户浏览器 → 不可信区域
  • 你的 Web 服务器 → 半可信区域
  • 你的内部数据库 → 可信区域

数据从不可信区域流向可信区域时,必须经过安全检查。这就是信任边界的意义。

我在项目中见过一个经典错误:

  • 前端传了一个用户角色字段(比如 “role”: “admin”)
  • 后端直接信任了这个字段,没有校验
  • 结果普通用户把自己改成管理员

这就是信任边界没划清楚。前端是不可信的,后端不能直接信任前端传来的任何数据。

避坑指南: 我曾经在一个微服务架构里,发现服务A调用服务B时,直接把用户ID传过去,没做任何鉴权。服务B以为调用方是可信的,结果一个普通用户就能调用管理员接口。这就是信任边界被打破了。

总结一下这六个概念的关系

我习惯用一句话串起来:

攻击者(威胁)通过攻击面,利用漏洞,突破信任边界,对资产造成损害,这就是风险。

你想想看,威胁建模其实就是把这六个要素画出来,然后找到最薄弱的地方。

下一节,咱们会讲怎么用这些概念去画数据流图。到时候你会发现,这些术语不是背的,是用的。

嗯,今天就到这里。记住,概念不清,后面全是坑。