威胁建模基础:STRIDE、PASTA、攻击树方法

威胁建模这东西,说白了就是在攻击者动手之前,你先替他们把路走一遍。我刚开始做安全时总觉得它有点虚,直到有一次上线前用STRIDE扫出一个API的权限提升漏洞——嗯,从那以后我就再也不敢跳过这步了。

1. STRIDE:微软的六类威胁分类法

STRIDE是微软在2000年左右提出的一套威胁分类框架。每个字母代表一类威胁:

  • S - Spoofing(欺骗)
  • T - Tampering(篡改)
  • R - Repudiation(抵赖)
  • I - Information Disclosure(信息泄露)
  • D - Denial of Service(拒绝服务)
  • E - Elevation of Privilege(权限提升)

我个人习惯在做数据流图(DFD)时,逐一对每个数据流、存储和处理节点问一遍“这六件事在这里会发生吗?”。举个例子,我曾在一个支付系统里发现,用户订单状态直接以明文传回前端——这既是篡改威胁(攻击者可以改状态),也是信息泄露(订单数据暴露)。

威胁类型影响目标常见例子
Spoofing身份伪造用户令牌、重放伪造请求
Tampering数据完整性修改请求参数、篡改数据库记录
Repudiation不可否认性缺少审计日志、日志被删除
Information Disclosure机密性未授权访问敏感文件、错误信息泄露
Denial of Service可用性资源耗尽、死锁、拒绝服务攻击
Elevation of Privilege权限SQL注入获取admin权限、水平越权

实战要点:STRIDE最大的价值在于它提供了一张检查清单。我在很多安全评审里都会对着它逐项过,避免遗漏。

2. PASTA:攻击模拟与威胁分析流程

PASTA全称是Process for Attack Simulation and Threat Analysis。它比STRIDE更侧重流程,一共7步。我最早接触PASTA是在一个金融APP的项目里,当时需要跟业务方一起评估风险——PASTA的步骤恰好能把业务语言翻译成安全语言。

  1. 定义目标:明确要保护什么(业务资产、数据资产)。
  2. 定义技术范围:划清系统边界、架构图、技术栈。
  3. 应用分解:拆解功能、模块、数据流。
  4. 威胁分析:基于场景枚举威胁(结合STRIDE或攻击树)。
  5. 漏洞分析:寻找具体可被利用的弱点。
  6. 攻击建模:模拟攻击链,评估可行性。
  7. 风险分析与缓解:定优先级,给出缓解方案。

记得有一次做第三步“应用分解”时,我们画DFD画了快一天,但后来发现这步帮我们找到了三个原本没意识到的信任边界。所以说,不要嫌麻烦。

小技巧:PASTA的第4步和第5步经常可以并行做。我当时就是把STRIDE的威胁清单直接拿来当输入,效率高不少。

3. 攻击树:用树形结构分析攻击路径

攻击树是Bruce Schneier提出的方法。根节点是攻击者的最终目标,子节点是达成目标所需的条件,可以用AND/OR关系连接。这种方法特别适合分析复杂攻击,比如APT的入侵路径。

我曾在一次红蓝对抗复盘里画过攻击树,发现蓝军漏掉了一条“通过VPN钓鱼获得内网权限再横向移动”的路径——那条路径在树上一目了然。

注意:攻击树容易画得过于庞大。我建议先聚焦最关键的3-5个根目标,每一层不要超过7个节点,否则会变成一团乱麻。

攻击树示例:获取数据库管理员密码 获取DBA密码 社会工程 暴力破解 嗅探网络流量 钓鱼邮件 假冒IT支持 字典攻击(弱口令) WiFi嗅探 ARP欺骗 说明: 根节点为攻击者最终目标(红色)。子节点按OR关系展开(蓝色/绿色/橙色)。 紫色节点表示社会工程下的具体手段,青色节点表示技术性手段。 任何一条路径达成,则目标即可实现——这就是攻击树的威力。

4. 三者对比与组合建议

你可能会问:这三样东西到底怎么选?我的经验是——不要只选一个。STRIDE用来兜底威胁类别,PASTA用来掌控全局流程,攻击树用来深挖关键路径。

方法核心优势适用场景输出产物
STRIDE检查清单式,覆盖面全设计评审、安全需求分析威胁列表、缓解措施表
PASTA端到端流程,业务对齐大型项目、合规要求严格威胁建模文档、风险评级
攻击树可视化攻击路径,便于沟通红蓝对抗、高安全场景攻击树图、攻击步骤说明

我的个人组合拳:先用STRIDE扫一遍全局,再用攻击树针对高风险节点(比如权限提升、信息泄露)展开深挖,最后把结果塞进PASTA的第5步“漏洞分析”和第6步“攻击建模”。这样既不遗漏也不浪费精力。

说回实战。有一次客户问我:“我们做了渗透测试还需要威胁建模吗?”我当时的回答是:渗透测试只能发现已经存在的漏洞,而威胁建模可以找到那些还没写进代码、还没来得及被引入的安全问题。说白了,一个是扫雷,一个是排雷规划。你想想看,哪个更主动?

威胁建模不是一次性的活动。我建议每出现一次架构变更、引入新第三方组件、或发现新攻击手法时,都回头翻翻你的STRIDE清单或者攻击树——嗯,省得后面返工。