CI/CD 环境、流程和零碎是古代软件组织的外围。他们将代码从开发工程师的工作站传递到生产环境。联合 DevOps 和微服务架构的衰亡,CI/CD 零碎和流程重塑了工程生态系统:
- 技术堆栈更加多样化,无论是编码语言,还是流水线中进一步采纳的技术和框架(例如 GitOps,K8s)。
- 采纳新的语言和框架的速度越来越快,没有重大的技术阻碍。
- 自动化和基础设施即代码(IaC)实际的应用有所增加。
- 第三方,无论是内部提供商的模式还是代码中的依赖关系,都已成为任何 CI/CD 生态系统的重要组成部分,新服务的集成通常只须要增加 1 - 2 行代码。
以上这些特色容许更快、更灵便和多样化的软件交付。然而,也为攻击者提供了许多新的路径和机会,减少了企业的攻击面。
本系列文章零碎整顿与 CI/CD 相干攻打媒介进行的宽泛钻研以及安全漏洞剖析后果,帮忙企业及其开发团队更好地爱护其 CI/CD 生态系统。
流程管制机制有余
流控机制有余(insufficient flow control)指的是因为不足强制执行额定批准或审查机制,攻击者在 CD/CD 过程(SCM、CI、Artifact 存储库等)取得零碎权限,轻松将恶意代码或工件轻松推送到流水线中的问题。
影响
攻击者取得能够拜访 SCM、CI 或流水线上游零碎的权限,便可能利用有余的流控机制来部署歹意工件。一旦创立,工件就会通过流水线推送到生产环境且无需任何批准或审查。以下的状况可能呈现:
- 将代码推送到存储库分支,该分支会通过流水线主动部署到生产环境。
- 将代码推送到存储库分支,而后手动触发将代码运送到生产环境的流水线。
- 间接将代码推送到实用程序库,供在生产零碎中运行的代码应用。
- 滥用 CI 中的主动合并规定,该规定会主动合并满足一组预约义要求的拉取申请,从而推送未经审查的恶意代码。
- 滥用分支爱护规定有余。例如,排除特定用户或分支来绕过分支爱护,从而推送未经审查的恶意代码。
- 以构建环境创立的非法工件的名义将工件上传到工件存储库,例如包或容器。在这种状况下,不足管制或验证可能会导致工件被部署流水线拾取并部署到生产中。
- 拜访生产并间接更改利用程序代码或基础设施(例如 AWS Lambda 函数),无需任何额定的批准 / 验证。
倡议
建设强化流水线流控机制,以确保没有任何集体或程序可能在没有内部验证或验证的状况下通过流水线传送敏感代码和工件。企业能够通过施行以下措施来实现:
- 在用于生产和其余敏感零碎的托管代码的分支上配置分支爱护规定。尽可能防止将用户帐户或分支排除在分支爱护规定之外。如果用户帐户被授予将未经审查的代码推送到存储库的权限,务必确保这些帐户无权触发连贯到相干存储库的部署流水线。
- 限度主动合并规定的应用,并确保无论在何处应用,要实用于最大量的上下文。彻底查看所有主动合并规定的代码,确保这些不会被绕过,并防止在主动合并过程中导入第三方代码。
- 在实用的状况下,避免帐户在未经额定批准或审查的状况下触发生产构建和部署流水线。
- 只容许工件在由事后批准的 CI 服务帐户创立的条件下在流水线传输。避免通过其余账户上传的工件在没有二次审核和批准的状况下在流水线中推送。
- 检测并避免生产中运行的代码与其 CI/CD 之间的偏差和不统一,并批改任何蕴含偏差的资源。
身份和拜访治理有余
身份和拜访治理有余(inadequate identity and access management)的危险源于治理散布在工程生态系统中不同零碎(从源代码管制到部署)的大量身份的治理难题。如果身份和拜访治理不善,企业受到攻打威逼危险将会大大增加。
软件交付过程由连贯在一起的多个零碎组成,目标是将代码和工件从开发环境转移到生产环境。每个零碎都提供多种拜访和集成办法(用户名和明码、集体拜访令牌、市场应用程序、oauth 应用程序、插件、SSH 密钥)。不同类型的帐户和拜访办法可能具备其独特的配置办法、安全策略集和受权模型。这种复杂性为在整个身份生命周期中治理不同身份以及确保其权限与最小特权准则保持一致带来了微小挑战。
挑战
在典型环境中,SCM 或 CI 的普通用户帐户是高度宽松的,因为这些零碎传统上并不是平安团队的次要关注畛域。这些身份次要由须要可能在代码和基础架构中进行重大更改的工程师应用。CI/CD 生态系统中围绕身份和拜访治理的一些次要问题和挑战包含:
- 过分宽松的身份 – 在 SCM 中,确保每个用户和应用程序身份仅被授予所需的权限,并且仅针对其须要拜访的理论存储库授予权限并非易事。
- 过期的身份 — 不沉闷和 / 或不再须要拜访但没有针对所有 CI/CD 零碎勾销配置的人员和程序帐户的员工 / 零碎。
- 本地身份 — 没有与集中式 IDP 联结拜访的零碎,创立在相干零碎内本地治理的身份。本地帐户在执行统一的安全策略(例如明码策略、锁定策略、MFA)以及正确勾销对所有零碎的拜访权限(例如员工到职)时带来挑战。
- 内部身份
应用非组织领有或治理的域中的电子邮件地址注册的员工—在这种状况下,这些帐户的安全性高度依赖于调配给他们的内部帐户的安全性。因为这些帐户不禁组织治理,因而不肯定合乎组织的安全策略。
- 内部协作者 — 一旦授予内部协作者对系统的拜访权限,零碎的安全级别就源自内部协作者的工作环境级别,超出了组织的管制范畴。
- 自注册身份 — 在容许自注册的零碎中,无效的域地址通常是自注册和拜访 CI/CD 零碎的惟一先决条件。应用默认 / 根本权限可能会扩充潜在的攻击面。
- 共享身份 — 在用户 / 应用程序之间共享的身份,因为多人 / 应用程序应用对立身份账户,在进行追踪和考察时无奈进行无效分辨,导致问责制度生效。
影响
在 CI/CD 生态系统中存在成千盈百个身份(人类和程序化身份),加上不足弱小的身份和拜访治理实际,以及适度宽松帐户的广泛应用,导致系统上的任何用户帐户都能够为环境授予弱小的性能,并且能够作为进入生产环境的通行证。
倡议
- 对工程生态系统内所有零碎的所有身份进行继续剖析和映射(mapping)。对于每个身份,映射身份提供者、授予的权限级别和理论应用的权限级别。确保剖析涵盖所有程序化拜访办法。
- 删除环境中不同零碎中每个身份的继续工作不须要的权限。
- 确定禁用 / 删除古老帐户的可承受期限,并禁用 / 删除任何超过预约不活动期的身份。
- 防止创立本地用户帐户,应用集中式组织组件 (IdP) 创立和治理身份。每当应用本地用户帐户时,请确保禁用 / 删除不再须要拜访的帐户,并确保所有现有帐户的安全策略与组织的策略相匹配。
- 继续映射所有内部合作人员,确保他们的身份合乎最小特权准则。尽可能为人工帐户和程序帐户授予具备预约到期日期的权限,并在工作实现后禁用其帐户。
- 避免员工针对 SCM、CI 或任何其余 CI/CD 平台应用他们的集体电子邮件地址或属于非组织领有和治理的域的任何地址。继续监控不同零碎中的非域地址,并及时删除不合规用户。
- 不容许用户自行注册,并依据须要授予权限。
- 防止将零碎中的根本权限授予所有用户以及主动调配用户帐户的大型群组。
- 防止应用共享帐户。为每个特定上下文创立专用帐户,并授予相干上下文所需的确切权限集。