企业安全建设中,安全风险就像是蝴蝶效应,它虽然不会像多米诺骨牌一样瞬间将企业安全全盘推倒,但却会持续散发影响力。随着网络环境与攻击方式的复杂性,传统查缺补漏式的安全建设模式无法有效应对安全风险,单一、单点的安全防护更是非常滞后。

在此背景下,最佳的选择便是将安全贯穿于企业业务生命周期的每一个环节,从源头及时治理安全问题,真正走出企业安全建设的“囚徒困境”,这便是引入DevSecOps的原因。

DevSecOps作为安全领域中逐渐步入成熟期的技术体系,从最初的理念到如今少量的成功实践案例,中间经历了大量的探索与发展。如今,很多企业已经意识到DevSecOps的重要性并想要有所实践,但仍然面临大量挑战。

banner

本次FreeBuf咨询邀请国内DevSecOps实践先行者某金融机构、携程、腾讯等分别从DevSecOps工具链及企业落地实践等方面研究探讨,共同推出一份DevSecOps企业实践报告,为企业CSO提供安全建设的有效参考。内容亮点如下:

一、DevSecOps 发展现状

DevSecOps最早由Gartner咨询公司研究员David Cearley在2012年首次提出。2016年9月,Gartner发布报告《DevSecOps: How to Seamlessly Integrate Security into DevOps》,对该模型及配套解决方案进行详细分析,核心理念为:“安全是整个IT团队(包括开发、测试、运维及安全团队)所有成员的责任,需要贯穿整个业务生命周期的每一个环节。

根据GitLab近期发起的第四次年度全球DevSecOps年度调查,超过25%的开发人员表示对安全性完全负责,而33%的安全团队成员表示他们拥有安全性。共有29%的人认为每个人都应对安全负责。

报告情况

可以看到,DevSecOps逐渐深入人心。虽然国内的DevSecOps落地仍然处于发展阶段,但很多国内企业已经意识到DevSecOps的重要性。随着DevOps的深度实践,工作流程越来越规范、工具和应用场景也越来越丰富。在此趋势下,国内陆续涌现出了一批专注DevSecOps的创新安全厂商,通用技术方案被越来越多的行业头部用户所采纳。

此外,DevSecOps的合规和治理也在国内持续推动中,关键标志之一就是全球首个DevOps标准的发布——《研发运营一体化(DevOps)能力成熟度模型》。其中第六部分《安全及风险管理》对DevOps全链路中开发、交付、运营等过程的安全风险控制进行规范要求,为企业安全风险管控手段和能力提升提供有效引导,帮助企业更好的落地实践DevSecOps。

二、企业DevSecOps 落地之初的挑战

由于DevSecOps还没有通用化的标准或实践指南,并没有很多成熟经验可以借鉴,企业在落地之初主要遇到的挑战如下:

1、安全人才短缺

根据《中国DevOps现状调查报告(2019年)》,有65.02%的企业仍未建立专业安全团队。

报告情况
图 《中国DevOps现状调查报告(2019年)》-专业安全团队比例低

大多数企业仍处于“一个人的安全部”的现状,日常工作主要承担防火墙、安全监测、补丁管理、病毒管理等较传统的网络安全工作。近年随着安全越来越被重视,企业开始成立独立的安全团队,然而大部分仅仅是IT人员的扩张,专业的安全人员比例却在降低。缺乏专业的安全人员,便可能导致和研发沟通不畅,因而影响安全和DevOps嵌入的效率。

2、文化的挑战

安全通常是作为独立组织存在,且与研发和运营分开。此外,在IT人员的概念中,安全往往会增加IT人员额外的工作量,拖累项目的进度甚至延期,因而IT人员与安全往往站在对立面。同时研发人员和运营人员大都不懂安全。由此造成的文化与意识壁垒,一时间很难打破。

3、安全知识和技能薄弱

DevSecOps需要研发、运维及安全人员协作,共同承担安全职责,可站在对方的视角看待问题。但是对于研发和运维人员来说,往往缺少安全意识及技能,在系统设计开发及部署运维等环节,无法高效协同保障安全性。

4、安全与研发流程割裂

