当前位置: 首页 > 科技观察

DevSecOps在企业安全中的一些思考

时间:2023-03-14 19:44:02 科技观察

RSA大会上,将“下一代应用和IT基础设施的安全管理模型”提升到了前所未有的高度。会议甚至专门针对这一理念和方向设立了专题和研讨会。一个新的热词“DevSecOps”出现在了大家的视野中。什么是DevSecOps“DevSecOps”是一种全新的安全概念和模型,是从DevOps的概念延伸和演化而来的。其核心理念是安全是整个IT团队(包括开发、运维、安全团队)每一个人的责任。它需要贯穿从开发到运营整个业务生命周期的每一个环节。看到这个概念,第一反应就是“安全运维”。是新瓶装旧酒吗?确实,从主机安全到网络安全,很多工作都是安全运维的交集,既涉及安全,同时又涉及运维。没有足够的运维支撑,很多安全工作就比较难以开展。但是经过一段时间后,我发现最初的理解其实是比较片面的。我刚才说的并不是DevSecOps真正想要传达的概念。DevSecOps的出现是为了改变和优化安全工作的一些现状,比如安全测试的隔离和滞后。、随机性、覆盖率、变更一致性等问题;通过固化流程,加强不同人员的协作,通过工具和技术手段将自动化、重复性的安全工作融入研发体系,使安全属性嵌入到整个流水线中。我目前能理解的DevSecOps是由于我的知识和经验有限,对DevSecOps的理解可能只停留在比较粗浅的层面。目前在我的工作中真正可以涉及和应用的有两部分。第一部分是资源管理,第二部分是CI/CD部分。如何将监控警报、日志分析或其他内容应用到DevSecOps我还没有一个可靠的想法。我们使用的资源管理,主要是依靠YRDCMDB系统“银河”来实现的。CMDB存储了宜人贷所有的软硬件信息,如主机、IP、域名、集群、应用等,以便于安全检查和安全扫描时,直接调用Galaxy获取完整信息,或者直接调用Galaxy执行一些简单的扫描任务。宜人贷端口监控从Galaxy获取IP信息,完??成相应的端口扫描。基于资产管理,可以更快、更准确地获知新的在线域名和应用,从而触发安全扫描,减少遗漏。在主机安全方面,我们未来打算做更多基于CMDB的联动,因为CMDB本身就具有“远程采集”和“远程执行”的属性。DevSecOps中的安全自动化测试(扫描)在谈到S-SDLC的时候,我们总是希望安全能够更早的参与进来,但是随着项目的增多,迭代频率的增加,完全依赖人工测试的方式不仅会压力击败安全测试人员本身也会严重影响整个软件的交付速度,拖累整个上线周期,最终很多应用会在没有任何安全检查的情况下偷偷上线。为了提高效率,可以将部分自动化安全检查工作纳入CICD流程,大部分流程可以自动触发和执行,让安全测试人员专注于更核心的业务和工作,同时最大限度地减少安全测试的时间软件发布工作的消耗。有用于代码静态安全检查的商业解决方案,例如Coverity。这里我们使用开源方案Sonar+FindbugSecurity,根据需求对规则进行了简化。在持续构建过程中,会进行代码静态安全检查。第二阶段,功能自动化测试完成后,可以进行安全自动化测试(扫描)。这里简单封装了一个开源的漏洞扫描工具,将扫描任务、漏洞执行描述、结果等信息通过WEB展示出来,方便统一使用和管理。下图是我们以后想继续改进的方向。总体思路是:在各业务的功能自动化测试平台中集成安全测试用例。功能测试平台主动调用安全测试平台(传入登录操作所需信息)模拟登录后,开始扫描,最后将结果反馈给CI平台。这涉及与功能测试自动化团队的协作。对于一个成熟的测试团队来说,实现一个登录初始化数据,构建一些业务数据,应该不是什么难事。这样安全测试人员就不用再维护每个业务的登录来构造数据了。有了登录名和一定的业务数据,安全扫描的效果会好很多。使用DevSecOps理念解决第三方组件漏洞问题在软件开发中,安全人员经常会遇到第三方组件安全漏洞应急响应的问题。介绍过,这块和DevSecOps结合比较好。不考虑入侵调查因素,正常的应对流程一般是1DAY的高危漏洞爆发。安全人员获取并验证POC后,在WAF中加入恶意请求特征,以降低风险,促进补丁升级。传统的方法一般是人肉统计,或者通过批量命令执行查看在线服务器的指定目录和文件,lsof进程打开的文件等。这种方式第一种容易出现遗漏,效率低下,第二个是在紧急状态结束之后。新系统版本再次引入漏洞组件后,未能及时发现。这里我们介绍XRAY+统一发布方式来解决这个问题。构建过程中会根据漏洞库扫描二进制文件。一旦发现引入了包含高危漏洞的组件,可以直接告警或直接封禁发布。XRAY的工作方式如下:文件HASH比对,可对接多个漏洞库:NVD、Blackduck、Whitesource、Aqua等支持深度分解检测:从docker镜像,到rpm包、war包、jar包等.,逐层分解,执行Scanning甚至可以直接根据漏洞库的修复方案自动更新受影响版本的版本号并解决依赖升级问题(这个我没验证过)。在这里我想多说几句关于docker。线上环境的一致性和变更管理其实是非常困难的。我觉得docker的一大优势就是解决了环境一致性的问题,因为每次都需要重新构建,从OS到组件。在应用方面,也为漏洞修复工作带来了便利,修复效率得到了提升。每次构建的软件都存储在仓库中,可以快速筛选出使用到的第三方组件,比如fastjson。通过统一发布平台与仓库的关联,可以快速找出哪些项目存在漏洞组件,哪些项目曾被使用过。发布到在线环境以供快速筛选。小结虽然DevSecOps的概念提出时间不长,与之前的S-SDLC思想有一些交集,但它再次定义了安全在软件工程中的重要性和结合性;敏捷思维和DevOps在今天已经足够成熟,相信未来会提炼出更多的思想,会有更多的最佳实践来提升安全工作的效率。最后贴一则招聘广告,JAVA架构师(风控),详情请见招聘专栏-宜人贷招聘。如果您有兴趣,请发邮件至security@yirendai.com。