文章首发于:火线Zone云安全社区
作者:马景贺
如何用听起来很长、实践起来很难的DevSecOps,帮大家很happy地把安全软件构建出来。
我叫小马哥,目前是在极狐GitLab做DevOps技术布道师,把我的经验分享给大家。
今天分享的内容分为三部分:
- 安全的一些比较奇怪的现象。
- DevSecOps怎么就这么火爆了。
- 基于经验给大家构建了一个DevSecOps体系,基于Kubernetes做一个纵深防御。
安全之怪现状
安全非常重要,为啥重要?
第一个一定是钱,安全其实和钱挂钩的。
比如说如果发现安全漏洞了,如果你的企业被攻击了,你的信息泄露了,那最后一定是有经济损失。一些安全的调查报告,里面有些数据,大概是说一些公司,他们因为安全漏洞带来的经济损失,基本都在百万人民币以上。所以说涉及到钱,这个事情就很大了,毕竟企业是以盈利为目的。
第二个就是安全问题会影响公司声誉。
02年底,一家公司有安全供应链的漏洞,被攻击者在产品里面加了个漏洞,但是他们没有发现,影响了很多用户,后来用户对他们就有concern,大家对这个甲方就有疑惑,靠不靠谱。所以安全非常重要,涉及到钱和声誉,公司不就是奔着这个目的来的,如果这两个都没有的话,那企业就没有存在的价值。
第三个安全的体系真的非常难管理,安全主体很难界定。
我们传统意义上,大家觉得安全一定是安全人员的事情。其实这个传统意义上讲没有问题,但是发展到现在敏捷化项目开发的话,其实已经不是了。很多报告里面也会提出来,大家会讨论,觉得安全主体到底是安全人员应该还是开发人员。50%的人都不知道安全主体是谁,因为安全主体决定不下来,责任划分不下去,就很难管理。
第四个难衡量,ROI不清晰,这个也和钱相关。
对于研发或者测试来讲,工作量可以去衡量,比如你是做网络安全的,你管整个team的安全,有些东西是做了,但是呈现不出来,领导有时候觉得要你干啥,ROI不清晰。投入产出不是很清晰,而且安全是一个很长期的事情。
这就导致安全人员升职很慢,老大总觉得你没干活。在安全领域,能把ROI清楚地表达出来比较难。还有一个统一的点是,安全内容很碎片。用户密码属于安全,配置管理也属于安全,容器镜像也属于安全,还有现在开源软件的使用率其实非常高,开源使用的安全合规也属于安全,数据安全,内容很碎片化,很难把它统一起来。
安全非常难,很重要
但安全也很容易被忽视掉
第一就是急于求成
互联网时代,追求业务快速上线,因为越快上线,就意味能去快速的抢占市场,抢占市场就意味着收割了一波用户,就有存在下去的很大的竞争力了。
第二个就是侥幸心理
正常上线的时候,如果发现安全问题了,在某种情况下,业务让位于安全,因为业务上不去,可能要流失用户,但是如果现在你发现这个安全漏洞,因为存在侥幸心理,很多人觉得不补救没事,那就先上线。
这个不止安全,生活中也有,其实和意识有关,这个是安全最大的拦路虎。
第三个就是短视
安全需要真金白银的投入,现在市场上要找一个好一点的安全人员,其实价格比较高。而且市面上安全开源产品,一般不像开发框架有很多开源的,每个人的心里,总有点担心开源的是不太安全,所以一般都会买商业的,商业的就交更多的钱。
最后一个是误区很多
还是主体问题,安全是安全团队的事情,与开发没有关系。这个是最大的误区,因为开发觉得,这个问题出来一定是安全的问题。测试也觉得是安全问题,都把这些归到安全团队上面去了。
安全是伴随着软件诞生一直过来的,我个人觉得是非常怪的,是安全的怪现状。
DevSecOps
怎么就这么火爆了?
2009年的提的就只是DevOps,最开始为啥不提DevSecOps,为啥现在DevSecOps就火了呢?我个人认为有以下这么几点:
- 很多企业上云
- 敏捷式开发方式
- OpenSource
一些报告中的数据显示,任何企业其实都用了OpenSource,比如Linux、Git、Android。从数据来看,现在企业内部使用的软件70%以上是开源的。
开源也导致大家现在把安全话题又提出来了。漏洞的利用时间缩短了,有个数据显示,以前从一个漏洞被发现到被利用,可以利用它去攻击,可能是45天;但现在只有22天了。比如log4j这类核弹级漏洞,去年12月9日发现,短短十天就已经被展开攻击了。
所以,安全一下子进入人们的视野。
2009年大师提出DevOps的时候,把Dev和Ops结合起来就是DevOps,主要目的是打破研发和运维之间的壁垒。
至于怎么打破呢?需要CI/CD,流程、工具等等,DevSecOps就是加了一个Security团队,把这二环变成三环,但是内容变化是比较大的。
1、安全左移
其实这个和软件开发生命周期有关,一般软件开发生命周期,包含计划的编码、运维、部署和上线,这是一整个SDL。但是现在安全都是尽量往前走,不要在测试阶段介入,尽可能在plan阶段就介入。大家都提安全左移,这是为什么呢?其实还是钱,安全和钱挂钩。
看左下角这个图,这个图说明越早发现安全问题,修复用的成本越低。有数据显示,如果在研发阶段发现了一个安全问题,修复它的成本是一美分;到测试阶段发现一个安全问题,修复它的成本到了十美分;到上线的时候,再去修复这个安全漏洞,同样的安全漏洞修复成本是100美分,相当于扩大了100倍。所以提出了安全左移,发现问题越早修复越好。
所以说安全左移带来的第一个好处是修复成本低。可以看右下角的图,在研发阶段发现的漏洞,如果采用了DevSecOps,修复漏洞所需要的时间是52天,如果不采用需要113天,如果是生产阶段,那就更高。
2、持续的自动化
这是大概的示意图,给大家解释一下。比如研发人员要提交代码,接下来会去用一些安全产品,这些都是安全的手段,也可以手动做,但是目前会把它们集成到CI/CD里边去,做到持续自动化,提交代码后流程跑一遍就可以,人力的WorkLoad下降了。
而且一旦扫描出漏洞,还能往前反馈,终止后面的流程,防止有问题的代码被提交到主干分支,发布到生产线上交付给用户。
3、漏洞管理修复
其实安全不仅是把漏洞扫描出来,重点是问题出来如何修复?
第一个要做到报告展示透明,让研发、测试和安全都能看到,才能更高效地修复。
第二个展示要统一,在同一个面板上,否则按照传统的做法花费很多时间在登录系统上,所以如果有统一展示的地方最好。
第三个是漏洞追踪要公开,谁去追踪,谁去修复,谁是主要负责人,这个过程是怎么修复的,这些东西要公开,还能追踪。
第四个是漏洞的修复要及时。
安全主体鉴定不了,DevSecOps倡导人人为安全。任何一个人都有可能成为软件交互的瓶颈,DevSecOps的最终目的是加速软件交付及安全交付。
这是个永恒不变的模型,无非就是三块,第一个,就是以人为核心,人一定是最主要的核心生产力,以人为本,人是最终要素。
接下来是选工具,工具是所有概念理念的最终支撑或载体,现在工具很多,但一定要选择合适的工具。这就可以适合团队发展,才能满足自己的业务需求。
最后,有了工具,还得有个流程把它串起来,纵深防御的体系的构建。
DevSecOps
基于kubernetes做一个纵深防御
上图我称之为纵深防御。
纵向里分k8s、基础设施容器镜像和应用程序。基础设施做环境隔离,开发、测试和生产是最基本的三个环境,不同环境需要做隔离,因为不同环境的授权用户是不一样的。数据安全大家需要去考虑,虽然现在很多公司用公有云厂商的k8s集群,但是用他们的基础设施的时候,还是要去了解清楚数据是怎么做的,后台数据用的哪种加密方式。
权限管控,要确保只有特定权限的人能够登录确定的环境、确定的资源。容器和镜像,云原生时代容器是核心,镜像是灵魂,一定要做好容器和镜像的安全。
安全确实很难,还需要多方联动,包括团队里面也是,外面的组织也是多措并举,一起来保证软件安全,软件供应安全。