SBOM and Security Scanning
Syft 和 Grype 是由 Anchore 開發的兩款開源工具,主要用於軟體組件分析(Software Composition Analysis, SCA)和容器安全掃描。以下是詳細介紹:
1. Syft
Syft 是一個 軟體物料清單(Software Bill of Materials, SBOM)生成工具,用於分析和記錄軟體中的組件,幫助開發人員和安全團隊了解應用程式的依賴關係。
主要功能
- 產生 SBOM:從容器映像(Docker images)、目錄、庫(repositories)或打包格式(如
.tar)中提取元數據,並生成 SBOM。 - 支援多種格式:SBOM 可輸出為 CycloneDX、SPDX、JSON、Text 等多種格式。
- 檢測依賴項:支援多種編程語言與打包格式,如 Python(pip、requirements.txt)、Node.js(npm、yarn)、Go(modules)、Java(Maven、Gradle)等。
- 輕量且快速:適用於 CI/CD 流水線,能夠自動生成並驗證 SBOM。
- 開源與可擴展性:可以與其他安全工具(如 Grype)整合,增強安全性掃描能力。
使用方式
Syft 可以用於掃描本地檔案夾或容器映像,例如:
# 掃描本地檔案夾並輸出 SBOM(JSON 格式)
syft dir:/path/to/project -o json
# 掃描 Docker 映像並輸出 SBOM(CycloneDX 格式)
syft docker:ubuntu:latest -o cyclonedx-json
2. Grype
Grype 是一個 軟體漏洞掃描工具,可與 Syft 產生的 SBOM 結合使用,以識別應用程式和容器映像中的已知漏洞(CVE)。
主要功能
- 漏洞掃描:檢測軟體中的已知安全漏洞,支援多種來源,如 NVD(National Vulnerability Database)、GitHub Security Advisories、OSV(Open Source Vulnerabilities)。
- 與 Syft 整合:可直接使用 Syft 產生的 SBOM 來進行漏洞掃描,提高準確性和效率。
- 支援多種平台與包管理工具:
- 作業系統:Alpine、Debian、Ubuntu、RHEL、CentOS、Fedora
- 程式語言:Python(pip)、Node.js(npm)、Go(modules)、Java(Maven/Gradle)等
- 多種輸出格式:支援 JSON、Table、CycloneDX,方便整合到 CI/CD 或報告系統中。
- 自動更新漏洞數據庫:Grype 會定期更新其漏洞數據來源,以確保掃描結果是最新的。
使用方式
Grype 可以直接用來掃描容器映像或本地目錄,例如:
# 掃描 Docker 容器映像中的漏洞
grype ubuntu:latest
# 掃描本地檔案夾中的漏洞
grype dir:/path/to/project
# 使用 Syft 產生的 SBOM 來掃描漏洞
syft ubuntu:latest -o cyclonedx-json > sbom.json
grype sbom:sbom.json
Syft & Grype 的關係
Syft 和 Grype 可以互相搭配使用:
- Syft 先產生 SBOM(軟體物料清單),識別應用程式中的所有組件。
- Grype 讀取 SBOM,並根據已知的漏洞資料庫進行掃描,找出可能的安全問題。
這種方式有幾個優勢:
- 準確性高:Syft 的依賴解析能力強,確保漏洞掃描的基礎數據完整。
- 自動化:適用於 CI/CD 流程,可在開發階段自動掃描並防止漏洞進入生產環境。
- 靈活性:可搭配不同的輸出格式與其他安全工具(如 Trivy、Snyk)一起使用。
使用場景
Syft
- 開發人員需要了解應用程式的組件與依賴關係(SBOM)。
- 確保組件符合開源合規要求(License Compliance)。
- 在供應鏈安全(Supply Chain Security)中監控應用程式的組成。
Grype
- DevSecOps 團隊想要在 CI/CD 流程中進行自動化漏洞掃描。
- 想確保部署的容器映像沒有已知的 CVE 漏洞。
- 企業想要進行安全合規性檢查,確保所有應用程式符合安全標準。
實際操作
使用 Syft 取得容器的 SBOM
- 首先我們透過 binary 安裝 Syft,github。
curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b /usr/local/bin