DevSecOps解释
降低数据泄露风险: DevSecOps寻求通过设计使代码安全。 整个SDLC中安全编码文化实践、安全开发环境和自动化安全测试的结合有助于减少安全漏洞或缺陷进入生产软件的可能性。 改进了法规遵从性: DevSecOps从业者经常使用自动化来强制执行代码遵从性,并将策略强制工具直接集成到CI/CD管道中。 对依赖关系更有信心: 现代技术堆栈严重依赖第三方代码,通常来自公共包存储库。 DevSecOps从业者经常利用工具和自动化测试在软件发布之前识别潜在问题。 价值更快地传递给最终用户: 通过创建安全第一文化并应用自动检查,DevSecOps减少了对不同安全审查的需要,从而降低了代码部署的速度。
DevSecOps的主要优点是什么?
DevSecOps最佳实践
创建DevSecOps文化: DevSecOps的成功依赖于 每个人 负责安全。 这意味着SDLC中的每个人都会对应用程序和基础设施设置进行防御编码、构建、测试和配置。 就像DevOps一样,DevSecOps在开放的文化中蓬勃发展,每个人都在一起努力构建尽可能最好、最安全的产品。 将安全性设计到产品中: DevSecOps寻求将安全性设计到产品中,从最初的规划阶段到部署的生产级代码。 这意味着安全工作将与特性工作一起规划,并在开发工作的每个阶段为从业人员提供安全知识和测试。 我们的目标是让安全成为团队日常工作的一部分。 建立威胁建模实践: 在编写一行代码之前,往往会埋下安全漏洞的种子。 在规划阶段对潜在威胁建模,并设计基础设施和应用程序的体系结构以缓解这些问题。 定期渗透测试,即受信任的人试图闯入您的系统,可以帮助揭示您在威胁模型中可能遗漏的弱点。 自动化以提高速度和安全性: 整个SDLC都使用了自动化测试,以确保在正确的时间进行正确的安全检查。 这使人们有更多的时间专注于构建核心产品,同时确保满足安全要求。 在产品开发中规划安全检查点: 确定SDLC中风险状况发生变化的过渡点。 这可能是开发人员将其代码合并到主分支的点,这可能会增加代码在同事的机器上运行并最终达到生产的可能性。 在这种情况下,打开拉请求可能是自动安全检查以及适当的手动升级的良好触发事件。 将安全故障视为学习机会: 基于DevOps的持续改进文化,成功的DevSecOps实践努力将安全事件转化为学习机会。 这可以通过利用审计日志、构建事件报告和建模恶意行为来实现,从而改进工具、测试和流程,进一步保护应用程序和系统的安全。 掌握依赖关系: 了解并减轻依赖性带来的潜在威胁对产品的安全至关重要。 对依赖项应用与内部代码相同的威胁建模和自动测试。 在GitHub,我们 识别并共享开源软件中数以千万计威胁的详细信息 ,帮助组织和开发人员更加了解并避免漏洞。 构建分析和报告功能: 持续监控是DevSecOps实践的关键部分,包括实时警报、系统分析和主动威胁监控。 通过测量应用程序和DevSecOps管道的各个方面,您可以创建一个了解应用程序健康状况的公共点。 报告仪表板和警报会尽早突出问题。 当问题确实发生时,您设置的遥测(如应用程序级日志)可以为事件解决和根本原因分析提供深入的信息。
DevSecOps文化
人: DevSecOps实践旨在消除不同学科之间的障碍,并构建一个自然协作的环境,让每个人都对产品的安全和质量负责。 过程: DevSecOps将安全性从SDLC结束时的一个独特阶段转变为每个人工作中不可或缺的一部分。 自动化的安全评估、以安全为中心的单元测试、广泛的监控和防御编码创建了快速反馈回路,漏洞在产品生命周期的早期就被发现,并且可以更快地修复。 产品: DevSecOps通过使用CI/CD等技术自动识别安全问题,构建在DevOps工具链上。 依赖性扫描、静态和动态应用程序安全测试以及自动化策略实施工具通常用于帮助在SDLC的每个阶段构建安全性。 广泛的同类最佳解决方案可以相互集成,以创建“开放”的工具链。 然而,其他组织可能会发现,更集成、更安全的产品套件通常可以提供更全面的体验。 治理: 持续改进是DevSecOps的核心,它需要创建一种度量文化,使从业者能够识别改进流程和工具的机会。
DevSecOps管道
通用DevSecOps管道阶段
计划: 在DevSecOps实践中,安全从SDLC管道的规划阶段开始。 这可以包括分析潜在的安全威胁,并确定如何使用威胁建模来应对这些威胁。 它还可以主动将安全性设计到您的产品中,以确保它从一开始就融入到工作中,并提前做出关键数据卫生和其他安全决策。 代码: 在DevSecOps管道的编码阶段,重要的是创建一种具有策略的防御性编程文化,以帮助从业者主动解决安全和法规遵从性问题。 这可以简单到指定如何处理代码中特别危险的方面(如NULL)的规则,也可以涉及输入验证等更广泛的指导原则。 内部版本: 在构建阶段,典型的DevSecOps管道将包括自动安全检查,以在源代码中的漏洞进入主分支之前发现这些漏洞。 这可能涉及使用预提交挂钩来运行静态应用程序安全测试(SAST)工具,在这些工具中,代码中的任何潜在问题都会停止构建,就像失败的测试一样,并提供时间在工作开始之前修复专有源代码中的任何潜在漏洞。 它还应该包括软件组合分析(SCA)工具,以跟踪代码库中的开源组件并检测依赖项中的任何漏洞。 测试: DevSecOps管道的测试阶段是一个关键点,从业者将开发测试策略和自动化测试套件,以捕获任何潜在的安全漏洞或问题。 这通常包括在基本级别使用单元测试来查找安全问题,例如应用程序处理意外或格式错误的输入的方式。 它还可以包括动态应用程序安全测试,以在运行时发现应用程序中的漏洞。 这样,测试阶段就变得与功能一样安全。 这个阶段的一个好技巧是将动态应用程序安全测试(DAST)集成到DevSecOps管道中。 发布: 在发布阶段,DevSecOps管道通常包括额外的自动安全测试和漏洞扫描,以捕获早期阶段可能不明显的问题。 一些组织还将采用最低特权原则,即每个人和工具只能访问他们所需要的东西。 部署: 在部署阶段,DevSecOps从业者将努力确保代码只有在通过前一阶段的安全检查后才能投入生产。 这可能涉及到对应用程序代码和用于在生产中运行软件的底层基础设施应用自动化测试,以捕获任何运行时安全问题。 操作和监控: 在运营和 监测 在DevSecOps管道的各个阶段,组织通常会使用应用程序级和基础设施指标来识别可能表明安全漏洞的异常活动。 当事件发生时,可以使用日志和其他工具来查明问题并了解其影响。
DevSecOps自动化原理
自动化应具有战略性: DevOps实践通常寻求使用自动化来提高整个SDLC的速度和质量。 但是,正如战略在DevOps实践中很重要一样,对于如何以及何时在DevSecOps环境中应用自动化也同样重要。 让人们专注于创造性: 尽可能自动化重复性任务。 这样,人们就可以节省时间和精力,从事更复杂的工作,同时检查也会更加一致和大规模。 系统化代码审查: 使用 工具 例如静态应用程序安全测试,以自动化代码审查的元素。 然而,人性化的代码审查仍然很重要,确保代码审查清单涵盖特定于技术堆栈的安全问题至关重要。 创建一个反馈周期,以便每次有新信息可用时,都将其纳入检查表。 例如,当事件发生时,考虑如何通过代码审查或自动化测试提前发现问题。
DevSecOps工具链
DevSecOps工具链的关键组件
提交和合并的自动化安全测试: 任何DevSecOps实践的基本目标都是通过使用预提交和合并触发器触发自动扫描,在代码中的问题造成危害之前捕获它们。 组织可能实施的一些扫描包括: 代码扫描: 这通常称为静态应用程序安全测试,即在rest时评估代码,而不必运行它来发现可能导致漏洞的代码。 漏洞扫描: 动态应用程序扫描工具将应用程序构建并部署到沙盒环境中,然后观察它如何响应已知的安全威胁。 秘密扫描: 即使有最严格的政策,秘密偶尔也会变成承诺。 秘密扫描工具用于在提交之前捕获它们。 这些工具还与SCA工具配对,用于检测给定代码库中开源依赖项中的任何漏洞。
配置管理: 在DevSecOps中,一般规则是最好消除系统配置中的不确定性,这通常通过采用基础设施作为代码来实现。 Docker、Terraform和Ansible等工具使用YAML和类似的配置文件,可以自动扫描问题,进行版本控制,并自动扩展到服务的多个实例。
容器业务流程: 在某些环境中,组织可以采用微服务架构来更好地支持复杂的云应用程序。 这需要保持多个 容器 并根据需要安全地扩展它们,这涉及到容器编排工具。 就像配置管理工具一样,容器编排工具通常使用YAML配置文件来指示容器之间的交互。 运行时验证: 这些工具也称为运行时应用程序自我保护工具,当您的应用程序运行时,这些工具会主动监视和/或指示对您的应用软件的威胁,并提供突出显示任何漏洞的报告。 持续监测和报告: DevSecOps工具最简单但高效的一个方面是度量,这涉及到在应用程序和基础架构级别记录所有内容。 最好的工具将在出现问题时提供实时智能,并包括报告系统,以便您可以及早发现问题。 例如,来自意外端口的出站数据可能表明存在危害,但如果不进行监视和报告,则可能无法检测到。
底线
在GitHub上构建您的DevSecOps实践
我们的理念是建立自动化和卓越 开发运营 对于公司来说,你明天就会成为。