安全模型与原则 · kp-004

威胁建模:STRIDE 方法

核心 约 25 分钟 状态:reviewed #威胁建模#STRIDE#架构

一句话定义

威胁建模是在设计与评审阶段系统性回答"谁可能以什么方式攻击哪里"的结构化方法;STRIDE 把威胁划分为伪造(Spoofing)、篡改(Tampering)、抵赖(Repudiation)、信息泄露(Information Disclosure)、拒绝服务(DoS)、权限提升(Elevation of Privilege)六类。

为什么重要

漏洞测试只能发现"已经写出来的洞",威胁建模能发现"设计里的洞"——后者的修复成本远低于前者。它把发散的安全讨论收敛成可枚举、可分派、可关闭的工作项,是防御方以有限资源覆盖最大风险面的第一工具,也是把 kp-001 的属性坐标系变成工程清单的桥梁。

前置知识

kp-001(CIA 三元组):STRIDE 六类与安全属性一一对应。 kp-002(AAA):抵赖类威胁对应审计缺失,伪造类对应认证缺失。

核心概念

  • 数据流图(DFD)四要素:外部实体(方框)、进程(圆)、数据流(箭头)、数据存储(双横线);信任边界是图中"控制权更换"的位置(如用户输入进入服务端),威胁几乎都聚集在跨边界处。
  • STRIDE 与属性的映射:伪造↔认证、篡改↔完整性、抵赖↔审计/不可否认、泄露↔保密性、拒绝服务↔可用性、提权↔授权。
  • 风险评级:DREAD(危害、可复现性、可利用性、影响面、可发现性)或简化的高/中/低,评级服务于处置排序而非精确度量。
  • 处置四选一:缓解(改设计加控制)、转移(交给第三方如 CDN)、规避(砍掉该功能路径)、接受(显式记录并批准)。

公式、模型或图示

text
[用户] ──HTTPS──▶ (登录进程) ──▶ [会话库]
  │ 信任边界①            │ 信任边界②
  外部实体→服务          服务→存储
 威胁示例:
 ① 伪造:伪造他人凭证登录     ② 篡改:改写会话记录
 ① 泄露:明文传输被嗅探      ② 抵赖:无操作日志

原理与机制

建模流程五步:画数据流图 → 标出信任边界 → 对每个要素逐类过 STRIDE 清单 → 按风险评级排序 → 为每项选择处置并跟踪关闭。方法论的关键是"穷举代替灵感":逐元素 × 六类威胁的矩阵保证不靠运气覆盖面。STRIDE 的第六类(提权)贯穿所有要素——任何被攻破的组件都可能成为横向移动的起点,这也是 kp-003 最小权限在建模中的意义:为每项威胁假设"最坏情况下的权限上限"。

实例或案例

对一个"用户上传头像"功能建模:跨信任边界的数据流是"上传文件",逐类过清单发现——伪造:未登录者可调用接口(补认证);篡改:上传内容未校验可伪装脚本(补类型校验与存储隔离,关联 kp-013);泄露:文件 URL 可猜测(改用不可猜测的存储键);抵赖:无上传审计(补日志);拒绝服务:无大小限制可塞满磁盘(补配额);提权:上传目录与 Web 目录混用(隔离存储区)。一次建模产出六项可执行修复。

直观类比

威胁建模像建筑图纸阶段的消防评审:与其等大火(事件响应)再反思,不如在图纸上沿逃生路线(数据流)逐段检查防火分区(信任边界)。STRIDE 就是评审用的检查表。

常见误区

  • 把建模当一次性活动:架构每次演进都应增量更新 DFD,否则模型迅速过期。
  • 建模等于列漏洞清单:建模的对象是设计中的威胁,不是已实现代码的缺陷扫描。
  • 只有安全专家能做:开发团队对照清单即可完成初稿,专家评审是第二道质量关。

与其他知识点的关系

  • kp-011(Web 攻击面与 HTTP 安全基础):Web 场景下信任边界的具体形态。
  • kp-029(渗透测试与伦理):渗透测试是"对建模结果的实测验证",两者互补。

自测题

  1. STRIDE 六类分别映射哪些安全属性?要点:认证/完整性/审计不可否认/保密性/可用性/授权。
  2. 为什么威胁集中在信任边界而不是图内任意位置?要点:边界处控制权与执行环境更换,输入的语义在两侧解释不同,攻击者恰好只控制边界外侧。
  3. "接受"一项威胁意味着什么?要点:显式记录风险、批准者与复审时间后按已知风险运行,与"没想过"有本质区别。

延伸阅读

《Threat Modeling: Designing for Security》(Adam Shostack):STRIDE 实操与 DFD 技法的系统教材。