DevSecOps解释

2022年5月23日 // 11最小读数

形象

DevSecOps基于DevOps的思想,在整个软件开发生命周期中应用安全实践,以更快地交付更安全的代码。

通过协作、自动化和持续改进,DevSecOps提供了一套实践,帮助公司在工作中嵌入安全性,以大规模构建更安全、高质量的软件。

DevOps改变了许多组织构建和发布软件的数量。但直到最近,软件开发生命周期(SDLC)的一个方面仍然在DevOps之外:安全性。DevSecOps试图通过将安全性纳入软件开发生命周期(SDLC)来纠正这一问题,就像DevOps在软件开发的所有阶段优先考虑质量、速度和深度协作一样。对于现代组织来说,DevSecOps只是“DevOps”:安全性已融入SDLC体验。

采用DevSecOps的组织通常具有以下优势:

  • 降低数据泄露风险:DevSecOps寻求通过设计使代码安全。整个SDLC中安全编码文化实践、安全开发环境和自动化安全测试的结合有助于减少安全漏洞或缺陷进入生产软件的可能性。

  • 改进了法规遵从性:DevSecOps从业者经常使用自动化来强制执行代码遵从性,并将策略强制工具直接集成到CI/CD管道中。

  • 对依赖关系更有信心:现代技术堆栈严重依赖第三方代码,通常来自公共包存储库。DevSecOps从业者经常利用工具和自动化测试在软件发布之前识别潜在问题。

  • 价值更快地传递给最终用户:通过创建安全第一文化并应用自动检查,DevSecOps减少了对不同安全审查的需要,从而降低了代码部署的速度。

DevSecOps的主要优点是什么?

DevSecOps寻求在SDLC的每一步中建立安全性。理想情况下,这意味着从编码到合并分支,再到构建、部署,再到生产软件的运行,每个阶段都会进行与安全相关的测试(自动化和非自动化)。此外,DevSecOps提出了这样一个想法,即每个从事产品工作的人都要对其安全性负责。这有助于团队在投入生产之前发现漏洞,并减少后期手动安全审查的需要,这可能会降低软件发布的速度。

DevSecOps最佳实践

将有缺陷的代码投入生产,结果可能是客户体验不佳,并可能因停机而损失业务。但如果部署不安全的代码,后果可能会严重得多。

DevSecOps是DevOps的自然演变,旨在使安全性成为SDLC的核心部分,而不是在发布之前发生的孤立过程。就像测试和操作团队通常是在DevOps之前的世界中从开发中孤立出来一样,今天的安全通常是专业团队的工作,他们的工作发生在DevOp生命周期之外。

DevSecOps认为,需要在SDLC中嵌入安全性。无论您的组织已经在实践DevOps,还是您正在考虑如何采用DevOps文化,以下是建立DevSecOps实践所需的基本最佳实践:

  • 创建DevSecOps文化:DevSecOps的成功依赖于每个人负责安全。这意味着SDLC中的每个人都会对应用程序和基础设施设置进行防御编码、构建、测试和配置。就像DevOps一样,DevSecOps在开放的文化中蓬勃发展,每个人都在一起努力构建尽可能最好、最安全的产品。

  • 将安全性设计到产品中:DevSecOps寻求将安全性设计到产品中,从最初的规划阶段到部署的生产级代码。这意味着安全工作与功能工作一起规划,从业者在开发工作的每个阶段都会获得安全知识和测试。目标是使安全成为团队工作的日常组成部分。

  • 建立威胁建模实践:在编写一行代码之前,往往会埋下安全漏洞的种子。在规划阶段对潜在威胁建模,并设计基础设施和应用程序的体系结构以缓解这些问题。定期渗透测试,即受信任的人试图闯入您的系统,可以帮助揭示您在威胁模型中可能遗漏的弱点。

  • 自动化以提高速度和安全性:整个SDLC都使用了自动化测试,以确保在正确的时间进行正确的安全检查。这使人们有更多的时间专注于构建核心产品,同时确保满足安全要求。

  • 在产品开发中规划安全检查点:确定SDLC中风险状况发生变化的过渡点。这可能是开发人员将其代码合并到主分支的点,这可能会增加代码在同事的机器上运行并最终达到生产的可能性。在这种情况下,打开拉请求可能是自动安全检查以及适当的手动升级的良好触发事件。

  • 将安全故障视为学习机会:基于DevOps的持续改进文化,成功的DevSecOps实践努力将安全事件转化为学习机会。这可以通过利用审计日志、构建事件报告和建模恶意行为来实现,从而改进工具、测试和流程,进一步保护应用程序和系统的安全。

  • 掌握依赖关系:了解并减轻依赖性带来的潜在威胁对产品的安全至关重要。对依赖项应用与内部代码相同的威胁建模和自动测试。在GitHub,我们识别并共享开源软件中数以千万计威胁的详细信息,帮助组织和开发人员更加了解并避免漏洞。

  • 建立您的分析和报告能力:持续监控是DevSecOps实践的关键部分,包括实时警报、系统分析和主动威胁监控。通过测量应用程序和DevSecOp管道的各个方面,您可以创建一个了解应用程序健康状况的公共点。报告仪表板和警报会尽早突出问题。当问题确实发生时,您设置的遥测(如应用程序级日志)可以为事件解决和根本原因分析提供深入的信息。

