Share
Embed
ランサムウェア対策としてのpnpm導入のススメ
クラメソさっぽろIT勉強会 (仮) #12で発表した資料です。2025年に登場したShai-HuludやPhantomRavenなど、npmエコシステムを狙ったサプライチェーン攻撃の脅威を解説し、pnpmの導入によるセキュリティ対策を紹介しています。pnpmのホワイトリスト方式によるスクリプト実行制御や、npmコマンドの時限解除の仕組みなど、現場で即実践できる具体的な移行手順を紹介しました。
Satoru Ishikawa
February 11, 2026
Transcript
23 slides
-
はじめに 1 名前:石川 覚(いしかわ さとる) 所属:クラウド事業本部 担当:コンサルタント、ブログ・登壇等 経歴:メーカーでSE、研究開発 →ITベンチャーで製品開発、受託研究 →クラスメソッド(2014/6〜)
好きなサービス: Amazon Redshift/Athena/Bedrock、 Google BigQuery Sapporo 2020-2025 Japan AWS Top Engineers 2021-2025 Japan AWS All Certifications Engineers -
ブログ: データアナリティクス通信 2 弊社のブログにて、2022年からクラスメソッド データアナリティクス 通信(AWSデータ分析編)を連載中です! グ ラ フ ィ
カ ル ユ ー ザ ー イ ン タ ー フ ェ イ ス , Web サ イ ト 自 動 的 に 生 成 さ れ た 説 明 https://dev.classmethod.jp/referencecat/classmethod-da-news-aws-analytics/ -
ランサムウェアとは ランサムウェアは、コンピュータやデータを「人質」にとって身代金(ラン サム)を要求する悪意のあるソフトウェアです。 侵入: 巧妙に偽装されたメールの添付ファイルを開いたり、改ざんされたウェブサ イトを閲覧したりすることで感染する 暗号化・ロック: ユーザーが気づかないうちに、写真、書類、動画などの重要なフ ァイルを暗号化して開けなくする 脅迫状の表示:
画面に「ファイルを元に戻したければ、指定の期限までにビットコ インなどで金を払え」という警告文が表示する 二重脅迫(最近の主流): 単にデータをロックするだけでなく、「金を払わなけれ ば盗み出した機密データをネット上に公開する」とさらに脅す手法が増加 6 -
npmとは npm(Node Package Manager)とは、JavaScriptの実行環境で あるNode.jsの標準パッケージマネージャです。 レジストリ(Registry)という公開データベースに保存されたライ ブラリやフレームワークを、npmコマンドを介してインストール、 更新、削除するための仕組みです。 単なるパッケージの取得にとどまらず、各パッケージが依存する他 のライブラリとの整合性を自動的に解決する機能や、プロジェクト
ごとの依存関係をpackage.jsonというメタデータファイルに記録し て異なる開発環境間での再現性を担保する役割も担っています。 生成AIモデルのAPI利用・統合やMCPの呼び出し、AWS CDKのデプ ロイなど、避けて通ることができない重要なコマンドです。 9 -
2025年に登場したShai-HuludとPhantomRaven Shai-HuludとPhantomRavenは、npmエコシステムを主な標的としたによるサ プライチェーン攻撃が顕在化。 1. Shai-Hulud(シャイ・フルード) 手法: npmトークンの窃取とワーム(自己増殖型)の自動拡散。 特徴: postinstallスクリプトを悪用し、盗んだnpmトークンで被害者が管理する正規 パッケージに悪意あるコードを自動注入・公開し、攻撃者の介入なしに指数関数的
に拡散する。 2. PhantomRaven(ファントム・レイヴン) 手法: セキュリティスキャンの回避(Remote Dynamic Dependencies)。 特徴:無害に見えるコード(hello worldスクリプト等)をnpmに公開し、依存関係 をHTTP URL経由で攻撃者のサーバーから動的に取得する。npmレジストリやセキ ュリティスキャナーはこのURLを追跡しないため「依存関係0」と表示され、検出を 回避する。 10 -
npm の構造的な脆弱性 npm には、古くからある「便利だが危険な」仕組み「ライフサイクルスク リプトの自動実行」が存在する。 npm パッケージには、インストール直後に実行されるスクリプト (postinstall など)を設定できる。 •
本来の目的: ネイティブモジュールのコンパイルなど、環境構築の自動 化 • 攻撃者の悪用: 開発者が npm install を実行した瞬間、本人の知らない ところで モジュールをダウンロードしたり、悪意あるコードをバックグ ラウンドで実行できてしまう 11 -
なぜ、npmトークンが狙われるのか? 攻撃者の狙いは、開発者の npmトークン です。 • トークンの役割: パスワードや二要素認証(2FA)をスキップして、パ ッケージを公開・更新できる「マスターキー」 • 被害:
信頼されている既存のパッケージにウイルスを混入させ、世界中 の何十万というユーザーにランサムウェアを配布する踏み台にされる 12 -
pnpmとは pnpm(Performant npm)は、Node.js用の高速・効率的なパッケージ マネージャーです。 npmとの主な違い • ディスク効率: グローバルストアを共有するため、重複インストールがない • インストール速度:
既にストアにあるパッケージはリンクするだけなので高速 • 厳密なnode_modules構造: フラットではなくシンボリックリンクベースの構 造を使うため、package.jsonに宣言していないパッケージへの暗黙的なアクセス (phantom dependencies)を防げる • モノレポ対応: ワークスペース機能が充実しており、モノレポ管理に強い 14 -
pnpmがランサムウェア対策になる理由 pnpm は単に「高速な npm」ではありません。設計思想そのものがセキュ リティファーストです。 デフォルトは「実行拒否」 npm はすべてのスクリプトを自動実行しますが、pnpm は違います。 •
ホワイトリスト方式: 信頼できるパッケージ以外、インストールスクリ プトの実行をブロックします。 • PhantomRaven / Shai-Hulud 対策: たとえ不正なパッケージが紛れ 込んでも、その「実行」を阻止するため、被害を未然に防げます。 • pnpmのminimumReleaseAge:リリースされてから一定時間が経過 していないパッケージをインストールさせない。 15 -
16 npmを使わずにインストールする方法を紹介します。 macOS: Homebrew を使う(推奨) Macユーザーならお馴染みのHomebrewを使うのが最も管理が楽です。 macOS / Linux: インストールスクリプトを使う
Windows (PowerShell) : インストールスクリプトを使う(推奨) pnpm(npx)の導入 brew install pnpm curl -fsSL https://get.pnpm.io/install.sh | sh - iwr https://get.pnpm.io/install.ps1 -useb | iex -
npmコマンドの無効化、一時的な実行(macOS) .zshrc 等で npm と npx を実行できないようにし、移行期間は必要なときだけ「時 限解除」する仕組みを導入します。(macOSの場合、以下の .rcshrc に追加)
17 alias npx='echo "WARNING: npx は実行しないでください" && false' alias npm='echo "WARNING: npm は実行しないでください" && false' # 1時間だけ npm/npx の封印を解く関数 function unlock-npm() { unalias npm npx # macOS用の日付計算。Linuxの場合は $(date -d "+1 hour" ...) に書き換えてください local limit=$(date -v+1H "+%Y/%m/%d %H:%M") echo "${limit} まで、npm/npx の制限を解除しました。" # 1時間後に自動で source を実行 sched +01:00 "source ~/.zshrc && echo '\a\n1時間経過したため、npm/npx を再度封印しました。'" } -
18 npm コマンドを pnpm コマンドに置き換えて実行してください。 package.json に許可リストを明示し、本当に必要なもの(esbuild、sharp など) だけを実行許可します。リストにないパッケージが動こうとすると pnpm
は停止し、 ユーザーに警告を出します。実行されないウイルスは悪さができません。 package.jsonの設定例 npm を pnpm へ移行する "pnpm": { "onlyBuiltDependencies": [ "esbuild", "sharp" ] } -
19 一時的なツール実行も npx ではなく pnpm dlx を使いましょう。 npx の危険性 npx
は非常に便利ですが、ライフサイクルスクリプトを確認なしで自動実 行するリスクがあります。PhantomRavenは、この仕組みを悪用していま す。 pnpm dlx による安全な実行 pnpm dlx では、実行対象のパッケージ自身のpostinstallスクリプトはデフ ォルトで許可されますが、その依存関係のライフサイクルスクリプトはブ ロックされます。つまり、依存ツリーの奥に潜む悪意あるスクリプトの実 行を防ぐことができます。 npx から pnpm dlx への移行 -
21 おすすめの3つの対策 1. npm トークンは最も大事。平文で .npmrc に放置せず、実行権限も絞 る。 2. pnpm
を導入し、スクリプト実行を許可制にする。 3. 「インストールしただけで被害に遭う」リスクがあることがあります。 セキュリティと利便性の両立 セキュリティは便利さとのトレードオフになりがちですが、pnpm は「速 くて安全」という利便性を提供してくれます。自分やお客様を守るために、 pnpm への移行をご検討ください。 まとめ