私たちは本当に大きな脅威を回避した
(xeiaso.net)- 最近、NPMパッケージエコシステムで発生したサプライチェーン攻撃は、実際にはさらに大きな被害を引き起こしかねなかった
- 攻撃者は人気のあるライブラリを悪用し、暗号資産ウォレットのアドレスを書き換える方向にのみマルウェアを使用した
- この攻撃は、巧妙なフィッシングメールを通じて開発者の二要素認証情報を盗み出す形で行われた
- もし、より致命的な形態(例: APIキーの窃取など)で使われていたなら、甚大な被害が発生した可能性がある
- すべての依存関係が潜在的に危険であるという認識と、依存関係ツリー全体を理解する重要性を強調している
攻撃の概要と懸念
- 最近、最大級のパッケージエコシステムのひとつであるNPMで人気パッケージが攻撃にさらされた
- 例となる機能: ターミナルの色処理、色名-RGBマッピング、関数のデバッグデコレータ、配列風の値を判定するユーティリティなど
- こうした一般的な依存関係は広範に使われており、コードが入り込めばそのまま本番環境にデプロイされる可能性が高い
- もし悪意あるプロキシ、APIキーの窃取、その他の深刻な攻撃が含まれていたなら、結果ははるかに深刻になっていた危険があった
- 実際には、このマルウェアはオンラインウォレット(例: MetaMask)で暗号資産の支払い先アドレスだけを改ざんする方式だった
フィッシング攻撃の巧妙さ
- 攻撃の出発点は、非常によく作り込まれたフィッシングメールだった
- NPMのユーザー名を使って個別化された印象を与える方式
- 「セキュリティのためにパスワードと二要素認証の認証情報を変更してほしい」というメッセージで信頼を誘導
- NPMの少し特殊な運用方式とも相まって、一般的な利用者なら簡単にだまされかねない内容だった
- 特定の期限を明示して緊急性を与え、忙しい状況で油断した状態のままフィッシングリンクをクリックさせるよう誘導
- 実際のNPM公式ドメインに似た
.helpドメインを使用
- 目立つ点は、公式ドメインの代わりに「npmjs.help」を使っている程度だった
- 近年はさまざまな新しいgTLD(Generic Top Level Domain)がブログやドキュメントなどで広く使われており、これも自然に見え得る
攻撃による潜在的な被害
- フィッシングメールは利用者の二要素認証情報を盗んだ後、攻撃コードを挿入して新しいパッケージを配布できた
- is-arrayish, color-string, color-name など、非常に広く使われている代表的なライブラリが標的だった
- マルウェアが単なる暗号資産の横取りにとどまらず、APIキーの窃取などに拡大していたなら、致命的な結果を招いた可能性がある
- たとえばOpenAIやAWSのAPIキーが大量に露出するなど、長期的かつ大規模な被害につながり得た
- 実際には、感染したライブラリの大半は主にコマンドラインツールで使われていたため、暗号資産窃取の目的はそれだけ限定的だった
Web3エコシステムを狙う攻撃者の戦略
- 今回の攻撃は、Web3ユーザー(ブラウザで支払いなどを行う利用者)を主な標的にしていたように見える
- Web3と無関係な汎用ライブラリを攻撃対象にすることで、Web3エコシステム側の迅速な検知や遮断を回避
- 例: MetaMaskと連携するライブラリを注意深く点検していても、テキストカラー関連のユーティリティで攻撃が起きるとは予測しにくい
開発エコシステムへの教訓
- 今回の事例は、あらゆる依存パッケージが実際に悪意あるものになり得ることを改めて示している
- 依存関係ツリーを常に完全に制御または監視することには、現実的な限界がある
- 迅速な本番デプロイの流れや時間的プレッシャーの中では、セキュリティ面の検討が後回しになりがちであることも示唆している
- 今後は、プロジェクト全体の依存関係の構成把握と慎重な管理の重要性がさらに高まる
締めくくりと案内
- 本内容は特定の人物を非難したり責任を問うものではなく、誰もがフィッシング攻撃にさらされ得ることを認識するのが重要だ
- この投稿の公開後に状況が変わっている可能性もあるため、内容の誤りや疑問があれば直接確認する必要がある
Tags:
1件のコメント
Hacker News の意見
nx の npm サプライチェーン攻撃は、多くの企業が避けきれなかった弾丸だった。VS Code の nx プラグインをインストールしているだけで、自動的に npm 上の最新 nx バージョンを確認し、GitHub セッション(例: GH CLI で会社アカウントにログイン済み)や
.envファイルに重要な認証情報があれば、すべて流出していた。依存関係の固定やセキュリティアップデートを適切に管理していても避けられない事案であり、このエコシステムには根本的により深い変化が必要だ。詳細は 公式セキュリティ告知 を参照git pushするときだけインターネット接続を有効にする本当に危機一髪で助かった。こうしたパッケージにアクセスできた攻撃者が、単に暗号資産を盗むツールひとつだけを載せたというのが信じられない。絶好の機会なら、さらに1週間ほど投資してもっと巧妙なエクスプロイトを仕込んだほうが得に思える。API キー、SSH 公開鍵の追加、サーバー IP の流出、開発者端末のブラウザプロファイルやセッショントークン、さらには私のデスクトップ上の Amazon のカード情報まで、盗めるものが多すぎる。こうしたものは自分で使わなくてもダークウェブのフォーラムで簡単に売れる。もしかして腕の立つサイバー犯罪者は、すでに安定して高収入なテック企業で働いていて、こういう単純な攻撃だけが残っているのだろうかと思ってしまう
私の先延ばし癖は生存スキルだ。みんながベータテストを終えるまで待つので、昔会社では 12 年間 Microsoft Office 2000 だけを使い、アップグレードによる問題や再教育なしで 10 年間平穏に過ごせた。そして、メール内のリンクは絶対にクリックしない習慣がある
小さなスタートアップには厳しいだろうが、npm のような大手プレイヤーなら
npm.io、npm.sh、npm.helpなど、npm ドメインのあらゆる TLD 版を押さえるべきだと思う。攻撃者がnpm.helpドメインを確保したことが、この攻撃をより効果的にしたno-reply-aws@amazon.comからno-reply@tax-and-invoicing.us-east-1.amazonaws.comに変えてしまうことがよくある。初見ではほぼフィッシングメールにしか見えないのに公式だというので混乱する。しかも事前案内メールまでフィッシングっぽく見え、本当に請求書を受け取るまで怪しくて添付の PDF を開けなかった。企業は顧客にフィッシング注意を呼びかけながら、不必要な混乱を生む行動をしているもし誰かが非常に周到さ(Jia Tan 方式)と、こちらのセキュリティの甘さ(エディタプラグイン、シェルのユーザーランドなど)を組み合わせたらどうなるのか。開発者向けツールはスーパーユーザー権限で動くのに、最も検証が少ない。私も elisp、neovim、vscode、そして簡単なユーザーランドツールまで一つひとつ検証してはいられない。よくて nixpkgs から取ってくる程度だ。いつかもっと良い VSCode プラグインをひとつ登場させて 1〜2 年待てば終わりだ。GG だ
MetaMask などのウォレットが標的になったが、MetaMask は LavaMoat という分離モジュールのおかげで、こうした攻撃からかなりよく守られていると聞く。実際の防御レベルを詳しく分析した記事があればぜひ読みたい。個人的には MetaMask とは無関係だが、こうしたセキュリティ対策(実際の攻撃に比べて適用が遅い)の有効性が気になる。参考までに 関連記事 を追加しておく
「こういうフィッシング攻撃には結局いつか引っかかるしかないのが現実だ」という話に対して、私は自分はたぶん違うと思っている。自分で依頼していないメールのリンクには絶対に認証情報を入力しない習慣があるからだ(例: パスワード初期化など)。2025 年なら誰もが必ず身につけるべきセキュリティスキルだと思う
「すべてのマルウェアは暗号資産ウォレットのアドレスだけを書き換えていた」という記事の説明とは異なり、MetaMask が影響を受けなかった理由は、
主要なオープンパッケージリポジトリには、はるかに強力なセキュリティソリューションが必要だ。さもなければ、信頼性の高い審査済み中核パッケージ群だけでも必要になる。Python や Rust のエコシステムなども同様に、信頼だけで回っている
「これは防ぎようがない」という主張は、最も頻繁に侵害が起きているエコシステムでしか出てこない