GoCenter 的“火眼金睛” ——檢測、報告並減少Go Module的安全漏洞

JFrog傑蛙科技發表於2020-06-16


一、背景

Golang開發者非常關心開發應用的安全性。隨著Go Module應用越來越廣泛,Golang開發者需要更多的方式來確保這些公共共享檔案的安全。Golang1.13版本在建立Go Module時,透過增加go.sum檔案來驗證之後從GOPROXY再次訪問到的該Module是否曾被篡改。這個機制有助於保證Module的完整性。但是,當初次建立並提交Go Module時,如果原始檔案中被引入了惡意程式碼,這種安全漏洞還是不能被發現和預警的。

Go Module的安全漏洞影響了很多專案和Go開發者。隨著CI/CD流程中“左移”實踐的推廣,對於Go開發者來說,儘早跟蹤和報告Go Module之中的安全漏洞變得越來越重要。幸運的是,GoCenter()作為Golang的中央倉庫,為Go開發者提供大量公共共享Go Module的同時,也透過整合JFrog Xray安全掃描的能力,幫助Go開發者檢測、跟蹤並報告倉庫中Go Module包含的安全漏洞。


二、報告安全漏洞

任何應用系統,在其開發的生命週期中,都應該持續監視安全漏洞,任何人發現了安全漏洞都應及時報告,以便其修復措施能夠被更多的組織和開發者分享與跟蹤。已知安全漏洞通常利用CVE(Common Vulnerability and Exposures, 常見漏洞及披露)來分類和跟蹤,這是一個用於公開披露安全漏洞資訊的列表。每個CVE資訊包含一個標準標識序號(CVE ID)、一個狀態指示器、對該漏洞的簡短描述,以及與漏洞報告及建議相關的索引。

CVE不是漏洞資料庫。相反,CVE旨在允許漏洞資料庫和其他工具連結在一起,並促進安全工具和服務之間的比較。美國國家漏洞資料庫(NVD,National Vulnerability Database)是一個免費的、公開的漏洞資料庫,它使用CVE列表的標識序號,幷包含漏洞的修復程式、漏洞級別評分,以及其他和每個漏洞相關的資訊。

每一個被檢測到的安全漏洞都必須報告給CVE編號頒發機構(CNA,CVE Numbering

Authorities),並附上詳細的文件解釋該漏洞的影響,以及至少一個受影響的程式碼庫,然後才能將其識別為已知漏洞並分配一個CVE ID。作為參考,CVE ID的格式通常為:CVE字首 + 年 + 任意數字。以下是CVE ID的示例:


GoCenter 的“火眼金睛” ——檢測、報告並減少Go Module的安全漏洞



三、保護Go Module安全的資料複雜性

確保Go Mudule的安全可能是一項棘手的任務,特別是由於Go Module和Go Package之間的關係。一旦收到Go Module的安全資料,就很難將該資料與特定的Module版本相關聯。這是因為安全漏洞存在於Package級別,但是卻報告在Module級別上。這可能會給人留下整個Module都容易受到攻擊的印象。但事實並非如此,除非您使用易受攻擊的Package資料,否則Module將保持安全。

讓我們以上圖中的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中對這些漏洞進行了修復。

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的安全漏洞


四、減少軟體的安全漏洞

現在您已經瞭解瞭如何報告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的安全漏洞


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


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69954434/viewspace-2698770/,如需轉載,請註明出處,否則將追究法律責任。

相關文章