コンテンツにスキップ

AI Session Notes - 2026-03-31

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

学んだこと

  • サプライチェーン攻撃とは、信頼している外部の依存関係(ライブラリ、ツール等)を侵害して間接的にターゲットを攻撃する手法
  • 攻撃者はメンテナーのアカウント乗っ取りや悪意ある依存パッケージの注入など、信頼の連鎖を悪用する
  • 人気パッケージほど影響範囲が巨大になるため、トップパッケージが狙われやすい

詳細

実際の攻撃パターン(axios 2026-03-31 の事例)

  • メンテナーの npm アカウントを侵害し、悪意あるバージョンを公開
  • axios 本体のコードは変更せず、隠し依存パッケージ(postinstall フック付き)を追加
  • npm install 実行時に自動でマルウェアが実行され、OS 別の RAT(リモートアクセストロイ)を配布
  • マルウェアは自己削除して痕跡を消去するなど、高度な検知回避を行う
  • 正規リリースは GitHub OIDC Trusted Publisher を使用しており、手動公開との差異が検知の手がかりになった

有名な過去の事例

  • event-stream (2018): メンテナー権限を譲り受けた攻撃者が暗号通貨ウォレットを狙うコードを注入
  • SolarWinds (2020): ビルドシステムを侵害し、正規アップデートにバックドアを仕込んだ。18,000以上の組織に影響
  • codecov (2021): CI ツールを改ざんし、環境変数(認証情報等)を外部に送信

npm の依存管理とサプライチェーン攻撃の防御

学んだこと

  • ロックファイル(package-lock.json)+ npm ci を使えば、意図しないバージョン更新を防げる
  • npm install はロックファイルがあっても semver 範囲内で新しいバージョンに更新される場合がある
  • npm ci は「Clean Install」の略で、ロックファイルを基準に依存をそのまま再現する
  • npm installpackage.json を基準に依存を解決し、ロックファイルを更新することがある

詳細

攻撃が発動するタイミング

状況 リスク
ロックファイルあり + npm ci ほぼ安全。依存の追加・更新時のみ注意
ロックファイルあり + npm install semver 範囲内で意図せず更新される可能性あり
ロックファイルなし npm install のたびに最新版が入るので危険

対策まとめ

  • CI/CD では npm ci --ignore-scripts を使い、postinstall スクリプトの自動実行を防ぐ
  • 依存パッケージのバージョンをピン留め(^~ を外して完全固定)する
  • npm audit や Dependabot で脆弱性を定期的にチェックする
  • ロックファイルは必ずリポジトリにコミットする

gh CLI で全リポジトリの依存を一括チェックする方法

学んだこと

  • gh api repos/{owner}/{repo}/contents/{path} で GitHub 上のファイル内容を Base64 エンコードで取得できる
  • gh repo list と組み合わせることで、全リポジトリの package.jsonpackage-lock.json を一括チェックできる
  • ローカルリポジトリは node_modules 内の package.json から実際にインストールされたバージョンを確認できる

詳細

# リモートリポジトリの package.json を取得して特定パッケージを検索
for repo in $(gh repo list {owner} --limit 100 --json name --jq '.[].name'); do
  content=$(gh api "repos/{owner}/$repo/contents/package.json" --jq '.content' 2>/dev/null)
  if [ -n "$content" ] && [ "$content" != "null" ]; then
    decoded=$(echo "$content" | base64 -d 2>/dev/null)
    if echo "$decoded" | grep -q "target-package"; then
      echo "Found in $repo"
    fi
  fi
done

参考リンク

メタ情報

  • ツール: Claude Code
  • 関連技術: npm, Node.js, セキュリティ, サプライチェーン攻撃, gh CLI