IDE 中的漏洞掃描

返回 Go 安全

整合Go 語言伺服器的編輯器,例如安裝了 Go 擴充套件的 VS Code,可以檢測依賴項中的漏洞。

依賴項漏洞檢測有兩種模式。它們都由Go 漏洞資料庫支援,並且可以互為補充。

  • 基於匯入的分析:在此模式下,編輯器透過掃描工作區中匯入的軟體包集來報告漏洞,並將發現結果顯示在go.mod檔案中作為診斷。這種方式速度很快,但如果您的程式碼匯入了包含漏洞符號的軟體包,但漏洞函式實際上是不可達的,則可能會報告誤報。此模式可以透過 gopls 設定 "vulncheck": "Imports" 啟用。
  • Govulncheck分析:此模式基於govulncheck命令列工具,該工具已嵌入gopls。這提供了一種低噪音、可靠的方式來確認您的程式碼是否實際呼叫了易受攻擊的函式。由於此分析的計算成本可能很高,因此必須透過使用基於匯入的分析的診斷報告關聯的“執行 govulncheck 進行驗證”程式碼操作,或使用go.mod檔案上的 "codelenses.run_govulncheck" 程式碼鏡頭來手動觸發。
Vulncheck

Go: Toggle Vulncheck (vulncheck.mp4)

這些功能在 gopls v0.11.0 或更新版本中可用。請在 go.dev/s/vsc-vulncheck-feedback 分享您的反饋。

特定編輯器說明

VS Code

Go 擴充套件Go extension提供了與 gopls 的整合。啟用漏洞掃描功能需要以下設定:

"go.diagnostic.vulncheck": "Imports", // enable the imports-based analysis by default.
"gopls": {
  "ui.codelenses": {
    "run_govulncheck": true  // "Run govulncheck" code lens on go.mod file.
  }
}

可以使用“Go Toggle Vulncheck”命令來為當前工作區切換基於匯入的分析的開啟和關閉。

Vim/NeoVim

使用coc.nvim時,以下設定將啟用基於匯入的分析。

{
    "codeLens.enable": true,
    "languageserver": {
        "go": {
            "command": "gopls",
            ...
            "initializationOptions": {
                "vulncheck": "Imports",
            }
        }
    }
}

注意事項和說明

  • 該擴充套件不掃描私有軟體包,也不傳送任何關於私有模組的資訊。所有分析都是透過從 Go 漏洞資料庫中提取已知易受攻擊的模組列表,然後在本地計算交集來完成的。
  • 基於匯入的分析使用工作區模組中的軟體包列表,如果使用了 go.work 或模組 replace/exclude,這可能與您在 go.mod 檔案中看到的不同。
  • 當您修改程式碼或 Go 漏洞資料庫更新時,govulncheck 的分析結果可能會過時。為了手動使分析結果無效,請使用顯示在 go.mod 檔案頂部的 “Reset go.mod diagnostics” 程式碼鏡頭。否則,結果將在一個小時後自動失效。
  • 這些功能目前不報告標準庫或工具鏈中的漏洞。我們仍在研究如何向用戶展示發現結果以及如何幫助使用者處理這些問題。