前言
多年来,业务及产品出现的安全问题越来越多。怎样最大程度在前期解决业务遇到的安全问题,降低业务修复安全问题的修复成本,是业务研发及安全人员共同遇到的问题。互联网业务的敏捷性导致不能以传统的安全卡点方式要求业务完成安全标准才能进行下一步动作。
国内很多公司和企业都开始践行 DevOps 的研发模式,随着 DevOps 的发展,研发安全保障的思维和技术也在不断演化发展,其中一个重要的思想就是 DevSecOps。什么是 DevSecOps?它的价值是什么?DevSecOps 怎样在企业落地?企业的安全运营工作怎样基于DevSecOps理念来做呢?
安全运营&DevSecOps
安全运营
安全运营的核心在于解决问题、优化项目,通过提出安全解决构想、验证效果、分析问题、诊断问题、协调资源解决问题并持续迭代优化,推动整体安全目标的实现。
DevSecOps
在传统基于瀑布和敏捷开发的研发模式下,诞生了很多软件安全开发的管理理论方法,比如 BSIMM、SAMM 等。其中,一个行之有效且大量被 IT/互联网行业使用的最佳安全实践是安全开发生命周期,即 SDL,英文全称为 Security Development Lifecycle。
SDL 需要贯穿整个研发流程,从需求分析、设计、编码、测试、维护等每个环节都需要安全人员的参与,对安全有高依赖性。企业想要做好 SDL,不仅要在安全上有较大的投入,而且需要企业的安全团队有一定的规模和实力,这些也最终决定企业 SDL 的成熟度。
在传统基于瀑布模型的开发体系中,SDL 比较适用。当企业变成敏捷模型时,尤其是 DevOps,整个研发过程会很灵活,研发效能得到极大提升。这个时候,SDL 如果不能很好地做出改变,就会影响效率,甚至导致安全风险增加,阻碍业务的发展。
相比 SDL 的瀑布模型,DevSecOps 更偏向敏捷模型,不再是业务开发完成后进行安全测试,研发、测试和部署同时进行。在 DevSecOps 中,责任不再是安全团队兜底,安全成为每个人的责任,安全柔性嵌入到开发及运维流程中,安全自动化能力的提升解决了人员成本过高的问题,人更趋向于安全运营方面,处理流程中遇到的问题。此外,DevSecOps 更适用于周期短、迭代快的互联网业务。
将传统的网络安全框架与devops结合到一起,形成我们小米自有的devsecops框架体系,在该框架体系基础上结合安全运营理念,来进行安全运营工作的落地与实施。
安全运营与DevSecOps
DevSecOps主要是将安全的理念通过自动化的方式接入到业务上线流程中,过程中不单单使用到安全工具的开发,还需要考虑怎样与业务结合得更紧密,怎样让业务使用起来更加透明和便利。并且DevOps框架中也存在不同的阶段,每个阶段需要安全怎样接入、需要安全提供什么能力、接入后产生的数据怎样处理、后续怎样优化使得工具更加完美,这些都需要人进行运营。将安全运营与DevSecOps理念贯穿到一起,可以更好地对业务进行安全支持,也能对安全起到促进优化作用。
小米安全运营实践
背景
安全团队和业务的对立问题由来已久,很多时候,业务会觉得安全团队在找业务麻烦,安全团队觉得业务对安全不重视,安全团队与业务大部分时间在扯皮,这导致安全风险的闭环管理时间周期长、成本高。
在传统的安全流程中,开发团队负责价值交付,运维团队负责可用性保障,安全团队负责安全保障。但是,这个流程存在一些问题:安全人员与研发人员是割裂的、相互独立的,有时甚至是相互对立和冲突的。
随着业务容器技术、无服务器技术的发展,业务的研发周期和功能迭代频率越来越快,而安全能力的滞后性则越来越明显。企业需要一开始就考虑应用和基础架构的安全性,同时在安全上做到最大程度的左移,需要通过合适的工具来实现安全自动化,将业务研发资源、运维资源做到和安全能力的融合。
2012 年,小米安全团队成立之初,就参考 SDL 的方法来建立自己的安全体系。随着业务的不断发展,原有的 SDL 已经无法满足安全以及业务团队的需求。而小米安全团队也开始研发和沉淀各类自动化安全系统。由于小米安全团队的人员相对业务体量来说还是比较少的,这时候我们已经开始考虑自动化的安全接入及规范流程相关的制定,现在看来已经有了devsecops框架的雏形,只是当时没有意识到。
理论
DevOps 中,安全无法很好地融入进去,它会被边缘化,甚至阻碍业务的发展,降低业务安全性。
DevSecOps 作为 DevOps 的延伸,在保证企业高效研发效能的前提下,将安全引入进来,作为整个企业所有成员的责任,贯穿到整个业务生命周期中。它改变了传统安全是安全团队职责的现状,践行“人人为安全负责”的理念来建立整个安全体系。进一步加强研发、运维、安全之间的沟通交流,将安全工作融入到研发体系内,把安全属性嵌入到整条流水线,以此在保证业务快速发展的同时保障其安全性。
在尝试 DevSecOps 前,小米的安全体系面临不少挑战:业务发展循序,安全人员人手不足,安全人员大量时间处于救火状态,疲于应付业务的安全漏洞、处理业务中发现的安全问题。
2018 年,小米正式以 DevSecOps 为指导原则对安全体系进行升级。一方面,他们想解决安全人员人手不足,并改变业务与安全对立的局面;另一方面,通过 DevSecOps 推动内部资产的梳理和统一业务的研发标准以及上线部署流程。
DevSecOps 的目标是解决业务、安全、运维之间的冲突和矛盾,让大家意识到安全是每个人的责任。并且,通过安全左移、安全自动化能力,将安全融入到业务的每个环节中,让安全成为业务的一个重要属性。
安全的宗旨始终为业务服务,帮助业务变得更安全。
实践
先展示下小米基于DevSecops框架下的安全运营体系:
总体来说分为三个能力进行建设:安全风险发现能力、安全防御与管控能力、安全运营能力。
下面将对三部分分别介绍小米是怎样进行实践和落地的。
(1)安全风险发现能力
首先看下这部分的内容介绍,如下图所示,主要是包括了从业务的立项到业务的交付过程。
首先在创建阶段,是对业务安全问题修复成本最低的时期,在这方面的能力建设主要集中在制定一些安全规范及也流程、对业务提供安全的sdk及风险检测插件等。
在业务编写代码阶段,重点介绍下小米安全开发的CodeAutoFix,现在已经支持市面上常见的IDE开发环境及主流语言的安全检测能力。
在业务开发完成后提交仓库过程中,会触发CICD流程,小米安全将安全能力集成到里面,业务仅仅只需要修改yml配置文件就可以对代码进行安全扫描,其中包括使用到的组件、编写的代码安全检测能力。在移动app端和iot端,也相应的有检测工具,业务只要把编译好的固件、app包上传上去即可完成安全检测。
业务进入预环境下,申请了新的IP、域名,将直接在skyeye黑盒扫描平台下监控到,并直接进行漏洞扫描。
发布后、skyeye黑盒扫描平台持续进行扫描监控,有新的漏洞爆出也会及时形成POC添加进去对全资产进行漏洞扫描。
整个过程依赖小米的DevOps及业务的CICD流程,将安全能力集成到整个业务的上线体系中,常见安全风险交给自动化系统去做,人员将更多的精力放在更重要的事情上面,例如小米的红蓝对抗,蓝军通过模拟黑客的方式对业务进行进攻,发现隐藏在业务底层的安全风险,发现自动化无法覆盖到的安全风险。
这样依据自动化+人工的方式更多的发现业务中存在的风险问题。
(2)安全防御能力建设
首先总体概括防御的框架:
大家第一反应可能觉得这个建设能力方面比较单一,这个简约但是不简单,每一项都是一个大工程。米盾安全代理和WAF是零信任体系建设中的一环,待业务进行域名接入时候,接入安全代理,可以直接集成业务的认证和鉴权,保护业务的认证安全。HIDS是对服务器的防护,是入侵检测能力,在业务被反弹shell和系统层面漏洞批量扫描时起到了重要的作用。
监控方面,除了对全资产的周期检查,主要针对新增资产的监控,和上面一样,这块主要面向管控,在发现新增TOB业务系统上线却没有接入安全代理时及时要求接入,保护业务安全安全。对预警信息的监控,可以第一时间给扫描器及WAF提供信息,及时补充对应的规则。
业务风控中台主要是对风控能力的建设,风控数据、策略判断都在该平台进行,主要针对业务安全:账号安全、防黄牛,防刷等等。
(3)安全运营能力建设
总体分为两个运营方向:内部运营、外部运营。
内部运营主要是将内部所有能力串起来,像前面提到的,有了新的漏洞预警需要增加扫描器及WAF规则、有了漏洞需要查漏补缺,完善风险发现及防御能力建设中的不足之处,同时还担任着安全培训、安全流程及规范推动等内容,可以划分为闭环能力建设阶段。
内部运营还有个最重要的建设——数据化建设阶段,这么多的数据、这么多的工作需要数据化的支撑,没有数据化展示,就不能直观的发现体系中的不足,就不能给业务一个直观的业务安全风险感知。安全管理中心——SOC平台将所有业务数据化,给业务提供一个安全数据大屏,这样业务部门就能知道现在自身处于什么样的安全风险水平。
外部运营主要是针对SRC、H1(国内外漏洞提交平台)的运营工作,主要是吸收更多的外界安全人员参与到小米的安全建设中来,以外部视角去审视小米安全,过程中会通过举办安全活动、安全交流加强外部安全人员的粘性。当然业务有需求也可以在平台上发起专项测试,由外部人员来对业务进行风险发现。
总结与思考
-
DevSecOps和SDL只是一个方法指导,具体实施还是需要依赖于自己公司的业务情况。
-
整个体系流程的建设按不同的模块分别划分出来,这样才能保证每个模板都有人进行负责跟进,同时该模块负责人需要了解其他能力建设,才能对于分模块的计划和发展有更深的认识。
-
安全运营的理解每个公司各有不同,但是运营理念是一致的、不可或缺的,不管是技术人员还是非技术人员,我本人的理解是安全运营需要把非技术和技术融合到一起,互相考核、互相促进的。
-
安全需要自上而下,对于流程的推进,部门间的合作,尤其是对业务的上线流程需要卡点、增加流程等都需要有上层的大力支持。
-
业务和安全总体来说还是对立的,安全需要和业务发展平衡好,需要让业务意识到安全是业务的一个属性,才能互相促进。
-
DevSecOps框架相对于SDL来说更加适合互联网业务的发展趋势,安全人员不能仅仅局限在自己的技术方面,不应该仅仅只看到漏洞风险,对业务不了解,对运营不理解,运营没了技术没有根基,技术没了运营没有发展。
-
业务也应该意识到安全不是给业务找麻烦的,我们的目标是一致的,都是为了业务的安全发展,应该意识到安全不应只是安全部门的事情,人人都应该为业务安全负责。
声明:本文来自小米安全中心,版权归作者所有。文章内容仅代表作者独立观点,不代表士冗科技立场,转载目的在于传递更多信息。如有侵权,请联系 service@expshell.com。