SCA 軟體組成分析
Vibe Prompt
「幫我在 GitHub Actions 中加入 Snyk 掃描,檢查 npm 套件的已知漏洞。」
Snyk 掃描
- name: Snyk Scan
uses: snyk/actions/node@master
env:
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
with:
args: --severity-threshold=high
Dependabot(GitHub 內建)
# .github/dependabot.yml
version: 2
updates:
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "weekly"
open-pull-requests-limit: 10
labels:
- "security"
- package-ecosystem: "docker"
directory: "/"
schedule:
interval: "weekly"
漏洞嚴重性
| 等級 | CVSS 分數 | 行動 | |------|----------|------| | Critical | 9.0-10.0 | 立即更新 | | High | 7.0-8.9 | 24 小時內更新 | | Medium | 4.0-6.9 | 7 天內更新 | | Low | 0.1-3.9 | 下次更新 |
npm audit
npm audit # 檢查漏洞
npm audit fix # 自動修復
npm audit fix --force # 強制修復(可能破壞相容性)
關鍵要點
SCA 工具比較
| 工具 | 支援語言 | SBOM | 費用 | |:----:|:--------:|:----:|:----:| | Snyk | 30+ 語言 | ✅ CycloneDX | 有限免費 | | Dependabot | 主要語言 | ❌ | 免費(GitHub 內建) | | Renovate | 主要語言 | ❌ | 免費(開源) | | Trivy | 主要語言 | ✅ CycloneDX | 免費(開源) | | Grype | 主要語言 | ✅ SPDX | 免費(開源) |
Snyk CLI 指令
# 安裝
npm install -g snyk
# 認證
snyk auth
# 掃描專案
snyk test --all-projects
# 持續監控
snyk monitor
# 產生 SBOM
snyk sbom --format=cyclonedx1_4
什麼是 SBOM?
SBOM (Software Bill of Materials) 是軟體的原料清單,列出了專案中使用的所有開源套件及其版本。美國政府已要求所有聯邦系統的供應商必須提供 SBOM(拜登行政命令 EO 14028)。
SCA:你的 dependencies 安全嗎?
現代應用程式極度依賴 open source 套件。一個典型的 Node.js 專案可能間接依賴了上千個套件——其中任何一個有漏洞,你的應用就會受影響。
SCA 掃描分析什麼?
| 分析項目 | 舉例 | 風險 |
|:--------|:----|:----|
| 已知漏洞 | CVE-2024-1234(lodash 4.17.20) | 直接影響你的應用 |
| 過期版本 | express 3.x(已終止支援) | 不會收到安全更新 |
| 授權條款 | GPL 套件用於商業產品 | 法律風險 |
| 惡意套件 | typosquatting(event-stream vs eventstream) | 資料竊取 |
Snyk vs OWASP Dependency Check
| 比較 | Snyk | OWASP Dependency Check | |:----|:----|:---------------------| | 資料庫 | Snyk 自家 + NVD | NVD 為主 | | 整合 | GitHub、GitLab、CI/CD | Jenkins、CLI | | 免費方案 | 有限(200 tests/month) | 完全開源免費 | | Fix PR 自動產生 | ✅ | ❌ | | 容器掃描 | ✅ | ❌ |
下一章預告:完整 DevSecOps 流水線
SAST(靜態分析)和 SCA(依賴分析)是 DevSecOps 的兩個核心工具。下一章將把它們全部整合起來,建立一條從 Commit 到 Deploy 都內建安全檢查的完整 DevSecOps 流水線。