DevSecOps高效实践的五项核心原则

攻防
3月前

DevSec01.png

如何在不干扰高效的DevOps流程或降低开发者体验的情况下,提升应用程序的安全性,一直是构建现代应用程序所面临的挑战之一。如今的网络威胁形式严峻,四处充斥着针对整个软件供应链不同环节的复杂攻击。软件供应商门迫切需要一个深度整合安全因素的DevSecOps实践来将安全性贯穿于软件开发生命周期的各个阶段。

然而,重要的是该如何实施高效的 DevSecOps实践。像限制对开发平台的访问、实施彻底的代码审查,以及强制执行繁重的审批流程等,这些措施的确能够在一定程度上提高开发流程和代码的安全性,但同时也阻碍了应用开发团队的灵活运作与创新。针对应用程序的安全测试亦是如此,即使发现了大量的漏洞,但如果开发人员没有足够的时间或解决方案来修复它们的话,最后也无济于事。

从高层次上来看,构建并运行一个DevSecOps实践意味着组织能够操纵一个安全的交付平台,检测软件漏洞,对其进行优先级划分并修复,避免发布不安全的代码,并确保软件及其所有组件的完整性。

然而,建立并运营一个高效的DevSecOps实践就意味着要在相同(或更高)的开发速度和整体开发者满意度水平上实现这些目标。要达到这一点,以下五个指导原则至关重要。

原则1: 建立协作、注重安全的文化

一个蓬勃而高效的文化对于任何团队的成功都是不可或缺的,但同时也是最难把握的要素。这一点在DevSecOps领域尤其明显,最近的一项行业研究显示,“超过一半(51%)的IT决策者认为自己的团队对于变革毫无热情,同时47%的表示其团队缺乏跨团队的合作。

团队文化对于DevSecOps实践的重要性不该被忽略,而文化的形成应该从将安全视为所有利益相关者的首要任务开始。。

使安全成为一种共同责任

对于任何一个生产、销售或使用软件的组织来说,它的每一位员工都需要为组织整体的安全负责,而不仅仅是哪些职位中带有“安全”字样的人员。究其核心,DevSecOps是一种共担责任的文化,同时,以共同的安全导向思维运作也决定了DevSecOps流程如何适应并推动更好地选择DevOps平台、工具以及安全解决方案。

思维模式不会一夜之间改变,但可以通过以下方式来实现安全目标的一致以及安全责任感:

• 定期举行针对DevSecOps的内部安全培训,培训对象包括开发人员、DevOps工程师以及安全工程师。同时技能缺口和需求也不应被低估。
• 要求开发人员使用安全的编码方法与资源。
• 促使安全工程人员参与到应用程序和环境架构以及设计审查等工作中来。在软件开发生命周期的早期阶段就识别并解决安全风险。

打破职能隔阂,持续协作

由于DevSecOps是软件开发、IT运维和安全的交汇点,因此打破隔阂,积极持续地进行协作对于成功非常关键。对于一个没有建立正式DevSecOps框架的DevOps中心化组织来说,安全团队的介入就像一个不受欢迎的闯入者一样。突然强加的流程变更或工具往往会导致开发流程的阻滞以及开发者不必要的劳动。举一个常见的例子,安全部门往往会要求增加额外的软件安全检查,却没有考虑它们在开发交付流程中的位置,以及处理扫描信息和修复漏洞所需要的工作量,而这些最终都会落到开发人员身上。

DevSec02.png

推动协作,以作为一个团结的DevSecOps团队运作,要做到以下几点。

• 确认并达成一组可衡量的安全目标,例如:

应用程序安全事件数量的减少
审计时间的缩短
部署频率的降低
变更失败率的下降
生产环境中漏洞数量的减少
使用SBOM/SLSA部署到生产环境的构件

• 降低修复零日漏洞所需的时间
• 要求软件开发人员和DevOps团队参与对安全工具的采购和评估工作。
• 确保在DevSecOps流程中不存在单一的功能门户。
• 迭代优化工具选择和安全实践,以提高开发者的生产力和开发速度。

