Page 56 - 《软件学报》2021年第10期
P. 56
3028 Journal of Software 软件学报 Vol.32, No.10, October 2021
任命 DevSecOps 团队负责人
DevSecOps 在软件企业中的落地通常需要多个团队的沟通与协作,在进行讨论之后共同进行决策.此外,
DevSecOps 鼓励“人人对安全负责”,但在具体实施时,每个人的安全责任又难以具体认定,这无疑会大大降低
DevSecOps 实施的有效性.因此,组织内需要任命一些 DevSecOps 负责人来具体承担安全责任,并负责推动项目
的进行,这一角色的职能类似于 OWASP 提出的“安全代言人(security champions)”的角色 [70] .他们来自于各个不
同的团队,帮助各自团队决定与安全团队进行合作的时机并从中进行协调 [71] .
建立共享工具集
在大多数情况下,开发、运维和安全人员很少使用相同的工具,这使得他们相互之间难以高效地进行协作.
DevOps 通过自动化工具建立了 CI/CD 流水线,打破了开发和运维团队之间的沟通隔阂,但安全团队并不能直接
通过这个方式解决沟通问题.安全团队所采用的传统安全信息和事件管理工具适用于检测异常并向安全团队
发出警报,它们并不能够直接帮助开发人员增强代码的安全性.因此,安全人员需要在组织内统一合适的自动化
安全工具(如 Checkmarx),并将它们集成到 DevOps 流水线中去,避免由于工具不一致带来的额外工作量,并进一
步提升开发流程的效率和安全性.但是由于开发和运维人员的安全知识可能较少,因此通常需要在组织内建立
一个完善的安全培训和知识共享体系来共同解决这一问题.
建立知识共享体系
知识共享是消除不同部门间分歧的有效手段之一.一般而言,知识只有在被具体要求时才会被分享.
DevSecOps 对知识共享的要求更多地体现在安全团队向开发和运维团队分享一些常见安全问题的预防和处理
知识,同时开发和运维团队为安全团队提供产品信息以及相关的技术和设计理念,帮助安全团队理解产品功能
和系统架构,进而更容易找出其中的安全隐患.
3.2.2 过程实践
过程实践旨在从一个全局的视角对整个 DevOps 流程进行安全控制,它不局限于 DevOps 流程中的某个具
体阶段,是一种长期的、跨阶段的实践类型.借助 DevSecOps 过程实践,组织能够对软件开发的整个工作流程进
行有效的统一管理,我们总结了以下几个典型实践.
创建安全反馈回路
安全反馈回路的建立,有助于软件开发和运维团队高效地处理安全问题.在传统的软件开发流程中,安全人
员往往在项目的后期才对产品的安全性进行评估,此时修复安全漏洞所需时间和人力成本往往较高,正因如此,
安全很多时候被视为项目上线的阻碍.但这一现象会在 DevSecOps 模式下有所改善,安全活动被嵌入到软件开
发生命周期的各个阶段中,开发人员和运维人员可以在各自的工作过程中收到安全反馈回路连续反馈的安全
问题,进而进行相应的修复工作.这种不断更新的信息流可以让整个团队了解当前产品的安全状态,高效地完成
必要的安全补丁和更新工作.
事件管理
DevOps 中提出了智能运维的理念,使用脚本化、自动化的方式来处理一些重复的常见运维问题.
DevSecOps 对这一理念在安全领域进行了拓展,即对于安全事件进行标准化响应.它需要提前创建工作流、工作
计划、运行脚本等,实现对安全事件发出一致的、可重复的、可度量的响应.这些脚本可以集成到 CI/CD 中,进
而配合 DevSecOps 进行主动的、持续的威胁和漏洞检测,减少重大安全事故的发生.
变更管理
在代码、配置中进行更新,可能会对系统的稳定性造成一定的影响,因此,良好的变更管理可以为安全人员
的工作提供完备的信息支持.变更管理的范围主要包括了所有与应用程序和平台本身的版本控制相关的标准
和规范 [72] .例如在部署到生产环境之前,任何对代码的更改都需要通过变更管理进行审查和批准.许多 DevOps
实践者已经使用 Git 等工具对系统版本进行控制,运维团队可以通过版本控制工具确认当前正在使用的应用程
序及其代码的版本.同样地,在 DevSecOps 模式下,安全团队可以通过变更管理工具查询当前的应用程序的安全
配置情况,以防证书或密钥等机密信息的泄露.当组织批准开发建议时,不同人员能够在最终的变更发布前查看