Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ランサムウェア対策としてのpnpm導入のススメ

 ランサムウェア対策としてのpnpm導入のススメ

クラメソさっぽろIT勉強会 (仮) #12で発表した資料です。2025年に登場したShai-HuludやPhantomRavenなど、npmエコシステムを狙ったサプライチェーン攻撃の脅威を解説し、pnpmの導入によるセキュリティ対策を紹介しています。pnpmのホワイトリスト方式によるスクリプト実行制御や、npmコマンドの時限解除の仕組みなど、現場で即実践できる具体的な移行手順を紹介しました。

Avatar for Satoru Ishikawa

Satoru Ishikawa

February 11, 2026
Tweet

More Decks by Satoru Ishikawa

Other Decks in Technology

Transcript

  1. ブログ: データアナリティクス通信 2 弊社のブログにて、2022年からクラスメソッド データアナリティクス 通信(AWSデータ分析編)を連載中です! グ ラ フ ィ

    カ ル ユ ー ザ ー イ ン タ ー フ ェ イ ス , Web サ イ ト 自 動 的 に 生 成 さ れ た 説 明 https://dev.classmethod.jp/referencecat/classmethod-da-news-aws-analytics/
  2. ランサムウェアとは ランサムウェアは、コンピュータやデータを「人質」にとって身代金(ラン サム)を要求する悪意のあるソフトウェアです。 侵入: 巧妙に偽装されたメールの添付ファイルを開いたり、改ざんされたウェブサ イトを閲覧したりすることで感染する 暗号化・ロック: ユーザーが気づかないうちに、写真、書類、動画などの重要なフ ァイルを暗号化して開けなくする 脅迫状の表示:

    画面に「ファイルを元に戻したければ、指定の期限までにビットコ インなどで金を払え」という警告文が表示する 二重脅迫(最近の主流): 単にデータをロックするだけでなく、「金を払わなけれ ば盗み出した機密データをネット上に公開する」とさらに脅す手法が増加 6
  3. 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
  4. npm の構造的な脆弱性 npm には、古くからある「便利だが危険な」仕組み「ライフサイクルスク リプトの自動実行」が存在する。 npm パッケージには、インストール直後に実行されるスクリプト (postinstall など)を設定できる。 •

    本来の目的: ネイティブモジュールのコンパイルなど、環境構築の自動 化 • 攻撃者の悪用: 開発者が npm install を実行した瞬間、本人の知らない ところで モジュールをダウンロードしたり、悪意あるコードをバックグ ラウンドで実行できてしまう 11
  5. pnpmとは pnpm(Performant npm)は、Node.js用の高速・効率的なパッケージ マネージャーです。 npmとの主な違い • ディスク効率: グローバルストアを共有するため、重複インストールがない • インストール速度:

    既にストアにあるパッケージはリンクするだけなので高速 • 厳密なnode_modules構造: フラットではなくシンボリックリンクベースの構 造を使うため、package.jsonに宣言していないパッケージへの暗黙的なアクセス (phantom dependencies)を防げる • モノレポ対応: ワークスペース機能が充実しており、モノレポ管理に強い 14
  6. pnpmがランサムウェア対策になる理由 pnpm は単に「高速な npm」ではありません。設計思想そのものがセキュ リティファーストです。 デフォルトは「実行拒否」 npm はすべてのスクリプトを自動実行しますが、pnpm は違います。 •

    ホワイトリスト方式: 信頼できるパッケージ以外、インストールスクリ プトの実行をブロックします。 • PhantomRaven / Shai-Hulud 対策: たとえ不正なパッケージが紛れ 込んでも、その「実行」を阻止するため、被害を未然に防げます。 • pnpmのminimumReleaseAge:リリースされてから一定時間が経過 していないパッケージをインストールさせない。 15
  7. 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
  8. 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 を再度封印しました。'" }
  9. 18 npm コマンドを pnpm コマンドに置き換えて実行してください。 package.json に許可リストを明示し、本当に必要なもの(esbuild、sharp など) だけを実行許可します。リストにないパッケージが動こうとすると pnpm

    は停止し、 ユーザーに警告を出します。実行されないウイルスは悪さができません。 package.jsonの設定例 npm を pnpm へ移行する "pnpm": { "onlyBuiltDependencies": [ "esbuild", "sharp" ] }
  10. 19 一時的なツール実行も npx ではなく pnpm dlx を使いましょう。 npx の危険性 npx

    は非常に便利ですが、ライフサイクルスクリプトを確認なしで自動実 行するリスクがあります。PhantomRavenは、この仕組みを悪用していま す。 pnpm dlx による安全な実行 pnpm dlx では、実行対象のパッケージ自身のpostinstallスクリプトはデフ ォルトで許可されますが、その依存関係のライフサイクルスクリプトはブ ロックされます。つまり、依存ツリーの奥に潜む悪意あるスクリプトの実 行を防ぐことができます。 npx から pnpm dlx への移行
  11. 21 おすすめの3つの対策 1. npm トークンは最も大事。平文で .npmrc に放置せず、実行権限も絞 る。 2. pnpm

    を導入し、スクリプト実行を許可制にする。 3. 「インストールしただけで被害に遭う」リスクがあることがあります。 セキュリティと利便性の両立 セキュリティは便利さとのトレードオフになりがちですが、pnpm は「速 くて安全」という利便性を提供してくれます。自分やお客様を守るために、 pnpm への移行をご検討ください。 まとめ