跨越威胁建模框架

STRIDE 威胁模型:“可能出现什么问题?”框架

STRIDE 是微软创建的一种威胁建模框架,它将安全风险分为六类:欺骗、篡改、抵赖、信息泄露、拒绝服务和权限提升。它为开发人员提供了一种可重复的方法,让他们可以在软件生命周期的任何阶段提出“这里可能出现什么问题?”的问题。

为什么开发人员应该在软件项目中使用 STRIDE 威胁模型?

如果你正在发送代码,管理 pipelines,或触摸 CI/CD 无论如何,STRIDE 威胁建模都应该成为您工具包的一部分。STRIDE 代表欺骗、篡改、否认、信息泄露、拒绝服务和特权提升,这六类安全威胁是开发人员在整个软件生命周期中必须考虑的。

由微软于 2000 世纪初创建STRIDE 威胁建模框架看似老派,但它的优势在于其永恒的简洁性:它可以帮助团队系统地思考:“这里可能出什么问题?” 尽管软件交付已经发生了巨大的变化,但随着云原生架构、容器化和 CI/CD pipelines,STRIDE 仍然高度相关。它完美契合了 现代 DevSecOps 通过提供一种实用的、开发人员友好的方法来主动识别和解决安全风险。

这并非专为审计或事后分析而设的理论模型。STRIDE 威胁模型能帮您在攻击者之前找到薄弱环节。无论您是编写部署脚本,还是审查 pull request或连接第三方服务,STRIDE 暴露了攻击者可能利用的角度。

DevSecOps 意味着从一开始就构建安全的软件。STRIDE 不会减慢您的速度,而是通过现在检查正确的内容来减少日后的意外。持续应用 STRIDE 威胁建模框架可以增强您及早预测和解决问题的能力。

快速细分:开发人员需要了解的 STRIDE 类别

STRIDE 威胁模型将威胁分为六类。每一类都对应着软件和基础设施中常见的痛点。

S: 欺骗 身份 (伪造真实身份)风险: 未经授权的用户或服务冒充他人。例如:被入侵的 CI 运行器冒充受信任的部署者并推送不安全的更改。 CI/CD 场景:攻击者获得 CI 代理的访问权限并触发看似来自受信任团队成员的作业。

T: 篡改 数据或代码(弄乱你的东西)风险: 攻击者在不被察觉的情况下更改代码、配置或工件。例如:恶意脚本在构建过程中修改容器镜像。 CI/CD 场景:构建步骤被悄悄改变,以部署来自未经授权来源的修改后的图像。

R:否认 (没有证据证明谁做了什么)风险: 缺乏问责制或审计线索。例如:合并操作发生时,并未核实谁批准或授权。 CI/CD 场景:构建和部署运行时没有记录发起者,因此很难追踪问题。

一、信息披露(泄露秘密) 风险: 日志、构建或工件中的敏感数据泄露。例如:脚本执行失败时打印到日志中的机密信息。 CI/CD 场景:包含机密的环境变量在 pipeline 日志或错误消息。

D: 拒绝服务 (消耗你的资源)风险: 由于逻辑不合理或滥用导致进程或服务不可用。例如:无限作业循环阻塞了 CI 队列。 CI/CD 场景:配置错误 pipeline 触发过于频繁,消耗了所有可用的跑步者容量。

E: 特权提升 (获取超出允许的访问权限)风险: 用户或服务获得不该获得的权限。示例:A pipeline 作业以不应具有的生产级访问权限运行。 CI/CD 场景:由于访问控制配置错误,贡献者的作业以提升的权限执行。

DevOps 中的 STRIDE 威胁建模:快速参考表

类别DevOps风险真实示例
欺骗冒充用户或服务CI 运行器欺骗生产部署者
篡改未经授权的代码或配置更改部署中的恶意脚本 pipeline
否认没有操作日志或审计跟踪合并无 commit 签名或审计跟踪
披露信息日志或构建中泄露机密凭证打印到 CI 日志
拒绝服务资源耗尽或工作流程中断递归 pipeline 工作让跑步者不堪重负
特权提升用户或进程的访问权限过多开发 pipeline 具有产品访问权限的令牌

将 STRIDE 应用于 DevOps 工作流

DevOps 中的欺骗 CI/CD Pipelines

