在SDL(Security Development Lifecycle)安全开发生命周期中,威胁建模(Threat Modeling)确实应在**设计阶段**进行 📅 2026/8/18 12:42:23 在SDLSecurity Development Lifecycle安全开发生命周期中威胁建模Threat Modeling确实应在设计阶段进行。该活动旨在系统性地识别、分析和缓解潜在的安全威胁通常在系统架构和组件交互关系明确之后、编码开始之前开展以确保安全控制措施能“左移”嵌入设计避免后期高成本修复。常用方法包括STRIDE、PASTA、Trike等输出物常为威胁列表、缓解方案及安全需求补充。威胁建模不宜放在需求阶段或实现阶段根本原因在于输入信息的完备性与干预时机的有效性需求阶段过早此时系统边界、功能范围、数据流、信任边界、组件交互等关键安全上下文尚未明确缺乏建模所需的结构化输入如数据流图DFD、组件架构图。强行建模易导致遗漏关键资产或误判威胁且识别出的威胁难以映射到具体设计决策缺乏可操作性。实现阶段过晚代码已基本完成架构和接口已固化。此时发现高危威胁如不安全的身份验证机制、缺失的输入校验往往需重构核心模块成本高昂、风险大、进度延误严重违背SDL“安全左移”原则且开发人员可能因时间压力弱化或绕过缓解措施。设计阶段恰逢其时系统架构、模块划分、通信协议、数据存储方式、信任边界等均已定义可绘制准确的数据流图DFD清晰识别攻击面同时设计尚未固化能低成本引入安全控制如认证增强、最小权限设计、加密策略并将安全需求直接转化为技术规范实现“设计即安全”。因此设计阶段是威胁建模的黄金窗口——兼具分析可行性与整改可行性是平衡安全性与工程效率的关键支点。在敏捷开发中威胁建模需摒弃“一次性、重量级、文档驱动”的传统模式转为轻量、持续、嵌入式、协作式的实践。即使设计文档不完善也可依托敏捷交付物如用户故事、原型、API契约、架构草图开展有效建模。关键策略如下✅1. 以用户故事/功能特性为建模单元每个高风险用户故事如“用户登录”“支付接口”进入迭代待办列表Sprint Backlog时同步启动微型威胁建模如15–30分钟结对建模。聚焦该功能的数据流输入源 → 处理逻辑 → 输出目标 → 存储位置 → 信任边界如前端↔后端、服务↔数据库快速绘制简化的数据流图DFD草图。✅2. 利用“活文档”替代静态设计文档使用白板、Miro或Lucidchart实时协作绘制DFD截图存入Confluence或Jira关联故事将STRIDE威胁项如“登录流程是否可能被重放攻击”“密码是否明文传输”直接作为验收标准Acceptance Criteria或安全任务加入用户故事持续更新——每次架构演进如新增微服务、引入第三方SDK即触发局部建模。✅3. 角色协同与知识共建由开发、测试、产品、安全工程师组成“安全结对小组”利用每日站会前10分钟快速复盘上一迭代的安全发现鼓励开发者用“攻击者思维”提问如“我如何绕过这个权限校验”将威胁识别转化为可执行的代码检查点如“添加CSRF Token验证”。✅4. 自动化辅助与模板化提效使用轻量工具如Microsoft Threat Modeling Tool的简化模板、Threat Dragon开源工具预置常见场景OAuth2流程、文件上传、API网关的威胁库建立团队级“威胁模式清单”如“所有含文件上传的功能必须防范路径遍历恶意脚本执行”减少重复分析。✅5. 度量与闭环将“每个迭代完成≥1次关键功能威胁建模”纳入Definition of ReadyDoR追踪建模发现的威胁缓解率如“Sprint内修复率≥80%”避免建模流于形式。本质是不追求完美文档而追求及时、可行动的安全洞察不等待设计完成而伴随设计演进持续建模。