DevSecOps端到端的安全能力构建为什么重要?

2012年,Gartner首次提出DevSecOps概念,旨在将安全性嵌入开发过程中的每个部分;十年后,DevSecOps已经成为端到端安全能力构建的事实标准。所以,在了解DevSecOps为什么重要以及如何落地之前,我们先从软件开发的角度弄明白什么是DevOps。

软件开发进入现代化之旅

回望过去,软件开发大概经历了四个重要阶段:

第一阶段,90年代以前,软件开发是瀑布式,像交付硬件一样交付软件,最大的特点是项目庞大、开发周期长、出现原始问题时修复难度比较大。

第二阶段,2000年左右,敏捷开发逐渐成型,更关注微小变更,开发团队可以只交付部分功能,或者一个功能的框架。这种开发模式加快了软件交付速度,确保了主线上的代码在任何时间都可以工作。

第三阶段,2008 年前后,DevOps成为实现敏捷开发的最佳方法论之一。"敏捷"强调的是速度,要实现快速开发目标,自动化成为重要手段;而DevOps最核心的能力就是自动化。从概念来看,DevOps要打通开发、运维环节,通过更自动化的方式交付软件和架构变更过程,使得构建、测试、发布等整个流程能够更快捷、频繁和可靠,这便是DevOps。

第四阶段,2010年以后,容器开始流行,尤其是2015年原生基金会CNCF的诞生,标志着云原生时代到来。所谓"云原生",是将应用部署在云上,更强调动态环境构建,让软件交付变得更快捷、灵活和高效。可以说,云原生不仅解决了软件交付的"最后一公里难题",最重要的是推动软件开发流程或者方法进入了现代化之旅。

极狐(GitLab)高级解决方案专家

温小刚在1月8日由msup主办的第十届TOP100全球软件案例研究峰会上,极狐(GitLab)高级解决方案专家 温小刚带来了精彩的案例分享,其中总结了云原生时代的软件开发十大关键能力!

具体如下:

1.通过轻量化容器打包;

2.使用最佳语言和框架开发;

3.设计为松耦合的微服务;

4.微服务都是通过API来连接;

5.无状态和有状态服务区分清晰;

6.从操作系统和服务器层面抽象出来;

7.部署到自服务的云服务环境中;

8.通过敏捷的DevOps过程管理;

9.自动化能力;

10.有明确定义且被策略驱动的资源分配。

只是,从应用安全的角度来看,这些新的服务能力,在推动软件开发走向更高阶段的同时,也带来了新的安全风险。

云原生时代面临新的安全挑战

Containers,容器是一个新应用,所以在安全体系构建中,如何把容器的内容纳入进来,是企业拥抱现代化业务架构的第一个挑战。包括如何使用云原生应用的库和进程解决业务问题,如何共享底层操作系统,如何使应用可移植等等,涉及很多新的安全问题。有了容器,我们需要把它编排起来,需要新的编排工具。如果,安排容器运行的方式和位置不合理,也容易被攻击。云原生时代,很多企业希望通过微服务架构改变之前单体式架构,会将应用拆解为较小的服务,通过API进行连接。其实,传统软件开发时代,也有API,只不过不像今天这样,有如此大的体量。并且,很多API都需要单独的管理工具,所以在安全策略上也必须做出相应的调整。

所以,从大的开发环境来看,传统安全模式已经不能满足云原生时代的需求。首先,云原生采用的是敏捷开发方式,通过DevOps过程进行发布,在高速开发模式下,传统安全和部署模式显然无法跟上,如果把跟不上安全的云原生应用投向生产环境,会成为重点攻击对象。另外,传统安全工具扫描速度慢,无法适应云原生环境的敏捷需求。最后,还有人为因素。传统安全模式下,人员较少,缺乏专业技能。如何从根本上解决云原生环境下面临的安全挑战呢?很多企业会采用安全左移的方式!

安全左移成为最佳方法论

