现代软件开发的基石CI/CD:敏捷与风险并存

如今,软件的开发不再是由单个开发人员在独立的机器上来完成,取而代之的情况是,多名开发者可以同时处理同一应用的不同模块或功能,而互不干扰。这种协作的方式可以让组织无需等待某个固定的时间才能发布软件,而是在准备好后立即推出软件的更新与升级。

CI/CD(持续集成/持续交付)通过对构建过程进行标准化,实现了安全从共享资源向越来越隔离的资源的转变,并且在每次变更时都会进行自动化检查,从而加快了软件的交付速度。随着CI/CD的出现,自动化和基础设施即代码(IaC)变得更加重要,越来越多的第三方(外部供应商)参与其中,新的框架和编程语言也被迅速采用。

敏捷的代价是更高的风险

然而,从精简和自动化的共享CI/CD管道中获得的敏捷性,也使得组织更容易成为网络不法分子所攻击的目标。

随着CI/CD功能的不断升级,企业对其应用的需求也迅速增加。然而这些相互连接的管道已经超出了许多组织的成熟度和自我保护能力所能驾驭的范畴,使得CI/CD成为攻击者的主要目标。

CI/CD管道中汇集了应用程序代码、构造工具、第三方组件、机密、身份以及云资源

CI/CD扩大了组织的攻击面。如今,攻击者已经十分善于利用此类系统来对软件供应链进行攻击。而这一点也在2020年备受关注的SolarWinds事件中得到了证明。SolarWinds事件中,与俄罗斯有牵连的Nobelium组织破坏了该IT软件套件制造商的构建过程,并将恶意代码植入到应用程序中,从而流向用户的系统。

根据Palo Alto Network公司在2022年12月的报道,去年间供应链攻击事件的数量就增加了51%。CI/CD管道特别容易出现诸如配置错误(可能会暴露敏感信息并成为恶意代码的入口)和许可凭证(可能会导致横向移动和CI中毒)之类的问题。

CI/CD管道面临的多重威胁

目前,常见的初始入侵技术包括:软件开发生命周期(SDLC)资源的配置错误、恶意依赖项以及涉及到内部开发人员的攻击。

在实践中,这就意味着攻击者可以通过操纵CI/CD管道的输入(包括代码和配置),来获得一个攻击的突破点。随后攻击者就可以尝试着进行横向移动,通过滥用广泛的令牌和其他授予资源访问权限(通常是基于位置的权限,)的错误配置,来更加深入地访问目标系统,并对软件交付的后续阶段进行恶意操作。最终,攻击者便得以滥用组织的生产资源,破坏交付给第三方的产品,从而传播攻击。

另一方面,针对CI/CD基础设施的攻击可以帮助攻击者对构建阶段的软件进行操纵,使得CI/CD基础设施成为利用终端用户信任的攻击面。

相比于更加牢固和监控严密的生产环境来说,CI/CD管道更容易成为被攻击的目标。因为CI/CD管道受到的安全关注往往较少,并且在构建、打包以及部署阶段,开发人员所执行的内容也几乎没有日志记录。

众所周知,相比于直接攻击生产环境,通过CI/CD管道来注入恶意软件或利用漏洞要更加容易得手。攻击者自然也很清楚这一点。

组织内部的攻击者可以在软件构建阶段通过添加配置来注入恶意的依赖项。由于在软件的构建阶段,缺乏记录关于代码操作的详细日志,所以这些注入相较于恶意配置或源提交来说,是“不可见的”。

除非后续阶段对生成的二进制文件进行详细扫描,否则这些注入代码会被无声无息地植入到产品中,而不会被发现。

根据全球开放式Web应用安全计划(The Open Worldwide Application Security Project,OWASP)的报道,最近针对CI/CD生态系统的滥用事件数量激增,且攻击的频率和规模也在逐渐上涨。

防御措施尚未成熟

如今,不法分子正迅速改进技术以“瞄准”CI/CD,而对此的防御措施却仍处于初步阶段,安全团队仍在努力找寻对风险进行检测、理解和管理的方法。为了在最佳安全状态与开发速度之间寻求一个平衡点,安全团队正在努力寻找最有效的安全控件,以使开发工程能够在保持敏捷性的前提下,始终处于一个安全的最佳状态。

现代软件交付所携带的大量组件以及CI/CD不断增长的复杂性,使软件供应链安全的考虑变得更加复杂。组织必须采取一些涵盖源完整性、开发完整性、发布完整性、依赖性以及访问控制的深度防御措施。

例如组织可以使用安全供应链消费框架(Secure Supply Chain Consumption Framework,S2C2F)来对自己的开发过程进行评估。自2019年以来,该工具一直由微软这个软件巨头所开发和使用,旨在保护其自身的开发过程。

2022年11月,微软将S2C2F贡献给了开源安全基金会 (Open Source Security Foundation,OpenSSF)。该框架旨在解决针对开源软件的真实供应链威胁。组织可以使用该框架进行评估,以了解如何改进开源软件消费实践的安全性。

要采取的安全步骤

企业需要解决CI/CD的错误配置问题,限制对CI/CD基础架构和相关服务的访问,并将检测活动扩展到CI/CD基础架构。同时,他们还需要加强基础设施即代码(IaC)的防篡改能力。

DevOps团队则应该通过对依赖关系进行清点和理解,来尽可能地对其进行削减和监控,从而解决第三方依赖风险。随着组织成熟度和信心的增加,就可以逐步在内部对这些依赖关系进行固定、代理以及重建。”

此外,开发人员作为一种关键因素,也需要被考虑在组织的安全计划中。例如对开发人员也要启用多因素身份验证(MFA)以及条件访问等控制。同时还要对其在CI/CD基础架构上所拥有的权限进行审查。这些都应成为零信任策略中最小权限原则的一部分

无论是DevOps的发展,还是对敏捷开发的应用,CI/CD管道都是其中不可或缺的一部分。但所有这些都使得开发过程更容易成为攻击者的目标。攻击者深谙CI/CD的脆弱性,因此将重点放在了软件供应链上。为了保护组织的安全,必须采取措施来加强对该过程的安全防护。

CI/CD模式凭借频繁且快速的迭代,能够最大限度地减少软件开发过程中的错误,加快进度的同时也提高了产品的质量。基于关键流程以及开发工具的多样性,每个企业或产品都有其独特的CI/CD流水线,但强化CI/CD安全性的基本理念都是一致的,即避免数据的泄露以及应用程序的中断。需要注意的是,随着业务复杂性的增加,CI/CD管道的复杂程度也会随之增长,每个阶段都会产生大量的敏感数据,而这些敏感数据往往会成为巨大的攻击杠杆。

来源:数世咨询

上一篇:GitLab目录遍历漏洞 (CVE-2023-2825) 安全风险通告

下一篇:俄罗斯神秘恶意软件可能对电力工控系统造成严重破坏