威胁建模基础: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的步骤恰好能把业务语言翻译成安全语言。
- 定义目标:明确要保护什么(业务资产、数据资产)。
- 定义技术范围:划清系统边界、架构图、技术栈。
- 应用分解:拆解功能、模块、数据流。
- 威胁分析:基于场景枚举威胁(结合STRIDE或攻击树)。
- 漏洞分析:寻找具体可被利用的弱点。
- 攻击建模:模拟攻击链,评估可行性。
- 风险分析与缓解:定优先级,给出缓解方案。
记得有一次做第三步“应用分解”时,我们画DFD画了快一天,但后来发现这步帮我们找到了三个原本没意识到的信任边界。所以说,不要嫌麻烦。
小技巧:PASTA的第4步和第5步经常可以并行做。我当时就是把STRIDE的威胁清单直接拿来当输入,效率高不少。
3. 攻击树:用树形结构分析攻击路径
攻击树是Bruce Schneier提出的方法。根节点是攻击者的最终目标,子节点是达成目标所需的条件,可以用AND/OR关系连接。这种方法特别适合分析复杂攻击,比如APT的入侵路径。
我曾在一次红蓝对抗复盘里画过攻击树,发现蓝军漏掉了一条“通过VPN钓鱼获得内网权限再横向移动”的路径——那条路径在树上一目了然。
注意:攻击树容易画得过于庞大。我建议先聚焦最关键的3-5个根目标,每一层不要超过7个节点,否则会变成一团乱麻。
4. 三者对比与组合建议
你可能会问:这三样东西到底怎么选?我的经验是——不要只选一个。STRIDE用来兜底威胁类别,PASTA用来掌控全局流程,攻击树用来深挖关键路径。
| 方法 | 核心优势 | 适用场景 | 输出产物 |
|---|---|---|---|
| STRIDE | 检查清单式,覆盖面全 | 设计评审、安全需求分析 | 威胁列表、缓解措施表 |
| PASTA | 端到端流程,业务对齐 | 大型项目、合规要求严格 | 威胁建模文档、风险评级 |
| 攻击树 | 可视化攻击路径,便于沟通 | 红蓝对抗、高安全场景 | 攻击树图、攻击步骤说明 |
我的个人组合拳:先用STRIDE扫一遍全局,再用攻击树针对高风险节点(比如权限提升、信息泄露)展开深挖,最后把结果塞进PASTA的第5步“漏洞分析”和第6步“攻击建模”。这样既不遗漏也不浪费精力。
说回实战。有一次客户问我:“我们做了渗透测试还需要威胁建模吗?”我当时的回答是:渗透测试只能发现已经存在的漏洞,而威胁建模可以找到那些还没写进代码、还没来得及被引入的安全问题。说白了,一个是扫雷,一个是排雷规划。你想想看,哪个更主动?
威胁建模不是一次性的活动。我建议每出现一次架构变更、引入新第三方组件、或发现新攻击手法时,都回头翻翻你的STRIDE清单或者攻击树——嗯,省得后面返工。