Slide 1

Slide 1 text

ランサムウェア対策としてのpnpm導入のススメ 2026年2月10日 クラウド事業本部 コンサルティング部 石川 覚 クラメソさっぽろIT勉強会 (仮) #12 ランサムウェア対策

Slide 2

Slide 2 text

はじめに 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

Slide 3

Slide 3 text

ブログ: データアナリティクス通信 2 弊社のブログにて、2022年からクラスメソッド データアナリティクス 通信(AWSデータ分析編)を連載中です! グ ラ フ ィ カ ル ユ ー ザ ー イ ン タ ー フ ェ イ ス , Web サ イ ト 自 動 的 に 生 成 さ れ た 説 明 https://dev.classmethod.jp/referencecat/classmethod-da-news-aws-analytics/

Slide 4

Slide 4 text

アジェンダ 3 ● はじめに ● ランサムウェアとサプライチェーン攻撃 ● ランサムウェアに狙われるnpm ● pnpmの導入 ● まとめ

Slide 5

Slide 5 text

はじめに 「なぜパッケージマネージャーがセキュリティに関係あるの?」と思われ た方もいるかもしれません。しかし今、私たちが無意識に利用している npm install というコマンドが、実は組織全体を危機に陥れる「サプライチ ェーン攻撃」の入り口の1つになっています 。2025年に登場した「Shai- Hulud」や「PhantomRaven」といった脅威を例に、なぜ今「pnpm」へ の移行が最強の防衛策になるのか、その理由を解説します。 4

Slide 6

Slide 6 text

ランサムウェアとサプライチェーン攻撃 5

Slide 7

Slide 7 text

ランサムウェアとは ランサムウェアは、コンピュータやデータを「人質」にとって身代金(ラン サム)を要求する悪意のあるソフトウェアです。 侵入: 巧妙に偽装されたメールの添付ファイルを開いたり、改ざんされたウェブサ イトを閲覧したりすることで感染する 暗号化・ロック: ユーザーが気づかないうちに、写真、書類、動画などの重要なフ ァイルを暗号化して開けなくする 脅迫状の表示: 画面に「ファイルを元に戻したければ、指定の期限までにビットコ インなどで金を払え」という警告文が表示する 二重脅迫(最近の主流): 単にデータをロックするだけでなく、「金を払わなけれ ば盗み出した機密データをネット上に公開する」とさらに脅す手法が増加 6

Slide 8

Slide 8 text

ランサムウェアによるサプライチェーン攻撃 ランサムウェアによるサプライチェーン攻撃とは、ターゲットとなる企業 を直接狙うのではなく、その取引先や委託先(サプライチェーンの弱い 環)を「踏み台」にして、最終的な標的やその関連組織全体にランサムウ ェアを感染させる攻撃手法。 セキュリティが強固な大手企業を正面から突破するのは難しいため、比較 的ガードが甘い関連会社やシステム管理会社を狙うのが近年のトレンドに なっています。 7

Slide 9

Slide 9 text

ランサムウェアに狙われるnpm 8

Slide 10

Slide 10 text

npmとは npm(Node Package Manager)とは、JavaScriptの実行環境で あるNode.jsの標準パッケージマネージャです。 レジストリ(Registry)という公開データベースに保存されたライ ブラリやフレームワークを、npmコマンドを介してインストール、 更新、削除するための仕組みです。 単なるパッケージの取得にとどまらず、各パッケージが依存する他 のライブラリとの整合性を自動的に解決する機能や、プロジェクト ごとの依存関係をpackage.jsonというメタデータファイルに記録し て異なる開発環境間での再現性を担保する役割も担っています。 生成AIモデルのAPI利用・統合やMCPの呼び出し、AWS CDKのデプ ロイなど、避けて通ることができない重要なコマンドです。 9

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