原则 2:安全左移是信息的左移,而非工作量左移 

一谈到DevSecOps,就不可能避开“左移”的说法。安全左移的口号在如今以DevSecOps为导向的文章、博客和营销资料中十分普遍,以至于让人们简单地认为只要将安全检查向软件开发生命周期的上游推进,就能实现一个有效的DevSecOps流程。然而,实际情况是DevSecOps成功与否取决于左移的具体内容。

安全左移基于一个已经被证实的理念,即在软件开发流程中较早进行安全测试(而不仅仅是在生产之前),就会有更好的机会发现已知的代码和组件漏洞,并及时进行修复。然而,如果测试运行、扫描信息的收集、漏洞优先级评定以及漏洞修复等所有工作的负担都落到开发人员身上,那么其所产生的心理负荷和生理疲劳必定会影响生产速度。相反,最佳的方法是遵循以下准则:

• 安全团队应负责在CI和CD流程中对测试工作进行协调和自动化。
• 移除开发人员对检测到的漏洞进行去重和优先级评估的负担。相对的,安全团队应确保开发人员能够及时获取经过全面处理后的漏洞列表。
• 为开发人员在理解和解决漏洞方面提供可操作性的指导,从而加快漏洞修复速度。

DevSec03.png

原则3: 维持适当的治理与防护

在DevOps世界中,一切都发展地很快,也很容易出现差错。即使是细小的错误或遗漏(例如漏掉的CVE或开发流程中未经授权的配置更改),都有可能会带来严重的安全合规风险。因此,在整个开发环境中建立全面治理和严格防护的价值不容小觑。如果一个组织的DevSecOps实践是有效的,那么它一定已经建立了一种安全与合规的文化,使得正确的行为成为标准,而错误的行为则成为例外。以下是实现这一目标的指导意见:

• 在整个开发环境中强制实施细粒度的基于角色的访问控制(RBAC)以确保对软件的使用和运行适当。传统的RBAC往往基于单一属性(例如角色),而细粒度的RBAC则会考虑到多项因素,(例如时间、用户组、组织层级等),以实现更强的安全性
• 将策略叠加在开发流程之上,使得开发人员能够控制流程的同时,也允许安全和合规团队执行安全检查。要实现这一目标,可以考虑Open Policy Agent(OPA)标准这一出色的策略即代码方法。
• 尽可能地使用模板,以避免会导致安全合规风险的不必要的错误。模板应包含安全最佳实践,特别是关于执行安全扫描的方面。通过策略强制执行模板的应用,以确保安全扫描的高效进行。

原则 4: 专注于保护整个软件供应链(而非仅仅是自己的源代码)

如今,软件开发商会使用各种各样的开源软件(OSS)组件以及其他第三方组件来构建自己的应用程序,使得现代应用程序安全挑战变得越来越复杂。每个组件都会向最终产品引入新的潜在漏洞,使得软件的客户和消费者不得不面临更多的威胁。应用程序整体的安全合规风险取决于所有为其开发和交付软件做出过贡献的代码、人员、系统以及流程,无论这些贡献来源于组织内部还是外部。

DevSec04.png

正如Solarwinds、Log4j以及Codecov等安全事件所展示的那样,开源软件组件已然成为了攻击者的理想目标。一旦某个组件被挖掘出了漏洞,就会有数十万甚至数百万的最终消费者受到严重威胁。因此,DevSecOps的重点必须从组织的源代码扩展到整个软件供应链,即所有代码、人员、系统和流程的总和,这些都是软件开发与交付所绕不开的要素。

为了确保组织所开发的所有软件的完整性,DevSecOps团队必须采用符合SLSA框架和14028号行政命令的工具与实践。

保护软件供应链需要DevSecOps团队做到以下几点:

