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

相依套件

SCA 掃描

SCA 掃描會找出專案使用了哪些開源元件,並將每個元件與漏洞及授權資料比對。只要您了解掃描能看到什麼、在哪些地方需要輔助,它就是能加入管線中成本最低的資安檢查之一。

更新日期

SCA 掃描中會發生什麼事

  1. 讀取目標。掃描工具會讀取 manifest 與 lockfile,例如 package-lock.json、poetry.lock 或 Cargo.lock,或解開容器映像檔。
  2. 建立元件清單。它將找到的內容解析為名稱與版本,通常也包括 遞移相依套件。
  3. 比對資料。每個元件都會在 GitHub Advisory Database、OSV 與 NVD 等來源中查詢,其授權也會與您的政策比對。
  4. 回報。發現會依嚴重度排序,通常附有已修正的版本。在 CI 中,政策可以讓作業失敗。

關於這項工作所屬的更廣泛實務,請參閱 什麼是軟體組成分析。

SCA 掃描應該在哪裡執行

只在一處執行一次掃描會留下缺口。每個階段回答的是不同的問題,因此大多數團隊會執行不只一次。

位置 回答的問題 遺漏的部分
開發者電腦或 IDE 加入這個套件安全嗎? 開發者沒有對其執行掃描的任何內容
Pull request 這項變更是否引入已知風險? 未變更程式碼的新資安公告
CI 建置 這個版本包含什麼? 掃描工具在建置中看不到的任何內容
容器登錄檔 這個映像檔裡有什麼? 不留痕跡的已編譯程式碼與建置工具
發布之後 我們已出貨的內容是否受到新問題影響? 如果已出貨內容的紀錄完整,就沒有遺漏

最後一列是大多數計畫會略過的。新的資安公告會影響您幾個月前出貨的版本,而不會有任何 pull request 為此觸發掃描。

如何解讀 SCA 掃描結果

對真實專案的第一次掃描,往往會回傳數百項發現。請依以下順序處理:

  1. 從正遭利用的問題開始。列於 CISA KEV 目錄中的發現,比 CVSS 分數更高但沒有已知利用的發現更優先。請參閱 如何排定漏洞優先順序。
  2. 確認它是否適用。僅用於開發的相依套件不會出貨。有些工具會加入 可達性分析,檢查存在漏洞的程式碼究竟能不能被呼叫。
  3. 在正確的層級修正。對於遞移相依套件的發現,修正通常在引入它的套件中進行,這可以從相依關係圖看出。
  4. 記錄您不會修正的項目。決定接受的發現應說明原因,否則下一個人會重複同樣的工作。VEX 是記錄這類決定的標準方式。

為何掃描結果乾淨不代表軟體乾淨

  • 它看到的是宣告的內容。掃描工具讀取的是它面前的檔案,因此沒有提交 lockfile 的儲存庫能提供給它的資訊很少,而安裝 hook 下載的程式碼則根本不會出現。
  • 它看到的是您指給它看的內容。管線中的基礎映像檔、建置工具與 GitHub Actions,與應用程式的 manifest 是分開的。
  • 它只知道已公布的內容。新的惡意套件還沒有資安公告。
  • 清單並不等於建置。建置在執行時才解析版本,因此掃描讀到的內容與版本實際包含的內容可能不同。

這些是掃描本身的限制,無論商用或開源皆然。CRACI 曾找到 Snyk 與 Aikido 沒有回報的有漏洞套件,因為這些元件從未出現在它們掃描的內容中。

免費與商用掃描工具

免費選項就能妥善涵蓋基本需求。Dependabot 警示隨 GitHub 提供,OWASP Dependency-Check 與 Trivy 是開源工具,Grype 則與 Syft SBOM 產生工具搭配使用。商用工具則加入了跨多個團隊的政策、優先排序、可達性分析與工作流程。最佳 SCA 工具比較涵蓋了其中 13 款,而這份指南說明了為何各個免費產生工具的結果彼此不一致。

SCA 掃描與建置時記錄

CRACI 不是掃描工具,您也不必放棄現有的掃描工具。它是一款 GitHub Actions 執行器,會記錄每個作業取用的每個套件,涵蓋相依樹的每個層級,包括從 CI 快取還原的套件,接著在新漏洞公布時持續重新評估已出貨內容的 SBOM。您的掃描工具負責 pull request 與開發者電腦,CRACI 則負責建置及其後的一切。請參閱 CRACI 在您的 SCA 工具旁扮演的角色。

SCA 掃描:常見問題

什麼是 SCA 掃描?

SCA 掃描會讀取專案的 manifest、lockfile 或容器映像檔,找出它使用了哪些開源元件,並將其與漏洞及授權資料比對。

SCA 與相依套件掃描是同一件事嗎?

幾乎是。相依套件掃描通常是指檢查相依套件中的已知漏洞。SCA 是範圍更廣的用語,也涵蓋授權、過時的套件,以及產生 SBOM 等資產清冊。

SCA 掃描應該在什麼時候執行?

在 pull request 時執行,以阻止新風險進入;在 CI 建置中執行,以描述版本內容;並在發布後持續執行,因為新的資安公告會影響您已出貨的軟體。

SCA 掃描需要多久?

通常只需幾秒到幾分鐘,因為它讀取的是中繼資料,而不是分析您所有的程式碼。因此在每個 pull request 上執行都很實際。

為何不同的 SCA 掃描工具回報的結果不同?

每個工具對於讀取什麼、如何命名元件、使用哪些漏洞資料,都有各自的規則。同一個 commit 可能產生不同的元件清單與不同的發現。

SCA 掃描能找到惡意軟體嗎?

資安公告比對只有在資安公告存在後才能找到惡意版本。分析套件行為的工具可以更早發現其中一部分。新的惡意套件在出現當天並沒有資安公告。

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

在 CRACI 上執行一個 GitHub Actions 工作流程,並將其記錄的 SBOM 與掃描工具回報的元件進行比較。

預約示範