为了从根本上解决安全团队的低效问题,高效团队会将信息安全 (InfoSec) 目标整合到日常工作中,团队可以实现更高水平的软件交付,并以更好的性能构建更安全的系统,这种想法称为"左移"。说白了,安全左移就是在软件开发生命周期的较早阶段,解决各种安全问题。因为,越早检查到安全漏洞,企业修复漏洞的成本就越低。

问题是,安全左移方法论该如何落地? 很多企业首先会考虑使用传统安全工具实现安全左移,但是一看到各种工具链,就会感觉力不从心。因为,不同企业对安全工具的需求不同;并且不同发展阶段,也会采用不同工具类型;如果使用不同厂商提供的产品,还要做各种测试,包括静态、动态页面扫描、供应链扫描、容器扫描等等。不仅要进行相关工具的匹配,还要将所有工具以及整个流程衔接起来。有时候,工具集成的成本,可能比工具本身的费用还要高,包括很多企业提供的安全看板,还要单独收费。所以,实现安全左移目标,就像企业把所有DevOps工具串起来一样,不仅花费巨额成本,最重要的是耗时费力,根本不可能完成。具体而言,安全左移要具备如下能力:

1.便捷、高效的扫描。每次代码提交即扫描,开发人员可以第一时间得到反馈;

2.扫描能力要可靠,能全面覆盖。扫描不同的安全类型,这样才能降低安全合规风险,进而降低总体成本;

3.自动化的安全策略,针对不同等级的安全漏洞,在做代码合并或者上线部署的时候都需要一些自动化策略。比如:和环境无关的因素可以考虑忽略,也有一些不确定的因素需要人来参与,这些都需要从扫描结果中自动化,保证整个应用的高效、准确、可靠,防止安全漏洞进入生产环境。

4.与现有工具的集成。平台开放性,也很重要。从保护既有投资的角度看,原有工具确实有着自己的特有能力,需要和新应用进行集成和互补,不能搞"一刀切",完全抛弃旧有工具。

5.扫描次数、行数无限制。你如果想左移,在成本可预计、可控的前提下,就尽量多扫。

只有具备上述能力,最终才能真正达到安全左移的效果,让需求、代码、测试、报告全流程可跟踪、可追溯,进而实现端到端的打通,以更合理的许可模式和成本实现漏洞检测。

DevSecOps带来成本优势

如前文所述,传统业务模式下,反馈周期长、成本高、修复难度大,而新的DevSecOps可以从基础的应用安全扫描能力开始,构建端到端安全能力,将安全左移方法论嵌入到CI/CD里。

在极狐GitLab 里,安全扫描涵盖多种扫描能力,除了常见的静态应用安全测试(SAST),还有依赖扫描,也叫供应链扫描。另外,还有许可合规扫描、容器扫描、动态应用安全测试(DAST)、IaC安全测试、Fuzz Testing模式测试,真正将安全测试内嵌于合并请求中。

极狐GitLab 之所以被称为是DevSecOps的最佳范式,是因为可以做到多重检测和检查。

第一,检查代码。更通俗的说法是,检查自己。比如:6次攻击里面4次是针对应用,而应用是从代码里面出来的,代码是应用的基础,静态安全测试是根据已知的漏洞特征代码进行白盒扫描,然后通过扫语言、代码,和代码管理工具连在一起。对于极狐GitLab 来说,管理工具就是管理自己,极狐GitLab在这儿,仓库也在这儿。不同的语言需要不同的特征库,按照不同的规则来检查,涉及的语言包括.net、C/C++、Python、Java、JavaScript、Kotlin、Go、Ruby等等。另外,还要按照不同语言密码/密钥检测Secret Detection,检查无意提交的密码/密钥。除了特征库维护,扫描引擎需方便易用,并保定期更新。

第二,检查依赖。随着开源软件/组件的使用率的提高,以及开源组件生态中的漏洞数的升高,软件供应链安全变得越发重要。面对不同开源软件,如果基于某些管理体系来扫描,会让整个检测过程更方便、快捷,不用像静态检查一样,一行一行扫。比如:基于软件成分分析(SCA)的安全测试,我们可以依赖组件安全分析,还可以依赖组件开源许可合规分析。除了SCA安全测试,软件供应链也存在容器镜像,因容器镜像本身也是分层的,对于容器镜像安全扫描,和开源组件供应链扫描一样,也是分层模式,并在每一层报出已知漏洞。