DevSecOps文化

创建DevSecOps文化首先要让安全成为每个人的责任。这对许多组织来说可能是一个巨大的变化。传统上,安全性是开发人员留给专业安全专业人员的东西。它也可能成为摩擦点。工程团队经常将安全实践视为快速交付软件的障碍。

DevSecOps通过将安全作为SDLC的核心,如编写代码、运行测试、配置服务,从根本上寻求改变这种观念。每个新的功能或修复都从考虑其安全影响开始。安全性和合规性策略通过测试来实施。当出现问题时,这是一个学习的机会,下次可以做得更好。

DevSecOps实践中的安全性不是减缓软件发布的东西,而是发布本身的一部分,从而实现更快、更安全的部署。

但构建一个成功的DevSecOps实践需要将安全性构建到SDLC的每个阶段。这因组织而异。即便如此,仍有一些核心支柱定义了DevSecOps文化。其中包括:

  • 人:DevSecOps实践旨在消除不同学科之间的障碍,并构建一个自然协作的环境,让每个人都对产品的安全和质量负责。

  • 过程:DevSecOps将安全从SDLC结束时的一个独特阶段转变为每个人工作的一个组成部分。自动化安全评估、以安全为中心的单元测试、广泛监控、,防御性编码会创建快速反馈循环,漏洞会在产品生命周期的早期出现,并且可以更快地修复。

  • 产品:DevSecOps通过使用CI/CD等技术自动识别安全问题,构建在DevOps工具链上。依赖性扫描、静态和动态应用程序安全测试以及自动化策略实施工具通常用于帮助在SDLC的每个阶段构建安全性。广泛的同类最佳解决方案可以相互集成,以创建“开放”的工具链。然而,其他组织可能会发现,更集成、更注重安全的产品套件通常可以提供更全面的体验。

  • 治理:持续改进是DevSecOps的核心,它需要创建一种度量文化,使从业者能够识别改进流程和工具的机会。

DevSecOps管道

DevSecOps文化寻求建立安全性,将其作为创建软件的基本组成部分,但这只是成功采用DevSecOp实践所需的一部分。下一步是将安全性集成到DevOps管道.

通过整个SDLC中特定于安全的工具和流程,DevSecOps管道可帮助从业人员设计更安全的产品,并在产品生命周期的早期发现安全问题。

DevOps管道无限

通用DevSecOps管道阶段

DevSecOps构建在DevOps上,DevSecOp管道构建在DevOperatis管道上。正如DevOps将质量和速度集成到每个步骤中一样,最佳的DevSecOps管道旨在预测SDLC中可能出现安全问题的关键点。

