速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

小米集团的 DevSecOps 实践

  • 2020-12-01
  • 本文字数:3637 字

    阅读完需:约 12 分钟

小米集团的DevSecOps实践

多年来,软件开发以及其引发的软件安全问题总是相生相伴。最近几年,国内有越来越多的软件开发团队和企业开始践行 DevOps 的研发模式。随着 DevOps 的发展,研发安全保障的思维和技术也在不断演化发展,其中一个重要的思想就是 DevSecOps。什么是 DevSecOps?它的价值是什么?DevSecOps 怎样在企业落地?......针对这些问题,InfoQ 记者采访了小米集团信息安全与隐私部负责人王书魁。


据悉,王书魁有 13 年的安全从业经验,于 2016 年加入小米集团,一直都在参与小米集团整个安全体系的建立。


“人人为安全负责”的 DevSecOps 理念


众所周知,在传统的安全流程中,开发团队负责价值交付,运维团队负责可用性保障,安全团队负责安全保障。但是,这个流程存在一些问题:安全人员与研发人员是割裂的、相互独立的,有时甚至是相互对立和冲突的。


王书魁说:“很多时候,业务会觉得安全在找业务的麻烦,安全觉得业务对安全不重视,安全与业务大部分时间在扯皮,这导致安全风险的闭环管理时间周期长、成本高。“


并且,随着业务容器技术、无服务器技术的发展,业务的研发周期和功能迭代频率越来越快,而安全能力的滞后性则越来越明显。


他认为,企业需要一开始就考虑应用和基础架构的安全性,同时在安全上做到最大程度的左移,以及通过合适的工具来实现安全自动化,将业务研发资源、运维资源做到和安全能力的融合。


DevSecOps 作为 DevOps 的延伸,在保证企业高效研发效能的前提下,将安全引入进来,作为整个企业所有成员的责任,贯穿到整个业务生命周期中。它改变了传统安全是安全团队职责的现状,践行“人人为安全负责”的理念来建立整个安全体系。


在王书魁看来,安全的宗旨始终为业务服务,帮助业务变得更安全。


在 DevOps 中,安全无法很好地融入进去,它会被边缘化,甚至阻碍业务的发展,降低业务安全性。而 DevSecOps 则进一步加强研发、运维、安全之间的沟通交流,加上整合高自动化的工具,将安全工作融入到研发体系内,把安全属性嵌入到整条流水线,以此在保证业务快速发展的同时保障其安全性。


DevSecOps 的目标是解决业务、安全、运维之间的冲突和矛盾,让大家意识到安全是每个人的责任。并且,通过安全左移、安全自动化能力,将安全融入到业务的每个环节中,让安全成为业务的一个重要属性。


据他介绍,DevSecOps 有三个最重要的因素:人、流程、技术。人是一切问题的根本,也是所有工作的起点,同时也是最难的因素,人是有自私性的。在研发流程中增加安全因素,隐形地提高了研发成本。研发不单要考虑功能的正常,还要保证安全性编码不存在安全问题,同样针对运维人员也是如此。


在制度流程方面,业务版本控制、CI/CD、服务器运维流程等已经形成,这都需要对现有的流程制度进行改变,增强不同团队的协作。“在人员因素和流程制度都没问题的前提下,技术来保证 DevSecOps 的具体实现,构建更安全的工具链,实现安全自动化、流程闭环化等。”


SDL 和 DevSecOps


在传统基于瀑布和敏捷开发的研发模式下,诞生了很多软件安全开发的管理理论方法,比如 BSIMM、SAMM 等。其中,一个行之有效且大量被 IT/互联网行业使用的最佳安全实践是安全开发生命周期,即 SDL,英文全称为 Security Development Lifecycle。



微软 SDL 安全活动简图

但是,虽然企业采用传统的 SDL 方式管控多年,但是入侵和数据泄露依然层出不穷。


在王书魁看来,SDL 需要贯穿整个研发流程,从需求分析、设计、编码、测试、维护等每个环节都需要安全人员的参与,对安全有高依赖性。企业想要做好 SDL,不仅要在安全上有较大的投入,而且需要企业的安全团队有一定的规模和实力。这些也最终决定企业 SDL 的成熟度。


