小米集团的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 体系的状况。

(0)

相关推荐