2026 年每日通報的 CVE 數量比前一年多 131%。

相依套件

什麼是軟體組成分析(SCA)?

軟體組成分析會找出您軟體中的開源與第三方元件,並檢查其中的已知漏洞、授權問題與過時版本。您交付的程式碼大多是您所依賴的程式碼,因此 SCA 涵蓋了您大部分的程式碼。但它只能分析它成功辨識出的元件。

更新日期

SCA 的運作方式

  1. 辨識元件。工具會讀取它被指向的內容:儲存庫中的資訊清單(manifest)與鎖定檔(lockfile)、 已安裝的套件,或容器映像檔與二進位檔的內容。結果是一份元件與版本的清冊,通常會匯出為 SBOM。
  2. 比對已知風險。每個元件都會在 GitHub Advisory Database、OSV 與 NVD 等漏洞資料庫中查詢, 其宣告的授權也會依您的政策進行檢查。
  3. 排定優先順序。發現的問題會依嚴重程度排序,有些工具還會加入可達性分析, 檢查您的程式碼究竟能否呼叫到有漏洞的函式。
  4. 修正。許多工具會建議修正後的版本或開啟 pull request,就像 Dependabot 與 Renovate 的做法。 對於有漏洞的遞移相依套件,修正通常在引入它的套件中進行, 而相依關係圖會顯示這一點。

SCA 能發現什麼

  • 已知漏洞:存在於您所使用版本中的漏洞,以及描述它們的資安公告。
  • 授權風險:例如專有產品中含有 copyleft 授權。
  • 過時與無人維護的套件:不會再收到安全性修正的套件。
  • 惡意套件:適用於除了比對資安公告外,也會分析套件行為的工具。

SCA 與 SAST 比較

SCA 與靜態應用程式安全測試(SAST)經常一起販售,但兩者檢視的是不同的程式碼,回答的也是不同的問題。

SCA SAST
分析對象 您所依賴的開源與第三方元件 您團隊撰寫的程式碼
能發現什麼 已知漏洞、授權問題、過時套件 您程式碼中的缺陷,例如注入或不安全的輸入處理
讀取內容 資訊清單、鎖定檔、已安裝套件、映像檔或二進位檔 原始碼
新發現從何而來 相依套件變更,或針對您已交付版本的新資安公告 您程式碼的變更
典型產出 有漏洞的元件及其修正版本,以及 SBOM 有缺陷的程式碼位置與建議修正

兩者您都需要。沒有任何 SAST 發現的程式碼庫,仍可能交付有漏洞的相依套件;而乾淨的相依套件樹,也無法說明您自己的程式碼是否安全。完整比較請參閱 SAST 與 SCA 比較。有一項差異會影響您的執行方式:SAST 的發現在您的程式碼變更時出現, 而 SCA 的發現可能在新資安公告發布當天,出現在您幾個月前就已交付的版本上。

SCA 的極限

每一項 SCA 結果都取決於第一步:辨識元件。工具從未辨識出的元件無法被比對、排定優先順序或修正, 也不會顯示為缺口。常見的盲點如下:

  • 檔案沒有記載的內容。大多數 SCA 工具讀取資訊清單與鎖定檔。缺少或過時的鎖定檔、從 CI 快取還原的套件、 建置工具、下載內容與安裝腳本,都不會進入清冊。請參閱為什麼鎖定檔不是交付內容的紀錄。
  • 工具之間結果不一致。兩個掃描工具指向同一個 commit,會回傳不同的元件清單,因為每個工具對於要讀取什麼、 如何命名都有自己的規則。請參閱開源 SBOM 產生工具遺漏了什麼。
  • 二進位檔。以預先建置的二進位檔散布的軟體,幾乎不會宣告任何資訊清單讀取工具看得到的內容。
  • 僅限已知漏洞。比對只能找到已公布的內容。新出現的惡意套件或尚未揭露的缺陷,還沒有任何資安公告。
  • 只是快照。pull request 中的掃描描述的是當下那一刻。對於已在正式環境中的版本,新的資安公告需要能持續檢查交付內容的機制。

這不是某個產品的缺陷,而是掃描的運作本質,無論商業或開源工具皆然。CRACI 曾發現 Snyk 與 Aikido 未回報的有漏洞套件, 因為這些元件從未出現在它們掃描的內容中。

記錄建置,同時保留您的 SCA

CRACI 從建置端補上辨識的缺口。它是 GitHub Actions 執行器,會將每個作業取得的每個套件(涵蓋相依樹的每一層, 包括從 CI 快取還原的套件)記錄到一份會標示自身完整度的 SBOM 中。在新漏洞公布時,它會持續重新評估已交付內容的 SBOM, 建置歷史也會顯示哪些過去的建置包含有漏洞的套件。

CRACI 在設計上不做 SAST 或可達性分析。團隊會將它與涵蓋 pull request 和自有程式碼的 SCA 或 SAST 工具並用。請參閱 SCA 工具比較、 CRACI 如何與您的 SCA 工具搭配,或 預約示範,比較記錄下來的 SBOM 與您目前的掃描結果。

軟體組成分析:常見問題

資安領域中的 SCA 是什麼?

軟體組成分析(SCA)是找出您軟體中的開源與第三方元件,並檢查其已知漏洞、授權問題與過時版本的做法。它涵蓋的是您所依賴的程式碼,而不是您撰寫的程式碼。

SCA 與 SAST 有什麼不同?

SAST 分析您團隊撰寫的程式碼,找出注入錯誤等缺陷。SCA 分析您所依賴的元件,找出已知漏洞與授權問題。兩者回答的是不同的問題,因此大多數資安計畫會同時執行兩者。

SCA 掃描是什麼意思?

SCA 掃描會讀取專案的資訊清單、鎖定檔、已安裝套件或容器映像檔,判斷其中包含哪些元件,並與漏洞及授權資料比對。結果是一份發現清單,通常附有其辨識出的元件 SBOM。

SBOM 和 SCA 是一樣的嗎?

不是。SBOM 是一份清冊:某個版本中的元件清單。SCA 則是分析:辨識元件並檢查其風險。許多 SCA 工具在過程中會產生 SBOM,而 SBOM 可在版本發布後用於漏洞監控。

SCA 有哪些限制?

它只能分析它辨識得出的元件,通常來自資訊清單與鎖定檔。從 CI 快取還原的套件、建置工具、下載內容,以及沒有套件中繼資料的二進位檔都可能被遺漏。它找到的是已知漏洞,而非未知漏洞;除非工具持續重新檢查交付內容,否則一次掃描只是快照。

最好的 SCA 工具有哪些?

這取決於您在基本功能之外還需要什麼:可達性分析、惡意套件偵測、授權政策或開發者工作流程。請參閱我們對 13 款 SCA 工具的比較,了解各自涵蓋的範圍與極限。

看看您的 SCA 掃描沒看到什麼

在 CRACI 上執行一個 GitHub Actions 工作流程,比較它記錄的 SBOM 與您 SCA 工具回報的元件。

預約示範