• 在CI和CD流程中对开源软件组件的使用进行管理。这最好通过策略即代码的方法(基于OPA标准)来实现,该方法允许编写定制化的策略,考虑到各种开源组件的属性,例如版本、许可证、PURL和供应商,以及风险的主要指标等。无论目标是确保正确使用开源库还是出于安全原因阻止使用特定的开源组件,强大有效的治理都是必不可少的。
• 采用全面的功能来生成软件物料清单(SBOM),并对其进行管理与分析。SBOM对于理解应用程序中的组件和依赖关系至关重要,有助于组织有效地管理软件风险。如今,越来越多的软件消费组织要求供应商提供详细的SBOM,以符合14028号行政命令的要求。
• 确保软件的安全标准符合SLSA框架,并进行验证以确保达到或超出低要求。SLSA框架是防止组件被篡改的一种高效的手段。它允许在整个供应链中创建可验证的记录,其中包含将身份和系统与软件相关联的信息。这些信息可以在软件开发生命周期内进行验证和签名。级别越高,完整性保证就越强。
• 确立所有软件组件的完整监管链。在软件领域,监管链是关于软件组件在整个开发流程中所发生一切的详细证据,包括谁构建或修改了组件,它经历了哪些安全测试,以及测试结果是什么等信息。实现完整的监管链主要取决于基础的CI/CD平台以及集成的流水线工具,这些对于从开发到部署维护软件的可信度都至关重要。同时,拥有详细的软件监管链还大大加速了漏洞的修复过程,否则这个过程将会异常枯燥,需要手动解析日志并组合不完整的信息,以追溯新漏洞与受影响的组件之间的联系。

原则5: 通过自动化和人工智能实现“持续安全”

如今DevOps已经成为了持续集成和持续部署实践的代名词,所以我们可以理所应当地认为DevSecOps可以肩负起持续安全的重任。一个成功的DevSecOps离不开与应用程序开发速度的同步。虽然一个新兴的DevSecOps计划无疑需要时间来建立敏捷性和有效性,但我们仍可以利用自动化和人工智能等技术来加速DevSecOps成熟度的提升。

DevSec05.png

以下是如何以及在何处应用它们的几个重要建议:

• 在整个流程中编排安全扫描. 最简单的方法是采用平台方法,即在底层的DevOps平台上集成各种静态应用安全测试(SAST)、软件成分分析(SCA)、容器和动态应用安全测试(DAST)扫描等工具,并在运行流程时执行扫描。政策即代码治理是另一种相关的自动化措施。例如,可以强制执行一个OPA策略,如果不符合特定的安全标准,就使流程中断。
• 自动化漏洞清单去重和优先级排序 。开发人员最繁重的工作量之一就是处理一堆未经处理的扫描数据。为了优化关键漏洞的修复时间(同时保持开发人员的生产力和体验),自动化漏洞去重和优先级排序是必不可少的。
 合理应用人工智能来生成漏洞修复指南。为了进一步提高修复速度并最大程度地减少开发人员的工作量,为漏洞提供人工智能生成的解释以及具体的修复指南对开发人员大有裨益。
结论

尽管高效的DevSecOps实践对于软件生产组织至关重要,但关于如何构建一个既能加强整体应用安全态势,又不会增加工作负担或降低开发人员体验的实践标准却很少有明确的规范。

上述的五项原则能够在一定程度上促进DevSecOps团队建立并维护一个坚实的运营基础。随着现代DevOps技术和实践的迅速发展,始终会有全新未知的安全问题需要解决。只要开发人员、DevOps工程师以及安全人员作为一个紧密的团队共同努力,那么通往DevSecOps卓越的道路就会越来越清晰。

数世点评

DevSecOps的核心在于打破软件开发生命周期中所涉及的不同角色之间的隔阂,并依托底层工具和平台来实现一个安全自动化能力。

DevSecOps意味着将Sec因素贯穿于整个DevOps流程中,这不仅需要开发团队共担起安全重任,同时也要求安全团队确保自己的工作方式与迭代式开发模型相适应,提供实时、同步的安全反馈和支持,尽量在不牺牲敏捷性的前提下实现安全。

* 本文为茉泠编译,原文地址:https://thehackernews.com/2024/05/five-core-tenets-of-highly-effective.html
图片均来源于网络,无法联系到版权持有者。如有侵权,请与后台联系,做删除处理。

— 【 THE END 】—