核心概念扫盲:资产、威胁、漏洞、风险、攻击面、信任边界
好,咱们正式开始第一课的核心内容。
很多新手刚接触威胁建模,容易被一堆术语砸晕。什么资产、威胁、漏洞、风险……听着都像一回事,对吧?
我刚开始带团队的时候,也发现大家经常混着用。有一次评审会上,开发说“这个风险我们修了”,结果一看,他只是修了个漏洞,风险根本没动。嗯,这就是概念不清的代价。
今天咱们就把这几个词彻底掰扯清楚。
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”)
- 后端直接信任了这个字段,没有校验
- 结果普通用户把自己改成管理员
这就是信任边界没划清楚。前端是不可信的,后端不能直接信任前端传来的任何数据。
总结一下这六个概念的关系
我习惯用一句话串起来:
攻击者(威胁)通过攻击面,利用漏洞,突破信任边界,对资产造成损害,这就是风险。
你想想看,威胁建模其实就是把这六个要素画出来,然后找到最薄弱的地方。
下一节,咱们会讲怎么用这些概念去画数据流图。到时候你会发现,这些术语不是背的,是用的。
嗯,今天就到这里。记住,概念不清,后面全是坑。