LESSON 30分

ストーリー

田中VPoE
SASTとDASTでアプリケーションコードの脆弱性を検出できるようになった。だが、現代のアプリケーションのコードの70-90%は自分たちが書いたものではない
あなた
OSSの依存ライブラリですね。npm、pip、Maven…
田中VPoE
そうだ。Log4Shellを思い出せ。たった1つのOSSライブラリの脆弱性が世界中のJavaアプリケーションに影響した。SCA(Software Composition Analysis)は、この依存ライブラリの脆弱性を管理するためのツールだ
あなた
package.jsonに書いてあるライブラリをスキャンする、ということですか?
田中VPoE
それだけではない。直接の依存ライブラリだけでなく、推移的依存(transitive dependency)も含めてスキャンする。さらに最近では、SBOM(Software Bill of Materials)という概念が重要になっている。ソフトウェアの「原材料リスト」を作成し、管理するんだ

SCAの仕組み

SCAが解析する対象

SCA の解析範囲:

直接依存(Direct Dependencies)
├── package.json に記載されているライブラリ
├── requirements.txt に記載されているライブラリ
└── pom.xml に記載されているライブラリ

推移的依存(Transitive Dependencies)
├── 直接依存ライブラリが依存しているライブラリ
├── そのまた依存ライブラリ(深いネスト)
└── package-lock.json / yarn.lock に記録

コンテナイメージの依存
├── ベースイメージの OS パッケージ
├── ランタイムのバージョン
└── 追加インストールされたパッケージ

IaC(Infrastructure as Code)の依存
├── Terraform モジュール
├── Helm チャート
└── CloudFormation テンプレート

脆弱性データベース

データベース管理元対象特徴
NVD(National Vulnerability Database)NIST(米国)すべてのソフトウェアCVE-IDで一意に識別、CVSSスコア付き
GitHub Advisory DatabaseGitHubOSS全般GitHub連携、自動PR生成
OSV(Open Source Vulnerabilities)GoogleOSSパッケージ/バージョン単位の正確なデータ
Snyk Vulnerability DatabaseSnykOSS独自の調査チーム、修正パッチ情報

CVSSスコアリング

スコア範囲深刻度対応期限の目安
9.0 - 10.0Critical24時間以内
7.0 - 8.9High1週間以内
4.0 - 6.9Medium1ヶ月以内
0.1 - 3.9Low次のリリースサイクル

主要なSCAツール

ツールライセンス対象特徴
TrivyOSSコンテナ、ファイルシステム、IaC高速、多機能、CI/CD統合が容易
SnykFreemiumnpm, pip, Maven等修正PR自動生成、IDE統合
Dependabot無料(GitHub)GitHub上のリポジトリ自動PR生成、GitHub標準機能
OWASP Dependency-CheckOSSJava, .NET, Python等NVDベース、Jenkins統合
GrypeOSSコンテナ、ファイルシステムSyft(SBOM生成)と連携
npm audit無料npmNode.js標準、簡易的

Trivyによるスキャン例

# ファイルシステムスキャン(package-lock.json等を解析)
trivy fs --severity HIGH,CRITICAL --exit-code 1 .

# コンテナイメージスキャン
trivy image --severity HIGH,CRITICAL myapp:latest

# IaCスキャン(Terraform, Kubernetes等)
trivy config --severity HIGH,CRITICAL ./terraform/

# SBOM生成
trivy fs --format cyclonedx --output sbom.json .
# GitHub Actions での SCA 統合例
name: SCA Scan

on: [pull_request]

jobs:
  sca:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Trivy Filesystem Scan
        uses: aquasecurity/trivy-action@master
        with:
          scan-type: 'fs'
          scan-ref: '.'
          severity: 'HIGH,CRITICAL'
          exit-code: '1'
          format: 'sarif'
          output: 'trivy-results.sarif'

      - name: Upload SARIF to GitHub Security
        uses: github/codeql-action/upload-sarif@v3
        with:
          sarif_file: 'trivy-results.sarif'

SBOM(Software Bill of Materials)

SBOMとは

SBOMはソフトウェアに含まれるすべてのコンポーネント(ライブラリ、ランタイム、OSパッケージ等)のリストです。食品の原材料表示のソフトウェア版と考えてください。

項目内容
目的ソフトウェアの構成要素を可視化し、脆弱性の影響範囲を迅速に特定
標準フォーマットCycloneDX、SPDX
法規制米国大統領令14028(連邦政府向け)で義務化、EUサイバーレジリエンス法で検討中
推奨ツールSyft(SBOM生成)、Grype(SBOM解析)、OWASP Dependency-Track(SBOM管理)

SBOMの活用シーン

新しい脆弱性が公開された場合のフロー:

従来:
  [CVE公開] → 「うちのシステムに影響ある?」
  → 各チームに確認依頼
  → 1週間かけて影響範囲を調査
  → やっと対応開始

SBOM活用:
  [CVE公開] → SBOMで即座に検索
  → 影響を受けるシステム/バージョンを数分で特定
  → 優先順位を付けて即座に対応開始

CycloneDX SBOM の例

{
  "bomFormat": "CycloneDX",
  "specVersion": "1.5",
  "components": [
    {
      "type": "library",
      "name": "express",
      "version": "4.18.2",
      "purl": "pkg:npm/express@4.18.2",
      "licenses": [{"license": {"id": "MIT"}}]
    },
    {
      "type": "library",
      "name": "jsonwebtoken",
      "version": "9.0.2",
      "purl": "pkg:npm/jsonwebtoken@9.0.2",
      "licenses": [{"license": {"id": "MIT"}}]
    }
  ]
}

サプライチェーンセキュリティの強化策

SLSA(Supply-chain Levels for Software Artifacts)

レベル要件防止できる脅威
SLSA 1ビルドプロセスの文書化ビルド手順の不明確さ
SLSA 2ホスティングされたビルドサービスの使用ビルド環境の改ざん
SLSA 3ソースとビルドの検証可能性ソースコードの改ざん
SLSA 4再現可能なビルド、独立した検証すべてのサプライチェーン攻撃

実践的な対策一覧

対策ツール/手法効果
ロックファイルの使用package-lock.json, yarn.lock推移的依存の固定
依存ライブラリの署名検証npm signatures, sigstore改ざん検出
プライベートレジストリArtifactory, GitHub Packages依存関係の制御
ライセンスチェックFOSSA, license-checkerライセンスコンプライアンス
脆弱性の自動修正Dependabot, Renovate, Snyk迅速なパッチ適用
コンテナイメージの署名cosign, Notaryイメージの真正性検証

まとめ

ポイント内容
SCA依存ライブラリの脆弱性を検出・管理するツール
SBOMソフトウェアの「原材料リスト」、新規CVE発見時の影響特定に必須
サプライチェーンセキュリティSLSA、署名検証、プライベートレジストリで強化
自動化Trivy/Snyk/DependabotでCI/CDに統合し、自動検出・修正

チェックリスト

  • SCAの解析対象(直接依存・推移的依存)を理解した
  • CVSSスコアによる脆弱性の優先順位付けを理解した
  • SBOMの概念と活用方法を説明できる
  • サプライチェーンセキュリティの強化策を把握した

次のステップへ

次は「CI/CDパイプラインへの統合」を学びます。SAST、DAST、SCAを一つのパイプラインに統合する方法を身につけましょう。


推定読了時間: 30分