近年来,各大软件公司开始依靠DevOps方法来增强软件交付的敏捷性和协作能力。CI/CD管道使软件开发生命周期(SDLC)中的各种流程自动化,从而实现新功能的无缝集成和交付。虽然CI/CD管道可以通过自动化和敏捷性增强软件开发,但它们通常需要集成大量工具和服务,这可能会引入新的安全漏洞。可见,识别并修复这些安全漏洞是保证CI/CD安全实践的关键。本文将与您讨论如何安全地加固您的CI/CD管道。CI/CD安全简介虽然CI/CD管道是关于通过自动化提高软件开发和交付的效率,但管道的核心阶段默认不包括安全性。实际上,CI/CD安全是一组实践,旨在识别和修复漏洞,而不会显着减慢管道中的各种进程。CI/CD的安全实践主要包括:注入渗透测试和主动安全审计,相应减少延迟交付给安全和QA团队带来的瓶颈。因此,安全的CI/CD管道将使软件团队能够自动化多个部署环境,提高SDLC(软件开发生命周期)安全性,从而增强敏捷性。CI/CD管道的常见安全威胁组织的CI/CD管道往往具有基于业务案例、工作负载和使用的技术堆栈的个性化特征。因此,CI/CD安全性也可以根据用例进行不同的实施。对此,我们首先应该认识到几乎所有流水线都存在的安全风险类型:未经授权访问代码仓库CI/CD的各种操作主要依赖共享仓库进行协作、配置管理、更新和版本控制。所有源代码和配置文件都保存在Git存储库中,并充当单一源。公共存储库在CI/CD管道中流行的原因是它们减少了开发成本和时间。然而,这对存储库构成了安全威胁,因为开发人员将源代码从他们的私有主机发布到公共共享文件夹。攻击者可以将搜索开源注册表作为一种侦察技术,并利用获取的数据进行有针对性的钓鱼、逆向工程和远程代码执行攻击。对不安全代码的CI/CD管道中快速开发和交付的需求导致开源和与第三方集成的使用增加。一些团队可能会在没有检查源代码是否存在安全漏洞的情况下将第三方代码集成并导入到部署环境中。显然,这是由于开发人员未能遵循代码安全的最佳实践,增加了CI/CD管道的攻击面。常见的代码漏洞包括格式字符串漏洞、缓冲区溢出、错误处理不当和规范化问题。密钥管理不当密钥管理有助于合理化对CI/CD管道中数据和资源的访问。其中包括:密码、令牌、API密钥和其他可在管道中用于对访问敏感系统的用户进行身份验证的身份验证凭据。因此,密钥的暴露可以让攻击者获得对CI/CD进程的部分甚至全部控制权。密钥管理中常见的错误配置包括硬编码密钥、将密钥存储在公共云环境中以及手动密钥管理。左移安全性在较旧的管道中,由于安全性通常是最后一步,因此它在部署过程中造成了瓶颈。今天的最佳实践理论是在SDLC的早期集成安全控制,也称为“传输安全”。这种左移将涉及在CI/CD管道的每个级别实施安全检查,从而在每个步骤中实现更准确的威胁检测。显然,目标是消除DevOps和安全团队之间的摩擦,提高软件开发的效率,并确保稳健的安全实践。采用CI/CD安全工具的主要考虑因素在选择用于保护CI/CD管道的工具时,我们应考虑以下因素:扫描覆盖范围拥有成本和许可条款维护和配置工作量可扩展性与现有开发和安全集成Stacks在CI/CD管道上管理安全性随着威胁形势的不断变化,管理安全性已成为CI/CD管道中最重要的部分之一。保护DevOps工作流的第一步是评估如何将DevSecOps原则应用于CI/CD管道。在评估期间,我们需要确定用于管理安全性的工具和策略。保护CI/CD管道的最佳实践为了充分实现将安全性直接集成到软件生命周期中的好处,开发团队应该:避免在配置文件中使用硬编码密钥,并且在SDLC密钥的各个阶段使用CI/CD构建工具用过的。相反,提供这些密钥的一种简单方法是将它们作为配置文件和清单中的环境变量进行引用。任何有权访问这些模板和文件的人都能够从这些文件中提取凭证信息,这可能会导致数据泄露。因此,软件团队应使用加密存储或支持集中密钥管理的工具,使密钥数据远离恶意用户。为了安全地管理和分发密钥,管理员应该在将密钥存储在etcd服务器之前执行静态加密。首先,将密钥编码成Base64格式,如下代码片段所示:$username=$(echo-n"admin"|base64)$password=$(echo-n"a62fjbd37942dcs"|base64)在YAML中定义密码fileKey:echo"apiVersion:v1>kind:Secret>metadata:>name:test-secret>type:Opaque>data:>username:$username>password:$password">>secret.yaml接下来,一旦秘密是创建后,您可以将它们应用到Kubernetespod。这可以通过创建.yaml文件来完成。从秘密派生的数据存储在文件secret-env.yaml的环境变量中。该文件的规范如下代码段所示:apiVersion:v1kind:Podmetadata:name:secret-env-podspec:containers:-name:mycontainerimage:alpine:latestcommand:["sleep","9999"]env:-name:SECRET_USERNAMEvalueFrom:secretKeyRef:name:test-secretkey:username-name:SECRET_PASSWORDvalueFrom:secretKeyRef:name:test-secretkey:passwordrestartPolicy:Never如以上片段所示,在填充环境变量时,Kubernetes将解码Base64值。这些环境变量可用于所有KubernetesAPI对象,无需对关键数据进行硬编码。对CI/CD构建工具实施访问控制DevOps团队应实施身份验证和授权机制,以控制谁可以访问CI/CD管道中的特定流程和工具。团队应实施最小特权原则,以确保仅将对资源的访问权限授予绝对需要的角色。同时,还应使用令牌、访问密钥和密码保护CI/CD管道中的数据,以防止将恶意负载添加到管道中。为源代码控制建立身份验证机制具有版本控制功能的存储库(通常在Git中)是CI/CD管道的必备工具。它们促进协作并支持新功能的持续部署。然而,由于Git存储库包含应用程序的源代码、基础设施即代码(Infrastructure-as-Code)清单和知识产权,源代码控制中的漏洞将使攻击者能够访问应用程序的设计和实现逻辑。由于它们通常是黑客牟利的目标,因此我们应该使用多因素身份验证来保护对Git存储库的访问。同时,开发团队也可以使用Git最佳实践来防止意外分支和提交.gitignore文件。确保管道中所有环境的一致配置DevOps团队应确保所有环境(如开发、测试、生产等)的一致配置。通过配置奇偶校验,QA团队可以在测试期间准确检测安全问题,尤其是那些在所有环境中普遍存在的问题配置。同时,团队也可以使用容器、基础设施即代码声明等虚拟化和抽象技术来实现一致性检测。配置回滚功能安全和QA团队经常在应用程序更新或部署后发现安全问题。这通常需要管理员将相应的部署回滚(或恢复)到较早的版本。此类部署配置的回滚应谨慎进行,以消除安全问题,直到开发团队解决这些问题为止。在实践中,我们最好通过保留旧版本的工件来回滚,直到新部署被批准用于生产。还必须实施持续的漏洞扫描和监控,以监控和测试CI/CD管道中的每个资源。我们可以使用漏洞扫描工具,利用已知漏洞数据库来测试应用程序代码、环境配置和部署脚本,以消除潜在的攻击向量。这样的扫描和监控工具应该部署在整个SDLC中,以便在出现漏洞时能够及时发现,防止漏洞被利用。持续清理冗余资源CI/CD管道通常使用不可变的基础架构构建,该基础架构在运行某些进程后终止。由于攻击者可以利用临时资源的开放端口作为进入已部署环境的跳板,因此需要对这些资源进行合理的管理,以减少安全漏洞。在实践中,DevOps团队应确保在资源终止后及时清理所有临时资源,包括容器、服务和虚拟机。CI/CD的安全层管理CI/CD安全通常需要一种全面的多层方法来加强管道中每个节点的防御。下图展示了这个安全层的逻辑结构:SecurityLayerVulnerabilityScanninginaSecureCI/CDPipelineloophole。自动化测试扫描指定的应用程序和部署环境,以识别和分类代码、基础设施和第三方服务中的弱点。静态安全测试是一种软件组合分析技术,旨在识别内部开发团队编写的代码中的潜在漏洞。安全团队通常可以使用这些工具来开发测试用例,以便在部署新的应用程序构建之前查明不安全的代码漏洞。运行时安全该层主要依靠运行时应用程序自我保护(RASP)工具实时检测生产环境中应用程序面临的安全威胁。此类工具扫描配置模板并持续测试已部署环境的状态以进行比较,以识别和响应任何运行时威胁。审核和监控应用程序和基础架构日志,并持续跟踪和存储应用程序和部署相关数据。审计主要涉及分析日志以推断可用于改善应用程序安全状况的模式。我们可以通过部署诊断工具来监控和分析与目标系统相关的问题的指标。持续的审计和监控可以帮助开发团队构建场景并预测基线用户行为。安全团队可以通过分析偏离既定基线的用户行为来识别安全威胁。结论DevOps工作流具有固有的安全隐患,因为我们都知道任何有权访问源代码存储库或容器注册表的人都可以在CI/CD管道中运行代码。最近的一项调查估计,由于安全问题,大约55%的组织正在推迟其应用程序的推出。虽然DevOps框架可以增强协作和自动化,但组织必须采用具有高级策略和工具的连续安全模型,以确保CI/CD管道所有层的统一安全态势。译者简介JulianChen,社区编辑,拥有十余年IT项目实施经验,擅长管控内外部资源和风险,专注传播网络与信息安全方面的知识和经验;以多种形式分享前沿技术和新知识;经常在线上和线下开展信息安全培训和讲座。原标题:SecuringYourCI/CDPipeline,作者:SudipSengupta
