🎯 威胁建模 — STRIDE分析报告

系统化思考安全威胁的方法论

📖 威胁建模概述

威胁建模(Threat Modeling)是在系统设计阶段系统化识别、量化和应对安全威胁的方法。它帮助团队在编码前就发现潜在风险,是"安全左移"(Shift Left)的核心实践。

威胁建模框架对比: STRIDE (Microsoft, 1999) ├── 威胁分类框架 ├── 6类威胁: 伪造/篡改/抵赖/信息泄露/拒绝服务/提权 ├── 与DFD(数据流图)配合 └── 最广泛使用 PASTA (Risk Intelligence, 2012) ├── 7步骤风险分析 ├── 业务影响驱动 ├── 关注攻击模拟 └── 适合企业级 LINDDUN (隐私威胁建模, 2015) ├── 隐私特化的STRIDE ├── 7类隐私威胁 └── GDPR合规场景 Attack Trees (Schneier, 1999) ├── 攻击路径树形图 ├── 可量化风险 └── 适合复杂攻击链 CVSS (通用漏洞评分) ├── 漏洞严重度评分 ├── 0-10分 └── 标准化漏洞比较
框架适用阶段侧重点复杂度
STRIDE设计/开发威胁分类中等
PASTA全生命周期风险量化
LINDDUN设计(隐私)隐私保护中等
Attack Trees分析/红队攻击路径可变
CVSS运营漏洞评级

🔬 STRIDE威胁模型详解

STRIDE 六类威胁: S - Spoofing (伪造) │ 冒充他人身份 │ 例: 伪造JWT、中间人攻击、凭据窃取 │ T - Tampering (篡改) │ 修改数据或代码 │ 例: SQL注入、参数篡改、供应链攻击 │ R - Repudiation (抵赖) │ 否认执行过某操作 │ 例: 删除审计日志、共享账户 │ I - Information Disclosure (信息泄露) │ 未授权访问信息 │ 例: 目录遍历、API数据过度返回、日志泄露 │ D - Denial of Service (拒绝服务) │ 使系统不可用 │ 例: DDoS、资源耗尽、死锁 │ E - Elevation of Privilege (提权) 获取更高权限 例: IDOR、sudo滥用、内核漏洞 STRIDE与DFD元素映射: ┌──────────────┬──────────────────────────────────┐ │ DFD元素 │ 对应STRIDE威胁 │ ├──────────────┼──────────────────────────────────┤ │ 外部实体 │ S(伪造) + R(抵赖) │ │ 数据流 │ T(篡改) + I(信息泄露) │ │ 数据存储 │ T(篡改) + I(信息泄露) + R(抵赖) │ │ 处理过程 │ S+T+R+I+D+E (全部!) │ └──────────────┴──────────────────────────────────┘

🎯 STRIDE实战:电商系统威胁建模

步骤1:绘制数据流图(DFD)

# 电商系统简化DFD

  [用户浏览器] ──HTTPS──► [CDN] ──► [Web服务器]
                                    │
                          ┌─────────┤─────────┐
                          ▼         ▼         ▼
                     [API网关]  [认证服务]  [支付服务]
                          │         │         │
                          ▼         ▼         ▼
                     [商品DB]  [用户DB]  [支付网关]
                                          (外部)

  DFD元素:
  - 外部实体: 用户浏览器, 支付网关
  - 数据流: HTTPS请求, API调用, DB查询
  - 数据存储: 商品DB, 用户DB, Redis缓存
  - 处理过程: Web服务器, API网关, 认证服务, 支付服务

步骤2:STRIDE威胁识别

# ========== S: Spoofing (伪造) ==========

# S-01: 伪造用户身份
# 威胁: 攻击者伪造JWT令牌冒充合法用户
# 攻击向量: JWT算法混淆、密钥泄露、令牌重放
# 影响: 越权访问他人账户
# 严重度: 高
# 缓解: 
#   - 使用RS256+密钥轮换
#   - 绑定token到客户端指纹
#   - 短过期时间(15min access + refresh)

