安全左移——JFrog Xray根据扫描结果创建Jira Issue
原创高欣
杰蛙科技DevSecOps
jie_wa999
专注探索DevOps与工程效能提升实践。范围锁定:工具链实践、技术学习交流与分享等内容
发表于
收
安全左移——JFrog Xray根据扫描结果创建Jira Issue 原创高欣 杰蛙科技DevSecOps jie_wa999 专注探索DevOps与工程效能提升实践。范围锁定:工具链实践、技术学习交流与分享等内容 发表于 收录于合集 关注世界领先 DevOps 平台 JFrog 背景 当前,随着比较常用的组件,如Tomcat、Docker、Kubernetes等陆续曝出存在高危漏洞,组件安全已成为业界日益关注的安全扫描新的重要分支。根据业界的统计,在 Docker Hub里,30%的镜像存在已知漏洞,而NPM官方源里有14%的包, Maven官方源里有59%的包,都存在已知漏洞。注意,这还只是已知漏洞,还有多少未知漏洞尚不清楚。在这种情况下,程序员用第三方组件包一时爽,但很可能引入的是一个有高危漏洞的版本,并将很可能被部署到生产环境,进而被黑客攻破。因此,必须在DevOps流程中加强针对组件的安全扫描,这也是当前业界推荐的DevSecOps的重要组成部分。 在DevSecOps的流程中,针对安全扫描,还有一个重要的概念,就是“安全左移”。传统的安全扫描通常是在软件发布前几天,将软件包交给安全团队,或第三方公司进行漏洞扫描,完成之后给出漏洞报告。这种方式下,留给安全团队检测的时间非常少,并且如果真的扫描出高危漏洞了,研发也来不及升级,再全量测试进行发版,往往导致要么发版延期,要么安全扫描就成为一个摆设。“安全左移”,就是在DevSecOps的流程当中,及时进行安全扫描,并随时反馈扫描结果,实现尽早发现、尽早反馈,进而尽早解决安全隐患。 在之前的技术文章和在线课堂当中,我们陆续介绍了JFrog Xray能够监视Artifactory制品仓库的变化,实时开始组件的安全扫描,并对扫描结果进行深度的精准定位,和广度的影响范围分析。同时,Xray还可以通过与Pipeline或IDE集成网站安全扫描,实现“安全左移”,将扫描结果尽早反馈给DevOps团队或研发人员。 本文将介绍Xray实现“安全左移”的另一种方式,即与Jira集成,通过根据组件漏洞扫描的结果,自动生成对应的Jira Issue,及时将安全问题反馈给相关的管理和项目人员。 Xray与Jira集成的方式——Webhook Webhook是一个API概念,用于使用自定义回调更改Web请求的行为。这些回调可供第三方用户、开发人员或程序使用,并不必须附属于原始的网站或应用程序。Webhook也可以称为“反向API”。 在Xray当中,我们通过配置Watch来选择监视Artifactory的那部分变化,配置对应的Policy/Rule来选择如何处理扫描到的安全漏洞。其中,在Rule的设置当中就有Webhook的选项,即当发现安全问题的时候,会将扫描结果以JSON的方式,直接发送给该选项指定的Webhook。Security Rule里设置如下图所示: 这里选择的Webhook_Test就是我们事先在Xray上注册好的Webhook。Webhook的注册是在Xray的配置:Admin->Webhooks里进行的,如下图所示: 在这里,我们可以定义Webhook的入口,如下图所示: 而对应的Webhook,则是独立于Xray运行的,可以接收并处理安全漏洞信息的Web服务。如我们用Go语言创建的示例Webhook: Webhook接收扫描结果的结构 上节提到,Xray发向Webhook的扫描结果是以JSON的形式组织的。该JSON的结构,以我们用Go语言创建的示例,如下所示: 1、整体结构:Violation 2、问题结构:Issue 在Violation中问题列表Issues中的问题,Issue,的结构如下: 3、相关组件结构:ImpactedArtifact 在Issue中受影响组件列表中的相关组件,ImpactedArtifact,的结构如下: 4、受感染文件结构:InfectedFile 在ImpactedArtifact中受感染文件列表中的受感染文件,InfectedFile,的结构如下: 受感染文件就精准定位了包含安全漏洞的最小单元组件。 5、解析扫描结果的结构 Webhook在接收到Xray发出的扫描结果后,就可以根据上述的定义,进行JSON结构的解析,如下图所示: 自动生成JiraIssue0 接收到Xray发送的扫描结果并解析其结构后,下一步Webhook就要连接Jira,并创建对应的Jira Issue了。 我们之所以采用Go语言实现Webhook的示例,首先在于Go非常简单,只需几行代码, 就可以轻松地创建一个瞬时启动并运行用于侦听和处理HTTP请求的服务器。其次,针对与Jira集成并创建Jira Issue,已经有了一个Go语言实现的非常良好的开源库,go-jira()供我们使用。使用go-jira之后,我们剩下要做的就是在创建一个Jira用户, 并为其提供创建Issue的访问权限。 利用go-jira提供的库,我们首先创建Jira客户端,并与Jira服务器连接: 然后,根据扫描结果解析的内容,填写Jira Issue的内容,并创建对应Issue: 当然,示例中创建的Jira Issue比较简单,仅仅在标题中提供了最高的告警级别,在描述中提供了找到问题的总数。Go-jira提供了很多库操作,我们可以据此创建更为丰富的Issue内容。 创建完成后,我们就可以在Jira里看到如下的Issue: 总结 组件的安全扫描,是当前业界推荐的DevSecOps的重要组成部分。而“安全左移”,是及时发现安全问题并尽早反馈的关键。 本文介绍了JFrog Xray利用Webhook与Jira集成,实现“安全左移”的过程。概括起来,有以下五个步骤: 1. 创建一个知道如何侦听远程请求的“轻型”服务器; 2. 配置一个Xray的Webhook,并与触发它的Policy/Rule相关联; 3. 了解Xray发送给Webhook的JSON结构,以便正确地分析信息; 4. 解析信息后,定义要发送到Jira服务器的内容以及Issue将包含哪些信息; 5. 与Jira服务器交互以创建对应的Issue。 本文利用Go语言实现了Xray Webhook的功能,全部代码请参考: 有关JFrog Xray及其他产品的介绍,或想申请试用的话,请参考我们的官网: END 下载JFrog Artifactory企业版(免费试用): 下载JFrog Artifactory 开源版(代替 Nexus): 下载JFrog JCR 免费版: 想了解更多国内外DevOps 实战案例,扫描下方二维码关注“JFrog杰蛙DevOps”公众号,在后台回复“devops”,即可免费获取DevOPs入门到精通实战视频及PPT学习资料。 (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |