保险与风险:向左还是向右?
随着社会的进步与人们安全意识的提高,保险的重要性逐渐在得到大家的认可。多元化的保险购买也成为了投资自身以及家人的重要方式,“买保险就是买平安”也成了大家耳熟能详的广告语。因此,保险就等于控制风险,让“爆炸半径”在能控的范围内。
对于软件来讲也是一样的,安全是底线,尤其企业数字化进程的加速、云原生与开源的采用等都让安全从“幕后”(只有特定人群关注)到了“台前”(更多的人关注,甚至是人人要为安全负责)。尤其近几年因为软件的安全问题而导致的数据泄漏事件频发,数据泄漏意味着经济损失(根据 IBM 发布的数据泄漏成本报告显示,2021 年的数据泄漏成本平均为 424 万美元,2022 年上涨到了 435 万美元),因此软件安全的背后逻辑就是:安全问题就等于经济损失。直接损失诸如被勒索赎金,间接损失如客户信任的丢失,最终传导下来就是金钱损失,运营成本的急速上升乃至破产。
DevSecOps 正当时
Gartner 早些时候发布了 2022 年软件工程技术成熟度曲线(Hype Cycle for Software Engieering, 2022),DevSecOps 位于第五阶段:生产成熟期。说明 DevSecOps 已经过了理论论述、摸索探索阶段,已经成为主流采用的可以落地实践的方法和手段。
DevSecOps 落地三步曲
工具是 xOps(DevOps、DevSecOps、GitOps 等)落地实践的重要支撑,比如 DevOps 落地实践时,企业会选择 Jenkins、GitLab(根据信通院发布的《中国 DevOps 现状调查报告(2021 年)》显示,GitLab 在源代码托管以 53.45% 占据第一,远高于第二的 GitHub 接近 20 个百分点;在 CI/CD 中以 8.86% 的占比仅次于 Jenkins,远高于其他同类型产品);在 GitOps 的落地实践中,企业会选择 ArgoCD 和 Flux 等。
DevSecOps 是覆盖软件开全生命周期的一种安全防护体系,也是一种集众多安全手段于一体的方法。因此对于落地实践 DevSecOps 的企业来讲,第一步往往是根据不同的安全手段来选择对应的工具:
通过工具来完成安全问题的扫描,先让 DevSecOps 正向流动:
工具是手段但不是最终目的,工具的目的是为了发现、挖掘软件中潜在的安全问题,最后以直观的报告形式呈现给相关人员,然后根据漏洞的级别以及建议的修复方案进行修复:
这也是 DevSecOps 落地实践的第二步:形成安全数据反馈。
最后根据项目的变动对安全手段、数据、流程等进行持续的优化,保证在保证安全的前提下,还能提升软件的交付速度。
DevSecOps 的难点与误区
上述 DevSecOps 落地实践三步曲看似简单,但是有很多误区与难点在里面。
难点一:工具的选择
与安全相关的工具是繁杂的,根据 Gartner 发布的 2022 年应用程序安全测试(Application Security Testing)魔力限象,有 10+ 厂商上榜,每一家都有对应的工具来提供软件安全的防护能力,这其中还不包括云原生时代主流的镜像扫描工具(Trivy、Anchore、Clair 等)、OWASP 提供的工具以及国内一些安全厂商提供的工具等。
难点二:安全数据的打通
每一种工具都有对应的安全报告,多种工具的报告无法进行有效整合,进行统一展示,这些安全数据的彼此割裂直接形成数据孤岛,最终导致 DevSecOps 是 DevOps & Security:
难点三:安全反馈难与研发构建闭环
大部分安全手段通常在代码提交之后的其他环节进行(手动或自动),源代码托管系统和安全测试系统是不同的工具或平台,安全数据无法反馈到代码提交环节(PR/MR),不能给代码审核/合并人员提供安全的数据支撑,无法从代码提交侧杜绝有安全问题的代码被提交到主分支的问题
正因为 DevSecOps 落地难的问题,才会导致一些误区的存在。
误区一:DevSecOps 就是用工具进行安全扫描
DevSecOps 是发现问题、追踪问题、修复问题的有效闭环。而常见的一点是:使用工具进行了安全扫描,就等于实现了 DevSecOps。并未对发现的安全问题进行漏洞管理并进行修复。此外,这种情况容易花大量精力聚焦在安全相关的工具上,诸如不同工具的对比、安装运维等,造成舍本逐末(聚焦工具,忘记 DevSecOps 的目的)。
误区二:以一域谋全局,以一点带全局
DevSecOps 是多种安全防护手段的集合,不同的安全手段对应软件开发的不同生命周期,从而构建起全面的安全防护体系。以一域谋全局,以一点带全局的观点是比较常见的,诸如实现了镜像扫描、SCA、xAST(SAST、DAST、IAST)等其中的一点或者几点就是实现了 DevSecOps。
DevSecOps 避坑指南
把握住以下几个原则,能在 DevSecOps 落地实践的路上少走弯路:
- 多手段,全覆盖
软件开发生命周期有多个阶段(计划、编码、构建到上线等),多种形态(源码时为静态,运行时为动态)。需要选择对应的安全手段来完成不同阶段、不同形态下的软件安全防护。用广度增加深度。
- 轻工具,重数据
安全的重点在于发现问题之后还能解决问题。工具是发现问题的有效手段,但是过分的聚焦在工具的安装使用以及有效性评估上,容易挤压留给数据处理的时间,造成发现问题而不修复的窘境,让安全数据失去重要价值:一,直观的看出软件的安全问题,从而判断软件的质量;二,针对安全问题给出对应的修复策略,根据建议可以比较快的进行修复。
- 有反馈,造闭环
安全问题的反馈至关重要,及时反馈,能够在软件开发早期进行问题的追踪与修复,最终会让安全问题的修复成本下降。这里面的闭环有两个:一,发现问题、追踪问题、修复问题所形成的闭环;二,安全问题与代码变更之间的闭环,比如安全报告要能和 MR/PR 结合,便于决策者在代码合并之前做决策。
极狐GitLab DevSecOps 体系
极狐GitLab DevSecOps 体系有七大安全功能,所有安全能力均开箱即用,所有安全手段无缝嵌入 CI/CD,实现安全的自动检测,所有安全手段的报告进行有效整合,结合漏洞管理功能,形成晚上的漏洞追踪管理机制,最终利用发现问题、追踪问题、修复问题的闭环来帮助用户构建纵深防御体系。
除此以外,极狐GitLab 的 DevSecOps 还具有以下功能:
简单易用,几行代码搞定
只要在 .gitlab-ci.yml
文件中引用与安全手段相关的模版即可在 CI/CD 中嵌入对应的安全手段:
为用户屏蔽所有工具的细节,提供开箱即用的安全能力。
结果在 MR 中直接展示
所有的安全报告会在 MR 中直接展示,并显示漏洞的级别(高、中、低等):
用 issue 追踪管理安全漏洞
在 MR 中点击对应的安全漏洞就可以完成漏洞的追踪管理:如果认为是假阳性漏洞,点击忽略即可;如果是真漏洞,点击创建 issue,并分配给对应人员即可。在修复安全问题的代码提交后,会重新进行检测,在无误后合入代码并关闭对应的 issue。
安全报告统一展示,漏洞一目了然
在漏洞报告中可以查看所有的安全报告,根据过滤选项来查看对应手段所产生的漏洞信息。
所有人员一个平台工作
研发、测试、安全等团队都可以在极狐GitLab 一个平台上完成协作,避免企业内部的工具冗余。