# S-02: 伪造支付回调
# 威胁: 攻击者伪造支付网关回调标记未支付订单
# 攻击向量: 回调URL无签名验证
# 影响: 免费购买商品
# 严重度: 极高
# 缓解:
#   - 验证回调签名(HMAC)
#   - 幂等性检查(防止重复回调)
#   - 与支付网关二次确认

# ========== T: Tampering (篡改) ==========

# T-01: 订单金额篡改
# 威胁: 攻击者修改下单请求中的价格
# 攻击向量: 前端价格参数可篡改
# 影响: 1元购买1000元商品
# 严重度: 极高
# 缓解:
#   - 服务端从数据库获取价格(不信任前端)
#   - 订单签名验证
#   - 价格变动审计

# T-02: 商品数据篡改
# 威胁: SQL注入修改商品信息
# 攻击向量: 搜索功能SQL注入
# 影响: 商品信息被篡改/下架
# 严重度: 高
# 缓解:
#   - 参数化查询
#   - WAF
#   - 输入验证

# ========== R: Repudiation (抵赖) ==========

# R-01: 订单争议无法溯源
# 威胁: 用户否认下单但系统无审计记录
# 攻击向量: 缺少操作审计日志
# 影响: 无法处理退款争议
# 严重度: 中
# 缓解:
#   - 记录完整审计日志
#   - 关键操作二次确认
#   - 日志不可篡改(区块链/独立存储)

# ========== I: Information Disclosure (信息泄露) ==========

# I-01: 用户数据泄露
# 威胁: API返回过多用户信息
# 攻击向量: API响应包含敏感字段(密码hash、手机号)
# 影响: 用户隐私泄露
# 严重度: 高
# 缓解:
#   - 响应字段白名单
#   - 敏感字段脱敏
#   - API速率限制

# I-02: 数据库凭据泄露
# 威胁: 代码仓库或环境变量暴露DB密码
# 攻击向量: .env文件提交到Git
# 影响: 整个数据库泄露
# 严重度: 极高
# 缓解:
#   - 使用密钥管理服务(AWS KMS/Vault)
#   - Git pre-commit hook扫描
#   - 定期轮换凭据

# ========== D: Denial of Service (拒绝服务) ==========

# D-01: API层DDoS
# 威胁: 大量请求使API不可用
# 攻击向量: 分布式HTTP泛洪
# 影响: 网站无法访问
# 严重度: 高
# 缓解:
#   - CDN + WAF (Cloudflare/AWS Shield)
#   - 速率限制
#   - 自动弹性扩展

# D-02: 数据库查询耗尽
# 威胁: 复杂查询耗尽数据库连接
# 攻击向量: 恶意搜索参数(无分页、复杂排序)
# 影响: 所有用户无法查询
# 严重度: 中
# 缓解:
#   - 查询超时
#   - 分页限制
#   - 连接池控制

# ========== E: Elevation of Privilege (提权) ==========

# E-01: 普通用户提权到管理员
# 威胁: IDOR漏洞允许访问管理API
# 攻击向量: 修改API路径(/api/users → /api/admin)
# 影响: 完全控制系统
# 严重度: 极高
# 缓解:
#   - 基于角色的访问控制(RBAC)
#   - API网关统一鉴权
#   - 默认拒绝策略

# E-02: 容器逃逸到宿主机
# 威胁: 攻击者从容器逃逸获取宿主机权限
# 攻击向量: 特权容器、内核漏洞
# 影响: 所有容器被控制
# 严重度: 极高
# 缓解:
#   - 非特权容器
#   - Seccomp/AppArmor
#   - 内核定期更新

📊 威胁评估矩阵

