4. 威胁建模入门:常见威胁类型与STRIDE模型初步应用

威胁建模这件事,说白了就是“在攻击者动手之前,先替他们想好怎么搞破坏”。

我早年做第一个安全项目时,根本没这个概念。结果上线第一天,就被扫出一个SQL注入漏洞。嗯,从那以后,我再也不敢跳过威胁建模了。

4.1 威胁到底从哪里来?——三大威胁来源

你想想看,一个系统面临的威胁,无非来自三个方向:人、技术、环境。咱们一个一个拆。

4.1.1 人为威胁

这是最不可控的一类。我习惯把人为威胁分成“有意”和“无意”两种。

  • 恶意内部人员:比如被裁的运维,删库跑路。我在项目中遇到过,一个离职的DBA用他还在生效的VPN账号,半夜把测试库清了。
  • 外部攻击者:脚本小子、APT组织、勒索团伙。他们的目标很明确——钱、数据、破坏。
  • 无意的内部人员:比如运维误配防火墙、开发把密钥提交到GitHub。这类其实占比最高。

4.1.2 技术威胁

技术本身也会带来威胁。不是技术不好,而是技术有“副作用”。

  • 软件漏洞:缓冲区溢出、反序列化、逻辑缺陷。
  • 协议缺陷:比如HTTP明文传输、DNS劫持、TLS降级攻击。
  • 配置脆弱性:默认密码、开放端口、调试接口未关闭。
我的经验:技术威胁里,配置问题占了我处理过的安全事件的一半以上。别小看“默认设置”这四个字。

4.1.3 环境威胁

环境威胁往往被忽略,但一旦发生,影响面极大。

  • 物理环境:机房断电、空调失效、火灾、水淹。
  • 供应链环境:第三方库投毒、硬件后门、云服务商故障。
  • 合规与法律环境:数据跨境、GDPR、等保要求。不合规本身就是一种威胁。

4.2 威胁建模的“瑞士军刀”——STRIDE模型

STRIDE是微软提出的一套威胁分类法。我个人觉得,它是入门威胁建模最友好的工具,没有之一。

为什么?因为它把威胁拆成了六类,每一类对应一个安全属性。你对着这六类去检查系统,基本不会漏掉大头。

威胁类型 英文 违反的安全属性 举个栗子
S 假冒 Spoofing 身份认证 攻击者伪造用户Token登录
T 篡改 Tampering 完整性 中间人修改请求报文
R 抵赖 Repudiation 不可否认性 用户否认发起过某笔交易
I 信息泄露 Information Disclosure 机密性 数据库被拖库,明文密码泄露
D 拒绝服务 Denial of Service 可用性 CC攻击打垮Web服务器
E 权限提升 Elevation of Privilege 授权 普通用户通过越权漏洞拿到管理员权限
记住这个口诀:“假、篡、赖、泄、拒、提”——六个字,对应STRIDE的六类威胁。

4.3 STRIDE模型怎么用?——四步走

光知道分类没用,得会用。我一般按下面四个步骤来:

  1. 画数据流图(DFD):把系统拆成外部实体、进程、数据存储、数据流。这是威胁建模的“地图”。
  2. 逐元素应用STRIDE:对着DFD里的每个元素,问自己“这个元素可能遭受STRIDE里的哪几种威胁?”
  3. 记录威胁清单:把识别出的威胁写下来,包括威胁描述、影响、风险等级。
  4. 制定缓解措施:针对每个威胁,给出具体的控制措施。比如“加认证”、“做校验”、“上WAF”。

我曾经带过一个团队做威胁建模,他们第一步就卡住了——DFD画得太粗。你想想看,连数据流都画不清楚,后面识别威胁就是瞎蒙。

4.4 实战案例:一个简单的登录模块

咱们拿一个最常见的登录功能来练手。假设系统是这样的:

  • 用户通过浏览器输入账号密码
  • 前端发送POST请求到后端API
  • 后端查询数据库,校验密码
  • 校验通过后,返回JWT Token

用STRIDE过一遍:

DFD元素 STRIDE威胁 具体描述 缓解措施
用户(外部实体) Spoofing 攻击者伪造合法用户身份 多因素认证、设备指纹
登录API(进程) Tampering 中间人篡改登录请求 强制HTTPS、请求签名
数据库(数据存储) Information Disclosure 密码明文存储,拖库即泄露 bcrypt加盐哈希、加密存储
Token返回(数据流) Repudiation 用户否认登录行为 记录审计日志、Token绑定设备
登录接口(进程) Denial of Service 暴力破解导致接口不可用 限流、验证码、账户锁定
会话管理(进程) Elevation of Privilege 普通用户越权访问管理员功能 RBAC权限校验、最小权限原则
避坑指南:我曾经见过一个团队,做完威胁建模后把清单往wiki一扔就完事了。结果三个月后复盘,发现一半的威胁根本没修。威胁建模不是写文档,是驱动决策的。

4.5 一张图看懂本章知识体系

下面这张图,把威胁来源、STRIDE分类、建模流程串在了一起。你可以把它当成一个速查框架。

威胁建模知识体系框架 三大威胁来源 人为威胁 技术威胁 环境威胁 STRIDE 六类威胁 S 假冒 T 篡改 R 抵赖 I 泄露 D 拒绝 E 提升 威胁建模四步 ① 画数据流图 ② 逐元素应用STRIDE ③ 记录威胁清单 ④ 制定缓解措施 核心逻辑:威胁来源 → STRIDE分类 → 建模流程 → 输出缓解措施 每个环节都对应具体的安全属性,确保不遗漏、不重复

4.6 给新手的三个建议

  • 别贪大求全:第一次做威胁建模,选一个核心功能模块就够了。我见过有人一上来就想把整个系统建模完,结果画DFD就画了两周,项目黄了。
  • 拉上开发一起做:威胁建模不是安全团队的自嗨。开发最了解代码逻辑,他们参与进来,识别出的威胁才靠谱。
  • 迭代,别想一次完美:威胁建模是持续的过程。系统改一次,模型就更新一次。我习惯在每个迭代的“设计评审”环节加入威胁建模,每次花30分钟,效果比集中做三天好得多。
一个小工具推荐:微软的Threat Modeling Tool是免费的,支持自动生成STRIDE威胁清单。你可以用它来辅助练习,但别完全依赖它——工具只能提示,真正的威胁判断还得靠人。