近些年DevSecOps的推广不断深入、很多大厂也在推进或已经完成这类标准化的升级。
本人在实施过程中,读了很多文章、看了很多乙方厂商的实施方案,最终准备以自己的角度来将一下DevSecOps。
希望可以对广大中小厂商或传统企业正在进行信息化建设的安全从业者们有一点小小的帮助。
首先我们来了解一下DevSecOps实施的目的以及会面临的问题。
DevSecOps实施的主要目的是安全问题左移,将大部分安全问题消灭于系统构建的雏形中。而左移带来的很大问题是,安全环节要穿插于系统设计、开发阶段。而这就意味着,我们需要让产品、开发、架构等角色零距离面对安全问题,而很多非互联网企业的问题是,业务最大,如果一定要强行推进实施的话,效果基本不会很理想。所以在这个过程中,我们需要做的不是让他们去学会这些知识,我们只需要让他们无感知的经过这个流程,拿到修改建议,干就完事儿了。
那么,另一个问题出现了,需要问题左移,又需要无感知,那就只能自动化了,所以,这就是DevSecOps了。
在我翻阅了无数DevSecOps的最佳实践、实施方案之后,发现一个问题,堆设备,但很多文章都没有给一个具体的实施场景和流程。
于是,这张图就出现了:
需求设计
对于大多数企业来讲,需求设计需要一个Demo,需要一个架构,把架构、产品、开发、测试拉在一起,碰一下头,设计一下数据结构,提几个问题,基本就可以确定开发方案了,所以如果我们也需要简单一点,威胁建模。
目前市面上的威胁建模工具有很多,开源的有 OWASP threat Dragon、Microsoft Threat modeling tool
商业版本的更多,具体就不发广告了,自己搜。
架构只需要将设计好的架构导入威胁建模工具,就可以拿到一份威胁报告,完善自己的架构。
研发
大多数研发人员都会使用代码托管平台来管理自己的代码更迭交付,有的公司会采用标准的CD/CI 模型,DevOps来管理代码,所以我们需要做的就是,加入他们,在没一个版本出现变化时,对系统代码进行扫描,怎么自动化Pull代码,自动化扫描就要靠安全人员来自己完成了。
而本阶段我们需要使用的工具就是、SCA、SAST以及安全编码规范了。
SCA和SAST相关的工具也不做赘述,而安全编码规范可以采用一些开源的SDK,亲测有效,敏感肌可以用。
而扫描完成后,安全团队拿到相关的报告,就可以根据其中国的扫描结果,删去误报,将准确的报告交给开发进行闭环。
测试
测试阶段相信各位就比较熟悉了,各种扫描一把梭。
而我们需要做的是不断自动化,减轻安全人员手工测试的比例,在功能测试人员进行测试的时候,将IAST的探针开启,DAST、MAST、各类扫描作为主要实施工具,安全人员更多的任务放在规则优化,业务逻辑上。
这个阶段会导出较多的漏洞,全部反馈给开发就可以。
预发布
相信大部分公司是没有预发布环境的,所以,这一阶段的任务可以放在生产环境开启的前夕,对于安全环境、用户隐私、上线风险、APP加固进行反复确认,这个部分的任务,算是系统上线前最后一道安检,所以我们选择以半自动化的方式,攻击检测,人工确认来完成。
用到的工具,安全环境会用到基线检查、端口扫描等工具;用户隐私会用到敏感信息监测的一些工具,对数据结构和数据处理做人工确认;上线风险是对由于业务优先而放弃修复的问题重新确认风险系数,确定弥补方案;App加固通过第三方的加固工具进行加壳处理。
最终在所有问题全部确认清晰后,批准上线。
运维
上线之后则是安全运维阶段,安全运维已经有很多成熟的防御和检测工具,这里重点将一下日志审计系统,日志审计系统一定是一个很重要的节点,不管是在时间溯源或者安全合规上,都是比较重要的。当防御系统被绕过后,我们最可以依赖的就是日志审计系统,对事件进行响应和处理。
这个阶段输出的产物是系统的轮询报告。
事件
接下来是对各类安全事件响应处理的部分,漏洞管理可以使用腾讯的开源Src平台,做一些定制化二次开发,其次就是补丁和组件升级的部分,建议以Puppet类似的系统来进行管理,在推送之前,做好升级测试,兼顾兼容性。
优化+分析
优化分析的部分,大多是靠系统的运行数据和相关的报告来进行优化,使我们的DevSecOps流程不断更新,不断适应业务系统,并提高安全性。