在传统基于瀑布模型的开发体系中,SDL 比较适用;当企业变成敏捷模型时,尤其是 DevOps,整个研发过程会很灵活,研发效能得到极大提升。这个时候,SDL 如果不能很好地做出改变,就会影响效率,甚至导致安全风险增加,阻碍业务的发展。


某种意义上,SDL 本质上是减少企业中安全风险的一种手段,它自身并不能杜绝漏洞的产生,加上企业对 SDL 的理解各有不同,因此在企业的落地也会千差万别,导致企业的安全能力参差不齐。所以,SDL 并不能解决企业的所有安全风险。


相比 SDL 的瀑布模型,DevSecOps 更偏向敏捷模型,业务不再是开发完成后进行安全测试,研发、测试和部署是同时进行。在 DevSecOps 中,责任不再是安全团队兜底,安全成为每个人的责任,安全柔性嵌入到开发及运维流程中,安全自动化能力的提升解决了人员成本过高的问题,人更趋向于运营方面,处理反馈流程中遇到的问题。此外,DevSecOps 更适用于周期短、迭代快的互联网业务。


小米集团的 DevSecOps 实践过程


2012 年,小米安全团队成立之初,就参考 SDL 的方法来建立自己的安全体系。随着业务的不断发展,原有的 SDL 已经无法满足安全以及业务团队的需求。而小米安全团队也开始研发和沉淀各类自动化安全系统。


王书魁表示,“在整个安全演变过程中,我们已经具备一定的 DevSecOps 雏形,只是最开始并不清楚这就是 DevSecOps 的一部分。”


在尝试 DevSecOps 前,小米的安全体系面临不少挑战:业务发展循序,安全人员人手不足,安全人员大量时间处于救火状态,疲于应付业务的安全漏洞、处理业务中发现的安全问题。


2018 年,小米正式以 DevSecOps 为指导原则对安全体系进行升级。一方面,他们想解决安全人员人手不足,并改变业务与安全对立的局面;另一方面,通过 DevSecOps 推动内部资产的梳理和统一业务的研发标准以及上线部署流程。



DevSecOps 的实施前期,他们重点提高自动化的能力,包括资源发现和管理、入侵检测和对抗,同时不断优化安全流程制度。


资源发现和管理上,将运维资源与安全扫描打通,做到新资产的监控和扫描、所有资产做到 7x24 小时的全自动扫描,同步对相关运维日志进行监控,提升感知能力。


安全流程上,建立安全 BP 制度,安全 BP 将新业务上线安全评估测试纳入到对业务的安全考核中,强制业务在方案设计、业务研发过程中遵循安全标准进行,通过安全培训、安全意识宣传贯彻等多个方式让业务意识到安全是每个人的责任。安全在业务中介入越早,它对业务的侵入性越低,逐渐改变业务和安全对立的局面。


在工具上,小米大部分 DevSecOps 工具是通过自研完成的。王书魁说:“其好处是能更好地和业务、运维系统进行融合,能更大程度上完成自动化能力建设。好的 DevSecOps 工具应该能很大程度上实现安全的自动化能力,对业务的侵入性小。在功能上,它需要具备数据的分析展示能力,可以更好地为安全运营人员提供重要核心的数据支持。在安全检测方面,安全问题的误报要低,规则可定制化。”


在组织上,小米很早就成立了集团层面的安全与隐私委员会,并由小米集团副总裁崔宝秋担任委员会主席,小米首席安全官、云平台总经理陈洋担任副主席,由上至下推动安全体系的建设。据他介绍,针对每个业务部门的安全,安全部都有相应的安全 BP 进行对接,实施和开展具体的安全工作。业务部门有专门的安全工作组成员与安全部门对接。


DevSecOps 的落地过程中,他们面临的最大挑战是人的问题。实际上,DevSecOps 需要“人人为安全负责”,王书魁坦承,“针对这一变化,不是所有人都能接受。有的人会理所当然的认为,安全就是安全团队的责任。”


