4、威胁建模基础:STRIDE、DREAD、攻击树、数据流图
威胁建模是网络安全设计中的一项系统性工程方法,其核心目标是在系统架构设计阶段或重大变更之前,通过结构化的分析手段识别潜在的安全威胁、评估风险等级,并据此制定缓解措施。与渗透测试或漏洞扫描等事后发现手段不同,威胁建模强调“左移”,即在编码和部署之前就将安全考量嵌入到系统设计中。本章将深入讲解威胁建模的四大核心工具:用于威胁分类的STRIDE模型、用于风险量化的DREAD模型、用于攻击路径分析的攻击树,以及作为分析基础的数据流图(DFD)。掌握这些工具,能够帮助安全架构师、开发人员和运维人员建立统一的安全沟通语言,从源头降低系统被攻破的概率。
上图展示了威胁建模过程中四大核心要素的协作关系。数据流图是分析的基础,它描绘了系统中数据的流动路径、处理节点和信任边界。基于数据流图,安全分析师可以运用STRIDE模型对每一个数据流和节点进行系统性的威胁分类,识别出可能存在的伪装、篡改、否认、信息泄露、拒绝服务和权限提升等风险。随后,DREAD模型为这些已识别的威胁进行量化评分,帮助团队确定处理优先级。攻击树则从攻击者的视角出发,以图形化的方式枚举达到特定攻击目标的所有可能路径,用于深入挖掘特定高风险威胁的具体利用手法。最终,这些分析结果汇聚成一份可执行的威胁清单和缓解策略,并反馈到系统设计中,形成安全闭环。
4.1 数据流图(DFD):威胁建模的基石
数据流图是一种用于描述系统数据流向的图形化工具,它不关心系统的具体实现技术(如编程语言、框架),而是聚焦于系统的逻辑架构。在威胁建模中,DFD帮助我们明确“攻击面”在哪里,以及数据在哪些环节可能被窃取或篡改。一个标准的DFD包含四种基本元素:外部实体(External Entity)、处理过程(Process)、数据存储(Data Store)和数据流(Data Flow)。
4.2 STRIDE模型:系统化威胁分类
STRIDE是由微软提出的一种威胁分类模型,它将威胁划分为六大类,每一类都对应着系统安全属性的一个方面。使用STRIDE时,分析师需要针对DFD中的每一个元素(特别是处理过程和数据流)逐一提问,判断其是否面临以下六类威胁。
| 威胁类别 | 违反的安全属性 | 典型攻击示例 | 常见缓解措施 |
|---|---|---|---|
| Spoofing(伪装) | 身份认证 | 盗用他人Session ID、伪造客户端IP | 强身份认证、多因素认证、双向TLS |
| Tampering(篡改) | 数据完整性 | 修改传输中的数据包、篡改数据库记录 | 数据签名、哈希校验、消息认证码(MAC) |
| Repudiation(否认) | 不可抵赖性 | 用户否认发起过某笔交易 | 安全审计日志、数字签名、区块链存证 |
| Information Disclosure(信息泄露) | 数据机密性 | SQL注入获取敏感数据、错误日志泄露堆栈信息 | 字段级加密、最小权限原则、脱敏展示 |
| Denial of Service(拒绝服务) | 可用性 | SYN Flood攻击、CPU耗尽型恶意请求 | 流量清洗、速率限制、资源隔离 |
| Elevation of Privilege(权限提升) | 授权控制 | 普通用户通过越权API调用管理员接口 | 服务端权限校验、RBAC、最小权限原则 |
4.3 DREAD模型:量化风险优先级
STRIDE帮助我们回答了“有哪些威胁”,而DREAD模型则帮助我们回答“哪些威胁最危险,需要优先处理”。DREAD是一个评分体系,对每个威胁从五个维度进行打分(通常为1-10分),最后计算平均值来排序风险。
DREAD评分维度详解:
- 潜在破坏性(Damage Potential): 如果威胁被利用,对系统、数据或业务造成的损失程度。例如,导致服务器完全瘫痪为10分,仅导致非敏感信息泄露为2分。
- 可复现性(Reproducibility): 攻击者能否稳定地复现攻击过程。例如,一个固定的API漏洞每次请求都会触发为10分,需要极特殊时间窗口才能触发的为1分。
- 可利用性(Exploitability): 发起攻击的技术门槛和条件。例如,仅需浏览器访问即可利用为10分,需要物理接触设备且具备高级硬件调试能力为1分。
- 受影响用户(Affected Users): 攻击可能影响到的用户或系统范围。例如,影响所有注册用户为10分,仅影响一个测试账号为1分。
- 可发现性(Discoverability): 威胁被安全人员或攻击者发现的难易程度。例如,漏洞信息已在公开论坛曝光为10分,仅存在于私有代码且极难通过黑盒测试发现为1分。
计算方式为:DREAD总分 = (D + R + E + A + D) / 5。得分在7-10分为高风险,4-6分为中风险,1-3分为低风险。需要注意的是,DREAD评分具有一定的主观性,建议由至少3名安全专家独立评分后取平均值,以减少个人偏见。
4.4 攻击树:深入剖析攻击路径
攻击树是一种以树状结构描述系统攻击路径的分析方法。树的根节点代表攻击者的最终目标(例如“获取数据库管理员权限”),子节点代表为了实现该目标所需的不同子目标或方法,叶节点则是具体的攻击动作。攻击树中的节点通常使用AND(与)或OR(或)逻辑门连接。
- OR节点: 表示只要任意一个子节点成功,父节点目标即达成。例如,要“获取用户密码”,可以通过“暴力破解”或“钓鱼攻击”或“数据库泄露”实现。
- AND节点: 表示所有子节点必须全部成功,父节点目标才能达成。例如,要“远程执行代码”,需要同时满足“找到注入点”和“绕过WAF”和“拥有有效Payload”。
构建攻击树的过程本身就是一次深入的安全评审。它迫使团队站在攻击者的角度思考,识别出那些看似不起眼但组合起来却极具破坏力的攻击链。攻击树不仅用于威胁建模阶段,也常用于红蓝对抗演练和渗透测试方案设计。
实战经验: 在绘制攻击树时,不要只关注技术漏洞。社会工程学攻击(如诱骗管理员点击恶意链接)往往是攻击树中成本最低、成功率最高的分支。请务必将人的因素纳入攻击树分析中。
4.5 综合案例:电商平台支付模块威胁建模实战
为了将上述理论串联起来,我们以一个典型的电商平台支付模块为例,进行一次简化的威胁建模实战演练。该模块的核心功能是接收用户提交的订单支付请求,调用第三方支付网关完成扣款,并更新本地订单状态。
第一步:绘制数据流图(DFD)
我们识别出以下关键元素:外部实体包括用户浏览器和第三方支付网关;处理过程包括支付请求接收器、订单状态更新器;数据存储包括订单数据库。数据流为:用户浏览器 → 支付请求接收器 → 第三方支付网关 → 订单状态更新器 → 订单数据库。信任边界应画在用户浏览器与支付请求接收器之间,以及支付请求接收器与第三方支付网关之间。
第二步:应用STRIDE进行威胁分类
针对“支付请求接收器”这一处理过程,我们应用STRIDE分析:
- S(伪装): 攻击者可能伪造支付成功回调通知,欺骗订单状态更新器。
- T(篡改): 攻击者可能篡改支付金额参数(如将100元改为1元)。
- I(信息泄露): 支付请求中可能包含用户银行卡号,若日志记录不当则造成泄露。
- D(拒绝服务): 攻击者可能向支付接口发送大量并发请求,导致系统资源耗尽。
第三步:使用DREAD进行风险排序
我们对上述威胁进行DREAD评分(1-10分):
| 威胁描述 | 破坏性 | 可复现性 | 可利用性 | 受影响用户 | 可发现性 | 总分 | 优先级 |
|---|---|---|---|---|---|---|---|
| 篡改支付金额 | 9 | 10 | 8 | 10 | 9 | 9.2 | 高 |
| 伪造支付回调 | 10 | 8 | 6 | 10 | 7 | 8.2 | 高 |
| 日志泄露卡号 | 8 | 10 | 5 | 9 | 6 | 7.6 | 高 |
| 支付接口DoS | 6 | 9 | 7 | 8 | 5 | 7.0 | 中 |
第四步:针对高风险项构建攻击树
针对“篡改支付金额”这一最高风险项,我们构建攻击树。根节点为“篡改支付金额”。子节点(OR关系)包括:A. 篡改前端请求参数;B. 中间人攻击修改传输数据;C. 篡改数据库中订单金额。进一步分解节点A(AND关系):需要“绕过前端校验”和“服务端未二次校验金额”。通过攻击树,我们清晰地看到,最根本的缓解措施是在服务端对支付金额进行强校验,并以第三方网关返回的金额为准,而非信任前端传值。
第五步:输出缓解措施与复盘
基于以上分析,我们制定以下缓解措施:
- 服务端对支付金额进行签名验证,且金额以数据库中的订单快照为准。
- 验证支付网关回调通知的签名,并校验回调中的金额与订单号是否匹配。
- 日志系统中对卡号等敏感字段进行掩码处理(如只显示后四位)。
- 对支付接口实施严格的速率限制和IP黑名单机制。
风险提示: 威胁建模不是一次性的活动。当支付模块进行版本迭代(如引入新的优惠券系统)或底层架构变更(如从单体架构拆分为微服务)时,原有的信任边界和数据流都会发生变化,必须重新执行威胁建模流程。忽视这一点的团队,往往会在新功能上线后暴露出严重的安全漏洞。
4.6 常见误区与总结复盘
在实际应用威胁建模时,团队常陷入以下误区:
- 误区一:过度关注工具而忽视业务理解。 威胁建模的前提是深刻理解业务逻辑。如果不清楚“什么是核心资产”,分析出的威胁清单往往不痛不痒。
- 误区二:DFD绘制过于粗糙或过于细节。 过于粗糙会遗漏关键攻击面;过于细节(例如画到类级别)会消耗大量精力且难以维护。建议DFD的粒度控制在“子系统”或“关键模块”级别。
- 误区三:将DREAD评分当作精确科学。 DREAD分数是用于内部排优先级和沟通的参考值,不应作为跨组织或对外发布的安全指标。
- 误区四:忽略攻击树的更新。 攻击树一旦绘制完成就被束之高阁。实际上,每当出现新的攻击手法(如针对特定框架的0day),都应回顾并更新攻击树。
总结而言,威胁建模的核心价值在于提供了一种结构化的思维框架。数据流图帮助我们看清系统全貌,STRIDE确保我们不会遗漏常见的威胁类型,DREAD帮助我们聚焦关键风险,攻击树则指导我们深入理解攻击者的具体路径。将这四种工具有机结合,并嵌入到软件开发生命周期的每一个迭代中,才能真正构建出具有韧性的安全防御体系。