这分为以下常见的DevSecOps管道阶段:

  • 计划:在DevSecOps实践中,安全性从SDLC管道的规划阶段开始。这可以包括分析潜在的安全威胁,并确定如何使用威胁建模来应对这些威胁。它还可以主动将安全性设计到您的产品中,以确保它从一开始就融入到工作中,并提前做出关键数据卫生和其他安全决策。

  • 代码:在DevSecOps管道的编码阶段,重要的是创建一种具有策略的防御性编程文化,以帮助从业者主动解决安全和法规遵从性问题。这可以简单到指定如何处理代码中特别危险的方面(如NULL)的规则,也可以涉及输入验证等更广泛的指导原则。

  • 内部版本:在构建阶段,典型的DevSecOps管道将包括自动安全检查,以在源代码中的漏洞攻击主分支之前捕获它们。这可能涉及使用预提交挂钩来运行静态应用程序安全测试(SAST)工具,在这些工具中,代码中的任何潜在问题都会停止构建,就像失败的测试一样,并提供时间在工作开始之前修复专有源代码中的任何潜在漏洞。它还应该包括软件组合分析(SCA)工具,以跟踪代码库中的开源组件并检测依赖项中的任何漏洞。

  • 测试:DevSecOps管道的测试阶段是一个关键点,从业者将开发测试策略和自动化测试套件,以捕获任何潜在的安全漏洞或问题。这通常包括使用基本级别的单元测试来查找安全问题,例如应用程序处理意外或错误输入的方式。它还可以包括动态应用程序安全测试,以在运行时发现应用程序中的漏洞。这样,测试阶段就变得与功能一样安全。这个阶段的一个好技巧是将动态应用程序安全测试(DAST)集成到DevSecOps管道中。

  • 发布:在发布阶段,DevSecOps管道通常会包括额外的自动化安全测试和漏洞扫描,以捕捉早期阶段可能不明显的问题。一些组织还将部署最低特权原则,即每个人和工具只能访问他们所需要的内容。

  • 部署:在部署阶段,DevSecOps从业者将努力确保代码只有在通过前一阶段的安全检查后才能投入生产。这可能涉及到对应用程序代码和用于在生产中运行软件的底层基础设施应用自动化测试,以捕获任何运行时安全问题。

  • 操作和监控:在运营和监测在DevSecOps管道的各个阶段,组织通常会使用应用程序级和基础设施指标来识别可能表明安全漏洞的异常活动。当事件发生时,可以使用日志和其他工具来查明问题并了解其影响。

DevSecOps自动化原理

正确实施后,自动化通过使人们能够使用技术来完成重复的手动任务,并更快地交付更高质量的软件,从而加速了SDLC。DevSecOps通过集成SDLC所有阶段的安全测试来进一步实现自动化,以提高速度、一致性并减轻潜在风险。

如果DevSecOps使安全成为每个人的责任,那么DevSecOp自动化将努力为每个人提供所需的工具,以确保代码和配置的安全,而不要求他们成为安全专家。

当考虑在您自己的DevSecOps管道中应用自动化时,请考虑以下原则:

  • 自动化应具有战略性:DevOps实践通常寻求使用自动化来提高整个SDLC的速度和质量。但是,正如战略在DevOps实践中很重要一样,对于如何以及何时在DevSecOps环境中应用自动化也同样重要。

  • 让人们专注于创造性:尽可能自动化重复性任务。这样,人们就可以节省时间和精力,从事更复杂的工作,同时检查也会更加一致和大规模。

  • 系统化代码审查:使用工具例如静态应用程序安全测试,以自动化代码审查的元素。然而,人性化的代码审查仍然很重要,确保代码审查清单涵盖特定于技术堆栈的安全问题至关重要。创建一个反馈周期,以便每次有新信息可用时,都将其纳入检查表。例如,当事件发生时,考虑如何通过代码审查或自动化测试提前发现问题。

了解GitHub Advanced Security如何为DevSecOps组织提供领先的安全工具>


反射工具


DevSecOps工具链

