← ブログ一覧に戻る
セキュリティ2025-12-2310 分

サプライチェーン攻撃とは|事例と対策を徹底解説

ソフトウェアサプライチェーン攻撃の仕組み、SolarWinds・log4j・XZ Utilsなどの実例、そして組織が取るべき対策について詳しく解説します。

#サプライチェーン#npm#依存関係#脆弱性#オープンソース#SBOM

ソフトウェアサプライチェーン攻撃は、現代のサイバーセキュリティにおいて最も深刻な脅威の一つです。直接標的を攻撃するのではなく、その標的が信頼するソフトウェアやサービスを経由して侵入するこの攻撃手法は、検出が困難で被害が広範囲に及ぶ特徴があります。

サプライチェーン攻撃とは

サプライチェーン攻撃とは、ソフトウェアの開発・配布プロセスのいずれかの段階で悪意のあるコードを挿入し、最終的なユーザーに被害を与える攻撃手法です。

[開発者] → [ビルドシステム] → [パッケージリポジトリ] → [ユーザー]
              ↑                    ↑                    ↑
           攻撃ポイント         攻撃ポイント          攻撃ポイント

なぜサプライチェーン攻撃が増加しているのか

要因説明
依存関係の増大現代のアプリケーションは数百〜数千のパッケージに依存
信頼の連鎖正規のソフトウェアは信頼されやすく、検出を回避しやすい
攻撃の効率性1つの侵害で多数の標的に到達可能
オープンソースの普及誰でもコードを提供でき、審査が追いつかない

実際のサプライチェーン攻撃事例

SolarWinds事件(2020年)

史上最大規模のサプライチェーン攻撃として知られるSolarWinds事件は、IT管理ソフトウェア「Orion」のビルドシステムが侵害されました。

項目内容
攻撃者ロシア対外情報庁(SVR)関連グループ
被害組織約18,000組織(米国政府機関含む)
潜伏期間約9ヶ月
攻撃手法ビルドプロセスへの悪意あるコード挿入

攻撃者はSolarWindsのビルドシステムに侵入し、正規のアップデートにバックドア(SUNBURST)を仕込みました。デジタル署名も正規のものだったため、セキュリティツールでは検出できませんでした。

Log4Shell / Log4j(2021年)

Apache Log4jの脆弱性(CVE-2021-44228)は、意図的な攻撃ではなく設計上の問題でしたが、サプライチェーンリスクの典型例です。

影響を受けたサービス例:
- Amazon Web Services
- Microsoft Azure
- Google Cloud Platform
- Apple iCloud
- Minecraft
- VMware
- 他数万のサービス
項目内容
CVSSスコア10.0(最大)
影響範囲数億台のデバイス
問題点広く使われるライブラリの脆弱性が連鎖的に影響

XZ Utils バックドア(2024年)

2024年3月に発見されたXZ Utilsのバックドアは、オープンソースの信頼モデルを悪用した高度な攻撃でした。

項目内容
攻撃手法2年以上かけてメンテナーの信頼を獲得
標的SSH認証のバイパス
発見方法PostgreSQLの開発者が偶然発見
教訓長期的なソーシャルエンジニアリングの脅威

攻撃者「Jia Tan」は2年間にわたり正当な貢献を続け、メンテナーの信頼を獲得した後、バックドアを仕込みました。

npm/PyPIパッケージの悪用

パッケージリポジトリを狙った攻撃は日常的に発生しています。

タイポスクワッティング

正規パッケージ名に似た悪意あるパッケージを公開:

# 正規パッケージ
npm install lodash

# 悪意あるパッケージ(例)
npm install lodahs      # タイポ
npm install loadash     # タイポ
npm install lodash-utils # 類似名

依存関係かく乱攻撃(Dependency Confusion)

企業の内部パッケージ名と同じ名前で、高いバージョン番号のパッケージを公開リポジトリに登録:

内部リポジトリ: my-company-utils@1.0.0
公開リポジトリ: my-company-utils@99.0.0  ← 悪意あるパッケージ

結果: ビルドシステムが高いバージョンを優先してダウンロード

サプライチェーン攻撃の種類

1. ビルドシステムの侵害

開発環境やCI/CDパイプラインに侵入し、ビルド時に悪意のあるコードを挿入。

特徴:

  • 正規の署名が付与される
  • ソースコードには痕跡が残らない
  • 検出が非常に困難

2. パッケージリポジトリの悪用

npm、PyPI、Maven Centralなどに悪意のあるパッケージを公開。

手法:

  • タイポスクワッティング
  • 依存関係かく乱
  • メンテナーアカウントの乗っ取り
  • 正規パッケージへのマルウェア注入

3. ソースコードの改ざん

オープンソースプロジェクトに悪意のあるコードをコミット。

事例:

  • XZ Utilsバックドア
  • イベントストリーム事件(2018年)
  • UAParser.jsの乗っ取り(2021年)

