GoCenter 的“火眼金睛” ——检测、报告并减小Go Module的安全漏洞

1、背景

Golang开发者很是关心开发应用的安全性。随着Go Module应用愈来愈普遍,Golang开发者须要更多的方式来确保这些公共共享文件的安全。Golang1.13版本在建立Go Module时,经过增长go.sum文件来验证以后从GOPROXY再次访问到的该Module是否曾被篡改。这个机制有助于保证Module的完整性。可是,当初次建立并提交Go Module时,若是原始文件中被引入了恶意代码,这种安全漏洞仍是不能被发现和预警的。git

Go Module的安全漏洞影响了不少项目和Go开发者。随着CI/CD流程中“左移”实践的推广,对于Go开发者来讲,尽早跟踪和报告Go Module之中的安全漏洞变得愈来愈重要。幸运的是,GoCenter(https://search.gocenter.io)做为Golang的中央仓库,为Go开发者提供大量公共共享Go Module的同时,也经过集成JFrog Xray安全扫描的能力,帮助Go开发者检测、跟踪并报告仓库中Go Module包含的安全漏洞。github

2、报告安全漏洞

任何应用系统,在其开发的生命周期中,都应该持续监视安全漏洞,任何人发现了安全漏洞都应及时报告,以便其修复措施可以被更多的组织和开发者分享与跟踪。已知安全漏洞一般利用CVE(Common Vulnerability and Exposures, 常见漏洞及披露)来分类和跟踪,这是一个用于公开披露安全漏洞信息的列表。每一个CVE信息包含一个标准标识序号(CVE ID)、一个状态指示器、对该漏洞的简短描述,以及与漏洞报告及建议相关的索引。数据库

CVE不是漏洞数据库。相反,CVE旨在容许漏洞数据库和其余工具连接在一块儿,并促进安全工具和服务之间的比较。美国国家漏洞数据库(NVD,National Vulnerability Database)是一个免费的、公开的漏洞数据库,它使用CVE列表的标识序号,并包含漏洞的修复程序、漏洞级别评分,以及其余和每一个漏洞相关的信息。api

每个被检测到的安全漏洞都必须报告给CVE编号颁发机构(CNA,CVE Numbering安全

Authorities),并附上详细的文档解释该漏洞的影响,以及至少一个受影响的代码库,而后才能将其识别为已知漏洞并分配一个CVE ID。做为参考,CVE ID的格式一般为:CVE前缀 + 年 + 任意数字。如下是CVE ID的示例:
GoCenter 的“火眼金睛” ——检测、报告并减小Go Module的安全漏洞微信

3、保护Go Module安全的数据复杂性

确保Go Mudule的安全多是一项棘手的任务,特别是因为Go Module和Go Package之间的关系。一旦收到Go Module的安全数据,就很难将该数据与特定的Module版本相关联。这是由于安全漏洞存在于Package级别,可是却报告在Module级别上。这可能会给人留下整个Module都容易受到***的印象。但事实并不是如此,除非您使用易受***的Package数据,不然Module将保持安全。ide

让咱们以上图中的CVE-2020-10660 为例。如下是1.3.4版变动日志的摘录,详细介绍了此漏洞的影响:工具

gopkg.in/hashicorp/vault.v0和github.com/hashicorp/vault都受到了HashiCorp Vault和Vault Enterprise0.9.0到1.3.3版本中的CVE-2020-10660的影响。在使用这些Package时,在某些状况下,它们可能使实体的组成员无心间包含了该实体再也不具备权限的组。Vault Enterprise中发现的另外一个漏洞是,在某些状况下,现有的嵌套路径策略可能会提供对过后建立的命名空间的访问权限。幸运的是,在版本1.3.4中对这些漏洞进行了修复。3d

GoCenter 的“火眼金睛” ——检测、报告并减小Go Module的安全漏洞

如上例所示,修复是在github.com/hashicorp/vault内进行的。Module日志

istio.io/istio在其go.mod文件里记录了对github.com/hashicorp/vault的依赖。一般,您会认为istio.io/istio的安全性也会受到威胁。可是它仅仅使用了package github.com/hasicorp/vault/api,所以其代码是不受此漏洞的影响的。请参考下面的源代码:
GoCenter 的“火眼金睛” ——检测、报告并减小Go Module的安全漏洞

4、减小软件的安全漏洞

如今您已经了解了如何报告Go

Module安全漏洞的过程,以及有关安全数据复杂性的一些详细信息,让咱们看看如何在未来的开发中减小这些威胁。

首先,让咱们看一下GoCenter中的Go Module:github/hashicorp/vault。

根据CVE数据,JFrog Xray可以扫描一个go.mod文件里包含的全部在GoCenter中保存的依赖,并识别其中包含的每一个安全漏洞。GoCenter在“依赖关系”选项卡上显示这些Xray数据,并提供依赖关系树上各个级别里易受***Module的详细信息。您会在每一个易受***的Module旁边看到一个警示的三角形。而后,您能够单击这些易受***的Module并跳转到安全页面。在这里,查看“版本”选项卡能够查找该模块的安全版本,以便您能够在go.mod文件中对其进行升级。

一旦肯定了全部组件和依赖项,它们的信息就会与其余漏洞源和数据库进行交叉引用,以提醒您任何潜在的威胁。GoCenter上提供了免费的针对Go Module的基本Xray漏洞扫描,如“安全性”选项卡所示:

GoCenter 的“火眼金睛” ——检测、报告并减小Go Module的安全漏洞

5、GoCenter助力Go开发者保持应用安全

GoCenter是公共GOPROXY和中央仓库,具备70万+的Go Module版本。将GoCenter用做GOPROXY时,能够确保下载的代码版本是来自正确源代码的正确版本。GoCenter做为您的GOPROXY可与Go命令无缝协做,并具备安全、快速、可用和存储高效的优点。

许多Golang开发者还可使用VS Code的免费JFrog扩展,将GoCenter的漏洞信息直接引入其IDE中。

随着CI/CD流程中“左移”实践的推广与落地,GoCenter的安全功能能够帮助您肯定要导⼊的公共Go Module版本中是否存在易受***的依赖项,进而帮助您保持开发应用的安全性。


更多技术分享能够关注咱们在新课堂

关注微信公众号:JFrog杰蛙DevOps,获取课程通知

相关文章
相关标签/搜索