《从零搭建安全开发流程》
第3章 安全需求分析

3、安全需求分析:威胁建模入门、STRIDE模型详解、如何编写安全需求文档

3.1 威胁建模入门

威胁建模是一种系统化的方法,用于识别、评估和缓解软件系统中的安全威胁。它帮助团队在开发早期发现潜在风险,从而降低修复成本。威胁建模的核心是“以攻击者的视角思考”,通过分析系统的架构、数据流和信任边界,找出可能被利用的弱点。

🎯 威胁建模的四个核心步骤

  1. 绘制架构图:明确系统组件、数据流和信任边界。
  2. 识别威胁:使用STRIDE等模型系统化地发现威胁。
  3. 评估风险:根据影响和可能性对威胁进行优先级排序。
  4. 制定缓解措施:设计安全控制来消除或降低风险。
1. 绘制架构图 组件 & 数据流 2. 识别威胁 STRIDE 模型 3. 评估风险 影响 & 可能性 4. 制定缓解措施 安全控制 迭代优化

💡 入门建议:从简单的白板绘制开始,逐步使用专业工具(如Microsoft Threat Modeling Tool、OWASP Threat Dragon)。重点理解“信任边界”——系统内部与外部环境之间的分界线,这是威胁建模的关键切入点。

3.2 STRIDE模型详解

STRIDE是微软提出的威胁分类模型,由六种威胁类型的首字母组成。它提供了一种结构化的方式来枚举安全威胁,确保覆盖全面。每个威胁类型对应一种安全属性被破坏的场景。

字母 威胁类型 破坏的安全属性 典型示例
S Spoofing(欺骗) 身份认证 攻击者伪造用户身份登录系统
T Tampering(篡改) 完整性 修改数据库中的订单金额
R Repudiation(抵赖) 不可否认性 用户否认执行过某笔交易
I Information Disclosure(信息泄露) 机密性 通过SQL注入获取用户密码
D Denial of Service(拒绝服务) 可用性 大量请求导致服务器崩溃
E Elevation of Privilege(权限提升) 授权 普通用户获取管理员权限
STRIDE 威胁模型 S 欺骗 T 篡改 R 抵赖 I 信息泄露 D 拒绝服务 E 权限提升

🔍 应用技巧:在威胁建模会议中,针对每个数据流和组件,逐一检查STRIDE六类威胁。例如,对于“用户登录”功能:S(伪造身份)→ 需强认证;T(篡改令牌)→ 需签名;R(抵赖登录)→ 需审计日志;I(泄露密码)→ 需加密;D(暴力破解)→ 需限流;E(越权访问)→ 需最小权限。

3.3 如何编写安全需求文档

安全需求文档是将威胁建模结果转化为可执行开发任务的关键产出。一份优秀的安全需求文档应具备:明确性(无歧义)、可测试性(可验证)、可追溯性(关联具体威胁)。

📋 安全需求文档模板(示例)

需求编号: SEC-REQ-001
关联威胁: T001 - 用户身份欺骗 (Spoofing)
需求描述: 系统必须对所有用户登录请求实施多因素认证(MFA),
  至少包含密码 + 短信验证码或TOTP。
验收标准: 
  1. 测试人员使用无效密码+有效验证码,登录被拒绝。
  2. 测试人员使用有效密码+无效验证码,登录被拒绝。
  3. 测试人员使用有效密码+有效验证码,登录成功。
优先级: 高
来源: 威胁建模会议 (2025-03-15)
  
1. 提取威胁 从STRIDE结果中筛选 2. 编写需求 明确、可测试、可追溯 3. 评审与定稿 安全团队 + 开发团队 4. 入库 需求管理系统

📌 最佳实践:

  • 每个安全需求必须关联至少一个STRIDE威胁类型,确保覆盖完整。
  • 使用“用户故事”格式编写:“作为[角色],我希望[功能],以便[安全目标]”。
  • 在需求文档中明确验收标准,便于测试团队验证。
  • 定期更新需求文档,与威胁建模迭代同步。

3.4 综合示例:从威胁到需求

以下是一个简单的“在线支付系统”威胁建模片段,展示如何从STRIDE威胁映射到具体的安全需求:

STRIDE威胁 威胁描述 安全需求(简写)
Spoofing 攻击者伪造商户身份发起退款 所有退款请求必须使用双向TLS证书认证
Tampering 中间人篡改支付金额 支付请求必须包含HMAC签名,服务端验证
Information Disclosure 日志中泄露信用卡号 日志系统必须对信用卡号进行脱敏处理
Denial of Service 恶意用户大量请求支付接口 支付接口必须实施速率限制(每秒最多10次)
威胁 (STRIDE) Spoofing Tampering Information Disclosure ... 映射 威胁 → 需求 优先级排序 验收标准 安全需求 SEC-REQ-001 SEC-REQ-002 SEC-REQ-003 ...

通过这种结构化的映射,确保每个识别的威胁都有对应的安全需求来缓解,形成完整的闭环。

⭐ 核心要点回顾

  • 威胁建模是安全需求分析的基础,STRIDE提供系统化的威胁分类。
  • 安全需求文档必须可测试、可追溯,并关联具体威胁。
  • 威胁建模与安全需求编写是迭代过程,随系统演进持续更新。
专注课程资料整理