本帖最后由 FYIRH 于 2022-5-26 12:55 编辑
一、DevSecOps?
1.1 DevSecOps概念
DevSecOps并不是一个新兴的东西,在2012年也就是十年前,Gartner就提出了DevSecOps的概念。DevSecOps把信息安全包含在了整个DevOps的全生命周期当中。
1.2 为什么需要DevSecOps?
咱们现在所处的分会场是金融科技专场,大家都知道金融领域有非常强的监管,最怕的是数据泄露,尤其是现在各种虚拟币的出现,以前可能发现漏洞后想换成钱比较困难,而现在因为虚拟币比较难追踪,一旦发现漏洞很容易被攻击或勒索。数据泄密会带来一系列隐患,声誉也会受到影响。
所以在银行或金融机构里,有两类角色非常重要:第一类是信息安全,一般在银行会有一个团队,天天盯着有没有违规、哪些东西做得好、哪些东西跟整个集团的策略不一样;另一类是投行外汇的风控官。
推行DevOps后,我们发现一些问题,发布部署非常快,比如我现在的团队是30人,一个月差不多可以进行500次部署,但是其实这种快速部署,给生产环境带来很多漏洞,因为没有考虑安全,因此,我们把安全漏洞越来越多地引入到生产环境。同时,实行DevOps,第三方开源库必不可少,带来的风险也是越来越高的。
传统的模式依靠信息安全团队帮我们做扫描,扫描一般都是在后期,一旦发现问题还要返工重新修复。传统的信息安全慢慢地成为了DevOps的阻碍,拖慢整个DevOps的交付速度。
怎么去解决这个问题呢?
- DevSecOps可以快速交付。其实就是做一个左移,可以提前快速发现问题,提前解决。
- DevSecOps可以节约成本。早发现早解决,比后发现晚解决的成本要低很多。在整个生命周期的前期把安全引进来,也能更好地控制风险。
- 另一点非常重要的是Secure by design原则,不知道大家有没有了解过业界经典的前10个漏洞,排第四的是一般大家都觉得设计就是设计,其实有些漏洞不是测试可以测试出来的,在设计的时候就可以把漏洞、安全隐患解决掉。
汇丰的DevSecOps模型其实是我们传统开发运维团队包括信息安全团队做的,我们主要引进了一个DevSecOps负责人的角色。
- DevSecOps负责人一般来说会从开发运维团队中选出来,比如两年前是我,一般来说最好是一个级别比较高的人来担任这个角色,因为牵扯到文化推广等。他在整个模型里相当于是DevSecOps布道师,给大家宣传安全意识,把传统的安全测试团队跟现在整个开发运维团队结合起来,还会给大家带来一些工具、安排一些培训。
- 传统的开发运维团队,在整个DevSecOps模型里开发运维团队是主体。
- 信息安全团队,主要是两个工作,提供工具、提供培训和咨询。
关于运行模型,我建议分为三个阶段:- 第一阶段,把工具引进来。但引进工具不代表只是玩工具,看到结果只是第一步,要有一个长远的目标。
- 第二阶段,要有相关的信息安全培训。工具引进发现漏洞了,怎么去修复这些漏洞,才是符合DevSecOps的核心,而这时就需要一些培训和学习。
- 第三阶段,团队产生信息安全“专家”。这个人与DevSecOps负责人不太一样,他的主要工作是把现在的漏洞修复完,他可能不用做业务线方面的交付,最终的OKR可能是搞定现在的几千个漏洞。
怎么实现呢?这块不展开介绍。我们从SDLC软件开发生命周期的流程来看,在SDLC阶段里解决这个问题,包括在设计时怎么做,在编码时要有一些代码扫描和检查,在测试阶段要做一些动态交付式的扫描,在发布部署阶段有变更管理,做变更管理时必须看到变更可能带来哪些漏洞。
一般我们会用到三个工具:SAST、DAST、IASD。 - SAST是在做静态代码扫描的时候一般来说检测率会比较高,但是误报率也会高,所以做静态代码扫描的时候会发现30%可能都是误报的。
- DAST是让你去扫描,误报率非常低,但是同时发现的问题也是比较少的。
- IASD基于前面两者做一个结合,但是在每个机器上会有一个出入,所以部署成本和维护成本就相对来说更大。
在汇丰我们主要用的是几个工具:- Checkmarx做静态扫描。Checkmarx一般主要分为两种,一种是在CI/CD流水线上来集成,包括静态或者第三方库的扫描。
- 动态扫描我们主要用的是Netsparker。
- 开源软件是Sonatype IQ和Dependencies Check,其实这两个我们都有用,在不同的场景会选择不同的工具,相互之间可能会对比一下结果。
- 基础设施方面主要是用Nessus。
- 漏洞管理特别是稽查方面是用Kenna。
- Clouseau,我们今年在整个投行部门非常强烈推的工具,这个和前面的有什么不一样呢?我们刚才讲了有一大堆工具与CI/CD流水线做结合,非常常见的一个问题是我用的service可能最近一年没有做过测试,但是它可能用了一些非常老的第三方库,在这个过程我发现出来了,因为生产环境是去跑这个版本,我只能用生产环境把它依赖的库抓出来做扫描,所以我要在每一个生产环境里面装这个Clouseau的demo、插件,我们可以以service把它收集出来做简单的扫描,我就知道问题在哪里。这个词很有意思,是来自于法国十几年前的一部电影叫《粉红豹》,Clouseau是里面的一个探员,这个探员就叫Clouseau,我们就用这个来定义自己内部的工具。
- 另一个是服务器漏洞,漏洞也是我们今年做得比较多的,以前这个东西是通过信息安全团队帮我们扫描的,比如说每个月扫描我们的服务器有没有版本过旧。我们今年自己把这个东西拿过来接API,自己去扫描,所以可以很快地知道结果,接下来就怎样自动去做,因为尤其是服务器方面的问题可能会跟整个系统应用层面比起来也不能说容易,它会有非常多的标准,所以我们引用了Puppet做自动化,我们现在在内部用KBM,我们有一些机器,重新去build相当于虚拟镜像,可能两个星期或者一个月去做build,就可以把这个问题顺便给解决掉了。
- 下一步是自动化,其实我是一个纯粹自动化的粉丝,我在团队里面说能自动化就自动化,所有东西完全自动化。为什么要做自动化呢?零信任,你的代码写得好不好,我用工具去扫描,放在CI/CD流水线上,用信息安全提供的API把代码、第三方库、服务器按月按日或按周扫描,扫描完之后看结果,整条流水线都要自动化,零信任,我不信任你,你说你开发的东西是安全的,通过工具来实现安全的监控。但是最重要的一点我刚才说的,我们会作为上线审核的一部分。
- 还有Metric或ReporT,包括自研的、有些是工具自带的,通过这些报表我们就会知道系统在哪个地方有问题、有漏洞。对于这个版本,当然主要扫描的是第三方库,目前假如说是他的漏洞可能就会开一下绿灯。
所有的工具、所有的东西都是浮云,文化才是精髓。如果没有文化,怎么铺设这些东西,如果你的团队和高层不认可,做起来是非常困难的。像最早做DevOps的时候,你怎么推动DevOps呢?一定要建立文化。
- 首先要有培训,培训是非常重要的,尤其对于开发团队来说,因为开发团队一般懂的是开发语言,不懂信息安全,怎样从我的开发团队里培养信息安全的专家,这是非常重要的一点。培训有多种途径,工具会自己带一些资料,比如说你发现一个漏洞,这是漏洞扫描结果,它会给你一些建议怎么去解决漏洞。新人工作第一天和第一个星期都要做一些安全方面的,尤其IT领域会有一些关于信息安全的培训。
- 一两年前信息安全团队引进来一个工具叫Secure Code Warrior,这是从外面买过来的,相当于是模拟真实的黑客攻击你的场景,有人从巴西攻击你,他看到银行代码哪个地方有漏洞,多数是选择题的模式,就会跟你有交互,有参与感,让你有一些专业的知识。
- 另外是做一些竞赛,给大家带来乐趣,信息安全不是枯燥的东西。我们之前在广州搞过信息安全竞赛,也会做一些分享会,今年开始在广州集团层面做白帽,白帽不是黑客,我发现你的问题之后上报你的问题,我是一个好的黑客,不是坏的黑客,就是自己攻击自己,这也是建立文化的一部分。
- 最后,安全团队给我们设计了成熟度图,他主要考虑到两方面:第一是工具或者自动化的运营情况,第二是看安全专家,就是刚才说的平台上答一些题,他会根据跆拳道的概念,比如说白带、黑带或红带给你一个级别,去到L3是有这么一个人一定去到黑带级别了,所有工具都已经完全准备了。
介绍最佳实践之前可以先跟大家分享一下挑战,其实这个挑战在前面讲为什么需要DevSecOps时有提到,对于金融行业或者在金融行业做IT的人来说有三个地方是最麻烦的:流程,信息安全,人和文化。
- 流程是最难解决的问题。
- 开发可能压根没有接触过信息安全的知识,包括现在市面上的工具成熟度也没有那么高,所以信息安全也是一个很大的挑战。
- 我们玩DevOps的目的是为了快速把代码放到生产环境中去,为了快可能就不管安全了。中间经过两年的培训,大家至少知道安全对于团队和银行来说是多么重要的东西,但是也可能很多人会觉得DevSecOps会不会增加工作量,你把我的问题可视化出来了,传统安全团队会觉得开发团队在抢他们的饭碗了,这也牵扯到角色转换的问题。
对照三个挑战我们总结了四个最佳实践:人文改变、流程优化、技术转型、安全左移。
- 自动化一切。能自动化的就自动化,把生产环境监控住,开分享会给大家建立意识,包括后期会有安全专家。
- 流程和角色转换。传统的安全团队提供工具、培训的机会,而不是等后期再去帮我做漏洞扫描。包括员工和员工之间,老板和老板之间,老的流程已经不适合现在新的模式了,我们都要去转变。DevSecOps的最终目标是引入一套框架,解决DevOps现在追求的持续快速交付和传统信息安全之间的矛盾。把开发团队、运维团队、安全团队把所有人串在一起,相互之间密切的合作。
- 安全左移。左移是把代码在CI/CD阶段尽快发现漏洞,包括团队怎样自适应、自治,不需要安全团队在后面推着你前进。Data端要有数据,数据是永远不会造假的。
最后谈谈我的个人感想。我们现在还处于新冠防疫时期,其实我觉得场景目标和DevSecOps是一样的,也可以分为三个阶段: - 第一阶段,爆发疫情时,大家可能都不知道这是什么东西。就像最早依赖于信息安全团队的时候,开发不知道系统有没有漏洞,整个东西都是看不见的。
- 第二阶段,有一些数据和管控措施出来,引入一些工具,慢慢培训和推广文化。
- 第三阶段,打疫苗,最终目标是实现全体免疫,DevSecOps的最终目标是实现整个系统或集团的自我免疫能力。当然自我免疫也不是一劳永逸,我们要不停转换不断革新。(转自王黎明)
|