自衛のためのサイバー攻撃の仕組み講座(AI時代・エンジニア水準)
区分4 AIとエージェントを狙う攻撃★★★自社の弁当に毒を入れるのは難しくても、食材の仕入れ先に混ぜれば、何百もの店に同時に届きます。 サプライチェーン攻撃は、自分より守りの弱い仕入れ先を狙う攻撃です。
IPA 10大脅威2026(組織向け)は、2位に「サプライチェーンや委託先を狙った攻撃」、3位に「AIの利用をめぐるサイバーリスク」を置きました。 3位は2026年に初めて選ばれた項目です。この回は、その2つが重なる所を扱います。
2025年9月、npm で広がった事件を、CISA(米国のサイバー防衛機関)が9月23日に注意喚起しました。 通称「Shai-Hulud(シャイ・フルード)」。500以上のパッケージが改ざんされた、と報告されています。
流れは次の通りです。
ポイントは、3の「インストール時に自動で動く」ところです。 npm には、インストールの前後に自動で走る小さなスクリプト(ライフサイクルスクリプト)があります。 便利な仕組みですが、攻撃者にとってはあなたの端末で動けるきっかけになります。
CISA の推奨と npm の公式機能を、自分の環境向けに整理すると、次の3つです。
| 対策 | 何をするか | 効く理由 |
|---|---|---|
| 版を固定する | ロックファイル(package-lock.json)をコミットし、入れる時は npm ci を使う |
勝手に新しい版へ上がらない |
| 新しすぎる版を避ける | npm の min-release-age(公開から指定日数以上たった版だけを入れる)や、before(指定日までの版)を使う |
公開直後は、見つかって取り下げられる前の時間帯にあたる |
| 自動実行を止める | ignore-scripts=true にして、インストール時のスクリプトを動かさない |
手順3のきっかけを消す |
min-release-age は新しめの npm(v11系)の設定です。自分の npm の版で使えるかを npm --version と公式の設定一覧で確かめてください。
ignore-scripts を有効にすると、一部の部品が動かなくなることがあります。動かなくなった物だけ、中身を読んでから個別に許可します。
あわせて、公開側には耐フィッシングの多要素認証(パスキー等)が求められています。CISA の推奨でも、開発者の GitHub と npm のアカウントに義務づけるよう挙げられています。
自分が影響を受けたかもしれない時は、次の順です。
MCP のサーバーの紹介でよく見る書き方に、npx -y パッケージ名 があります。
npx は、npm のパッケージをその場で取ってきて動かす命令で、-y は確認を省く指定です。
版を書かずに使うと、起動のたびに、その時点の最新版を取って動かすことになります。 第1章の事件と組み合わせると、ある日突然、悪意のある版があなたの Claude Code の裏で動き出す、という流れが成り立ちます。
対策は、版を書くことです。
npx -y パッケージ名@1.2.3
のように版番号を固定し、更新は自分が変更点を読んでから上げます。
Claude Code は、拡張の形がいくつもあります。
| 拡張 | 中身 | 危険の見方 |
|---|---|---|
| スキル | AIへの手順書と、付属のスクリプト | 手順書の文が命令になる(No.10)。付属スクリプトは実行される |
| フック | 決まった場面で動くコマンド | あなたの権限で、そのまま動く |
| MCP サーバー | 外部のプログラム | 第2章①と No.11 |
| プラグイン | 上の物をまとめた配布物 | 全部入りなので、中身の確認が大変 |
どれも、ただの設定ではなくコードか、AIが従う文章です。 他人が作った物を入れる時は、入れる前にファイル全体を読む。これを標準の動きにしてください。
AI に「この処理に使える部品は?」と聞くと、実在しない名前を自信ありげに出すことがあります。 攻撃者がその名前の部品を先に登録しておくと、AIの言う通りに入れた人が、悪意のある部品を入れてしまいます。研究では、この種の幻の名前が繰り返し出ることが確かめられています。
自衛は簡単です。AI が出した部品名は、入れる前に公式ページで実在・作者・公開日・利用者数を確かめます。
IPA の項目名に「委託先」とあるように、部品はプログラムだけではありません。
ここで効くのは、技術より棚卸しと契約と鍵の絞り込みです。
読むだけの点検です。
claude mcp list の出力に npx -y で版なしの物が無いか見る。あれば版を書き足す候補にするls ~/.claude/skills と、入れているプラグインの一覧を出し、「自分で書いた物」「他人が作った物」に分ける。後者は、1つずつ中身を読み直す日を決めるnpm audit を実行し、結果を見る。ロックファイルがコミットされているかも確認する頼み方の例:「このフォルダの MCP 設定とスキルを読んで、版が固定されていない物と、外部のスクリプトを呼んでいる物を表にして。書き換えはしないで」
攻撃は、守りの弱い部品や取引先を経由して入る。npm の事件は、合鍵の盗難→悪意のある版の公開→インストール時の自動実行→鍵の窃取→自己増殖、の流れ。版を固定し、新しすぎる版と自動実行を避け、他人のスキルやMCPは読んでから入れる。
問1 2025年9月の npm の事件で、手元の鍵が盗まれた仕組みとして正しいのはどれですか?
問2 `npx -y パッケージ名` で版を書かずに MCP サーバーを起動し続けると、どんな危険がありますか?
問3 他人が配っているスキルを入れる前に、まずやることはどれですか?
問4 自分の端末に、改ざんされた版が入っていたと分かりました。最初にすべきことはどれですか?
出典(2026年10月時点で確認):CISA「Widespread Supply Chain Compromise Impacting npm Ecosystem」(https://www.cisa.gov/news-events/alerts/2025/09/23/widespread-supply-chain-compromise-impacting-npm-ecosystem)/IPA「情報セキュリティ10大脅威 2026」(https://www.ipa.go.jp/security/10threats/10threats2026.html)/npm Docs「config」(https://docs.npmjs.com/cli/v11/using-npm/config)/OWASP Top 10 for LLM Applications 2025「LLM03 Supply Chain」(https://genai.owasp.org/llm-top-10/)/MCP 公式仕様「Security Best Practices」(https://modelcontextprotocol.io/specification/2025-11-25/basic/security_best_practices)