应用持续集成/持续交付(CI/CD)管道已成为现代软件系统自动化和敏捷开发的重要途径,确保开发人员满足安全防护措施要求,防止攻击者利用CI/CD流水线的安全漏洞进行攻击活动。在软件开发的早期阶段识别和减轻CI/CD管道中的安全风险可以使组织从被动转变为主动。然而,鉴于网络犯罪策略的快速发展和变化,保护CI/CD应用程序充满挑战。本文总结了一个包含四个关键步骤的CI/CD应用程序安全防护清单,以及相关的安全工具和策略,可以帮助企业和开发人员了解如何提高CI/CD流水线应用程序的安全性。第一步:营造健康的开发环境软件开发团队在软件开发的每个阶段都应该充分考虑软件安全,即使开发项目还处于规划设计阶段。通过创建健康安全的开发环境,开发团队可以在开发产品路线图时实施特定的安全任务,例如威胁建模和软件组件(SLSA)级别评估。威胁建模侧重于潜在的攻击类型和区域,并帮助开发人员引入缓解这些攻击所需的对策。开发团队通过站在攻击者的角度观察和思考,持续评估系统的安全状态,通过模拟攻击加强防御。SLSA框架在软件项目的规划阶段特别有用,作为确定CI/CD管道安全性的通用语言,由一组控制、标准和最佳实践组成,可有效识别和应对常见的软件供应链攻击模型。第2步:提高代码安全可见性开发团队无法保护他们看不到的东西。了解整个CI/CD管道应用程序的安全性需要了解软件系统每个组件中的所有代码以及它们之间的依赖关系和交互。软件开发团队可以通过执行软件组成分析(SCA)和使用软件物料清单(SBOM)来检测和分析所有代码的安全性。开发团队还应积极应用静态应用程序安全测试(SAST)。SAST安全测试流程包括多种代码安全检测工具,用于检查应用程序源代码、汇编代码、字节码和二进制文件是否存在安全漏洞。实践经验表明,开发者应该在软件系统开发的早期阶段使用上述安全工具来发现问题,以便在开发项目完成时能够确保所有代码库的安全。当然,没有任何安全工具是完美的,因此部署这些工具并不能完全替代安全专业人员手动代码审查的职责。第三步:进行充分的安全验收测试在系统正式上线之前,开发者需要对软件系统进行反复、充分的安全验收测试,尤其是在新功能即将发布的时候。进行充分的安全验收测试,对于提高CI/CD流水线应用的安全性非常重要,可以保证现有的安全控制措施足够有效,保护系统在实际运行中的安全状态。安全验收测试主要包括系统在安全漏洞、参数配置、身份验证、权限控制等方面的状态验证,可通过自动化工具、人工或两者结合的方式完成。在安全验收测试过程中,开发者可以使用动态应用安全测试(DynamicApplicationSecurityTesting,DAST)工具来模拟真实的攻击行为,进行由外而内的安全验证和分析。与SAST工具在静态环境下检测缺陷不同,DAST工具可以检测软件系统实际运行在动态、主动变化的环境中时可能存在的安全缺陷。对于有条件的开发团队,也可以使用容器扫描工具,因为容器开发模式已经被广泛接受,是未来云计算应用开发的主流趋势。第四步:进行持续的安全监控当软件系统开发的环境安全、代码安全、验收测试策略已经启动并有效运行后,需要采取一些有效的预防措施来保持CI/CD流水线的安全和运行长时间处于稳定状态。这个过程是一项需要长期执行、不断优化调整的工作。为了实现真正的安全,CI/CD管道应用程序必须实施持续监控。要实现这个目标,做好身份和访问管理(IAM)是非常重要的。IAM可以帮助企业解决一些简单但非常重要的安全问题:用户的访问权限和级别是什么?我什么时候可以参观?如何识别权限?很多开发者在开发过程中往往会忽略应用系统与IAM之间的连接和协作,但是加强访问控制和权限分离已经成为实现持续安全开发环境的基础。保护CI/CD流水线应用需要多方面的改进,开发团队还应根据组织的业务需求和应用特点确定风险的优先级。通过基于风险的安全监控安全方法,安全团队可以将应用系统风险管控落实到软件开发过程的各个阶段。基于风险的安全监控将确保开发团队免受针对CI/CD管道的攻击,并引导企业的整体网络风险管理计划朝着更好的方向发展。