npm の構造的な脆弱性 npm には、古くからある「便利だが危険な」仕組み「ライフサイクルスク リプトの自動実行」が存在する。 npm パッケージには、インストール直後に実行されるスクリプト (postinstall など)を設定できる。 • 本来の目的: ネイティブモジュールのコンパイルなど、環境構築の自動 化 • 攻撃者の悪用: 開発者が npm install を実行した瞬間、本人の知らない ところで モジュールをダウンロードしたり、悪意あるコードをバックグ ラウンドで実行できてしまう 11

Slide 13

Slide 13 text

なぜ、npmトークンが狙われるのか? 攻撃者の狙いは、開発者の npmトークン です。 • トークンの役割: パスワードや二要素認証(2FA)をスキップして、パ ッケージを公開・更新できる「マスターキー」 • 被害: 信頼されている既存のパッケージにウイルスを混入させ、世界中 の何十万というユーザーにランサムウェアを配布する踏み台にされる 12

Slide 14

Slide 14 text

pnpmの導入 13

Slide 15

Slide 15 text

pnpmとは pnpm(Performant npm)は、Node.js用の高速・効率的なパッケージ マネージャーです。 npmとの主な違い • ディスク効率: グローバルストアを共有するため、重複インストールがない • インストール速度: 既にストアにあるパッケージはリンクするだけなので高速 • 厳密なnode_modules構造: フラットではなくシンボリックリンクベースの構 造を使うため、package.jsonに宣言していないパッケージへの暗黙的なアクセス (phantom dependencies)を防げる • モノレポ対応: ワークスペース機能が充実しており、モノレポ管理に強い 14

Slide 16

Slide 16 text

pnpmがランサムウェア対策になる理由 pnpm は単に「高速な npm」ではありません。設計思想そのものがセキュ リティファーストです。 デフォルトは「実行拒否」 npm はすべてのスクリプトを自動実行しますが、pnpm は違います。 • ホワイトリスト方式: 信頼できるパッケージ以外、インストールスクリ プトの実行をブロックします。 • PhantomRaven / Shai-Hulud 対策: たとえ不正なパッケージが紛れ 込んでも、その「実行」を阻止するため、被害を未然に防げます。 • pnpmのminimumReleaseAge:リリースされてから一定時間が経過 していないパッケージをインストールさせない。 15

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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 を再度封印しました。'" }

Slide 19

Slide 19 text

18 npm コマンドを pnpm コマンドに置き換えて実行してください。 package.json に許可リストを明示し、本当に必要なもの(esbuild、sharp など) だけを実行許可します。リストにないパッケージが動こうとすると pnpm は停止し、 ユーザーに警告を出します。実行されないウイルスは悪さができません。 package.jsonの設定例 npm を pnpm へ移行する "pnpm": { "onlyBuiltDependencies": [ "esbuild", "sharp" ] }

Slide 20

Slide 20 text

19 一時的なツール実行も npx ではなく pnpm dlx を使いましょう。 npx の危険性 npx は非常に便利ですが、ライフサイクルスクリプトを確認なしで自動実 行するリスクがあります。PhantomRavenは、この仕組みを悪用していま す。 pnpm dlx による安全な実行 pnpm dlx では、実行対象のパッケージ自身のpostinstallスクリプトはデフ ォルトで許可されますが、その依存関係のライフサイクルスクリプトはブ ロックされます。つまり、依存ツリーの奥に潜む悪意あるスクリプトの実 行を防ぐことができます。 npx から pnpm dlx への移行

Slide 21

Slide 21 text

まとめ 20

Slide 22

Slide 22 text

21 おすすめの3つの対策 1. npm トークンは最も大事。平文で .npmrc に放置せず、実行権限も絞 る。 2. pnpm を導入し、スクリプト実行を許可制にする。 3. 「インストールしただけで被害に遭う」リスクがあることがあります。 セキュリティと利便性の両立 セキュリティは便利さとのトレードオフになりがちですが、pnpm は「速 くて安全」という利便性を提供してくれます。自分やお客様を守るために、 pnpm への移行をご検討ください。 まとめ

Slide 23

Slide 23 text

No content