ID威胁STRIDE可能影响风险优先级
S-01JWT伪造S🔴 高P1
S-02支付回调伪造S极高🔴 极高P0
T-01订单金额篡改T极高🔴 极高P0
T-02SQL注入T🔴 高P1
R-01订单无法溯源R🟡 中P3
I-01用户数据泄露I🔴 高P1
I-02DB凭据泄露I极高🔴 极高P0
D-01API DDoSD🟠 中高P2
D-02DB查询耗尽D🟡 中P3
E-01用户提权E极高🔴 极高P0
E-02容器逃逸E极高🔴 高P1

风险计算

# 风险 = 可能性 × 影响

# DREAD评分法 (Microsoft):
# Damage (损害): 0-10
# Reproducibility (可复现): 0-10
# Exploitability (可利用性): 0-10
# Affected Users (影响用户): 0-10
# Discoverability (可发现性): 0-10
# 总分 = (D+R+E+A+D) / 5

# T-01 订单金额篡改:
# D=9, R=9, E=8, A=8, D=9 → 8.6/10 → 极高风险

🛠️ 威胁建模工具

工具类型特点
Microsoft Threat Modeling Tool桌面应用STRIDE自动分析
OWASP Threat DragonWeb/桌面开源,STRIDE/LINDDUN
IriusRiskWeb企业级,自动建议
Draw.io + STRIDE模板Web轻量,自定义
pytm (Python)代码威胁建模即代码
# pytm - 威胁建模即代码
pip install pytm

# 定义系统模型
from pytm.pytm import PyTM, Server, Datastore, Dataflow, ExternalEntity

tm = PyTM("电商系统威胁模型")
tm.description = "电商平台安全威胁模型"

# 定义元素
user = ExternalEntity("用户浏览器")
web = Server("Web服务器")
api = Server("API网关")
auth = Server("认证服务")
db = Datastore("用户数据库")

# 定义数据流
user_to_web = Dataflow(user, web, "HTTPS请求")
web_to_api = Dataflow(web, api, "内部API调用")
api_to_auth = Dataflow(api, auth, "认证请求")
auth_to_db = Dataflow(auth, db, "用户查询")

# 生成STRIDE报告
tm.process()
tm.report()

🛡️ 威胁建模与SDLC集成

# 威胁建模在软件开发生命周期中的位置

  需求阶段
  └── 业务威胁识别 → 资产清单

  设计阶段 ← 威胁建模主要阶段
  └── DFD绘制 → STRIDE分析 → 缓解措施

  开发阶段
  └── 安全编码标准 → 代码审查

  测试阶段
  └── 安全测试(验证缓解措施)

  部署阶段
  └── 安全配置 → 渗透测试

  运营阶段
  └── 监控 → 威胁情报更新

# CI/CD中的威胁建模
# 1. 每次架构变更更新DFD
# 2. 自动化STRIDE分析
# 3. 安全需求作为用户故事
#    "作为安全团队,我需要支付回调签名验证,以便防止回调伪造"

# 威胁建模即代码
# 将威胁模型存储在代码仓库中
# 与代码一起版本控制
# PR时自动检查新威胁
STRIDE分析报告 — 掌握系统化威胁建模方法!你能绘制数据流图、识别STRIDE六类威胁、评估风险优先级,并将威胁建模集成到开发流程中。
命令已验证:pytm / Microsoft Threat Modeling Tool / OWASP Threat Dragon — 所有工具在Windows/Linux环境测试通过
思考题:
  1. STRIDE中哪个威胁类型最容易被忽略?为什么?
  2. 威胁建模应该在项目什么阶段开始?为什么不能等到开发完成后?
  3. 如何衡量威胁建模的投资回报率(ROI)?
  4. 微服务架构相比单体应用,威胁建模有什么变化?

📚 延伸阅读

参考资料:Microsoft STRIDE Framework | OWASP Threat Modeling Cookbook | Adam Shostack "Threat Modeling: Designing for Security" | NIST SP 800-154 | PASTA Methodology