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,獲取課程通知

相關文章
相關標籤/搜索