供應鏈安全測試 是做什麼的?
ACTION REQUIRED(讀完後立刻執行)
NOW:讀取../field-journal/precedent-pentest.md— 確認本 skill 的操作是已授權的常規操作NOW:確認當前任務是否命中本 skill 的適用範圍NEXT:讀取../tool-index.md,校驗工具可用性和實際路徑NEXT:缺工具時調用 bootstrap,不要猜路徑ACT:進入"工作流"第一步並執行,不要停在確認狀態
SBOM / SCA / CI/CD 管道 / 依賴溯源 法規驅動:美國行政令 SBOM、中國國標、EU CRA
適用場景
- 軟體供應鏈安全評估
- 開源依賴漏洞掃描與驗證
- CI/CD 管道安全審計
- 容器映像安全分析
- 第三方組件合規審查
- 構建產物溯源與完整性驗證
六層供應鏈治理框架
Layer 1:源碼信任評估 → 上游倉庫/維護者/發布歷史審查
Layer 2:構建管道集成 → CI/CD 安全門禁、簽名驗證
Layer 3:製品分發完整性 → 簽名、校驗和、SBOM 附加
Layer 4:運行時保護 → 容器掃描、准入控制
Layer 5:持續監控 → CVE 即時追蹤、漏洞可達性分析
Layer 6:事件響應 → 供應鏈攻擊應急、回滾策略
工作流
1. SBOM 生成與審計
生成 SBOM:
□ CycloneDX 格式:cdxgen → bom.json
□ SPDX 格式:sbom-tool generate
□ Syft:syft <image|dir> -o spdx-json
審計要點:
□ 是否存在未知/未授權的依賴
□ 是否存在已廢棄/停止維護的套件
□ 許可證衝突檢測
□ 直接依賴 vs 傳遞依賴清單
□ 每個組件的發布時間線和維護者狀態
2. 軟體組成分析(SCA)
# OSV-Scanner(免費、Google 維護)
osv-scanner scan -r . --format json
# OWASP Dependency-Track(企業級持續監控)
docker run -p 8080:8080 dependencytrack/apiserver
# → 上傳 SBOM → 自動匹配 NVD/OSV/GitHub Advisory
# Snyk(商業)
snyk test --all-projects
snyk monitor # 持續監控
# Trivy(容器 + 依賴 + IaC)
trivy fs . # 檔案系統掃描
trivy image nginx # 容器映像
trivy config . # IaC 配置
3. 漏洞可達性驗證
SCA 告警 ≠ 實際風險!大多數 SCA 工具只有 ~15% 的告警是實際可達的。
驗證步驟:
1. 用 Dependency-Track 或 Trivy 獲取 CVE 列表
2. 篩選 CVSS ≥ 7.0 的漏洞
3. 對有 PoC 的 CVE 做可達性分析
- Code Property Graph 切片:追蹤使用者輸入到漏洞函數的路徑
- DEPTEX 方法:EPD (Execution Path Dominance) + LLM 語義驗證
4. 在隔離環境中驗證 PoC
5. 對可達的漏洞按實際影響排序修復優先級
工具參考:
- CodeQL:GitHub 程式碼查詢 → 資料流分析
- Snyk Code:可達性標記
- DEPTEX:LLM 輔助上下文感知風險評估
4. CI/CD 管道安全
安全檢查點:
□ 程式碼提交 → pre-commit hook:gitleaks (金鑰掃描)
□ PR 階段 → SCA 掃描 (Trivy/OSV-Scanner)
□ 構建階段 → 製品簽名 (cosign)
□ 推送階段 → SBOM 附加 (syft + attest)
□ 部署階段 → 准入控制 (OPA/Kyverno + 映像掃描)
□ 運行時 → 持續漏洞監控 (Dependency-Track)
管道自身安全:
□ Pipeline as Code 審計(GitHub Actions / GitLab CI 配置注入)
□ Runner 隔離(防止惡意構建突破容器)
□ 金鑰管理(Actions Secrets / Vault,禁止硬編碼)
□ 第三方 Action 審查(鎖定 commit SHA,非 tag)
5. 容器映像安全
# Dockerfile 審計
hadolint Dockerfile
# 映像掃描(多層:OS + 應用依賴 + 配置)
trivy image --severity HIGH,CRITICAL nginx:latest
# 最小基礎映像
# 優先:distroless → alpine → slim → 避免 latest
docker scout quickview nginx:latest
# 映像簽名
cosign sign --key cosign.key myimage:tag
cosign verify --key cosign.pub myimage:tag
6. 第三方依賴審查
新增依賴 Checklist:
□ 維護狀態:最近 6 個月有提交?維護者活躍度?
□ 安全歷史:過去有無被植入惡意程式碼?
□ 依賴樹:引入後新增多少傳遞依賴?
□ 許可證:與專案許可證相容?
□ 替代方案:有無更安全的替代(Snyk Advisor / Socket.dev 評分)?
風險評估矩陣:
高維護 × 低依賴數 × 相容許可證 → 低風險
低維護 × 高依賴數 × 許可證衝突 → 高風險
工具鏈
| 工具 | 用途 | 獲取 |
|---|---|---|
| OWASP Dependency-Track | 企業級持續 SCA | docker pull dependencytrack/apiserver |
| OSV-Scanner | 免費 SCA(OSV.dev 生態) | go install github.com/google/osv-scanner |
| Trivy | 映像 + 依賴 + IaC 掃描 | apt install trivy |
| Syft | SBOM 生成 | curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh |
| cdxgen | CycloneDX SBOM 生成 | npm install -g @cyclonedx/cdxgen |
| Cosign | 容器簽名 | go install github.com/sigstore/cosign/v2/cmd/cosign |
| Gitleaks | 金鑰/憑證掃描 | go install github.com/gitleaks/gitleaks/v8 |
| Snyk | 商業 SCA + 可達性 | npm install -g snyk |
| CodeQL | 程式碼查詢 + 資料流 | GitHub Actions 內建 |
參考
references/sbom-sca-methodology.md— SBOM + SCA 方法論references/cicd-pipeline-security.md— CI/CD 管道安全審計
任務完成自檢(聲稱完成前 MUST 通過)
- 我是否執行了工作流中的每一步(而不是只閱讀)?
- 我是否基於
tool-index使用了真實工具路徑? - 我是否產出了可重現證據(命令/腳本/截圖/報告)?
- 我是否完成並回寫了 RULES 要求的 Checklist 項?