サプライチェーンセキュリティ

ソフトウェアの依存関係やビルドパイプラインを通じた攻撃を防ぐセキュリティ対策

セキュリティパッケージ管理

サプライチェーンセキュリティとは

ソフトウェアサプライチェーンセキュリティは、アプリケーションが依存するライブラリ、ビルドツール、CI/CD パイプライン、コンテナイメージなどを通じた攻撃を防ぐセキュリティ対策である。

現代のアプリケーションは大量のオープンソースライブラリに依存している。npm の平均的なプロジェクトは数百の推移的依存関係を持つ。その中の 1 つでも侵害されれば、アプリケーション全体が危険にさらされる。2020 年の SolarWinds 事件、2021 年の Log4Shell 脆弱性、2024 年の xz-utils バックドアで、サプライチェーン攻撃の深刻さが広く認識された。

攻撃ベクトル

依存関係の汚染

  • Typosquatting: 人気パッケージに似た名前のマルウェアパッケージを公開する (lodashlodahs)
  • Dependency Confusion: 社内パッケージと同名のパッケージを公開レジストリに登録し、ビルド時に公開版が優先されることを悪用する
  • メンテナーアカウントの乗っ取り: npm パッケージのメンテナーのアカウントを侵害し、マルウェアを含むバージョンを公開する

ビルドパイプラインの侵害

  • CI/CD の設定ファイルを改ざんし、ビルド成果物にバックドアを挿入する
  • GitHub Actions のサードパーティアクションにマルウェアが含まれる
  • ビルドサーバー自体が侵害される

コンテナイメージの改ざん

  • ベースイメージに脆弱性やマルウェアが含まれる
  • Docker Hub の非公式イメージにバックドアが仕込まれる

対策

ロックファイルの厳格な管理

# package-lock.json をコミットし、CI では npm ci を使う
npm ci  # package-lock.json と完全一致するインストール (npm install は使わない)

npm install はロックファイルを更新する可能性があるが、npm ci はロックファイルと完全一致しないとエラーになる。CI では必ず npm ci を使う。

SCA (Software Composition Analysis)

# 脆弱性チェック
npm audit --omit=dev  # 本番依存のみチェック

# 自動修正
npm audit fix

npm audit は既知の CVE (脆弱性) を検出する。CI に組み込み、Critical/High の脆弱性が検出されたらビルドを失敗させる。

SBOM (Software Bill of Materials)

SBOM はアプリケーションが依存する全ライブラリのリスト (部品表) だ。脆弱性が公開されたとき、影響を受けるアプリケーションを即座に特定できる。

# CycloneDX 形式で SBOM を生成
npx @cyclonedx/cyclonedx-npm --output-file sbom.json

依存関係の最小化

不要な依存を削除し、攻撃対象面を縮小する。is-odd (数値が奇数かを判定する 1 行のパッケージ) のような自明な処理は自前で書く。depcheck で未使用の依存を検出できる。

GitHub Actions のセキュリティ

# ❌ タグ指定 (改ざんリスクあり)
- uses: actions/checkout@v4

# ✅ コミットハッシュ指定 (改ざん不可)
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11

サードパーティアクションはタグではなくコミットハッシュで固定する。タグは後から別のコミットに付け替えられるが、コミットハッシュは不変だ。

AWS での対策

  • ECR イメージスキャン: プッシュ時に自動でコンテナイメージの脆弱性をスキャン
  • CodeArtifact: npm パッケージのプライベートレジストリ。Dependency Confusion を防止
  • Inspector: Lambda 関数の依存関係を自動スキャンし、脆弱性を検出

サプライチェーン攻撃の対策

対策 ツール 説明
依存脆弱性スキャン npm audit, Snyk 既知の脆弱性を検出
SBOM Syft, Trivy ソフトウェア部品表を生成
ロックファイル package-lock.json バージョンを固定
署名検証 Sigstore パッケージの署名を検証
最小権限 GitHub Actions permissions ワークフローの権限を制限

理論と実装の両面から学ぶなら関連書籍が参考になる。

関連用語