威胁建模
概述
这个技能提供结构化方法来识别、分析和缓解系统设计中的安全威胁。在规划新系统、审查现有架构或评估安全态势时使用。
何时使用威胁建模
- 新系统设计:在实施前,识别安全需求
- 架构审查:评估现有系统的安全差距
- 功能添加:评估新功能的安全影响
- 第三方集成:评估外部依赖的风险
- 合规要求:为审计记录安全控制
方法论
STRIDE
按类型分类威胁:
| 威胁 | 描述 | 安全属性 |
|---|---|---|
| Spoofing(欺骗) | 冒充用户或系统 | 认证 |
| Tampering(篡改) | 修改数据或代码 | 完整性 |
| Repudiation(抵赖) | 否认操作发生 | 不可否认性 |
| Information Disclosure(信息泄露) | 将数据暴露给未经授权的方 | 机密性 |
| Denial of Service(拒绝服务) | 使系统不可用 | 可用性 |
| Elevation of Privilege(权限提升) | 获取未经授权的访问 | 授权 |
DREAD(风险评分)
为每个威胁评分(1-10),跨五个维度:
| 因子 | 问题 |
|---|---|
| Damage(损害) | 影响有多严重? |
| Reproducibility(可复现性) | 有多容易被复现? |
| Exploitability(可利用性) | 需要多少技能或资源? |
| Affected Users(受影响用户) | 有多少用户受影响? |
| Discoverability(可发现性) | 有多容易发现漏洞? |
风险分数 = (D + R + E + A + D) / 5
- 高风险:7-10(立即行动)
- 中等风险:4-6(计划修复)
- 低风险:1-3(接受或监控)
PASTA(攻击模拟与威胁分析过程)
七个阶段:
- 定义目标:业务目标、合规要求
- 定义技术范围:架构、技术、数据流
- 应用分解:组件、信任边界、入口点
- 威胁分析:威胁情报、攻击模式
- 漏洞分析:弱点、现有控制
- 攻击建模:攻击树、可能场景
- 风险与影响分析:优先级缓解措施
威胁建模过程
步骤1:定义范围和资产
## 系统概述
- **名称**:[系统名称]
- **目的**:[做什么]
- **敏感性**:[数据分类]
## 要保护的资产
| 资产 | 分类 | 如果泄露的影响 |
| ---------------- | -------------- | -------------------------- |
| 用户凭据 | 机密 | 账户接管 |
| 支付数据 | PCI-DSS | 财务损失、合规 |
| 个人数据 | PII/GDPR | 隐私泄露、罚款 |
步骤2:创建数据流图
识别:
- 外部实体:用户、第三方服务
- 过程:应用组件、服务
- 数据存储:数据库、缓存、文件系统
- 数据流:数据如何在组件间移动
- 信任边界:权限级别变化的地方
┌─────────────────────────────────────────────────────────────┐
│ 信任边界:互联网 │
│ ┌──────────┐ │
│ │ 用户 │ │
│ │ 浏览器 │ │
│ └────┬─────┘ │
│ │ HTTPS │
├───────┼─────────────────────────────────────────────────────┤
│ │ 信任边界:DMZ │
│ ▼ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 负载 │────▶│ API │────▶│ 认证 │ │
│ │ 均衡器 │ │ 网关 │ │ 服务 │ │
│ └──────────┘ └────┬─────┘ └──────────┘ │
│ │ │
├────────────────────────┼────────────────────────────────────┤
│ │ 信任边界:内部 │
│ ▼ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 应用 │────▶│ 数据库 │ │ 缓存 │ │
│ │ 服务器 │ │ (PG) │ │ (Redis) │ │
│ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────┘
步骤3:识别威胁(每个元素的STRIDE)
## 威胁分析
### API网关
| STRIDE | 威胁 | 可能性 | 影响 |
| ------ | -------------------------- | ---------- | -------- |
| S | 伪造的JWT令牌 | 中等 | 高 |
| T | 请求体操纵 | 低 | 中等 |
| R | 缺失审计日志 | 中等 | 中等 |
| I | 详细错误消息 | 高 | 中等 |
| D | 速率限制绕过 | 中等 | 高 |
| E | IDOR访问其他用户 | 中等 | 关键 |
### 数据库
| STRIDE | 威胁 | 可能性 | 影响 |
| ------ | ----------------------------- | ---------- | -------- |
| S | 连接冒充 | 低 | 关键 |
| T | SQL注入 | 中等 | 关键 |
| I | 未加密备份 | 中等 | 高 |
| D | 资源耗尽 | 低 | 高 |
| E | 通过SQLi权限提升 | 中等 | 关键 |
步骤4:构建攻击树
┌─────────────────────┐
│ 窃取用户数据 │
│ (根目标) │
└─────────┬───────────┘
│
┌─────────────────┼─────────────────┐
│ │ │
▼ ▼ ▼
┌───────────────┐ ┌───────────────┐ ┌───────────────┐
│ 危害 │ │ 利用应用 │ │ 社会 │
│ 凭据 │ │ 漏洞 │ │ 工程 │
└───────┬───────┘ └───────┬───────┘ └───────┬───────┘
│ │ │
┌───────┴───────┐ ┌───────┴───────┐ ┌───────┴───────┐
│ │ │ │ │ │
▼ ▼ ▼ ▼ ▼ ▼
┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐
│钓鱼│ │暴力 │ │SQL │ │IDOR │ │借口攻击│
│ │ │破解 │ │注入 │ │ │ │支持 │
└────────┘ └────────┘ └────────┘ └────────┘ └────────┘
[可能性:高,影响:高] [可能性:中,影响:高] [可能性:中,影响:关键] [可能性:高,影响:高] [可能性:中,影响:高]
步骤5:定义缓解措施
## 缓解计划
| 威胁 | 缓解措施 | 优先级 | 状态 |
| -------------- | --------------------------------------- | -------- | ----------- |
| SQL注入 | 参数化查询、输入验证 | P0 | 进行中 |
| IDOR | 所有端点的授权检查 | P0 | 未开始 |
| JWT伪造 | RS256签名、短有效期、轮换 | P1 | 完成 |
| 暴力破解 | 速率限制、账户锁定、MFA | P1 | 部分 |
| 详细错误 | 生产中的通用错误消息 | P2 | 未开始 |
威胁模型文档模板
# 威胁模型:[系统名称]
**版本**:1.0
**日期**:YYYY-MM-DD
**作者**:[姓名]
**评审者**:[姓名]
## 1. 执行摘要
[高级发现和建议]
## 2. 系统描述
### 2.1 目的
### 2.2 架构概述
### 2.3 数据分类
### 2.4 信任边界
## 3. 资产
| 资产 | 分类 | 所有者 |
| ----- | -------------- | ----- |
## 4. 威胁分析
### 4.1 数据流图
### 4.2 按组件的STRIDE分析
### 4.3 攻击树
## 5. 风险评估
| 威胁 | DREAD分数 | 风险级别 |
| ------ | ----------- | ---------- |
## 6. 缓解措施
| 威胁 | 缓解措施 | 所有者 | 时间线 |
| ------ | ---------- | ----- | -------- |
## 7. 剩余风险
[接受的风险和理由]
## 8. 评审计划
[何时重新审视此威胁模型]
领域特定威胁建模
API威胁建模
REST、GraphQL和gRPC API的重点领域:
认证与授权
- 基于令牌的认证漏洞(JWT、OAuth 2.0)
- 破碎的对象级授权(BOLA/IDOR)
- 破碎的函数级授权
- API密钥泄露和轮换问题
数据暴露
- 响应中过度数据暴露
- 大规模分配漏洞
- 生产中的GraphQL内省
- 详细错误消息泄露架构
速率限制与滥用
- 缺失或可绕过的速率限制
- 资源耗尽(大负载、深查询)
- 批量请求滥用
- 分页漏洞
输入验证
- 注入攻击(SQL、NoSQL、命令、LDAP)
- XML外部实体(XXE)攻击
- 服务器端请求伪造(SSRF)
- GraphQL查询复杂性攻击
API特定缓解措施
- 模式验证(OpenAPI、GraphQL模式)
- 查询深度/复杂性限制
- 字段级授权
- API网关安全策略
- 请求签名和重放保护
基础设施威胁建模
云、容器和编排的重点领域:
云服务
- 配置错误的S3桶/Blob存储(公开访问)
- IAM权限提升路径
- 元数据服务滥用(SSRF到凭据)
- 未加密存储/传输
- 网络安全组配置错误
容器安全
- 易受攻击的基础镜像
- 环境变量/层中的秘密
- 特权容器
- 容器逃逸漏洞
- 注册表安全(镜像签名、扫描)
编排(Kubernetes、Docker Swarm)
- 暴露的API服务器(未经认证的kubelet)
- RBAC配置错误
- Pod安全策略/标准违规
- 网络策略差距
- 秘密管理(etcd加密、外部保险库)
CI/CD管道
- 受损的构建代理
- 依赖混淆/替换
- 版本控制中的秘密
- 未签名工件
- 管道注入攻击
基础设施缓解措施
- 基础设施即代码安全扫描
- 最小权限IAM策略
- 网络分段(VPC、子网、安全组)
- 不可变基础设施模式
- 运行时安全监控(Falco、OSSEC)
ML模型威胁建模
机器学习系统的重点领域:
对抗性攻击
- 规避攻击(推理时的对抗性示例)
- 中毒攻击(训练数据操纵)
- 模型反演(提取训练数据)
- 成员推断(检测数据是否在训练集中)
模型窃取
- 通过API查询模型提取
- 知识产权泄露
- 超参数发现
- 架构逆向工程
数据隐私
- 训练数据暴露
- 模型输出中的PII泄露
- 差分隐私违规
- GDPR解释权挑战
部署风险
- 模型服务API漏洞
- 特征存储中毒
- 模型注册安全
- A/B测试利用
ML特定缓解措施
- 对抗性训练和鲁棒性测试
- 输入消毒和异常检测
- 模型水印
- 差分隐私技术
- 可解释性约束
- 预测API的速率限制
- 模型版本化和回滚能力
快速参考:按组件的常见威胁
Web应用
- XSS、CSRF、点击劫持
- 会话劫持
- 不安全的直接对象引用
- 开放重定向
API
- 破碎的认证/授权
- 大规模分配
- 速率限制绕过
- 注入攻击
数据库
- SQL注入
- 权限提升
- 未加密数据
- 备份暴露
认证
- 凭据填充
- 会话固定
- 令牌泄露
- MFA绕过
文件上传
- 恶意软件上传
- 路径遍历
- 远程代码执行
- 存储耗尽
第三方集成
- API密钥暴露
- Webhook欺骗
- 供应链攻击
- 数据泄露
最佳实践
- 迭代:随着系统发展更新威胁模型
- 协作:包括开发人员、运维和安全人员
- 优先级:首先关注高影响、可能的威胁
- 文档:维护活的威胁模型文档
- 验证:通过安全测试测试缓解措施
- 自动化:将威胁建模集成到SDLC中