你是否了解Dependabot?如果不了解,可以从身边的开发人员处获知,它是如何彻底改变检查和更新软件项目过程中的繁琐步骤的。
Dependabot不仅提供检查服务,还会制定修改建议,单击确认后即可执行。虽然Dependabot的服务范围仅限于GitHub托管的项目,但它为提供类似功能的供应商树立了新的标准。这种“管理”任务自动化的模式已经成为一种标准,帮助开发人员更快地部署工作。持续集成和部署工作流已经成为软件工程的基石,将DevOps方法推向了行业的前沿。
最近,不法分子试图通过冒充该工具从而达到骗取Dependabot相关信任的目的。通过模仿Dependabot提出建议(以拉取请求的形式)来欺骗开发人员,让他们毫不犹豫地接受变更。
虽然Dependabot体现了软件维护任务自动化方面的进步,但它也凸显了CI/CD管道中固有的复杂性和安全隐患。这些重要的管道将开发工具和外部环境与软件内部构成联系起来。理解这种关系是解决安全挑战的关键。
![](http://img.anquan419.com/2023/1205/20231205015128545.jpg)
![](http://img.anquan419.com/2023/1205/20231205015128545.jpg)
CI/CD管道:关联内外
持续集成(CI)和部署(CD)工作流彻底改变了软件开发流程,帮助开发人员无缝合并工作并将其部署到生产环境中。这些工作流确保代码经过自动化的安全扫描、严格的测试,并符合编码标准,从而使开发过程更高效、更可靠。它们已经成为创新的催化剂,使团队能够在保证质量和安全性的前提下,专注于构建和增强他们的产品。
可以把这个概念代入拼图去理解。CI充当了一个警惕的检查者,在前进之前验证每一块新的拼图是否合适。而后,CD自动将每个验证过的部分放入最终的拼图中,无需等待整个过程完成。这一过程允许更快的交付,并最终加速整个产品开发时间。
然而,这些CI/CD工作流也将外部世界与内部开发环境联系起来,产生了潜在的风险。例如,当开发人员通过CI/CD管道将第三方库集成到他们的项目中时,如果开发人员未能彻底审查库,或是管道缺乏适当的安全检查,恶意代码可能会不知不觉地融入到项目中,损害其完整性。近年来,攻击事件有所增加,如域名仿冒和依赖混淆等攻击通过利用对开源软件的依赖来获取经济利益。
自动化集成工作流的兴起通过降低其攻击成本和增加其潜在收益的方式改变了攻击者的经济效益。攻击者可以攻击像PyPi这样的流行中心软件包存储库。PyPi托管数千个软件包,每天提供数百万次下载。极大的经营规模诱惑着攻击者,即使成功的机会很小他们也愿意尝试。
另一个例子是在CI/CD管道中使用外部API。开发人员通常需要为这些API提供有效的凭证,以实现自动化部署或与外部服务集成。但是,如果这些凭证没有得到安全的管理,或者如果它们无意中暴露在日志或项目中,攻击者可以利用它们获得对敏感资源的未授权访问或操纵管道。
CI/CD违规通常源于初始机密泄露或开发人员成为特定攻击目标。然而,与其将这些漏洞归咎于开发人员,不如认清问题根源在于管道内部缺乏安全性。这引出了一个更大的问题:默认情况下,CI/CD管道并不安全。
CI/CD管道的安全性
尽管设计安全工作流的想法越来越受欢迎,但CI/CD平台仍有很长的路要走。像GitHub Actions、GitLab CI/CD和CircleCI这样的平台,最初设计时考虑的是灵活性,将易用性置于强大的安全措施之前。因此,它们缺少默认安全措施来防止潜在问题的出现。
开发人员极易暴露敏感信息。开发人员通常在运行时注入机密,并依赖于CI自身存储机密的能力。虽然这种做法本身没有问题,但它存在至少两个安全隐患:首先,托管机密的CI供应商成为敏感信息的储存库,并对攻击者有较高吸引力。就在2023年初,CircleCI的系统遭到破坏,迫使其用户定期修改所有机密信息。
第二,机密在通过CI/CD管道泄漏时难以被察觉。例如,如果一个机密信息与另一个字符串(比如一个URL)连接并记录,敏感信息脱敏机制将不再起作用。加密信息也是如此。结果是CI日志经常暴露明文机密。同样,在软件工件中发现硬编码的机密并不罕见,这是持续集成工作流配置错误的结果。
CI/CD提供商已经采取措施来增强安全性,如GitHub Dependabot的安全检查。但是大多数时候,允许的默认值和复杂的权限模型依然存在风险隐患。为了保护CI/CD管道并防止代码泄露,开发人员应该采取额外的措施来加强他们的管道以抵御攻击,其关键在于保护开发者的凭证。另一个主动的安全措施是采用警报触发器。
保护CI/CD和软件供应链的方法
为了有效地保护CI/CD管道并将其视为高优先级,潜在的外部连接环境至关重要。关键在于采用最佳实践的组合:
限制访问并最小化特权:访问权限的授予应基于必要而非方便。对所有DevOps团队成员开放广泛访问权限会增加账户受损的风险,从而为攻击者提供便利。同时,应当限制对关键控制、配置或敏感数据的访问。
实施多因素身份认证(MFA):采用多因素身份认证(MFA)登录CI/CD平台是至关重要的一点。MFA增加了一个重要的安全层,使未经授权的用户即使已有登录信息也很难获得访问权限。
利用OpenID连接(OIDC):采用OIDC将工作负载安全地连接到外部系统,这个方法可以应用于部署环节。该协议为认证和跨域身份验证提供了一个强有力的框架,这在分布式和互连的环境中是至关重要的。
使用预先审查过的软件依赖项:为开发人员提供安全的、预先审查过的软件依赖很重要。这种做法保护了供应链的完整性,使开发人员不必验证每个包的代码。同时,它确保了供应链的完整性,减轻了开发人员单独验证每个包的代码的负担。
安全运行时机密:在CI/CD平台中安全地存储API密钥和登录凭证等重要信息需要强大的安全措施,如强制MFA和基于角色的访问控制(RBAC)。然而,这些都不是万无一失的。机密易泄露,所以为了进行全面保护,需要添加额外的安全层,如严格的安全证明和对内部和外部威胁的监控。
实施先进的防御系统:将警报系统整合到安全框架中。虽然蜜罐策略是有效的,但是难以扩展。蜜标机制提供可扩展、易于实施的替代方案。这些机制可以通过较少的操作显著增强跨平台(如SCM系统、CI/CD管道和软件工件注册表)上各种规模的公司的安全性。
利用企业级解决方案:专业的安全解决方案可提供单一控制台来监控泄漏机密、基础架构代码配置错误和蜜标触发器等事件,使组织能够大规模检测、补救和预防CI/CD安全事件。这大大减轻了潜在数据泄露的影响。
通过综合使用这些策略,组织可以全面保护其CI/CD管道和软件供应链,适应不断变化的威胁并维护强大的安全协议。