跨越威胁建模框架

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 产品套件