以下为周纪海在腾讯专场分享的演讲内容——
CODING
从 DevOps 到 DevSecOps 的落地实践
DevOps 简介,工具和平台
一般谈起 DevOps 自动化,都是先从工具来实现。工具横跨了开发周期,项目管理、CI/CD 等环节。在每一个环节里面都有比较经典的工具,很多工具大家也都用过。
而近几年,业界兴起了一站式平台,从端到端打造一整套工具,囊括项目管理、代码托管、自动化部署、自动化测试等,在其中某一环节可以加入质量卡点和质量门禁去保证质量。无论是华为、腾讯还是阿里近年来都陆续出现了一些产品,腾讯云旗下的 一站式 DevOps 平台,更集中在开发侧,涵盖了从项目管理一直到最后代码交付上线等环节。腾讯的这套自动化工具平台,通过对外输出帮助客户解决痛点,可以在整个环节,例如构建、规范制定等环节解决客户的问题。腾讯有相关的公有云和私有云方面的产品,帮助客户在整个研发流程上进行实现。
DevSecOps 简介,挑战和工具
DevSecOps 的概念很早之前就有,以前被称为 DevOpsSec,16 年有一本书名叫“DataOPsSec”,为什么会从 DataOPsSec 变成 DevSecOps 呢?有两种说法,一种说法是 DataOPsSec 的缩写是 DOS,这就有了重名,为了避免单词的重复就改了名字;另外一种说法是 DataOPsSec 还是传统模式的顺序,开发、测试、运维,最后在上线之前做信息安全。然而信息安全应该横跨整个流程,嵌入到每一个环节当中,因此变成了 DevSecOps。
那么为什么需要 DevSecOps?DevOps 已经做好了,速度很快,质量很好,信息安全的作用是什么?下图就说明了为什么需要 DevSecOps。传统模式下,从需求开始到整个开发测试需要 3 周的时间,上线之前,信息安全部门介入进行安全评估,这可能需要 1 周时间。而通过 DevOps,我们把前面进行压缩,比如说通过自动化、微服务、敏捷等手段把协作做得更好,效率提高,变成了 1 周。但是因为传统的 DevOps 没有考虑信息安全,在上线之前还是要进行安全的评估扫描,这个时间并没有缩短。DevSecOps 通过在 DevOps 流程的每个阶段或检查点构建安全性来消除 DevOps 和信息安全之间的障碍,从而更快、更安全地生成高质量的代码。
DevSecOps 的好处有很多,以下概括 3 点:
- 更快发布。通过压缩时间达到更快发布的目的。
- 控制风险。在过去开发团队或者测试团队依赖于信息安全团队来进行评分扫描,保证没有安全漏洞,通过 DevSecOps 把安全进行左移,可以让程序员自己来控制安全问题。
- 节省成本。如果在上线之前进行安全扫描,尤其是发现高危漏洞,肯定是打回去让程序员修漏洞,修好以后再走整个流程,如果出现问题还要再返回和再修,这是非常浪费时间和浪费人力成本的一个过程。如果在开发和测试阶段就把安全问题进行发现和解决,成本就会大幅度减少。
目前有一个 DevSecOps 社区每年都会发布 DevSecOps 报告,报告显示很多人都觉得信息安全很重要,但是连续三年仍然有接近一半的开发者承认他们没有时间去处理安全问题。再次验证了多数人对于安全层面仍然是知识口头层面的重视。同时,社区也给了参考,100 个开发人员对应了 10 个运维人员,对应 1 个信息安全的人员,信息安全方面的人才依旧很稀缺。
实现 DevSecOps 的挑战,我们在推进的过程中发现有多方面的阻力。
- 技术上的阻力。DevSecOps 是一个新的概念,在市面上能选择的工具不是特别多。腾讯内部很多是自研产品,我们觉得在市面上已有的工具多少都有问题,不是特别的成熟。
- 人和文化。大家觉得信息安全不重要,包括我们当时推行的时候,很多程序员只在乎写代码,不愿意考虑信息安全。就算有意识的同学觉得要做信息安全,当扫描出漏洞的时候,也发现没有能力解决这个问题。
- 流程。并不是所有的高层都支持 DevSecOps,在推 DevOps 的过程中这个问题时常出现。在 2012 年刚刚开始推行 DevOps 的时候,知道 DevOps 的人不是特别多,从下而上推动 DevOps 是很痛苦的。更有效的是让老板从上而下推动,执行效率会更高一些。
在推动层面,一般会先推工具,因为工具会很快看到效果。安全工具大体分为以下 4 类:
- 静态应用安全工具(SAST)
SAST 是从代码层面进行扫描安全漏洞。它的好处是可以精准定位,发现具体某一行代码有漏洞,同时容易被程序员所接受。但是这种工具的缺点是误报率非常高。腾讯 PCG 曾经引入过市面上比较主流的静态扫描工具 Checkmarx,最高误报率达到了 70%。在这种情况下,势必会消耗大量的人力去验证。
- 动态应用安全工具(DAST)
DAST 更多的是通过模拟黑客对端口和站点进行攻击,尝试获取信息。这类工具的优点是扫描范围非常广,误报率不是特别高;缺点也非常明显,就像测试一样,需要人力去写相关代码去模拟黑客攻击,对运维同学的安全知识要求比较高,因为需要把场景模拟出来。同时,也容易产生一些脏数据。
- 交互式应用安全工具(IAST)
在应用里面插入 IAST,或者是通过代理截取流量,可以分析系统在运营过程中是不是有安全漏洞。优点是扫描精准、误报率低。缺点是在更新工具的同时,服务器需要重启。
- 开源软件安全工具(FOSS)
前 3 种安全工具更多的是对自己写的代码的保障,从端口层面保证自己开发的产品是安全的。然而不可避免的是在开发过程中会引入第三方的插件工具, FOSS 工具是为了保证别人写的代码的安全性。
从 DevOps 到 DevSecOps 的实践
接下来的内容是总结腾讯内部有哪些实践,或者帮助客户解决了哪些问题。
DevOps 工具都强调自动化,不能给开发运维同学有任何的负担;而做信息安全,不能因为做信息安全需要花更多的精力,而是希望通过自动化,扫描以后产生报告告诉你结果就可以。DevOps 模式下,安全和业务互相不理解,安全同学对业务不是特别的熟悉,业务觉得安全不是特别重要。如果不出事的话,大家会觉得信息安全离自己非常远,对安全意识也没有那么强。所以在工作当中,更多时候都要考虑如何提高大家的安全意识。
以下是在银行做 DevSecOps 的模型,其实也是业界通用的:
第一阶段:信息安全工具。将 DevSecOps 工具嵌入到 CI/CD 流水线中实现自动化安全漏洞扫描,生成并公开信息安全漏洞报表;
第二阶段:信心安全培训。很多同学要么没有这方面的意识,要么没有这方面的能力,更多需要通过培训把意识和能力提高起来。
第三阶段:信息安全意识和“专家”。团队需要建立信息安全意识和文化,培养开发团队中的“信息安全专家”。
目前腾讯内部自研了一些 DevSecOps 工具。SAST 层面,有代码层面的安全漏洞扫描工具 Xcheck,用于敏感信息扫描的啄木鸟;DAST/IAST 层面,自研的洞犀能够通过收集 CGI 和参数,模拟黑客行为对端口进行安全扫描;还有 FOSS 层面,荷鲁斯主要针对第三方开源的安全扫描,CODING 的制品/镜像安全扫描功能主要是针对第三方开源的安全扫描。
上图可以看到,针对于 CODING 这个产品,各类安全工具和规范在 DevOps 流程里的集成。
刚才说的是工具层面,具体解决问题还是要落地到人的层面。所以我们内部也会提供相关的安全培训,帮助同学们提高安全意识。腾讯内部经常有安全课程和活动;为客户提供 DevOps 解决方案时,对方在 DevSecOps 上也需要指导。比如,开发人员需要熟练掌握安全工具,即在扫描出安全漏洞后能够处理问题;高危安全漏洞必须要在上线前进行解决,中危漏洞可以协商在 1 个月内解决,低危安全漏洞作为一个技术负债,有空的时候再进行解决等等。
对 DevSecOps 未来的展望,基于我个人的理解和业界的讨论,主要分为两个方面。首先我个人认为安全会进一步的左移。比如在架构设计时就考虑安全。英国有一款工具,在工具里面设计架构图,通过制定一些安全规则来警告哪些架构图可能存在风险。第二点基于网上的讨论,认为 DevSecOps 离不开目前热门的 AI,是否能通过 AI 来解决 DevSecOps 的问题?是不是可以通过机器学习减少误报率?大家可以一起期待。
大会精彩瞬间
CODING CEO 张海龙接受专访
CODING 展位工作人员合影