相依套件
SAST 與 SCA 比較
SAST 找出您團隊所撰寫程式碼中的缺陷;SCA 找出您團隊所依賴程式碼中的已知風險。兩者檢查的是不同的程式碼,抓到的也是不同的問題,因此誰都無法取代誰。
更新日期
差異一覽
| SAST | SCA | |
|---|---|---|
| 全名 | 靜態應用程式安全測試(Static application security testing) | 軟體組成分析(Software composition analysis) |
| 檢查對象 | 您自己的原始碼 | 開源與第三方元件 |
| 能找出 | 注入攻擊、不安全的輸入處理、不安全的寫法 | 已知漏洞、授權問題、過時的套件 |
| 依據 | 描述不良程式碼樣貌的規則或模型 | 已公布資安公告的資料庫 |
| 何時出現發現結果 | 您的程式碼變更時 | 相依套件變更,或有新資安公告發布時 |
| 常見雜訊 | 對實際上安全的程式碼產生誤報 | 比對確實相符,卻不影響您使用該套件的方式 |
| 修正方式 | 修改您的程式碼 | 升級或替換該元件 |
SAST 做什麼
SAST 工具在不執行原始碼的情況下讀取程式碼,並追蹤資料在其中的流向。如果使用者輸入未經清理就進入資料庫查詢, 它會回報對應的檔案與行號。由於它分析的是您的程式碼,因此能找出從未被公開的缺陷。這也正是誤報抱怨的來源, 因為它推論的是程式碼可能會做什麼,而不是實際做了什麼。
SCA 做什麼
SCA 掃描會辨識專案中的元件,並在漏洞與授權資料中查詢這些元件。它不分析您的邏輯。 它知道某個版本有已公布的缺陷,因此結果通常是事實,但除非工具另外加入可達性分析, 否則它較難說明該缺陷是否與您有關。完整說明請參閱什麼是軟體組成分析。
為什麼兩者都需要
這兩種失誤彼此獨立。沒有任何 SAST 發現的程式碼庫,仍可能交付有漏洞的相依套件;而乾淨的相依關係樹, 也無法說明您自己的處理常式中是否有 SQL 注入。
兩者的時間點也不同。SAST 的發現在有人修改程式碼時出現,因此 pull request 檢查就能抓到大部分。 SCA 的發現則可能出現在您數個月前已交付的版本上,就在新資安公告發布的那一天,沒有任何 commit 觸發任何事。 因此,SCA 需要有機制持續檢查已交付的內容。
DAST 的定位
動態應用程式安全測試(DAST)會像真正的攻擊者一樣,從外部攻擊執行中的應用程式。 它不需讀取程式碼,就能找出只在執行期才會出現的問題,例如驗證與設定方面的問題。
| SAST | SCA | DAST | |
|---|---|---|---|
| 需要 | 原始碼 | 資訊清單、映像檔或建置紀錄 | 執行中的應用程式 |
| 執行時機 | 於 pull request 上 | 於 pull request 上、建置中及發布後 | 針對測試環境 |
| 最擅長 | 您程式碼中的缺陷 | 相依套件中的已知風險 | 執行期與設定缺陷 |
應該先導入哪一個?
對大多數團隊而言,是 SCA。它設定快速,數秒到數分鐘就能跑完,而且涵蓋您所交付內容中最大的一部分, 因為現代應用程式大多由相依套件構成。接著在 pull request 上加入 SAST,並針對您技術堆疊中重要的規則調校。 等您有穩定的測試環境可供使用,再加入 DAST。
該買一個平台,還是多套工具?
Snyk、Checkmarx 與 GitHub Advanced Security 等平台將 SAST 與 SCA 綁在一起,代表一份合約、一套工作流程。 個別工具在各自領域可能更強。更重要的是輸入:兩種掃描工具都是根據宣告或撰寫的內容運作, 沒有一種看得到建置實際拉進了什麼。
兩者都涵蓋不到的部分
SAST 與 SCA 都是讀取檔案。兩者都不觀察建置,因此由安裝掛鉤下載的程式碼、從 CI 快取還原的套件, 以及建置工具本身,都可能落在視野之外。這個缺口正是軟體供應鏈安全要處理的問題。
CRACI 負責這一塊,並將程式碼掃描交給專為此打造的工具。依設計,它不提供 SAST 或機密掃描, 而且有許多優秀的 SAST 工具可與它並用。它是一個 GitHub Actions 執行器,會將每個作業下載的內容記錄到 SBOM 中, 並持續以新漏洞比對已交付內容的 SBOM。請參閱最佳 SCA 工具, 以及CRACI 與這些工具並用時的定位。
SAST 與 SCA:常見問題
SAST 與 SCA 有什麼不同?
SAST 分析您團隊撰寫的程式碼,找出注入攻擊等缺陷。SCA 分析您所依賴的開源與第三方元件,找出已知漏洞與授權問題。
SCA 能取代 SAST 嗎?
不能。兩者檢查的是不同的程式碼。SCA 找不到您自身邏輯中的缺陷,SAST 也不會告訴您某個相依套件有已公布的漏洞。
SAST、DAST 與 SCA 有什麼不同?
SAST 讀取您的原始碼。SCA 檢查您的相依套件。DAST 從外部測試執行中的應用程式。每一種都能找到另外兩種遺漏的問題。
Snyk 是 SAST 還是 SCA?
兩者皆是。Snyk 起家於開源相依套件掃描,也提供 SAST,以及容器與基礎架構即程式碼(IaC)掃描。
SonarQube 是 SAST 還是 SCA?
SonarQube 最為人所知的是對您自有程式碼的靜態分析,也就是 SAST。其他包含的功能,請查看目前各版本的說明。
SAST 與 SCA,應該先導入哪一個?
SCA 通常更快見效,因為它設定簡單,且涵蓋您所交付內容中最大的一部分。SAST 則需要更多調校,才能壓低誤報。