您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
   
 
     
   
 订阅
  捐助
企业安全中DevSecOps的一些思考
 
来源:FreeBuf.COM 发布于: 2017-9-29
  1557  次浏览      24
 

在RSA大会中,“下一代应用及IT基础设施的安全管理模式”,被提升到了前所未有的高度,大会甚至专门为这个概念和方向设置议题和讨论会,一个新晋热词“DevSecOps”出现在大家的视野中。

什么是DevSecOps

“DevSecOps”,一种全新的安全理念与模式,从DevOps的概念延伸和演变而来,其核心理念为安全是整个IT团队(包括开发、运维及安全团队)每个人的责任,需要贯穿从开发到运营整个业务生命周期的每一个环节。

看到这个概念,第一反应是“安全运维”,是不是新瓶装旧酒呢?确实一直以来,不论从主机安全还是到网络安全,很多工作都是安全运维的交集,既涉及到安全,同时也涉及到运维,没有运维足够的支持很多安全工作也比较难开展。但是经过一段时间,发现最初的理解实际比较片面,刚才提到的并不是真正DevSecOps所要传达的理念,DevSecOps的出现是为了改变和优化之前安全工作的一些现状,比如安全测试的孤立性、滞后性、随机性、覆盖性、变更一致性等问题;通过固化流程、加强不同人员协作,通过工具、技术手段将可以自动化、重复性的安全工作融入到研发体系内,让安全属性嵌入到整条流水线。

我目前所能理解的DevSecOps

由于本人知识和经验有限,对DevSecOps的理解可能只停留在比较浅显的认知。

目前我在工作中能真正涉及和可以应用的有两部分,第一块是在资源管理,第二块是在CI/CD这部分,监控告警、日志分析、或者其他内容,怎么应用到DevSecOps中我本人还没有很成型的思路。

资源管理这块,我们用到的,主要是依赖于YRDCMDB系统“银河”来实现的,CMDB里存储了宜人贷的所有主机、IP、域名、集群、应用等所有软硬件信息,这样在进行安全检查、安全扫描的时候,就可以直接调用银河来获取完整的信息、或者直接调用银河来执行一些简单的扫描任务。

宜人贷端口监控从银河获取IP信息完成对应的端口扫描。

基于资产管理可以更快速、准确的知道新上线的域名、应用等,从而触发安全扫描,减少遗漏。

在主机安全方面,我们未来也打算基于CMDB来做更多的联动,因为CMDB本身就自带“远程采集”和“远程执行”的属性。

DevSecOps中的安全自动化测试(扫描)

当我们谈到S-SDLC的时候,总是希望安全可以更早的介入,但是随着项目的增多、迭代频率的增加,完全依赖人工测试的方式不但会压垮安全测试人员本身,也会严重影响到整个软件交付的速度,拖累整个上线周期,最终很多应用在得不到任何安全检查的情况下偷偷上线。

为了提升效率,可以将部分自动化的安全检查工作纳入到CICD的流程中,并且将大部分流程自动触发和执行,让安全测试人员可以聚焦到更核心的业务和工作上,同时尽可能减少安全测试工作对软件发布带来的时间消耗。

代码静态安全检查有商业化的解决方案比如Coverity,我们这里使用的是开源解决方案,Sonar+FindbugSecurity,根据需求精简了规则,在持续构建的过程中,会进行代码静态安全检查。

第二阶段,当完成功能自动化测试后,可以进行安全自动化测试(扫描)。在这里我们简单封装了开源的漏洞扫描工具,将扫描任务、漏洞执行描述、结果等信息通过WEB方式进行展示,方便统一使用和管理。

下面这张图是我们未来想要继续改进的方向,大致思路如下:

在各个业务的功能自动化测试平台集成安全测试用例

功能测试平台主动调用安全测试平台(传入登录操作所需的信息)

安全平台模拟登录后,开始进行扫描

最终将结果反馈给CI平台

这里涉及到和功能测试自动化团队的协作,对于成熟的测试团队,让他们来实现一个登录初始化的数据并且构造一些业务数据,应该不是很难的事情,这样安全测试人员就不再需要去维护每个业务的登录去构造数据了,有了登录和一定的业务数据,安全扫描的效果也会好上很多。

用DevSecOps理念来解决第三方组件的漏洞问题

在软件开发中,安全人员还经常遇到的问题就是来自第三方组件的安全漏洞应急,比如今年发生的Struts2、fastjson等漏洞,都是在软件开发过程中引入的,这块儿是比较好和DevSecOps相结合的。

不考虑入侵排查的因素,正常的响应流程一般为1DAY高危漏洞爆发,安全人员获取和验证POC之后,在WAF中添加恶意请求特征,缓解风险,同时推进补丁升级。传统的方式一般是人肉统计、或者通过批量命令执行检查线上服务器的制定目录和文件、lsof进程所打开的文件等,这样的方式,第一容易出现遗漏且效率低下,第二应急结束后未来又有新的系统发布再次引入了该漏洞组件后,并不能及时发现。

这里我们引入了XRAY+统一发布的方式来解决这个难题。在构建过程中,会根据漏洞库进扫描二进制文件,一旦发现包含高危漏洞的组件被引入,可直接告警或直接阻断发布。

XRAY的工作方式如下:

文件HASH比对

可对接多个漏洞库:NVD、Blackduck、Whitesource、Aqua等

支持深度分解检测:从docker镜像、到rpm包、war包、jar包等,层层分解,进行扫描

甚至根据漏洞库的修复方案,可直接对受影响版本自动更新版本号以及解决依赖升级问题(这个我没有验证过)。这里想针对docker多说两句,线上环境的一致性和变更管理其实很困难,我觉得docker很大的一个好处就是解决了环境一致性问题,因为每次都需要重新构建,从OS到组件再到应用,无形之中也对漏洞修复工作带来了便利性,修复效率有所提升。

每次构建的软件都保存在仓库中,可以快速筛选出使用的第三方组件,比如fastjson

 

而通过统一发布平台和仓库的关联,则可以快速找到哪些项目包含了带漏洞的组件,并且之前已经被发布到线上环境,做到快速筛查。

总结

DevSecOps这个概念提出来的时间虽然不长,而且和以往S-SDLC的思路也有一些交集,但是却再次定义了安全在软件工程中的重要性以及结合方式;在敏捷思想和DevOps已经足够成熟的今天,相信未来会有更多思想被提炼出来、也会有更多的最佳实践来提高安全工作的效率。

   
1557 次浏览       24
相关文章

DevOps转型融入到企业文化
DevOps 能力模型、演进及案例剖析
基于 DevOps 理念的私有 PaaS 平台实践
微软开发团队的DevOps实践启示
相关文档

DevOps驱动应用运维变革与创新
运维管理规划
如何实现企业应用部署自动化
运维自动化实践之路
相关课程

自动化运维工具(基于DevOps)
互联网运维与DevOps
MySQL性能优化及运维培训
IT系统运维管理