Pentesting CI/CD Methodology

支持 HackTricks

VCS

VCS 代表 版本控制系统,该系统允许开发人员 管理他们的源代码。最常见的是 git,您通常会发现公司在以下 平台 中使用它:

  • Github

  • Gitlab

  • Bitbucket

  • Gitea

  • 云服务提供商(他们提供自己的 VCS 平台)

Pipelines

Pipelines 允许开发人员 自动执行代码(用于构建、测试、部署等目的),在某些操作发生后:推送、PR、cron... 它们对 自动化从开发到生产的所有步骤 非常有用。

然而,这些系统需要在某个地方 执行,通常需要 特权凭据来部署代码

VCS Pentesting Methodology

即使某些 VCS 平台允许创建管道,在本节中我们将仅分析对源代码控制的潜在攻击。

包含您项目源代码的平台包含敏感信息,用户需要非常小心在此平台内授予的权限。这些是 VCS 平台上攻击者可能滥用的一些常见问题:

  • 泄漏:如果您的代码在提交中包含泄漏,并且攻击者可以访问该仓库(因为它是公开的或因为他有访问权限),他可能会发现这些泄漏。

  • 访问:如果攻击者可以 访问 VCS 平台内的帐户,他可能会获得 更多的可见性和权限

  • 注册:某些平台只允许外部用户创建帐户。

  • SSO:某些平台不允许用户注册,但允许任何人使用有效的 SSO 访问(因此攻击者可以使用他的 GitHub 帐户进入,例如)。

  • 凭据:用户名+密码、个人令牌、ssh 密钥、Oauth 令牌、cookies... 用户可以窃取多种类型的令牌以某种方式访问仓库。

  • Webhooks:VCS 平台允许生成 webhooks。如果它们 没有用不可见的秘密保护,则 攻击者可能会滥用它们

  • 如果没有秘密,攻击者可能会滥用第三方平台的 webhook

  • 如果秘密在 URL 中,情况也是如此,攻击者也会拥有秘密

  • 代码妥协:如果恶意行为者对仓库有某种 写入 访问权限,他可能会尝试 注入恶意代码。为了成功,他可能需要 绕过分支保护。这些操作可以以不同的目标为目的进行:

  • 妥协主分支以 妥协生产

  • 妥协主分支(或其他分支)以 妥协开发者机器(因为他们通常在自己的机器上执行测试、terraform 或其他操作)。

  • 妥协管道(查看下一节)

Pipelines Pentesting Methodology

定义管道的最常见方法是使用 托管在仓库中的 CI 配置文件。该文件描述了执行作业的顺序、影响流程的条件和构建环境设置。 这些文件通常具有一致的名称和格式,例如 — Jenkinsfile(Jenkins)、.gitlab-ci.yml(GitLab)、.circleci/config.yml(CircleCI)和位于 .github/workflows 下的 GitHub Actions YAML 文件。当触发时,管道作业 从选定的源中拉取代码(例如提交/分支),并 根据该代码运行 CI 配置文件中指定的命令

因此,攻击者的最终目标是以某种方式 妥协这些配置文件它们执行的命令

PPE - Poisoned Pipeline Execution

毒化管道执行(PPE)路径利用 SCM 仓库中的权限来操纵 CI 管道并执行有害命令。具有必要权限的用户可以修改 CI 配置文件或管道作业使用的其他文件,以包含恶意命令。这会“毒化” CI 管道,导致这些恶意命令的执行。

为了使恶意行为者成功执行 PPE 攻击,他需要能够:

  • 拥有 对 VCS 平台的写入访问权限,因为通常在执行推送或拉取请求时会触发管道。(查看 VCS 渗透测试方法以获取获取访问权限的摘要)。

  • 注意,有时 外部 PR 计为“写入访问”

  • 即使他拥有写入权限,他也需要确保他可以 修改 CI 配置文件或其他配置所依赖的文件

  • 为此,他可能需要能够 绕过分支保护

有 3 种 PPE 风格:

  • D-PPE直接 PPE 攻击发生在行为者 修改将要执行的 CI 配置 文件时。

  • I-DDE间接 PPE 攻击发生在行为者 修改 CI 配置文件 依赖的 文件(如 make 文件或 terraform 配置)时。

  • 公共 PPE 或 3PE:在某些情况下,管道可以 由没有写入访问权限的用户触发(甚至可能不是组织的一部分),因为他们可以发送 PR。

  • 3PE 命令注入:通常,CI/CD 管道会 设置环境变量,其中包含 有关 PR 的信息。如果该值可以被攻击者控制(如 PR 的标题),并且在 危险位置(如执行 sh 命令)中 使用,攻击者可能会 在其中注入命令

Exploitation Benefits

了解毒化管道的 3 种风格后,让我们检查攻击者在成功利用后可能获得的内容:

  • 秘密:如前所述,管道的作业需要 特权(检索代码、构建、部署...),这些特权通常在秘密中 授予。这些秘密通常可以通过 环境变量或系统内的文件 访问。因此,攻击者总是会尝试尽可能多地外泄秘密。

  • 根据管道平台,攻击者 可能需要在配置中指定秘密。这意味着如果攻击者无法修改 CI 配置管道(例如 I-PPE),他可能 只能外泄该管道拥有的秘密

  • 计算:代码在某处执行,具体取决于执行的位置,攻击者可能能够进一步转移。

  • 本地:如果管道在本地执行,攻击者可能会进入 具有更多资源的内部网络

  • :攻击者可以访问 云中的其他机器,还可以 外泄 IAM 角色/服务帐户 令牌 以获得 进一步的云内访问

  • 平台机器:有时作业将在 管道平台机器 内执行,这些机器通常位于 没有更多访问权限 的云中。

  • 选择它:有时 管道平台将配置多个机器,如果您可以 修改 CI 配置文件,则可以 指示要运行恶意代码的位置。在这种情况下,攻击者可能会在每台可能的机器上运行反向 shell,以尝试进一步利用。

  • 妥协生产:如果您在管道内,并且最终版本是从中构建和部署的,您可能会 妥协将要在生产中运行的代码

More relevant info

Tools & CIS Benchmark

  • Chain-bench 是一个开源工具,用于审计您的软件供应链堆栈的安全合规性,基于新的 CIS 软件供应链基准。审计集中于整个 SDLC 过程,可以揭示从代码时间到部署时间的风险。

Top 10 CI/CD Security Risk

查看这篇关于 Cider 的前 10 大 CI/CD 风险的有趣文章:https://www.cidersecurity.io/top-10-cicd-security-risks/

Labs

Automatic Tools

  • CheckovCheckov 是一个用于基础设施即代码的静态代码分析工具。

References

支持 HackTricks

Last updated