第三,检查应用。一般,网站类应用容易被攻击,所以需要在网站正式上线之前进行测试。比如:大家熟悉的OWASP Top 10,被称为是动态扫描模拟标准。如果你希望每一次提交都能够进行动态扫描,那么整个体系都需要具备动态部署的能力。动态应用安全测试DAST(Dynamic Application Security Testing)类似于黑盒测试,像外部攻击一样测试运行中的应用。

只是,对于保持传统开发及应用模式的企业来说,如何从根本上解决传统安全和云原生安全的矛盾呢?很多人可能会说,如果开发人员不具备掌控云原生安全的能力,我们就提高人员素质,进行安全培训、教育等等!这虽然是企业拥抱云原生的一种方式,但是教育成本往往很高;最重要的是,学习时间太长,会影响整个业务的发展。

面对陌生的应用工具,只通过参数的微调,就能使用预配置,达到应用检查和扫描的目的,极狐GitLab为开发人实现了安全赋能。在极狐GitLab带来的DevSecOps能力中,实现了代码层的简化,很多应用工具已经内置于模板中,开发人员不需要一行行写代码,可通过资源配置,直接进行应用。

在极狐GitLab 界面中,你的新代码出现了哪些安全漏洞,或者你修复了哪些老的既有的安全漏洞,安全人员和开发人员都能一目了然。如果你发现有误报,或者是和你实际情况不相关,可以选择忽略,比如:密钥检查时,结果和测试密匙无关,希望后续再处理,可以临时创建issue,把漏洞信息带进去。

可能有些人会认为,有了极狐GitLab,安全团队是不是就没用了?的确,安全策略的自动化,会减少很多重复性的工作,解放安全人员的双手。但是,并不代表安全团队不再重要,而是要参与到更重要的工作中去。比如:存量漏洞怎么解决,如何批量更改状态等等,可以与开发人员实现更紧密的协作。

以扫描应用场景为例,如果遇到 log4shell 漏洞检测和修复,应该如何处理呢?首先,要进行配置。通过菜单"安全与合规"-> "配置"->"依赖项扫描"启用,然后在极狐GitLab CI配置中启用依赖扫描。实际扫描的时候,会在扫描流水线上出来结果,扫描工具在默认分支上面跑,然后进入漏洞,在漏洞报告中查看结果。如果有新的漏洞,会在新的分支里进行修复。和漏洞相关的信息都会带过来,比如:标识码、相关链接、解释、相关扫描工具实践等,下次进行查看、追溯就非常方便。

总之, DevSecOps最佳方法论的核心是,在各个阶段把安全因素考虑进去,越早解决安全问题,成本收益以及最终结果越好。而极狐GitLab可以为更多开发人员和安全人员带来从代码到应用集成,再到系统测试以及生产阶段的一站式解决方案。

相关推荐
Chenyiax10 分钟前
从 Chat 到 Responses:OpenAI API 抽象为什么变了?
后端
MariaH12 分钟前
Koa和Express的区别
后端
MariaH17 分钟前
Koa框架的使用
后端
luckdewei1 小时前
那个用 passlib 做认证的新同事,上线第一天就把用户密码写进了日志
后端
ping某3 小时前
为什么 Nginx 明明监听了 80,转发后端时却用了 4xxxx 端口?
后端·nginx
JustHappy3 小时前
我汇总了身边朋友的经历才发现,其实第一份实习是最难找的......
前端·后端·面试
uhakadotcom3 小时前
在python 的 工程化架构中 ,什么是 薄包装器层?
后端·面试·github
用户1474853079747 小时前
CodeX使用Skill生成游戏美术和音乐资源,一分钟入门
后端
Melody1237 小时前
用 abort 中断 AI 流式请求,我之前做错了
后端
onething3658 小时前
Spring Boot + Spring AI 从入门到实战:7天转型计划 Day 5 —— SSE 流式输出 + 打字机效果
人工智能·后端·全栈