サプライチェーン攻撃
「公開されている部品なら、そのまま使っても安全?」
取り込む部品に危険が混ざる場合と、採用前・実行時にできる対策を見てみましょう。
01リスク
新しい部品が届いた
由来と版を確認公開された部品にも、悪意ある処理が混ざるおそれがあるんだ。
02対策
採用前に確かめる
待機も一層の対策すぐには入れず、由来や変更内容を確認する時間を取ろう。
03効果
怪しい版を避ける
取り込む前の確認採用前に異常が見つかれば、その版を取り込まずに済むね。
04残る注意
待つだけでは分からない
取り込み後にも備える待っても安全とは限らない。実行時の権限や隔離も必要だね。
なぜ「使っている部品」が狙われるのか
いまどきのソフトウェアは、直接・間接あわせて何百もの『借り物』の部品(ライブラリ)で組み上がっています。攻撃者は守りの堅いあなたを正面から狙わず、必ず使う部品の供給元に毒を仕込みます。上流を1か所汚せば、下流の何千ものプロジェクトへ一度に広がるからです。
サプライチェーン攻撃の広がり方
各ステップ・参加者・分岐をクリックすると、その仕組みの説明がここに表示されます。
この図をテキストで読む
シーケンス図「サプライチェーン攻撃の広がり方」。参加者5人、ステップ9個。 【参加者】(左から右) - 攻撃者: 毒を仕込む人 - OSSパッケージ: メンテナ / 上流 - レジストリ: npm / PyPI など - あなたの開発・CI: install / build - 利用者・本番: 配布先 【流れ】(上から下へ) ── ① 仕込み(上流をひそかに汚す) ── 1. 攻撃者 → OSSパッケージ: アカウント乗っ取り / 悪意ある貢献 2. OSSパッケージ → レジストリ: 毒入りの新バージョンを公開 3. レジストリ(自身で処理): 「最新版」として配信可能に ── ② 取り込み〜拡散(あなた経由で下流へ) ── 4. あなたの開発・CI → レジストリ: 依存を追加 / 更新(install) 5. レジストリ → あなたの開発・CI: 毒入りバージョンを取得(応答) 6. あなたの開発・CI(自身で処理): インストール時スクリプトが自動実行 7. あなたの開発・CI → 攻撃者: 認証情報・トークンを外部送信 8. あなたの開発・CI(自身で処理): ビルド成果物に毒が混入 9. あなたの開発・CI → 利用者・本番: 製品として配布される
どこで食い止めるか ── 多層防御の関所
- 焦点
各工程・分岐・レーンをクリックすると、その仕組みの説明がここに表示されます。
この図をテキストで読む
業務フロー図「どこで食い止めるか(多層防御の関所)」。レーン3本、工程7個。 【レーン(担当)】(左から右) - 取り込み: あなた / CI - 防御ゲート: 3つの関所 - 結果: 止める / 安全に取り込む 【図の符号】色つきの工程=焦点 【工程】(上から下へ。担当 → 工程名) ── フェーズ: 持ち込み(依存の更新) ── 1. 取り込み: 依存を追加 / 更新〔開始・終了〕 ── フェーズ: 関所(3つの防御) ── 2. 防御ゲート: 公開から数日たっている?〔分岐〕(① クールダウン) 数日経過 → 固定したバージョン・ハッシュと一致? 公開直後 → 保留:数日待って再確認 3. 結果: 保留:数日待って再確認〔開始・終了〕(公開直後は受け入れない) 4. 防御ゲート: 固定したバージョン・ハッシュと一致?〔分岐〕(② 固定・整合性) 一致 → ビルドは最小権限・隔離されている? 不一致・改ざん → 取り込みを中止 5. 結果: 取り込みを中止〔開始・終了〕(改ざん・権限過大を検知) 6. 防御ゲート: ビルドは最小権限・隔離されている?〔分岐〕(③ 最小権限・隔離) 隔離OK → 安全に取り込む / ビルド 権限過大 → 取り込みを中止 ── フェーズ: 受け入れ(安全に採用) ── 7. 取り込み: 安全に取り込む / ビルド〔開始・終了〕(3つの関所を通過)
いつものビルドで、中身が変わる?
昨日と同じコードを用意したのに、今日のインストールで別のライブラリが入ると、差を追いにくくなります。ロックファイルは、実際に選んだ依存関係の版を記録するものです。Gitで管理し、開発とCIでその内容に従ってインストールすることで、意図しない版の変化を抑えます。
更新するときは、ロックファイルの差分も確認します。公開直後の版を一定時間待つクールダウンは、その間に発見された攻撃を避ける一層の対策になります。pnpm等のインストール時のスクリプト制限も組み合わせます。
一方、緊急の脆弱性修正まで機械的に待つと危険が残ります。採用する版と理由を限定した例外を設け、確認して更新できるようにします。
固定した版が安全とは限らない
ロックファイルは依存関係を再現するための記録です。悪意のある版や脆弱な版を固定してしまう可能性は残ります。
押さえておきたい用語
- サプライチェーン攻撃
- 依存(直接 / 間接)
- レジストリ(npm / PyPI)
- クールダウン
- ロックファイル / 整合性ハッシュ
- 最小権限 / 隔離ビルド