写点什么

小米集团的 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:0511600
用户头像
万佳 前InfoQ编辑

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

关注

评论 1 条评论

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

慌了?ChatGPT吃我的饭,还要掀我碗

引迈信息

AI 低代码 ChatGPT JNPF

一文读懂域名注册

火山引擎边缘云

证书 域名 域名服务器

zookeeper的节点加密方式及分布式锁实现过程

浅羽技术

三周年连更

程序员如何保住自己的饭碗?| 社区征文

liuzhen007

程序员 三周年征文

ContentProvider介绍

芯动大师

ContextClassLoader 三周年连更

云原生时代全链路观测体系构建

嘉为蓝鲸

一文读懂Annotation

老周聊架构

三周年连更

对话ChatGPT:Prompt是普通人“魔法”吗?

Alter

RabbitMQ组件介绍

穿过生命散发芬芳

RabbitMQ 三周年连更

加速文件传输协议如何工作

镭速

一文读懂封装

断墨寻径

#java 三周年征文

【坚果派-坚果】获取OpenHarmony 3.2 Release源码的两种方式

坚果

HarmonyOS OpenHarmony OpenHarmony3.2 三周年连更

vue3 +ts 如何安装封装axios

肥晨

Vue3 三周年连更

Go语言开发小技巧&易错点100例(三)

闫同学

Go 三周年连更

盘点 8 款好用的 API 接口文档管理工具

Liam

程序员 接口文档 API 接口规范 接口编写

一文掌握 Go 文件的读取操作

陈明勇

Go golang 文件读取 三周年连更

影驰 GeForce RTX 4070显卡正式开售!星曜 OC系列首发评测抢先看

Geek_2d6073

论程序员的为码之“道”

酱紫的小白兔

MobTech ShareSDK|如何从分享到回流

MobTech袤博科技

全球首个完全开源的指令跟随大模型;T5到GPT-4最全盘点

OneFlow

C生万物 | 反汇编深挖【函数栈帧】的创建和销毁

Fire_Shield

C语言 汇编 三周年连更 函数栈帧

kubernetes indexer源码解析

欢乐的阿苏

golang DevOps cache 源码阅读 #Kubernetes#

5 分钟带你小程序入门 [实战总结分享]

程序员海军

小程序 微信小程序 前端 三周年连更

不要过于吹捧ChatGPT:人工智能生成文字还有很大提升空间

石头IT视角

DevOps系列之 —— 持续规划与设计(三)敏捷项目管理的方法【Kanban 与 Scrum】

若尘

DevOps #DevOps 三周年连更

HuggingGPT 强势来袭,LLM+ 专家模型,迈向更通用的AI

Zilliz

Zilliz Towhee ChatGPT LLM huggingface

达观助手AI写作下载安装教程及特色功能详解,速速收藏体验!

NLP资深玩家

devops|中小公司不要做研发效能度量

laofo

DevOps 研发效能 效能度量 DevOps工具链 研发效能度量

车企外卷:一个关于智能手机的“围城故事”

脑极体

手机 车企

危中蕴机:Oi! Network展现出的勇气和决心

股市老人

Unity 之 转微信小游戏本地数据存储

陈言必行

Unity 三周年连更

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