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