采用DevSecOps始于一种文化转变,这涉及到使安全成为SDLC中每个人的核心关注点。为了实现这一点,组织通常会采用新流程并构建一个DevSecOps工具链,将自动化安全测试和安全工具应用于SDLC。

DevSecOps工具通常构建在通用DevOps工具上,如CI/CD、自动化测试、配置管理和监控。目标是将以安全为中心的工具集成到产品生命周期的每个阶段。

DevSecOps工具链的关键组件

  • 提交和合并的自动化安全测试:任何DevSecOps实践的基本目标都是通过使用预提交和合并触发器触发自动扫描,在代码中的问题造成危害之前捕获它们。组织可能实施的一些扫描包括:

    • 代码扫描:这通常称为静态应用程序安全测试,即在rest时评估代码,而不必运行它来发现可能导致漏洞的代码。

    • 漏洞扫描:动态应用程序扫描工具将应用程序构建并部署到沙盒环境中,然后观察它如何响应已知的安全威胁。

    • 秘密扫描:即使有最严格的政策,秘密偶尔也会变成承诺。秘密扫描工具用于在提交之前捕获它们。这些工具还与SCA工具配对,用于检测给定代码库中开源依赖项中的任何漏洞。

探索GitHub如何使DevSecOps组织在SDLC的所有阶段应用深入的自动化安全测试>

  • 配置管理:在DevSecOps中,一般规则是最好消除系统配置中的不确定性,这通常通过采用基础设施作为代码来实现。Docker、Terraform和Ansible等工具使用YAML和类似的配置文件,可以自动扫描问题,进行版本控制,并自动扩展到服务的多个实例。

了解GitHub如何帮助DevSecOps组织通过自动化管理应用程序和系统配置>

  • 容器业务流程:在某些环境中,组织可以采用微服务架构来更好地支持复杂的云应用程序。这需要保持多个容器并根据需要安全地扩展它们,这涉及到容器编排工具。就像配置管理工具一样,容器编排工具通常使用YAML配置文件来指示容器之间的交互。

  • 运行时验证:这些工具也称为运行时应用程序自我保护工具,当您的应用程序运行时,这些工具会主动监视和/或指示对您的应用软件的威胁,并提供突出显示任何漏洞的报告。

  • 持续监测和报告:DevSecOps工具最简单但高效的一个方面是度量,这涉及到在应用程序和基础架构级别记录所有内容。最好的工具将在出现问题时提供实时智能,并包括报告系统,以便您可以及早发现问题。例如,来自意外端口的出站数据可能表明存在危害,但如果不进行监视和报告,则可能无法检测到。

底线

安全性是当今软件开发组织中的一个决定性问题。弄错对组织乃至相关个人都有深远的影响。DevSecOps提供了一个框架,用于从第一步开始安全地创建软件。并建立在对DevOps意味着对于大多数企业来说,转向DevSecOps是一种自然的演变。

在GitHub上构建您的DevSecOps实践

GitHub是一个集成平台,它将公司从构思到规划,再到构建,再到生产,将专注于开发的经验与强大、完全管理的开发、自动化和测试基础设施相结合。

比较定价计划>



我们的理念是建立自动化和卓越开发运营对于公司来说,你明天就会成为。

高级SCM工程师Todd O'Connor土砖



从规划到建设 提高显影速度
在代码库旁边构建路线图计划,并使用完全集成到项目中的强大项目板和表快速将任务分配给团队成员。

了解GitHub问题>
减少提交时间。为开发人员消除环境管理和上下文切换。通过云中安全、受管理的空间简化IT采购和维护。

探索代码空间>


自动化一切 在编写代码时保护代码
使用GitHub Actions自动化所有软件开发工作流。通过功能强大的开发、测试和自动化基础设施可靠、安全地扩展,并完全由GitHub管理。

了解有关GitHub操作的更多信息>
在整个软件开发生命周期中保护代码、依赖项、令牌和敏感数据,并自动解决漏洞。


了解我们如何帮助您保持安全>

标记

想知道GitHub如何帮助您的业务?

告诉我们更多关于您的需求

octocaptcha微调器