4. サードパーティサービスの侵害

CI/CDツール、コード署名サービス、CDNなどの侵害。

事例:

  • Codecov(2021年): CI/CDスクリプトが改ざん
  • 3CX(2023年): 正規インストーラーにマルウェア

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

1. 依存関係の可視化と管理

SBOM(Software Bill of Materials)の作成

# npm
npm sbom --sbom-format cyclonedx

# Python
pip install cyclonedx-bom
cyclonedx-py -r

# Syft(汎用ツール)
syft . -o cyclonedx-json

SBOMを作成することで、使用しているすべての依存関係を把握し、脆弱性が発見された際に迅速に対応できます。

依存関係の定期監査

# npm
npm audit

# yarn
yarn audit

# Python
pip-audit

# 汎用ツール
trivy fs .
snyk test

2. 依存関係のロックとピン留め

パッケージのロック

# package-lock.json / yarn.lock を必ずコミット
git add package-lock.json
git commit -m "Lock dependencies"

バージョンの固定

{
  "dependencies": {
    "lodash": "4.17.21",
    "express": "4.18.2"
  }
}

キャレット(^)やチルダ(~)を避け、正確なバージョンを指定。

3. パッケージの信頼性評価

新しいパッケージを導入する前に確認すべき項目:

確認項目説明
ダウンロード数極端に少ない場合は注意
メンテナンス状況最終更新日、Issue対応状況
依存関係の数過度に多い場合はリスク増
ソースコードの確認不審なコードがないか
組織の信頼性既知の開発者・組織か
# npmパッケージの情報確認
npm info lodash

# パッケージの評価ツール
npx socket security npm:lodash

4. ビルド環境のセキュリティ強化

CI/CDパイプラインの保護

# GitHub Actionsの例
jobs:
  build:
    runs-on: ubuntu-latest
    permissions:
      contents: read  # 最小権限
    steps:
      - uses: actions/checkout@v4
        with:
          persist-credentials: false

      # 依存関係の検証
      - name: Verify dependencies
        run: npm ci --ignore-scripts

      # 脆弱性スキャン
      - name: Security audit
        run: npm audit --audit-level=high

再現可能なビルド

同じソースコードから常に同じバイナリが生成されることを保証:

# マルチステージビルドで環境を固定
FROM node:20.10.0-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --ignore-scripts
COPY . .
RUN npm run build

5. 署名と検証

パッケージ署名の確認

# npm provenance(来歴)の確認
npm audit signatures

# Sigstore による署名検証
cosign verify-blob --signature file.sig file

コミット署名

# GPG署名付きコミット
git commit -S -m "Signed commit"

# 署名の検証
git verify-commit HEAD

6. 最小権限の原則

# npmスクリプトの自動実行を無効化
npm config set ignore-scripts true

# 特定のパッケージのみスクリプト許可
npx --yes allow-scripts

7. ネットワークセグメンテーション

ビルド環境からのアウトバウンド通信を制限:

# 許可するドメインのみ通信を許可
allowed_domains:
  - registry.npmjs.org
  - github.com
  - *.githubusercontent.com

チェックリスト

日常的な対策

  • npm audit / yarn audit を定期実行している
  • package-lock.json をバージョン管理している
  • 新しいパッケージ導入時にセキュリティ評価を行っている
  • 依存関係の自動更新ツール(Dependabot等)を使用している

組織的な対策

  • SBOMを生成・管理している
  • プライベートパッケージリポジトリを使用している
  • CI/CDパイプラインのセキュリティレビューを実施している
  • インシデント対応計画にサプライチェーン攻撃を含めている

高度な対策

  • 再現可能なビルドを実装している
  • パッケージの署名検証を行っている
  • ビルド環境のネットワークを分離している
  • サードパーティコードのセキュリティレビューを実施している

まとめ

サプライチェーン攻撃は、現代のソフトウェア開発において避けられないリスクです。

対策レベル内容
基本依存関係の監査、ロックファイルの管理
中級SBOM作成、CI/CDセキュリティ強化
上級再現可能ビルド、署名検証、ネットワーク分離

完全な防御は困難ですが、以下の原則を守ることでリスクを大幅に軽減できます:

  1. 可視化: 何を使っているか把握する
  2. 検証: 信頼できるものか確認する
  3. 最小化: 不要な依存関係を減らす
  4. 監視: 継続的に脆弱性をチェックする
  5. 準備: 侵害された場合の対応計画を持つ

RiskLensでは、お使いのドメインやWebアプリケーションのセキュリティ状態を診断できます。サプライチェーンリスクを含む包括的なセキュリティチェックをお試しください。

ドメインのセキュリティをチェック

この記事で学んだことを実践してみましょう。
無料でドメインのセキュリティリスクを診断できます。

無料で診断する