安全测试工具有很多种类,如源代码安全扫描、黑盒安全测试、开源组件安全测试、主机安全测试等。这些安全测试工具通常为独立的工具及单独的Web页面,需要研发人员分别登录查看漏洞及修复,部分测试工具的扫描时间可能还会长达小时级。由于安全与研发流程的割裂,便会影响DevOps的快速迭代。

三、走出“囚徒困境”:DevSecOps 落地与指导

基于Gartner DevSecOps理念,企业需要从文化、流程及技术三方面切入,通过固化流程、加强人员协作以及工具化、自动化技术手段将安全无缝内嵌到研发流程中,从而实现企业DevSecOps落地。

1、安全文化变革

好的DevSecOps文化能够支持更严格的安全策略的贯彻执行。在有着优良企业安全文化的团队中,安全自然成为了一种共同的责任,在这种文化之下,不同业务部门间的鸿沟会相对更为容易跨越,在问题出现的时候,也会得到最早地解决。

安全文化
图 安全建设安全活动干系人

2、安全左移流程

Gartner给出建议,不要强制DevOps开发人员采用安全人员的旧的流程。相反地,将安全保证措施无缝集成到开发的持续集成(CI)和持续部署(CD)的工具链中。在软件开发的初期就介入进来,由此顺利衔接安全与研发相关工具及流程。

安全左移
图 研发运营一体化过程中安全活动

3、构建DevSecOps工具链

DevSecOps主要分为10个阶段,分别是计划(Plan)、创建(Create)、验证(Verify)、预发布(Preprod)、发布(Release)、预防(Prevent)、检测(Detect)、响应(Respond)、预测(Predict)、适应(Adapt),其中预防(Prevent)在之前的版本里也有叫做配置(Configure)。

DevSecOps工具链
图 DevSecOps 工具链

在 DevSecOps 中,每个阶段应用特定的安全工具,以此实现高效的安全落地。对企业来讲,选择合适的安全工具及活动是切入DevSecOps更加柔和有效的实践方式。

下面分别摘取国内某金融机构和携程的部分安全活动应用情况进行简单介绍。

四、国内某金融机构部分安全活动应用情况

1、源代码安全扫描工具(SAST)

该机构起初采用了商业工具Fortify及Appscan Source,但在实际应用发现存在误报率较高及扫描速度较慢的问题。为了更好的集成到DevOps流程,后转而使用开源SonarQube+Find Security Bugs插件取代。

SAST
图 SonarQube集成Find Security Bugs插件

2、黑盒安全测试(DAST):该机构目前采用的黑盒安全测试工具有AppScan、AWVS、OWASP ZAP和Arachni,通过自研三叉戟自动化安全测试平台进行封装和分布式扫描调度,提供API方式给DevOps平台进行集成。

3、交互式应用安全测试(IAST):引入了IAST工具Contrast Security,集成至DevOps平台中进行自动化安全测试。

4、容器全生命周期安全管理

利用完整的安全工具链对容器进行检测、监控及修复,保障容器镜像及运行环境的安全,形成了一套行之有效的容器全生命周期安全管理方法论。

  • Docker安全配置基线:首先根据Docker安全标准整理得到“Docker容器安全实践指南”,该指南包括了主机安全配置、Docker守护进程配置、Docker守护程序配置文件、容器镜像和构建、容器运行安全、Docker安全操作等方面,为研发及运维人员提供Docker安全加固指南,降低Docker安全风险。
  • Kubernetes安全:其次,Kubernete作为容器云的编排服务和集群运行环境,直接关系到容器的运行安全。安全团队根据实践总结了Kubernetes部署安全指南,用于指导Kubernetes的安全部署。
  • 内部安全镜像仓库:制定了严格的内部安全镜像仓库管理策略,协调开发团队和安全团队合作,共同建立和更新内部镜像仓库,禁止从互联网获取镜像资源。
  • 容器安全扫描工具自动化集成:目前生产环境的Docker主机均从内部私有Registry中提取生产镜像。当构建工具上传镜像到私有Registry后,容器安全扫描器会从该Registry中获取镜像的副本,实施安全测试。
  • 容器安全风险度量及可视化:为了对项目组的容器安全风险进行度量及直观展示,从容器镜像的项目分布、安全漏洞、操作系统等纬度进行了可视化展示,便于项目组进行容器安全风险的持续监控及容器安全漏洞的修复。

