威胁建模介绍
字数 2581
更新时间 2026-02-06 13:35:20
威胁建模全面教学文档
1. 威胁建模基本概念
1.1 定义与核心价值
威胁建模是通过识别目标、漏洞来优化系统安全,并定义防范或减轻系统威胁对策的结构化过程。该方法利用抽象思维帮助分析风险,是现代应用程序安全分析的重要方法。
核心特征:
- 不是代码审查方法,而是对安全代码审查过程的补充
- 从潜在攻击者视角看待系统(现代威胁建模思维)
- 在SDLC中包含威胁建模可确保应用程序从一开始就内置安全性
- 通过文档化使审阅者更好理解系统架构和入口点
1.2 历史发展
威胁建模概念并不新颖,但近年来出现明显的思维转变。微软是该过程的强力倡导者,将其作为SDLC的核心组件,并声称这是其产品安全性提高的关键原因之一。
2. 威胁建模参与角色
2.1 主要参与者
- 软件开发与测试人员:实施安全开发实践
- 架构师、操作员和管理员:负责系统架构和运维安全
- 客户:提供业务需求和安全期望
- 安全专家:提供专业安全知识和经验
3. 威胁建模实施时机
3.1 SDLC中的威胁建模
按照"需求-设计-开发-测试-部署-运行-结束"的生命周期:
- 设计阶段:为新系统/新功能增加安全需求说明
- 运行阶段:对已上线系统发现新风险,作为渗透测试的辅助工作
3.2 现有系统分析
当在SDLC之外执行源代码分析时,威胁建模通过深度优先方法降低源代码分析复杂性,优先评估高风险组件。
4. 威胁建模实施价值
4.1 核心优势
- 早期Bug发现:在开发初期识别安全问题
- 理解安全需求:明确系统安全要求和标准
- 产品质量提升:构建和交付更安全的产品
- 问题发现全面性:标记其他技术无法发现的问题
5. 威胁建模实施方法
5.1 图表化分析
5.1.1 流程步骤
- 理解上下文环境:基于业务需求和开发框架分析威胁环境
- 设定攻击场景:建立可能的攻击模型
- 绘制流程图:包含以下关键元素:
5.1.2 流程图元素
- 外部实体:浏览器、移动设备、人、进程等
- 数据流:功能调用、网络数据流等
- 过程:服务、组件等
- 数据库:数据库、文件、注册表、共享存储、缓存等
- 可信边界:物理边界、特权边界、完整性边界
5.1.3 信任边界规则
- 本地进程中的线程通常在信任边界内(共享相同权限)
- 通过网络通信的过程总是存在信任边界
5.2 威胁分析框架
5.2.1 STRIDE模型
六大威胁类型:
-
欺骗(Spoofing)
- 定义:身份欺骗,如使用他人认证信息
- 示例:非法使用其他用户的用户名和密码
-
篡改(Tampering)
- 定义:恶意修改数据
- 示例:修改持久性数据或传输中的数据
-
否认(Repudiation)
- 定义:用户否认执行操作且无证据
- 示例:用户执行转账后否认操作
-
信息泄露(Information Disclosure)
- 定义:未经授权访问敏感信息
-
拒绝服务(Denial of Service)
- 定义:使有效用户服务不可用
- 示例:使Web服务器暂时不可用
-
提权(Elevation of Privilege)
- 定义:非特权用户获得特权访问权限
- 风险:攻击者渗透所有防御成为系统可信部分
5.2.2 隐私威胁考量
除了STRIDE,需考虑隐私威胁,参考国标GBT 35273-2017《信息安全技术个人信息安全规范》。
5.2.3 攻击树分析
- 基于组织业务经验积累
- 参考同类型业务早期分析
- 结合近期攻击者使用的漏洞和技术
5.3 缓解措施
5.3.1 对应缓解策略
- 欺骗缓解:认证机制(基本认证、LiveID、Cookie认证等)
- 篡改缓解:完整性控制(数字签名、消息认证码、哈希)
- 否认缓解:不可否认性措施(强认证、安全日志、数字签名)
- 信息泄露缓解:加密技术(加密、访问控制)
- 拒绝服务缓解:可用性措施(过滤、配额、高可用设计)
- 提权缓解:授权控制(访问控制、特权管理、输入验证)
- 隐私威胁缓解:数据保护(数据清洗、脱敏、加密)
5.4 威胁建模过程
5.4.1 微软方法
六步流程:
- 预设场景:确定产品使用场景和用例
- 图表化场景:绘制详细流程图
- 识别威胁:从外部实体或驱动事件开始分析
- 提供缓解措施:为每个威胁制定应对方案
- 验证威胁和措施:检查图表与代码一致性
- 创建测试计划:确保每个威胁得到适当缓解
5.4.2 风险评估方法
详细步骤:
- 识别资产:确定包含敏感信息的关键资产
- 创建体系结构概述:绘制应用程序架构图
- 分解应用程序:识别进入和退出标准
- 识别威胁:使用STRIDE模型分析可能威胁
- 记录威胁:识别资产、威胁和控制措施
- 评估威胁:使用DREAD模型对威胁评级
5.4.3 OWASP方法
三阶段流程:
阶段一:分解应用程序
- 创建用例理解应用程序使用方式
- 确定入口点和攻击者感兴趣的区域
- 生成数据流图(DFD)显示系统路径
阶段二:确定并排列威胁
- 使用STRIDE或应用安全框架(ASF)分类威胁
- 利用DFD识别潜在威胁目标
- 使用DREAD或定性风险模型评估风险
阶段三:确定对策和缓解措施
- 识别保护缺失区域
- 按风险等级优先处理威胁
- 制定风险缓解策略
6. 实际示例:用户登录场景
6.1 场景设定
用户通过浏览器登录Web应用系统,检查HTTPS请求,提交用户名密码到应用服务器,服务器验证数据库信息,认证成功后进入首页。
6.2 威胁识别
- 用户实体:欺骗、否认威胁
- 提交登录过程:篡改、拒绝服务威胁
6.3 缓解措施表格化
使用表格形式记录威胁类型、描述、风险等级和缓解措施。
7. 威胁建模工具
7.1 工具分类
- 通用工具:白板+纸
- 开源工具:微软开源威胁建模工具(GitHub下载)
- 商业工具:Continuum Security等专业工具
7.2 攻击库资源
- CAPEC:通用攻击模式枚举分类
- OWASP:开放Web应用安全项目资源
- 自定义威胁库:基于组织经验建立
8. 实施建议
8.1 成功要素
- 早期集成到开发流程中
- 多角色协作参与
- 持续更新和维护威胁模型
- 结合组织具体业务场景
8.2 避免的误区
- 不要忽略任何威胁,即使利用方法未知
- 确保图表与最终代码一致性
- 平衡深度优先和宽度优先分析方法
通过系统化实施威胁建模,组织能够建立 proactive 的安全防护体系,在软件开发生命周期的各个阶段有效识别和缓解安全威胁。