跳转到主要内容

持续集成(CI)和持续交付(CD)或CI / CD是Agile和DevOps软件开发方法的一部分。敏捷开发最突出的方面 - 也是最重要的规则 - 是它要求软件开发通过迭代过程对变化做出响应。

但是软件开发项目通常需要大量代码,这需要时间来编写。错误可能无法识别,并且由于不同的团队正在进行不同的工作,冲突可能会在未检测到的情况下一直滑到过程的后期。这不是敏捷。

CI和CD为这些常见问题提供了解决方案,允许更频繁,更可靠地进行代码更改。安全性是这种可靠性的一部分,但在CI和CD过程中经常会被忽略。

什么是CI / CD,为什么要实施它?


持续集成是一种软件开发方法,要求开发人员按常规计划将代码集成(签入)到共享存储库。代码通常至少每天检查一次,但正确的频率实际上取决于代码更改的频率。

每次登记都由自动构建验证。检测到错误并立即解决。

持续交付基于持续集成,使用自动化解决方案快速部署软件应用程序。在开发过程中通常使用多个环境,例如测试和生产,CD确保有一种自动机制可以快速将代码更改推送到所有环境。 CD还可以自动执行对Web服务器或数据库的所需服务调用,并在进行代码更新时根据需要重新启动数据库。

幸运的是,您不必构建自己的CI系统。有一些工具可以提供一个开箱即用的工具:

  1. Jenkins是一个可扩展的自动服务器,可用作基本的CI服务器。它是一个基于Java的程序,包含适用于Windows,Mac OS X和其他类Unix操作系统的软件包。 Jenkins包括错误检查和内置帮助,它通过Web界面进行简单配置。
  2. TeamCity是JetBrains的基于Java的CI服务器。它允许您在提交源代码更改之前构建,检查和运行自动化测试。进度报告确定了开发过程中的问题


CI和CD的好处包括:

  1. 敏捷 - 敏捷的软件开发方法通常将工作分解为一周或两周的冲刺,因此应用程序是逐步构建的。如果开发人员等到每个sprint结束时集成他们的工作,那么定位和解决错误需要更长的时间。使用CI,频繁的集成可以立即识别错误。它们在识别时得到解决,在开发结束时减少了问题。
  2. 更快的部署 -  CI / CD是构建软件的更快捷方式。频繁的签入和代码测试可以防止您的团队在错误或冲突长时间未被发现的情况下重写大量代码。
  3. 更好的质量 - 开发人员在使用CI / CD时花费更少的时间来修复错误。他们有更多时间专注于更高附加值的任务,例如可用性测试。

为了更深入地了解CI / CD流程,包括最佳实践,我们建议您下载此白皮书。

为什么不能忘记安全性以及如何构建它


请记住,CI和CD的目的是生成可靠的软件。根据定义,这意味着它必须是可信任的。它必须是安全的。

作为DevSecOps方法的一部分,安全性需要从一开始就得到解决,并且应该在整个应用程序生命周期中保持高优先级。他们应该批准整个CI / CD流程以确保其安全,而不是安全团队批准每个软件版本。安全性还应该能够随时监视和运行对进程的安全检查。

让我们看一下流程中的每个步骤,看看如何构建安全性:

CI / CD管道本身的安全性


只要您的团队在设置CI / CD管道时遵循DevSecOps的最佳实践,这不应该成为主要关注的领域。但值得注意的是,这不应该被忽视。

应该跟踪到系统的登录,推送更改应该要求身份验证,并且构建应该存储在安全的服务器上。

集成开发环境(IDE)拉动


在开发人员甚至提交代码之前,应该使用静态分析工具来检查代码是否存在漏洞和编码错误。这些工具易于设置,并且通过在开发过程中识别问题从长远来看节省时间。

这样可以最大限度地减少流程后期所需的代码审查量。示例包括Eclipse,Visual Studio和SpotBugs的Veracode插件。

CI Build


静态应用程序安全性测试(SAST)工具可用于确保代码没有漏洞。 SAST工具从内部检查应用程序,查看源代码,字节代码或应用程序二进制文件以查找安全漏洞。

作为构建过程的一部分,还必须扫描任何第三方代码以确保安全性。假设第三方代码已经过充分测试是不安全的。许多第三方组件也存在零日披露的漏洞,或者依赖于其他具有漏洞的第三方组件。即使你使用的是好的,它可能依赖于不是的代码。必须使用SAST和其他工具来确保不向应用程序引入不安全的代码。

此外,这些工具可以并且应该集成到您的CI环境中。示例包括OWASP依赖关系 - 检查第三方组件检查和Checkmarx for SAST工具。

应用程序部署到开发和测试环境中


验证代码后,将其部署到开发环境中。此时,您需要检查应用程序的运行版本是否存在漏洞。

这可以通过渗透测试工具完成,例如OWASP ZAP和动态应用程序安全测试(DAST)工具。 DAST工具从外部接近应用程序,模仿“机器人攻击者”来发现漏洞。

此过程中使用的任何工具都应该快速运行,因为CI / CD的目的是快速发布。隔夜测试可用于运行更长的代码扫描,以便进行更深入的安全检查。

完全部署到生产环境后,应继续进行安全测试。新的威胁和漏洞不断涌现,因此您无法假设您的代码是安全的。有关SAST工具,DAST工具和其他应用程序安全测试工具的更多详细信息,请参阅我们的博客。

如何在CI / CD管道中有效管理安全性


在CI / CD管道的所有阶段使用各种应用程序安全测试工具是确保应用程序始终处于生产就绪状态的唯一方法。但是,管理所有这些工具的结果可能很困难。

最简单的方法是使用应用程序漏洞管理器。这种类型的DevOps工具不是另一种测试工具。相反,它结合了结果并释放了测试工具的真正力量和潜力。

应用程序漏洞管理器:

  1. 重复结果,使用一组结果而不是混合格式的多个报告提供一个报告。
  2. 通过识别存在漏洞的特定代码行来协助补救管理。
  3. 执行合规性检查,根据HIPAA,国防信息系统机构安全技术实施指南(DISA-STIG)和支付卡行业数据安全标准(PCI DSS)等法规验证您的代码。
  4. 提供混合分析。混合分析结合了SAST和DAST工具的结果,确定哪些潜在漏洞实际可利用,因此您可以先解决最重要的问题。
  5. 允许工作流程集成。与开发人员已经在其中工作的环境集成的工具使得将安全性保持为流程的一部分变得简单。寻找一种工具,为Eclipse,IDE,Jenkins,Visual Studio,Intellij,Burp Suite和OWASP ZAP等流行环境提供插件。

CI / CD是敏捷和DevOps软件开发方法中的重要一步。但是不能牺牲安全性来支持速度。相反,必须将安全性整合到流程的每个步骤中。快速安全的版本是真正成功的CI / CD流程的产物,可以生成对最终用户有价值的软件,并保护这些用户和公司免受漏洞攻击。

原文:https://codedx.com/dont-leave-security-behind-in-your-ci-cd-environment/

本文:http://pub.intelligentx.net/dont-leave-security-behind-your-cicd-environment

讨论:请加入知识星球或者小红圈【首席架构师圈】

Tags

知识星球
 
微信公众号
 
视频号