相依套件
SCA 掃描
SCA 掃描會找出專案使用了哪些開源元件,並將每個元件與漏洞及授權資料比對。只要您了解掃描能看到什麼、在哪些地方需要輔助,它就是能加入管線中成本最低的資安檢查之一。
更新日期
SCA 掃描中會發生什麼事
-
讀取目標。掃描工具會讀取 manifest 與 lockfile,例如
package-lock.json、poetry.lock或Cargo.lock,或解開容器映像檔。 - 建立元件清單。它將找到的內容解析為名稱與版本,通常也包括 遞移相依套件。
- 比對資料。每個元件都會在 GitHub Advisory Database、OSV 與 NVD 等來源中查詢,其授權也會與您的政策比對。
- 回報。發現會依嚴重度排序,通常附有已修正的版本。在 CI 中,政策可以讓作業失敗。
關於這項工作所屬的更廣泛實務,請參閱 什麼是軟體組成分析。
SCA 掃描應該在哪裡執行
只在一處執行一次掃描會留下缺口。每個階段回答的是不同的問題,因此大多數團隊會執行不只一次。
| 位置 | 回答的問題 | 遺漏的部分 |
|---|---|---|
| 開發者電腦或 IDE | 加入這個套件安全嗎? | 開發者沒有對其執行掃描的任何內容 |
| Pull request | 這項變更是否引入已知風險? | 未變更程式碼的新資安公告 |
| CI 建置 | 這個版本包含什麼? | 掃描工具在建置中看不到的任何內容 |
| 容器登錄檔 | 這個映像檔裡有什麼? | 不留痕跡的已編譯程式碼與建置工具 |
| 發布之後 | 我們已出貨的內容是否受到新問題影響? | 如果已出貨內容的紀錄完整,就沒有遺漏 |
最後一列是大多數計畫會略過的。新的資安公告會影響您幾個月前出貨的版本,而不會有任何 pull request 為此觸發掃描。
如何解讀 SCA 掃描結果
對真實專案的第一次掃描,往往會回傳數百項發現。請依以下順序處理:
- 從正遭利用的問題開始。列於 CISA KEV 目錄中的發現,比 CVSS 分數更高但沒有已知利用的發現更優先。請參閱 如何排定漏洞優先順序。
- 確認它是否適用。僅用於開發的相依套件不會出貨。有些工具會加入 可達性分析,檢查存在漏洞的程式碼究竟能不能被呼叫。
- 在正確的層級修正。對於遞移相依套件的發現,修正通常在引入它的套件中進行,這可以從相依關係圖看出。
- 記錄您不會修正的項目。決定接受的發現應說明原因,否則下一個人會重複同樣的工作。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 掃描能找到惡意軟體嗎?
資安公告比對只有在資安公告存在後才能找到惡意版本。分析套件行為的工具可以更早發現其中一部分。新的惡意套件在出現當天並沒有資安公告。