未经授权的进程冒充受信任的 pipeline 阶段。代码库:被盗用的贡献者账户会以合法用户名推送恶意代码。依赖项:恶意软件包使用与热门库类似的名称(域名抢注)来伪装成可信的库。

DevOps 中的篡改 CI/CD Pipelines

修改后的部署脚本会交换容器或插入恶意命令。存储库:强制推送 commit绕过代码审查,注入后门。依赖项:库的恶意更新会引入隐藏功能。

DevOps 中的否认 CI/CD Pipelines

部署触发时无需记录发起者。Repos:缺乏 commit 签名使得无法验证变更的来源。依赖项:软件包变更在提取时无需任何可验证的变更日志或签名。

DevOps 中的信息披露 CI/CD Pipelines

由于冗长的调试,日志输出中泄露的机密信息。存储库:意外泄露了 .env 文件或配置机密信息 commit已添加到源代码管理中。依赖项:权限配置错误的软件包会暴露敏感文件。

DevOps 中的拒绝服务 CI/CD Pipelines

由于无限触发器循环导致运行器过载。代码库:包含超大文件或复杂构建触发器的恶意贡献。依赖项:递归或优化不佳的库会消耗过多的系统资源。

DevOps 中的权限提升 CI/CD Pipelines

共享令牌允许非管理员作业执行管理任务。存储库:Git hooks 或自动化脚本以不必要的权限运行。依赖项:第三方库在构建期间以 root 权限执行安装脚本。

内联示例:应用 STRIDE 之前和之后

否认示例:未签名 Commits

正在修复的问题: 通过验证防止未经审计的合并 commit 签名。

STRIDE 意识培训之前
// Anyone can commit and push, no verification of who or with what identity
git commit -m "update deploy config"
git push origin main

// No branch protection: unsigned, unverified commits merge freely
// .github/settings.yml (missing or absent)

没有签名,不需要审核人,也无法事后证明是谁做的更改,或者更改过程中是否被篡改过。

STRIDE意识提升之后
// Commit signing enabled and enforced locally
git config commit.gpgsign true
git commit -S -m "update deploy config"
git push origin main

// Branch protection requires signed commits before merge
// .github/settings.yml
branches:
  - name: main
    protection:
      required_signatures: true
      required_pull_request_reviews:
        required_approving_review_count: 1

现在每个 commit on main 带有可验证的签名,以及未签名 commits 在分支级别被拒绝,从而弥合了拒绝缺口。

信息泄露示例:日志中的秘密

正在修复的问题: 通过避免直接打印敏感环境变量来防止机密信息泄露。

STRIDE 意识培训之前
// CI job prints the secret directly to logs for "debugging"
steps:
  - name: Deploy
    run: |
      echo "Using API key: $API_KEY"
      curl -H "Authorization: Bearer $API_KEY" https://api.example.com/deploy

如果此任务失败或队友拥有日志访问权限, $API_KEY 现在它以明文形式保存在 CI 历史记录中,任何具有读取权限的人都可以看到。 pipeline.

STRIDE意识提升之后
// Secret is referenced, never printed, and CI masks it by default
steps:
  - name: Deploy
    run: |
      curl -H "Authorization: Bearer ${{ secrets.API_KEY }}" https://api.example.com/deploy
    env:
      API_KEY: ${{ secrets.API_KEY }}

密钥在运行时从 CI 密钥存储中取出,永远不会回显到标准输出,大多数 CI 平台即使意外地出现在输出中,也会自动在日志中将其屏蔽。

开发人员如何在没有安全背景的情况下应用 STRIDE

如果你在 DevSecOps 工作, 威胁建模 应该成为第二天性。通过在审查和自动化设置过程中使用 STRIDE 威胁模型作为指导,您可以在问题影响生产之前进行预测。

您无需成为安全专家。只需在日常工作流程中提出基于 STRIDE 的问题即可:

代码审查期间:

  • 有人可以在这里伪造身份吗?
  • 这可以被篡改吗?

中 CI/CD 综述:

  • 秘密是否在任何地方被暴露?
  • 每一个动作都是可追溯的吗?

在依赖关系分析期间:

  • 我们获取的信息是否来自经过验证的来源?
  • 这种依赖关系可以提升其权限吗?

然后实现你能实现的自动化:

  • 使用签名 commits
  • 实施工件签名
  • 设置机密扫描
  • 监视依赖项更新

