ストーリー
田
田中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 Database | GitHub | OSS全般 | GitHub連携、自動PR生成 |
| OSV(Open Source Vulnerabilities) | Google | OSS | パッケージ/バージョン単位の正確なデータ |
| Snyk Vulnerability Database | Snyk | OSS | 独自の調査チーム、修正パッチ情報 |
CVSSスコアリング
| スコア範囲 | 深刻度 | 対応期限の目安 |
|---|
| 9.0 - 10.0 | Critical | 24時間以内 |
| 7.0 - 8.9 | High | 1週間以内 |
| 4.0 - 6.9 | Medium | 1ヶ月以内 |
| 0.1 - 3.9 | Low | 次のリリースサイクル |
主要なSCAツール
| ツール | ライセンス | 対象 | 特徴 |
|---|
| Trivy | OSS | コンテナ、ファイルシステム、IaC | 高速、多機能、CI/CD統合が容易 |
| Snyk | Freemium | npm, pip, Maven等 | 修正PR自動生成、IDE統合 |
| Dependabot | 無料(GitHub) | GitHub上のリポジトリ | 自動PR生成、GitHub標準機能 |
| OWASP Dependency-Check | OSS | Java, .NET, Python等 | NVDベース、Jenkins統合 |
| Grype | OSS | コンテナ、ファイルシステム | Syft(SBOM生成)と連携 |
| npm audit | 無料 | npm | Node.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に統合し、自動検出・修正 |
チェックリスト
次のステップへ
次は「CI/CDパイプラインへの統合」を学びます。SAST、DAST、SCAを一つのパイプラインに統合する方法を身につけましょう。
推定読了時間: 30分