跳至主要内容

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 可以互相搭配使用:

  1. Syft 先產生 SBOM(軟體物料清單),識別應用程式中的所有組件。
  2. Grype 讀取 SBOM,並根據已知的漏洞資料庫進行掃描,找出可能的安全問題。

這種方式有幾個優勢:

  • 準確性高:Syft 的依賴解析能力強,確保漏洞掃描的基礎數據完整。
  • 自動化:適用於 CI/CD 流程,可在開發階段自動掃描並防止漏洞進入生產環境。
  • 靈活性:可搭配不同的輸出格式與其他安全工具(如 Trivy、Snyk)一起使用。

使用場景

Syft

  • 開發人員需要了解應用程式的組件與依賴關係(SBOM)。
  • 確保組件符合開源合規要求(License Compliance)。
  • 在供應鏈安全(Supply Chain Security)中監控應用程式的組成。

Grype

  • DevSecOps 團隊想要在 CI/CD 流程中進行自動化漏洞掃描。
  • 想確保部署的容器映像沒有已知的 CVE 漏洞。
  • 企業想要進行安全合規性檢查,確保所有應用程式符合安全標準。

實際操作

使用 Syft 取得容器的 SBOM

  1. 首先我們透過 binary 安裝 Syft,github
curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b /usr/local/bin
  1. 首先我們已 ubuntu:latest 當作我們要分析的 docker image,並儲存到 sbom.json 檔案中。
syft ubuntu:latest -o cyclonedx-json > sbom.json

使用 Grype 分析容器安全

  1. 首先我們透過 binary 安裝 Grype,github
curl -sSfL https://raw.githubusercontent.com/anchore/grype/main/install.sh | sh -s -- -b /usr/local/bin
  1. 然後我們透過 grype 分析剛剛取得的 sbom.json。
grype sbom:sbom.json
  1. 接下來我們就會取得風險評估。
NAME                INSTALLED                FIXED-IN                 TYPE  VULNERABILITY   SEVERITY
coreutils 9.4-3ubuntu6 deb CVE-2016-2781 Low
gpgv 2.4.4-2ubuntu17 deb CVE-2022-3219 Low
libc-bin 2.39-0ubuntu8.3 2.39-0ubuntu8.4 deb CVE-2025-0395 Medium
libc-bin 2.39-0ubuntu8.3 deb CVE-2016-20013 Negligible
libc6 2.39-0ubuntu8.3 2.39-0ubuntu8.4 deb CVE-2025-0395 Medium
libc6 2.39-0ubuntu8.3 deb CVE-2016-20013 Negligible
libcap2 1:2.66-5ubuntu2 1:2.66-5ubuntu2.2 deb CVE-2025-1390 Medium
libgcrypt20 1.10.3-2build1 deb CVE-2024-2236 Low
libgnutls30t64 3.8.3-1.1ubuntu3.2 3.8.3-1.1ubuntu3.3 deb CVE-2024-12243 Medium
libpam-modules 1.5.3-5ubuntu5.1 deb CVE-2024-10963 Medium
libpam-modules 1.5.3-5ubuntu5.1 deb CVE-2024-10041 Medium
libpam-modules-bin 1.5.3-5ubuntu5.1 deb CVE-2024-10963 Medium
libpam-modules-bin 1.5.3-5ubuntu5.1 deb CVE-2024-10041 Medium
libpam-runtime 1.5.3-5ubuntu5.1 deb CVE-2024-10963 Medium
libpam-runtime 1.5.3-5ubuntu5.1 deb CVE-2024-10041 Medium
libpam0g 1.5.3-5ubuntu5.1 deb CVE-2024-10963 Medium
libpam0g 1.5.3-5ubuntu5.1 deb CVE-2024-10041 Medium
libssl3t64 3.0.13-0ubuntu3.4 3.0.13-0ubuntu3.5 deb CVE-2024-9143 Low
libssl3t64 3.0.13-0ubuntu3.4 deb CVE-2024-41996 Low
libssl3t64 3.0.13-0ubuntu3.4 3.0.13-0ubuntu3.5 deb CVE-2024-13176 Low
libtasn1-6 4.19.0-3build1 4.19.0-3ubuntu0.24.04.1 deb CVE-2024-12133 Medium
login 1:4.13+dfsg1-4ubuntu3.2 deb CVE-2024-56433 Medium
passwd 1:4.13+dfsg1-4ubuntu3.2 deb CVE-2024-56433 Medium

結論

  • Syft 負責 生成 SBOM(軟體物料清單),幫助開發者理解應用程式的組件。
  • Grype 負責 漏洞掃描,幫助識別 SBOM 中的已知安全問題。
  • 兩者可以互相搭配,提供完整的 軟體供應鏈安全解決方案,並且適合 DevSecOps 自動化流程。

這兩款工具都適用於 企業安全團隊、開發者、DevOps/DevSecOps,如果你的團隊需要加強容器或應用程式的安全性,這會是一個很好的開源解決方案!🚀