在 CircleCI 漏洞之后,对于任何依赖 CI/CD 基础架构的团队来说,这是一个审查其管道安全性的好时机,因为他们可以采取一些主动措施。
最近,我们了解到CircleCI 遭到破坏。他们强烈建议所有客户:
- 立即轮换存储在 CircleCI 中的所有秘密。
- 从 2022 年 12 月 21 日到 2023 年 1 月 4 日,或者你在 CircleCI 中轮换秘密的日期,检查他们系统的内部日志是否有未经授权的访问。
CircleCI 团队还使所有 Project API 令牌失效,并通知用户他们需要更换。
这一刻可以作为任何依赖 CI/CD 基础架构的团队的转折点,以此作为审查其管道安全性的机会。虽然 CircleCI 团队制定的步骤是可靠的,但它们是对事件的反应。DevOps 团队可以采取一些步骤来变得更加主动。
CI/CD 中的身份管理和访问控制
如果您不熟悉这个主题,持续集成/持续交付、CI/CD 管道是一种通过一致的自动化流程交付应用程序的方法。开发人员将他们的代码推送到 GitHub、GitLab、Azure DevOps 或 BitBucket 等存储库主机,这将启动构建应用程序、测试它以及最终将该代码部署到生产环境的自动化过程。虽然 CI/CD 管道允许团队更快地工作并减少手动错误的机会,但它们也为恶意行为者提供了一个新的攻击面。
确保攻击者无法利用您的 CD/CD 管道的最佳方法之一是锁定可以访问哪些工具和资源的人员。如果未明确授予某人访问权限,则他们不应获得访问权限。这可以包括密码、访问密钥和其他访问控制机制,并且应该尽可能细化地实施。
虽然向 DevOps 团队的所有成员、开发人员和工程师授予访问权限可能很方便;这是一个非常糟糕的主意,因为它大大增加了单个被破坏帐户允许攻击者完全访问所有相关系统的机会。
我们鼓励每个人尽可能实施单点登录 ( SSO ) 或使用基于角色的访问控制 ( RBAC )。这些可以帮助您严格限定访问权限,以便只向合适的人授予对相关系统的访问权限。
安全的非人为访问
我们已经讨论了人工访问,但适当地确定和管理第三方服务和工具的访问也很重要。在部署 CI/CD 管道的任何元素时,您应该确切地知道哪些系统和服务将发送请求以及这些响应将发送到哪里。如果恶意代码确实进入了您的管道,请确保它无法打电话回家或与未经授权的用户通信。
当依赖基于容器的系统时,请确保您使用身份验证器来验证机器身份。身份验证器验证容器的属性,并且仅在获得批准时才授予范围内的访问级别。
关于非人类访问的最后一点说明:您应该尽快消除任何未使用的资产。这意味着一旦不再需要容器和虚拟机就将其销毁,并在未被积极使用时阻止对第三方工具的访问。
不要暴露 CI/CD 管道中的秘密
攻击者在任何系统中寻找的第一件事就是获得进一步访问的方法,即硬编码凭证,也称为秘密。虽然您不应该以明文形式存储秘密似乎很明显,但这种情况发生的频率比您预期的要高。鉴于 CI/CD 管道的复杂性和它们的发展速度,它通常是开发人员在赶时间前求助的最简单、最快捷的解决方案。也很容易忽视秘密是如何在您的管道日志中显示的,如果没有正确编辑,它们可能会出现在那里。
幸运的是,大多数 CI/CD 提供商都提供内置解决方案,允许您存储凭据,然后在需要时以编程方式调用它们。或者,大多数解决方案都提供了将关键管理器(如 Hashicorp Vault)集成到您的管道中的途径。
使明文凭据远离您的管道的一个关键步骤是尽早实施秘密检测。最好的情况是开发人员在提交之前捕获硬编码的秘密,他们可以在本地计算机上使用预提交挂钩或预推挂钩、预接收挂钩或在 CI 环境中执行此操作。
自动化秘密轮换
机密管理的另一个重要元素是控制每个凭证的生命周期。秘密保持有效的时间越长,攻击者发现和使用它的可能性就越大。许多凭据能够长期存在的最大原因之一是手动轮换密钥带来的痛苦以及对破坏生产系统的恐惧。这就是自动密钥轮换节省时间的地方。
大多数平台提供商,如 AWS、谷歌云和 Azure DevOps 都提供或提供直接的方法来编写自动密钥轮换脚本。这可以手动或按固定计划执行。自动化密钥轮换可以帮助每个人在紧急情况下高枕无忧,因为它允许在事件之外测试失效和替换过程。
在自动创建机密时,请记住将这些凭据正确地限定在他们的任务范围内。始终遵循最小特权原则,限制对完成手头工作所需的数据和系统的访问。
主动监控可疑行为
在事件发生后寻找可疑活动可以帮助您确定出了什么问题或在攻击期间谁访问了哪些系统。但是您无需等待坏事发生就可以利用您的日志。
当大多数人考虑主动驱动 CI/CD 时,目的是观察资源消耗或可用性。但是,您也可以为可疑活动配置警报,例如意外添加特权角色或尝试连接到未经授权的服务。
用于入侵检测的蜜标
保护 CI/CD 管道的另一种方法是设置入侵者可以在整个环境中触发的陷阱。这些通常被称为蜜标。Honeytokens 是看起来像真正的秘密但对任何服务都无效的凭据,但在使用时,它们会触发警报并报告用户地址。
一致部署 honeytokens 的一种方法是使它们成为自动化环境构建的一部分,利用Terraform和我们的开源项目ggcanary等工具。可以在您的 CI/CD 管道以及代码存储库或项目管理系统中创建和部署金丝雀令牌。
您的 CI/CD 安全是一项共同责任
用户对他们的服务提供商的期望之一是他们将确保他们的平台安全。现实情况是,恶意攻击者将继续渗透和利用任何和所有目标,包括 CI/CD 提供商。最终保护您的管道是所有参与者的共同努力,包括您的团队。
虽然不幸的是 CircleCI 已被破坏并且许多客户受到影响,但我们也希望呼吁任何依赖 CI/CD 管道来审查其安全实践的人采取行动。
本文仅列出了保护 CI/CD 管道的几种方法。有关 CI/CD 安全的更多信息,我们建议查看OWASP 十大 CI/CD 安全风险。