サプライチェーン攻撃 - サプライチェーン攻撃
パッケージマネージャーやビルドパイプラインを経由した攻撃。依存関係の汚染、タイポスクワッティング、依存関係かく乱を解説。
概念図
攻撃シナリオ
タイポスクワッティングの例(npm)
bash
# 正規パッケージ
npm install lodash
# 攻撃者が公開した偽パッケージ(タイポ)
npm install lodahs # ← 文字入れ替え
npm install lodashs # ← 余分な文字依存関係かく乱の例
bash
# 社内レジストリに internal-utils@1.0.0 がある場合
# 攻撃者が公開レジストリに internal-utils@99.0.0 を公開
# → パッケージマネージャーがバージョンの高い公開版を優先してインストール攻撃手法の種類
| 手法 | 概要 | 実例 |
|---|---|---|
| タイポスクワッティング | 正規パッケージと似た名前の悪意あるパッケージを公開 | crossenv(cross-env の偽物) |
| 依存関係かく乱 | 社内パッケージ名と同名のパッケージを公開レジストリに公開し、バージョンの高い方を優先インストールさせる | 2021年 Alex Birsan の研究で Apple・Microsoft 等が影響 |
| アカウント乗っ取り | 正規パッケージのメンテナーのアカウントを乗っ取り、悪意あるコードを注入 | event-stream 事件(2018年) |
| ビルドパイプライン攻撃 | CI/CD パイプラインを侵害し、ビルド成果物にバックドアを仕込む | SolarWinds 事件(2020年) |
対策
- ロックファイルの活用:
package-lock.json/pnpm-lock.yamlをコミットし、依存関係のバージョンを固定する - スコープ付きパッケージ: 社内パッケージは
@company/スコープを使い、依存関係かく乱を防ぐ - SCA ツールの導入:
npm audit/ Snyk / Dependabot で既知の脆弱性を自動検出する - パッケージの検証: インストール前にダウンロード数・メンテナー・更新頻度・ソースコードを確認する
- プライベートレジストリの優先設定:
.npmrcでスコープごとにレジストリを明示的に指定する - CI/CD パイプラインの保護: ビルド環境のアクセス制御、署名付きコミットの要求、成果物のハッシュ検証
