STRIDE 和攻击树,都是威胁建模里非常常用的方法,但侧重点不同。### 技术文章大纲:输入主题内容
引言
- 简要介绍主题的背景和重要性
- 说明文章的目标和结构
技术概述
- 定义主题的核心概念
- 列举相关的技术或工具
- 分析当前行业中的应用场景
关键技术解析
- 详细讲解主题涉及的核心技术
- 提供技术实现的逻辑或流程
- 展示示例代码或公式(如有)
实际应用案例
- 列举1-2个典型应用场景
- 分析案例中的技术实现细节
- 讨论案例的成功因素或挑战
发展趋势与挑战
- 探讨该主题的未来发展方向
- 分析当前面临的技术或市场挑战
- 提出可能的解决方案或改进建议
总结
- 回顾文章的核心内容
- 强调主题的重要性和潜在价值
- 提供进一步学习的资源或建议
参考资料(可选)
- 列出相关的书籍、论文或在线资源
STRIDE 是一种威胁分类法 ,最早由微软在 SDL / Threat Modeling 方法中系统化使用。它把常见安全威胁分成 6 类:
S = Spoofing(身份伪造)
T = Tampering(篡改)
R = Repudiation(抵赖)
I = Information Disclosure(信息泄露)
D = Denial of Service(拒绝服务)
E = Elevation of Privilege(权限提升)。微软的威胁建模工具和资料也明确是按这 6 类来枚举潜在威胁的。(微软学习)
攻击树 则是一种攻击路径表达法 。它把"攻击者的目标"放在树根,然后不断往下拆分成"要实现这个目标有哪些路径、前置条件、子步骤"。SEI 的资料把攻击树描述为:根节点代表攻击目标,叶子节点代表实现该目标的具体方式;它最初由 Bruce Schneier 在 1999 年提出,后来被广泛用于网络安全和系统安全建模。(sei.cmu.edu)
你可以把它们简单理解成:
- STRIDE 回答的是:这属于哪一类威胁?
- 攻击树回答的是:攻击者具体怎么一步步做到?
1. STRIDE 是什么
STRIDE 的核心价值是:不容易漏类 。
当你面对一个系统------比如 PLC、上位机、云平台、登录接口、下载通道------你可以逐个对象去问这 6 个问题,从而系统性地找威胁,而不是靠拍脑袋。微软的做法通常是先画 DFD(数据流图) ,标出进程、数据存储、外部实体、数据流和信任边界,再用 STRIDE 去枚举威胁。(微软学习)
STRIDE 六类,通俗解释
1)Spoofing:身份伪造
攻击者冒充别人。
典型问题:
- 冒充合法用户登录
- 冒充 PLC / 从站 / 工程师站
- 伪造设备证书、会话、令牌、账号
2)Tampering:篡改
攻击者改数据、改报文、改配置、改程序。
典型问题:
- 篡改下载到 PLC 的工程文件
- 改配置参数、变量值、固件
- 改通信报文内容
3)Repudiation:抵赖
做了事却无法追责。
典型问题:
- 谁下载过程序、改过参数,没有日志
- 操作记录不可审计、可删除、不可证明
- 无法把"某次操作"关联到具体账号和时间
4)Information Disclosure:信息泄露
不该看到的人看到了。
典型问题:
- 明文传输密码、配置、工艺参数
- 日志里泄露密钥、令牌、敏感数据
- 调试接口暴露设备信息
5)Denial of Service:拒绝服务
让系统不可用或显著降级。
典型问题:
- 大量请求打挂服务
- PLC / HMI / 网关资源耗尽
- 非法报文导致通信阻塞、任务卡死
6)Elevation of Privilege:权限提升
攻击者从低权限变成高权限。
典型问题:
- 普通操作员拿到管理员权限
- 利用漏洞进入受限功能
- 从应用层打到系统层 / 从访客打到工程模式
微软还给过一个很实用的指导思想:围绕系统中的资产、入口、身份边界、数据流和信任边界,逐类去问"这种威胁会不会发生"。(微软学习)
2. 攻击树是什么
攻击树适合把一个抽象威胁,拆成可推演、可分析、可评估 的攻击路径。
它的结构一般是:
- 根节点:攻击目标
- 中间节点:达成目标的子目标 / 阶段
- 叶子节点:具体攻击动作、条件、利用点
并且常用 AND / OR 逻辑:
- OR:多个路径里任意一个成功即可
- AND:必须几个条件都满足才行
SEI 对攻击树的说明也是这个思路:根表示攻击目标,分支表示实现路径,叶子表示具体方法;它可以帮助系统化分析攻击方式,并进一步映射防护措施。(sei.cmu.edu)
一个简单例子
根目标:"未授权修改 PLC 程序"
往下拆:
-
路径 A:盗用工程师账号
- 获取密码
- 绕过二次认证
- 登录工程站
- 下发程序
-
路径 B:篡改下载链路
- 进入工程网络
- 劫持下载会话
- 替换工程文件
- 发送到 PLC
-
路径 C:利用权限缺陷
- 以低权限账户登录
- 调用未鉴权下载接口
- 越权写入程序
这个树一画出来,马上就能看出:
A 更偏 Spoofing / EoP ,
B 更偏 Tampering / Info Disclosure ,
C 更偏 Elevation of Privilege。
这就是攻击树和 STRIDE 的互补关系。
3. 两者的核心区别
STRIDE
适合做"分类式枚举"。
优点:
- 上手快
- 结构化,不容易漏大类
- 适合架构评审、设计阶段
- 适合和 DFD、信任边界一起用
局限:
- 它告诉你"有什么威胁类别",但不一定展开"攻击路径细节"
- 对复杂多阶段攻击的表达能力一般
攻击树
适合做"路径式推演"。
优点:
- 能看清攻击步骤、前置条件、组合逻辑
- 适合深入分析高价值目标
- 能用于评估攻击成本、概率、检测点、防御点
局限:
- 容易画很大
- 如果范围不控好,会无限展开
- 不如 STRIDE 那样天然有"分类覆盖感"
OWASP 也明确指出:威胁建模没有唯一方法,STRIDE、攻击树、PASTA、OCTAVE 等都可以按场景组合使用。(OWASP Cheat Sheet Series)
4. 实际项目里怎么配合用
一个很实用的流程是:
第一步:画系统边界和数据流
先把系统画清楚:
- 外部实体:工程师、运维、第三方系统、设备
- 进程:组态软件、下载服务、认证服务
- 数据存储:项目文件、日志、密钥库、设备配置
- 数据流:登录、下载、参数同步、日志上传
- 信任边界:PC ↔ PLC、内网 ↔ 外网、用户态 ↔ 管理员态
这是微软和 OWASP 在威胁建模流程里都很强调的起点。(微软学习)
第二步:用 STRIDE 做全面枚举
对每个对象问:
- 会不会被伪造?
- 会不会被篡改?
- 能不能赖账?
- 会不会泄露?
- 能不能被打挂?
- 会不会越权?
这样先把清单铺开。
第三步:挑重点威胁画攻击树
不是每个点都要画攻击树。
通常挑:
- 高危资产
- 高价值操作
- 现实攻击面大的接口
- 合规重点项
比如:
- 未授权固件升级
- 未授权下载工程
- 远程提权
- 日志不可追责
- 网络服务被 DoS
第四步:把树叶映射成控制措施
每个叶子节点都问:
- 预防措施是什么
- 检测措施是什么
- 响应措施是什么
- 剩余风险是什么
这样才能从"分析"走到"设计改进"。
5. 一个工业控制 / PLC 场景下的例子
假设你的对象是:组态软件向 PLC 下载工程
先用 STRIDE 过一遍
S 伪造
- 攻击者冒充工程师站
- 冒充 PLC 接收/返回结果
- 伪造会话 token / 账号
T 篡改
- 篡改工程文件
- 篡改下载报文
- 篡改在线参数
R 抵赖
- 谁发起了下载无法确认
- 下载成功/失败没有可信日志
- 日志可删除或可篡改
I 泄露
- 工程文件、设备拓扑、口令明文暴露
- 调试日志含敏感配置
- 网络抓包可看到关键内容
D 拒绝服务
- 持续连接占满 PLC 通道
- 非法下载触发资源耗尽
- 高频报文导致设备异常
E 权限提升
- 普通账户可执行下载
- 访客模式可访问调试接口
- 本地服务漏洞导致管理员权限
再挑一个高风险点画攻击树
根目标:未授权下载工程到 PLC
OR 分支可以是:
-
A. 获取合法工程师身份
- 钓鱼/弱口令/默认口令
- 复用会话
- 盗取令牌
-
B. 绕过鉴权
- 下载接口未鉴权
- 只校验前端,不校验服务端
- 本地接口可被脚本直接调用
-
C. 篡改传输链路
- 进入控制网络
- 中间人攻击
- 替换 payload
- 伪造返回成功
-
D. 利用主机提权
- 先攻陷工程师站
- 提权到管理员
- 读取本地凭据
- 发起下载
这样一来,你不只是知道"有 Spoofing/Tampering/EoP 风险",而是能看到攻击者到底走哪几步。
6. 什么时候用哪个
如果你现在在做:
架构设计评审 / 安全需求梳理
优先上 STRIDE。因为它覆盖快,适合做"全景扫描"。
对某个高风险功能深挖
优先上 攻击树。因为它能把攻击链拆细。
最稳的做法
先 STRIDE 找全,再对重点项画 攻击树。
7. 容易混淆的点
STRIDE 不是风险评级法
它是分类法 ,不是 CVSS,也不是 DREAD。
它负责"识别威胁类型",不直接给你分数。(微软学习)
攻击树不是资产图
它不是系统结构图,也不是网络拓扑图。
它画的是"为了实现某个攻击目标,攻击者可能采取的路径"。
两者都不是最终交付物本身
真正落地时,你还需要:
- 资产清单
- 入口点清单
- 信任边界
- 安全控制项
- 风险优先级
- 缓解措施闭环
8. 你可以直接这样记
STRIDE:按类别找威胁。
攻击树:按路径拆攻击。
一句更工程化的话:
STRIDE 负责"广度覆盖",攻击树负责"深度展开"。
9. 如果你要做文档,推荐模板
你可以按这个格式写:
A. STRIDE 表
- 资产/组件
- 数据流
- 信任边界
- STRIDE 类别
- 威胁描述
- 影响
- 现有控制
- 建议措施
B. 攻击树表
- 攻击目标(根节点)
- 一级路径(OR)
- 子步骤(AND/OR)
- 前置条件
- 利用难度
- 检测点
- 防护措施
- 剩余风险
如果你愿意,我下一条可以直接给你一版**"面向 PLC/组态软件下载链路"的 STRIDE + 攻击树完整示例**,我会按你现在做的信息安全认证场景来写。