五、携程部分安全活动情况

1.开源组件安全扫描(SCA)

SCA是携程落地比较早的项目,主要在应用CI的过程中进行扫描分析,对于扫描发现中高危级别漏洞的应用进行发布拦截。

携程漏洞管理界面
图 携程漏洞管理界面

针对不同属性漏洞,携程规定对于外网应用存在POC的漏洞进需进行优先修复,内网应用和无POC的漏洞紧急性则调低。此外,携程还按照漏洞归属区分框架漏洞和应用漏洞,对于框架引入的第三方组件漏洞,会协调公司内部框架修复。通过这样的方式减少了大量的漏洞告警,使得SCA嵌入CI/CD流程对发布流程的影响降到最低。

2.交互式应用安全测试(IAST)

携程采用IAST Agent被动检测+分布式扫描器主动扫描的方式实现IAST,

携程IAST架构
图 携程IAST架构

IAST Agent:集成到测试环境应用Docker容器的Agent,用来检测应用中的漏洞,同时会把所有http流量复制回传到用于收集流量的kafka队列。

IAST服务端:管理IAST Agent和漏洞的控制台。

流量kafka队列:用于收集待扫描的流量,除了从IAST Agent回传的流量,还有来自主动爬虫、Chrome插件以及平台调用API发送过来的流量。

分布式扫描器:消费kafka的流量并按照URL去重,调用扫描器进行漏洞扫描。

3、越权检测

越权检测是携程在安全活动中非常关键的一点,也是此类互联网线上服务行业共同关注的问题。针对越权检测,携程使用了替换Cookie重放流量的方法,具体步骤如下:

首先需抓取访问携程服务的http请求报文;

其次使用事先准备好的已登录账号Cookie替换请求报文进行重放;

最后根据返回报文来判断是否存在水平越权或者垂直越权,按照相似度高的报文、敏感信息关键字等信息判断(敏感信息包括订单金额、手机号、身份证号等)。

除此之外,携程在落地及高效运营越权检测系统中,还总结了企业需要注意的3项关键点,在此简单分享:

(1)请求流量的筛选

面对携程每天海量的访问请求,实践越权检测的第一步应筛选出真正需要用来重放检测的流量。筛选条件有两个:请求URL中是否包含关键字和请求报文是否为静态页面。

(2)返回报文的筛选

替换Cookie后,部分返回报文可直接判断是否存在越权。判断条件便是基于关键字的判定筛选,关键字包括“没有权限”、“无权访问”、“失败”等。

(3)登录会话维持

落地越权检测系统中很重要的一点是需要维护一套用于替换的Cookie,对此,携程制作了后端平台用于收集和维护各种站点的登录信息。

携程登录会话维持后台
图 携程登录会话维持后台

六、总结

根据对企业DevSecOps实践的观察,FreeBuf总结了以下内容:

1、头部行业加快实践步伐

伴随着DevSecOps战略框架的日趋完善,国内相关行业的建设也迅速开展起来,金融、运营商、通信、互联网等头部行业实践效果也在逐步提升。同时,此外,随着《研发运营一体化(DevOps)能力成熟度模型》的发布,合规也成为企业落地的方向之一。

2、实践需贴合企业属性

对于大部分企业,DevSecOps往往意味着大刀阔斧的变革。并不是所有甲方都适合直接套用DevSecOps实践流程,不同行业所关注的安全关键活动也有所区分,因此还需根据自身的组织发展目标、文化特点及业务场景做进一步论证,逐步摸索出企业自己的安全能力体系。

3、安全是每个人的责任

人人参与DevSecOps才能保障安全。在成熟企业落地DevSecOps的过程中,不难发现,企业安全文化的培养总会列为重中之重。安全和各个团队都需要参与到DevSecOps研发模式的不断建设和优化中来,不断推进DevSecOps理论和工具链的向前发展。

原文及白皮书下载:https://www.freebuf.com/243414.html