如何解决这个问题?他们的做法是:


  • 通过组织层面成立安全 BP 工作组,来强化安全团队和业务团队的沟通。基于安全 BP,让安全更加深入到业务中,更了解业务的流程和制定对应的安全方案,让业务真正感受到安全在帮助业务;

  • 在指标和考核上,他们会关注漏洞按时修复率。为不同风险等级漏洞定义不同的修复周期,当漏洞出现需要对应工程师在修复周期内完成修复,而不是用漏洞数量等指标来考核,希望能够和业务站在一起,有助于提升安全意识和能力;

  • 在安全意识宣传和安全培训方面,他们也做了很多工作,不仅有面向全体员工的基础培训,而且还有针对不同业务或不同角色的专项培训;

  • 在技术上,他们为业务提供了多种自动化的系统或工具、安全 SDK,还会和业务的流程结合起来,让安全融入到业务流程中,同时避免人工过度参与阻碍业务流程;


强调责任共担。无论在任何时候,安全都不是业务的对立面。所有的安全风险,安全始终和业务团队站在一起,共同解决。


王书魁说:“通过上述一系列的工作,让每个人对安全都有新的认识,让他们意识到安全需要每个工程师的参与。”


事实上,DevSecOps 在小米集团的落地,不仅让安全工作变得容易开展,业务对安全的重视程度也不断提高,业务和安全不再是对立的,而是相互合作。并且,安全不再处于救火的状态,安全问题可以得到更早发现。最后,由于安全的左移,业务的安全性得到很大程度的提高,业务不再需要更改最初的设计架构来修复安全问题,业务修复漏洞的周期变短。


目前,小米集团在 DevSecOps 领域正在做一些新尝试。


DevSecOps 实践中,不仅涉及技术人员,而且还需要很多非技术人员的参与,“需要将大家的优势转化成一个整体,非技术人员要具备很好的事件运营思维,而这是技术人员所欠缺的“。


他们正尝试融合技术和非技术安全人员的能力,推动整个体系建设的闭环,并且尝试将 DevSecOps 体系中的能力数据化客观展示,从而反映整个 DevSecOps 体系的状况。


2020-12-01 10:0511566
用户头像
万佳 前InfoQ编辑

发布了 677 篇内容, 共 359.0 次阅读, 收获喜欢 1800 次。

关注

评论 1 条评论

发布
用户头像
明年是安全的大年. 信我!
2020-12-07 14:01
回复
没有更多了
发现更多内容

Redis的各种用途以及使用场景(1)

Java 程序员 后端

Redis的各种用途以及使用场景

Java 程序员 后端

RocketMQ 主从同步读写分离机制

Java 程序员 后端

redis之单机多节点集群

Java 程序员 后端

RocketMQ 千锤百炼--哈啰在分布式消息治理和微服务治理中的实践

Java 程序员 后端

Redis哨兵模式原理剖析,监控、选主、通知客户端你真的懂了吗?

Java 程序员 后端

redis数据迁移之redis-shake

Java 程序员 后端

RocketMQ消息轨迹-设计篇

Java 程序员 后端

【Flutter 专题】12 图解圆形与权重/比例小尝试

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 11月日更

macOS 环境安装Flutter

坚果

flutter 11月日更 安装部署

Redis常用命令总结

Java 程序员 后端

Redis(十一):键的生存时间与过期时间

Java 程序员 后端

Redis实现feed流

Java 程序员 后端

Redis小白入门教程

Java 程序员 后端

Redis(四):整数集合

Java 程序员 后端

Redis(十八):服务器

Java 程序员 后端

RocketMQ一行代码造成大量消息发送失败

Java 程序员 后端

RocketMQ源码分析之NameServer

Java 程序员 后端

Spring @Lookup实现单例bean依赖注入原型bean

Java 程序员 后端

Redis实现feed流(1)

Java 程序员 后端

Redis持久化方式AOF技术原理?一文带你从底层彻底吃透

Java 程序员 后端

Redis(二十六):Sentinel—

Java 程序员 后端

RocketMQ msgId与offsetMsgId释疑(实战篇)

Java 程序员 后端

SAP为Java 16贡献JEP 387 “弹性元空间”

Java 程序员 后端

Servlet 入门

Java 程序员 后端

Redis哨兵原理,我忍你很久了!

Java 程序员 后端

Redis(十六):事件

Java 程序员 后端

RocketMQ消息丢失场景及解决办法(1)

Java 程序员 后端

RocketMQ消息丢失场景及解决办法

Java 程序员 后端

Serverless 如何在阿里巴巴实现规模化落地?

Java 程序员 后端

Redis安装与部署新手入门教程

Java 程序员 后端

小米集团的DevSecOps实践_安全_万佳_InfoQ精选文章