DevSecOps 迎来高增长,如何实施是关键
“ DevSecOps 似乎迎来了春天。”
今年上半年,RSAC 2020大会发布的《2020年网络安全行业十大趋势》观察指出,DevSecOps 在持续增长和走向成熟。
10月腾讯发布的《2021云安全九大趋势》表示,以安全左移、内嵌、自动化为标志的 DevSecOps 理念及产品逐渐落地应用。
这个早在八年前面世的安全管理模式,似乎终于迎来了春天。
2012年,Gartner 首次提出 DevOps 研发运营一体化模式下的安全概念 DevSecOps(Development Security Operations),并于2016年发布报告对该模型及配套解决方案进行详细分析,其核心理念是——
安全是整个 IT 团队(包括开发、测试、运维及安全团队)所有成员的责任,需要贯穿整个业务生命周期的每个环节。
我们为什么需要 DevSecOps ?
在以前,一个应用程序发布一次更新可能相隔好几个月甚至几年,研发与运维团队相对独立,安全测试也拥有足够多的时间来保证产品质量。
但是随着互联网云化的冲击,容器、微服务等模型兴起并普及,业务交付模式变了,整体式的应用程序开始分解为独立较小的部分,快速迭代,持续集成、交付、部署。
DevOps 模式满足了业务发展的需求,但是安全性往往无法跟上代码的生产和发布的新速度,如何切入安全能力并有效保障业务的安全成为难点。
另一方面,程序的安全漏洞越晚被发现,其修复成本就越高。试想运行中的系统被曝出漏洞,除了承担修复漏洞二次上线耽误的业务损失,造成的品牌声誉负面影响深远而难以估量。
美国国家标准与技术研究所估计,在项目发布后再执行漏洞修复计划,其修复成本相当于在设计阶段执行修复的30倍。
因此需要让安全前置,不仅仅是在上线前进行安全检测,甚至是在开发、架构环节就融入安全建设,尽可能早地发现、排除安全隐患。
由此,DevSecOps 模式被提出,它通过一套包含了人文、流程、技术的框架和方法,把安全能力无缝且柔和地嵌入现有开发流程体系,让安全不再置身于业务之外,也让其他人员都参与到安全之中。
图/腾讯安全云鼎实验室
如何实践 DevSecOps 模式?
01
人文渗透
要落实“人人参与安全”其实并不容易,在传统的企业架构和观念中,研发团队只为业务负责,安全团队属于“找事的”,更多时候是在“阻碍业务的发展”。
因此在团队中倡导“安全是每个人的责任”并达成这种共识是推进DevSecOps的先决条件。
这需要持续的安全意识培养和教育,鼓励团队自治,扭转研发、运维、安全人员的传统角色认知,建设让整个团体共担责任、相互信任、不推诿的文化。
首先需要在团队间形成大家认可和遵守的公约。比如,开发团队负责代码层面的漏洞,运维团队负责基础设施的漏洞,明确团队之间的安全责任。进一步具体到团队内部,比如可以约定每一个开发人员在提交代码之前必须要借助于安全插件完成本地代码扫描和测试才能提交代码。
其次是保持团队之间信息的流通和同步。比如利用各类跨团队的实时通讯、协作工具,保证开发、运维、安全团队之间信息的高效共享,与安全相关的代码扫描报告、测试覆盖报告等,都应该各团队共享,通过经验来改进程序设计,强化对安全事件的识别和响应能力。
长期来看,需要持续开展安全相关的培训。非安全团队的人员的安全认知不能只局限于代码层面,也包括国家法规、公司规章、安全审计、权限管理等。通过培训让每个人员都明确安全的范围在哪里,自己的责任边界有多大。
人是安全的尺度,意识对于安全来说永远是最重要的。因此一个新安全管理模式的实施,人文的渗透就是打地基,需要企业把握好方向带好头。
02
流程制定
接下来,需要把研发、运维、安全工作的几条并线整合连接起来,让不同的团队产生协作,建立相关安全流程并应用。
这里需要重视的是,公司的研发运维团队通常已有惯用多年的开发测试发布平台及工具,安全流程的嵌入如果是把研发运维团队从原有体系中拉出来,可能直接就让辛苦建立起来的安全共识退回原点了。
因此安全流程要尽量适应、依附企业现有的开发体系来做,柔和低入侵地嵌入,尽可能减少对原业务流程的影响。
流程意味着标准化,应该由多团队共同参与制定,明确各个团队所承担的安全责任,以及对应阶段中的一些安全阈值设定。比如,如果测试覆盖率低于80%就不可以部署此版本到生产线等等。
流程要保证透明化,比如测试人员可以看到开发人员在代码提交前是否执行了单元测试,安全人员可以看到开发人员在代码提交之前是否执行了敏感信息检测,代码静态扫描等。高度的可见和透明可以培养团队间的信任,促进文化的扎根。
将安全嵌入流程是一个循序渐进的过程,比如先在持续集成加入代码扫描、敏感信息检测等步骤,然后在持续测试、持续交付、持续部署等流程中加入相应的安全步骤,每个步骤都应该形成一个闭环,通过反馈来进行持续改进,已形成完整的安全交付流程。
03
工具使用
Gartner DevSecOps 工具链
到具体的技术和工具层面,更多的是构建安全工具链。在不同的 DevOps 阶段需要进行不同的安全动作,都需要不同的工具来支撑。
常用的包括威胁建模、静态安全测试SAST、动态安全测试DAST、兼具两者优势交互式测试IAST、第三方组件成分分析SCA,当然还有包括代码风格检测、性能/功能测试、压力测试等其他手段。
从源码到产品,从静态到动态,都有相应的安全手段。让安全检测实现更多的自动化,以此来减少人工干预,并嵌入到CI/CD(持续集成/部署)流程中。
一些开源安全工具分享
git-secrets(代码中敏感信息检测,编码阶段)
https://github.com/awslabs/git-secrets
Sonarqube(代码质量检测,编码阶段&构建阶段)
https://www.sonarqube.org/
SAST/DAST 相关工具(SAST/DAST检测,编码阶段&测试阶段&运维阶段)
https://www.gartner.com/doc/reprints?id=1-6JR0995&ct=190419&st=sb
Vault(敏感数据管理,任意阶段)
https://www.vaultproject.io/
Clair/Xray/Anchore(镜像扫描,构建阶段中镜像打包环节)
Clair: https://github.com/quay/clair
Xray: https://github.com/atom-archive/xray
Anchore: https://anchore.com/
Terraform(管理基础设施,部署阶段)
https://www.terraform.io/
参考资料:
·《从SDL到DevSecOps:始终贯穿开发生命周期的安全》,腾讯安全云鼎实验室Fooying
·《关于DevSecOps,你应该知道这些》,马景贺