这些小步骤无需额外开销即可实现 STRIDE 威胁模型的运作。

在持续应用 STRIDE 威胁建模之前,了解它何时何地适合您的工作流程会有所帮助。

保护您的终极指南 CI/CD Pipeline

学习如何识别、预防和应对 CI/CD 安全风险。

相关阅读:

将 STRIDE 集成到威胁建模流程中

STRIDE 作为一种轻量级、可重复的视角,能够自然地融入开发生命周期,帮助及早发现潜在的安全威胁。在以下关键阶段持续应用 STRIDE 最为有效:

  • 代码审查期间:询问诸如“这会被欺骗或篡改吗?”或“此更改是否有审计跟踪?”之类的问题。
  • 配置时 CI/CD Pipelines:评估是否 秘密被揭露,如果作业可追踪,或者权限范围太广。
  • In 依赖管理:检查第三方软件包是否经过验证、签名,并且没有危险的安装脚本或过度访问。
  • 规划新功能或服务时,使用 STRIDE 威胁建模框架作为清单来集思广益,找出每个威胁类别可能出现的问题。

这使得 STRIDE 威胁建模成为您安全工作中一个实用且可操作的部分,而不是一个重量级的过程,而是一种嵌入到您的日常开发和 DevOps 工作流程中的思维方式。

Xygeni 如何对应 STRIDE 的各个类别

Xygeni 不仅会标记风险,还会针对这些风险采取全面行动。 pipeline.

就是这样 Xygeni 的 检测结果与实际 STRIDE 类别中的每个类别相对应 pipeline:

  • 欺骗: Xygeni的异常检测标志 CI/CD 令牌滥用和作业冒充受信任身份,提醒团队可以在作业运行前轮换凭证。
  • 篡改: Xygeni 的代码篡改检测功能可以识别对部署 YAML、构建文件和代码库的未经授权的更改。 IaC 使用模板,并通知团队具体信息。 commit 以及受影响的文件。
  • 否认: Xygeni 标志未签名 commits 和强制推送绕过分支保护,使团队能够看到强制执行签名的权限。commit 合并前的政策。
  • 信息披露: Xygeni 的密钥扫描功能可以检测日志、代码和 CI 历史记录中暴露的凭据,验证它们是否仍然有效,并触发对受支持的密钥类型的自动撤销。
  • 拒绝服务: Xygeni的异常检测功能可以识别异常情况。 CI/CD 异常构建持续时间或作业频率等活动会实时向团队发出警报。
  • 特权的提升: Xygeni 的最小权限监控可以识别权限过高或不活跃的用户,并且 CI/CD 令牌,并通过以下方式将其公开以供修复: Health Check 功能。

结论:STRIDE 让威胁建模对开发人员切实可行

STRIDE 威胁建模框架为开发者提供了一个清晰、可操作的视角,帮助他们及早发现风险。无需过度思考,只需针对代码、代码库、 pipeline或依赖关系。

STRIDE 威胁建模可帮助您在安全漏洞上线前修复它们。Xygeni 等工具可帮助您自动化修复,避免不必要的麻烦。

将 STRIDE 威胁模型融入您编写、审查和交付代码的方式中。持续的 STRIDE 威胁建模有助于确保您的 pipeline即使规模扩大和发展,也是安全的。

常见问题解答

STRIDE代表什么?

欺骗、篡改、否认、信息泄露、拒绝服务和权限提升,这是微软创建的六大类安全威胁分类。

我需要具备安全方面的背景才能使用 STRIDE 吗?

不。STRIDE 的作用是提供一份问题清单,例如“这是否可以被伪造?”或“这是否可以被追踪?”,开发人员可以在正常的代码审查过程中应用这些问题清单。 CI/CD 组态。

STRIDE 对云原生和云原生应用仍然适用吗? CI/CD 环境?

是的。尽管它是在容器化技术出现之前创建的,而且 CI/CD 为 standardSTRIDE 的六个类别与现代 pipeline 代币滥用、未签名代币等风险 commit以及秘密曝光。

sca-tools-软件-成分分析工具
确定软件风险的优先级、进行补救并加以保护
注册免费账号。
不需要信用卡。

确保您的软件开发和交付安全无虞

使用 Xygeni 产品套件