SCA: ソフトウェア構成分析とは何ですか
SCA(ソフトウェア構成分析) そして依存関係を分析する実践 既知の脆弱性、ライセンスの問題、リスクを特定するためのプロジェクトをオープンソース化する ソフトウェアのサプライチェーンで。を超えて 最新のコードの 90% 彼が使っているのは オープンソース コンポーネントでは、依存関係のセキュリティが重要な側面になっています。
チームが作成したコードを分析する SAST とは異なり、SCA はコードに焦点を当てます。 インポート済み: npm ライブラリ、pip パッケージ、Maven 依存関係、Ruby gem、その他のコンポーネント 第三者の。人気のあるライブラリに 1 つの脆弱性があると、何千もの脆弱性が暴露される可能性があります。 Log4Shell および XZ Utils インシデントで示されているように、アプリケーション。
この記事では、主要な SCA ツール、依存関係管理について説明します。 推移的、ライセンス追跡、依存関係を最新の状態に保つための戦略。
何を学ぶか
- SCA の仕組みと推移的な依存関係分析
- Snyk、Dependabot、OWASP 依存関係チェックを構成する
- 脆弱性データベース: NVD、CVE、GitHub アドバイザリー
- オープンソースのライセンス管理とコンプライアンス
- 更新戦略: 自動パッチと手動パッチ
- CI/CD パイプラインへの SCA の統合
推移的な依存関係の問題
典型的なプロジェクトには数十の直接的な依存関係がありますが、それぞれが依存関係をもたらします。
独自の (推移的な) 依存関係。 50 の直接依存関係を持つ Node.js プロジェクトでは、
持っています 500 ~ 1000 の推移的な依存関係 nel node_modules.
推移的な依存関係の脆弱性は特に潜伏性が高くなります。 開発者はその存在に気づいていない可能性があります。 SCAは全体を分析します 依存関係ツリー (推移的なものを含む) を作成して、完全にカバーできるようにします。
SCAはクリティカルであるため
事故 Log4Shell (CVE-2021-44228) は壊滅的な影響を実証しました 人気のあるライブラリの脆弱性: 35,000 を超える Java パッケージが脆弱でした。 多くの組織では、すべてのアプリケーションを特定するのに数週間かかりました 彼らは依存症の目録を持っていなかったため、影響を受けました。 SCA はこのシナリオを防止します 最新の在庫を維持し、発見したらすぐに警告します 新たな脆弱性。
Snyk: 開発者向けの統合 SCA
スニック ワークフローに直接統合できる最新の SCA プラットフォーム 開発者の。オープンソース プロジェクトと開発者エクスペリエンスのための無料プランを提供します IDE、CLI、CI/CD の統合に優れています。
Snyk CLI: 端末分析
# Installare Snyk CLI
npm install -g snyk
# Autenticarsi
snyk auth
# Analizzare le dipendenze del progetto
snyk test
# Analizzare e monitorare (registra nel dashboard)
snyk monitor
# Analizzare un Dockerfile
snyk container test node:18-alpine
# Analizzare codice IaC
snyk iac test terraform/
# Output in formato JSON per automazione
snyk test --json --severity-threshold=high > snyk-results.json
GitHub Actions での Snyk の統合
# .github/workflows/snyk.yml
name: Snyk Security Scan
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
snyk:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "20"
- name: Install dependencies
run: npm ci
- name: Snyk Test
uses: snyk/actions/node@master
env:
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
with:
args: --severity-threshold=high --fail-on=all
- name: Snyk Monitor
if: github.ref == 'refs/heads/main'
uses: snyk/actions/node@master
env:
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
with:
command: monitor
dependabot: GitHub の自動更新
依存ボット 依存関係を監視する GitHub の組み込みサービス 脆弱なバージョンを更新するためのプル リクエストを自動的に作成します。構成 これはシンプルで、リポジトリ内の YAML ファイルを介して行われます。
# .github/dependabot.yml
version: 2
updates:
# Dipendenze npm
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "weekly"
day: "monday"
time: "09:00"
timezone: "Europe/Rome"
open-pull-requests-limit: 10
reviewers:
- "security-team"
labels:
- "dependencies"
- "security"
ignore:
- dependency-name: "*"
update-types: ["version-update:semver-major"]
groups:
dev-dependencies:
dependency-type: "development"
update-types:
- "minor"
- "patch"
# GitHub Actions
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
# Docker
- package-ecosystem: "docker"
directory: "/"
schedule:
interval: "weekly"
OWASP 依存関係チェック
OWASP 依存関係チェック を識別するオープンソースの SCA ツール プロジェクトの依存関係を確認し、既知の脆弱性が存在するかどうかを確認します。 国家の脆弱性 データベース (NVD)。 Java、.NET、Node.js、Python、Ruby、その他多くのエコシステムをサポートしています。
# .github/workflows/dependency-check.yml
name: OWASP Dependency Check
on:
push:
branches: [main]
schedule:
- cron: "0 6 * * 1" # Ogni lunedi alle 6:00
jobs:
dependency-check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: OWASP Dependency Check
uses: dependency-check/Dependency-Check_Action@main
with:
project: "my-application"
path: "."
format: "HTML"
args: >
--failOnCVSS 7
--enableRetired
--nvdApiKey ${{ secrets.NVD_API_KEY }}
- name: Upload Report
if: always()
uses: actions/upload-artifact@v4
with:
name: dependency-check-report
path: reports/
脆弱性データベース
SCA ツールは、既知の脆弱性のデータベースに依存して依存関係を特定します。 問題。主なデータベースは次のとおりです。
主な脆弱性データベース
| データベース | マネージャー | カバレッジ |
|---|---|---|
| NVD (国家脆弱性データベース) | NIST (米国政府) | すべてのプラットフォーム、24 ~ 48 時間更新 |
| GitHub アドバイザリー データベース | GitHub | npm、pip、Maven、RubyGems、NuGet、Go |
| OSV (オープンソースの脆弱性) | グーグル | マルチエコシステム、オープンフォーマット |
| Snyk 脆弱性 DB | スニック | 手動で厳選された高品質 |
オープンソースのライセンス管理
脆弱性に加えて、SCA 分析も行われます。 ライセンス 確実にするための依存関係の 法令順守。一部のオープン ソース ライセンス (GPL や AGPL など) には要件があります コピーレフトは商用ソフトウェアに重大な影響を与える可能性があります。
- 寛容 (MIT、Apache 2.0、BSD): 無料使用、制限はほとんどありません
- 弱いコピーレフト (LGPL、MPL): ライブラリへの変更は同じライセンスに基づいてリリースする必要があります
- 強力なコピーレフト (GPL、AGPL): すべての派生ソフトウェアは同じライセンスに基づいてリリースする必要があります
- 独自仕様/非標準: ケースバイケースで法的審査が必要
推奨されるライセンス ポリシー
- 承認された: MIT、Apache 2.0、BSD 2/3-Clause、ISC
- 要レビュー: LGPL、MPL、CC-BY
- ブロックされました: GPL、AGPL、SSPL (独自ソフトウェアの場合)
- 未知: 使用前に法的審査が必要
依存関係の更新戦略
依存関係を常に最新の状態に保ち、継続的な課題を抱えています。私たちが推奨する戦略は次のとおりです。
1. 重大な脆弱性に自動的にパッチを適用する
セキュリティ更新プログラムの PR を自動的に作成するように、Dependabot または Renovate を構成します。 セキュリティ パッチ (マイナー/パッチ バージョン) は、テストの場合に自動的にマージできます。 を通過し、露光時間を短縮します。
2. 毎週のグループ化された更新
重要でない更新を単一の週次 PR にグループ化して、 ノイズを軽減し、レビューを容易にします。 dependabot はグループをネイティブにサポートします。
3. メジャーバージョンとスケジュール
メジャー バージョンの更新 (重大な変更) を計画し、テストする必要がある 手動で。自動メジャーアップデートを無視し、スプリントに特定の時間を充てます。
4. ファイルのロックと再現性
常にロック ファイルを使用してください (package-lock.json, yarn.lock,
Pipfile.lock) 再現可能なビルドと使用を保証するため npm ci
の代わりに npm install ICの中で。
パイプラインの SCA: 完全なワークフロー
# .github/workflows/sca-complete.yml
name: SCA Complete Workflow
on:
push:
branches: [main]
pull_request:
jobs:
vulnerability-scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "20"
- name: Install dependencies
run: npm ci
- name: npm audit
run: npm audit --audit-level=high
- name: Snyk vulnerability scan
uses: snyk/actions/node@master
env:
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
with:
args: --severity-threshold=high
license-check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install dependencies
run: npm ci
- name: License check
run: npx license-checker --failOn "GPL-2.0;GPL-3.0;AGPL-3.0"
SCA のベスト プラクティス
- ビルドごとにスキャンする: 夜間のビルドだけでなく、すべてのパイプラインに SCA チェックを含める必要があります
- 継続的な監視: 新しい CVE が検出されたときにアラートを受信するには、Snyk/Dependabot にプロジェクトを登録します。
- ライセンスポリシー: 許容可能なライセンス ポリシーを定義して自動化する
- 最小限の依存関係: 新しい依存症をそれぞれ批判的に評価します。依存関係が少ないということは、攻撃対象領域が少ないことを意味します
- バージョンピン: ロック ファイルでは範囲ではなく正確なバージョンを使用してください
- 定期監査: 依存関係を四半期ごとにレビューして、未使用のものを削除します
結論
SCA は DevSecOps の基本的な柱であり、ソフトウェア時代では特に重要です オープンソース。脆弱性スキャン、ライセンス準拠、アップデートの組み合わせ 自動化により、ソフトウェア サプライ チェーンの脅威からプロジェクトを保護します。
次の記事では、詳しく見ていきます コンテナのセキュリティ、どのように分析するか Docker イメージを保護し、Trivy と Grype を使用してイメージ スキャンを実装し、構成する 本番環境のコンテナのランタイム保護。







