最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

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

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

关注

评论 1 条评论

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

OpenHarmony技术挑战课题征集

OpenHarmony开发者

OpenHarmony

【Django | 开发】面试招聘信息网站(处理产品细节和权限&美化页面样式)

计算机魔术师

8月月更

【Django | 开发】面试招聘信息网站(划分面试官权限&集成钉钉消息)

计算机魔术师

8月月更

内网穿透是什么意思?有什么用?用什么软件好?

行云管家

运维 内网穿透 内网

技术分享 | 软件测试入门必会-流程管理平台

霍格沃兹测试开发学社

代码层走进“百万级”分布式ID设计

得物技术

数据库 缓存 分布式 性能优化 企业号九月金秋榜

软件测试 | 测试开发 | 接口自动化测试中如何对xml 格式做断言验证?

测吧(北京)科技有限公司

接口自动化测试

【Django | allauth】useprofile 用户模型扩展

计算机魔术师

8月月更

helm实战之开发Chart

程序员欣宸

Kubernetes Helm 8月月更

安全可信 | 首批!天翼云通过可信云安全云工作负载保护平台评估

天翼云开发者社区

加快云网融合发展,打通算力传输大动脉!

天翼云开发者社区

恭喜天翼云“翼起飞”战队在CCF国际AIOps挑战赛中夺得亚军!

天翼云开发者社区

【Django | allauth】重写allauth重置密码方法

计算机魔术师

8月月更

技术分享 | 一文带你了解测试流程的体系

霍格沃兹测试开发学社

“云”上交通,“翼”路畅行

天翼云开发者社区

多线程原理和常用方法以及Thread和Runnable的区别

共饮一杯无

多线程 8月月更

《低代码发展白皮书(2022年)》&《2022低代码·无代码应用案例汇编》,发布了

华为云开发者联盟

云计算 后端 低代码 开发

技术分享 | 做为测试,那些必须掌握的测试技术体系

霍格沃兹测试开发学社

【小程序项目开发-- 京东商城】uni-app之自定义搜索组件(下) -- 搜索历史

计算机魔术师

8月月更

【Django | 开发】面试招聘信息网站(快速搭建核心需求)

计算机魔术师

8月月更

汽车制造企业如何最大化数据资产价值?

Kyligence

数据分析 智能多维数据库

主机监控是什么意思?用什么软件好?咨询电话多少?

行云管家

运维 主机 主机监控

软件测试 | 测试开发 | 接口自动化测试之JSON Schema模式改如何使用?

测吧(北京)科技有限公司

JSON Schema

驭数有道,天翼云TeleDB系列产品全新升级

天翼云开发者社区

【Django | 开发】面试招聘网站(增加csv,excel导出&企业域账号集成&日志管理功能)

计算机魔术师

8月月更

leetcode 28. Implement strStr() 实现 strStr()(简单)

okokabcd

LeetCode 数据结构与算法

内容小程序化,是在线教育服务推广的最佳格式

Speedoooo

小程序 在线教育 移动开发 小程序容器

呆猫云工作站助力Omniverse云上部署试水元宇宙

神奇视野

教育信息化迈入2.0时代,呆猫云工作站破除技术壁垒

神奇视野

看完这篇你将get VR/AR沉浸式技术的“创作密码”,速来!

神奇视野

【Django | 开发】面试招聘信息网站(用户登录注册&投在线递简历)

计算机魔术师

8月月更

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