已定义 DevSecOps
DevSecOps(代表开发、安全和运营)是一个框架,可将安全性集成到软件开发生命周期的所有阶段。组织采用此方法以降低发布具有安全漏洞的代码的风险。通过协作、自动化和明确流程,团队可以共同承担安全责任,而不是将其留到最后 - 在解决问题更加困难且成本高昂时。DevSecOps 是多云安全策略的关键组件。
DevSecOps versus DevOps
在传统软件开发中,项目分为不同的阶段(计划、设计、开发、集成和测试),这些阶段在数月甚至数年内按顺序进行。虽然这种方法非常有条理,但许多组织发现它速度太慢,因此很难满足客户对产品持续改进的期望。此外,安全性通常在最后才得到加强,这会使公司面临破坏风险。
为了保持竞争力,许多公司采用了 DevOps 模型,该模型优先交付较小的高质量代码数据包,而不是需要更长时间的功能丰富的项目。在此框架中,软件开发和运营团队协作在整个流程中整合测试和集成。自动化、标准化流程和协作可帮助团队在不牺牲质量的情况下快速移动。
DevSecOps 是 DevOps 的增强功能,可将安全性构建到流程的各个方面。目标是从项目一开始就解决安全问题。在此框架中,整个团队不仅负责质量保证和代码集成,而且还负责安全性。实际上,这意味着团队会在规划期间讨论安全影响,并开始测试开发环境中的安全问题,而不是等到最后再做。此方法的另一个名称是左移安全性。
为什么 DevSecOps 很重要?
攻击者使用许多方法来获取对组织的数据和资产的访问权限,但常见的策略是利用软件漏洞。这些破坏类型成本高昂、耗时(具体取决于严重性),会损害公司信誉。DevSecOps 框架可降低部署具有配置错误和不良参与者可利用的其他漏洞的软件的风险。
DevSecOps 的关键组件
成功的 DevSecOps 流程包括以下组件:
持续集成
通过持续集成,开发人员一天多次将其代码提交到中央存储库。然后,代码会自动集成和测试。此方法使团队能够在流程早期捕获集成问题和 bug,而不是等到最后可能出现几个需要解决的问题时。
持续交付
持续交付以持续集成为基础,以自动执行将代码从生成环境移动到过渡环境的流程。进入过渡环境后,除了单元测试外,软件还会自动测试以确保用户界面正常工作、代码成功集成、API 可靠,并且软件可以处理预期的流量。此方法的目标是始终交付为客户提供价值的生产就绪代码。
持续安全性
在整个软件开发生命周期中构建安全性是 DevSecOps 的关键组件。这包括在流程早期进行威胁建模,以及在整个生命周期中自动执行安全测试,从开发人员自己的环境开始。通过尽早频繁地对软件进行全面的安全问题测试,组织可以高效地交付问题最少的软件。
沟通和协作
DevSecOps 高度依赖于个人和团队紧密协作。持续集成要求人们协作解决代码中的冲突,并且团队需要有效地进行沟通,以围绕相同的目标团结一致。
如何实现 DevSecOps
为 DevOps 流程添加安全性需要仔细规划。慢慢地从为团队带来最小摩擦并提供最大安全回报的流程开始。下面是向典型的 DevOps 冲刺 (sprint) 添加安全性的几种方法。
规划和开发
尽早在开发冲刺 (sprint) 中引入安全性不仅有助于减少后续的漏洞,而且还可节省时间,因为在生成和集成代码之前更易于解决问题。在规划和开发期间,使用威胁建模以识别和缓解对应用程序的潜在威胁。这将有助于从一开始就在应用程序中构建安全性。要在将代码提交到共享存储库之前发现安全问题,请实施自动检查(例如,集成开发环境安全插件),如果开发人员编写的代码中存在潜在的安全风险,这会立即向他们提供反馈。在代码评审期间,让具有安全专业知识的人员提供改进建议。
代码提交
成功 DevSecOps 流程的关键之一是持续集成。开发人员通常一天多次将其代码提交到中央存储库,以确保尽早捕获集成问题。将自动安全检查添加到此阶段很重要。这可能包括扫描第三方库和依赖项、单元测试和静态应用程序安全测试。部署基于角色的访问控制也很重要,以保护持续集成和持续交付基础结构免受试图运行恶意代码或窃取凭据的攻击者的影响。
生成和测试
在测试环境中运行自动安全脚本有助于发现之前未检测到的潜在问题。可在此阶段运行的一些安全测试包括动态应用程序安全测试、基础结构扫描、容器扫描、云配置验证和安全验收测试。
生产
将应用程序部署到生产后,一些组织会进行渗透测试,尝试查找实时环境中的弱点。在渗透测试中,人们采用攻击者思维方式并搜索破坏应用程序的方法。
运营
即使是最佳 DevSecOps 流程也不会捕获所有内容,因此持续监视应用程序的漏洞和威胁至关重要。分析数据可以帮助评估安全状况是否正在改善,并突出显示优化领域。
DevSecOps 工具和技术
选择安全工具时,必须选择适用于当前 DevOps 技术的工具。这样可以更轻松地将安全性纳入整个流程。以下是可能需要的一些工具类型:
基础结构即代码扫描
为了提高效率,DevSecOps 团队通常使用 Terraform 等开源工具通过代码来管理和预配网络、虚拟机和负载均衡器等基础结构,而不是手动执行此操作。Terraform 有助于确保跨数百或数千台服务器一致地设置和更新基础结构。为了降低将错误配置部署到生产环境的风险,基础结构即代码扫描工具会自动检查代码级别的基础结构是否不符合安全策略和标准。
静态应用程序安全测试
在编译代码之前,DevSecOps 开发人员会开始测试其自定义代码以发现安全漏洞。这有助于他们解决问题,而不会影响生成。静态应用程序安全测试工具通过自动检查和实时反馈简化此流程。许多工具准确确定哪个代码存在风险,并提供建议的修复。
软件成分分析
团队更高效地构建应用程序和功能的一种方法是使用第三方插件和框架。这些预生成的工具可节省时间,但也可能带来风险,例如许可问题、编写不当的代码或安全漏洞。软件成分分析工具确定应用程序中的开源组件,并根据专有或免费数据库对其进行评估,以检测许可证冲突以及安全和质量问题。
交互式应用程序安全测试
在质量保证测试期间或使用应用程序时,交互式应用程序安全工具会扫描代码以查找漏洞,并提供用于确定问题在代码中的位置的报告。
动态应用程序安全测试
动态应用程序安全测试模拟了不良参与者可能用于攻击应用程序的方法。此测试在应用程序运行时发生,并且基于预定义的用例。
容器扫描
容器广泛用于 DevSecOps,因为它们可帮助开发人员轻松部署独立代码单元。容器内是容器映像,其中包含为容器运行流程的代码。但是,这些映像通常使用现有映像生成,或者从公共存储库中拉取。容器扫描工具,扫描容器并将其与公共或专有漏洞数据库进行比较,以发现潜在的安全问题。
DevSecOps 最佳做法
DevSecOps 与流程和工具一样关注区域性更改。下面是帮助尽可能顺利地采用此框架的一些最佳做法。
改变区域性
认识到人们可能很难改变其工作方式,并且可能会发生冲突。为了帮助他们适应,请清楚地传达组织的目标和期望,提供大量开放对话的机会,并预计你需要保持灵活性,直到团队找到最适合他们的工具、流程和节奏。
定义要求和指标
建立最低安全基线。有关指导,请参阅行业和法规要求或开放全球应用程序安全项目® (OWASP) 十大 Web 应用程序的关键风险和SANS 前 25 个软件错误。定义要求后,确定要跟踪哪些指标以帮助监视进度。
从小事做起
安全自动化工具提供了许多用于检查代码问题的选项,但启用所有选项(尤其是在采用 DevSecOps 的早期阶段)可能会使团队不知所措。请明智地选择实现的工具以及扫描的问题数。
执行威胁建模
开发威胁建模流程,该流程可以根据需要简单或详细和具有技术性。使用此方法记录应用程序的真实安全视图,其中包括:
- 攻击者如何滥用应用程序的设计。
- 如何修复漏洞。
- 不同问题的优先级。
实现自动化
自动化是实现 DevSecOps 流程中质量和速度的关键。通过在持续集成和持续交付生命周期的所有阶段嵌入自动安全扫描,你将能够提高应用程序的安全性,而不会显著降低流程速度。
管理依赖项
大多数开发人员使用第三方包和库以高效生成应用程序。问题是其中一些解决方案存在安全缺陷,开发人员不会始终努力使它们保持最新状态。要降低风险,请确保对使用的组件进行安全风险审查,并制定标准化的更新流程。
评估和改进
定期评估流程的工作原理,并根据需要进行调整,以确保组织符合其目标。冲刺 (sprint) 完成后的无责事后分析有助于发现改进机会。分析数据和威胁情报还可以帮助确定当前方法是否不满足安全需求。
适用于云原生应用程序的 DevSecOps
云原生应用程序针对云生成,通常非特定于供应商,允许它们从一个云移植到另一个云。它们被设计为高度可缩放且可复原,开发团队通常使用微服务、容器和自动化进行生成,使其非常适合 DevSecOps 流程。在云原生应用程序的开发流程中构建持续安全性、持续集成和持续交付可实现可伸缩性,而不会影响安全性。使用自动化安全解决方案(例如,Microsoft Defender for DevOpsMicrosoft Defender for DevOps)帮助保护代码和整个 DevOps 管道。将应用程序部署到云后,继续监视其风险。云工作负载保护平台 (CWPP)跨多云环境检测和缓解对工作负载的威胁,从而帮助保护这些应用程序和基础数据。云安全态势管理 (CSPM)解决方案跨环境发现并解决错误配置和漏洞。
详细了解 Microsoft 安全
常见问题解答
-
DevSecOps 是将安全性集成到整个软件开发生命周期的流程。组织采用此方法以降低发布具有安全漏洞的代码的风险。通过协作、自动化和明确流程,团队可以共同承担安全责任,而不是将其留到最后 - 在解决问题更加困难且成本高昂时。
-
DevSecOps 代表开发、安全和运营。它指的是将安全性集成到软件开发的所有阶段的流程。
-
左移是 DevSecOps 中的概念,它指的是从开发流程的一开始就纳入安全做法。
-
DevSecOps 框架包括持续集成、持续交付和持续安全性。这是一种安全、运营和安全团队协同工作并共同负责快速交付高质量软件,同时减少安全漏洞的方法。
-
没有一个 DevSecOps 流程,但人们运行这些项目的常见方法是将工作划分为冲刺 (sprint),其中每个工作都包括以下组件:规划和开发、生成和测试以及生产。在整个冲刺 (sprint) 中,团队使用自动化以持续解决质量保证问题、持续集成并持续测试安全风险。
关注 Microsoft 安全