Socketのセキュリティ研究者は、npmレジストリとunpkg CDNを悪用した大規模なフィッシングキャンペーンを発見した。このキャンペーンでは175個の悪意あるパッケージが使われ、2万6000回以上ダウンロードされて認証情報の窃取に利用されていた。
研究者がBeamgleaと名付けたこのキャンペーンは、主に欧州とAPACの産業、テクノロジー、エネルギー関連企業135社以上を標的にしていた。
研究者は「npmエコシステムは、直接的な攻撃ベクトルではなく、知らぬ間にインフラとして利用されるようになる」と述べた。
npmの悪用における新たな手口
今回が初めてではない。npmパッケージが攻撃に利用されたのは、
パッケージはnpm install中には動作しないため、従来型のサプライチェーン対策(ビルド時のマルウェアスキャンなど)では検知できない可能性がある。
その代わり、攻撃者は信頼された配信(unpkgをHTTPS経由で)を悪用し、ユーザーを特製のフィッシングポータルへひそかにリダイレクトするJavaScriptを読み込ませた。多くの場合、URLフラグメントを使って被害者のメールアドレスがあらかじめ入力されており、基本的なサーバー側のログ記録を回避していた。
パッケージからフィッシングへ
Beamgleaは、9つのnpmアカウントで公開された175個のパッケージから成る。各パッケージはredirect-[a-z0-9]{6}という命名パターンに従い、単純なペイロードであるbeamglea.jsを参照する。このスクリプトは、リダイレクト前に被害者のメールアドレスをフラグメントとしてフィッシングURLに付加する(例:#user@company.com)。
Socketの研究者は、購入注文書、技術仕様書、プロジェクト文書など、これらのスクリプトをunpkgから読み込むテーマ付きHTML誘導ページを630件以上特定した。
メタタグの値nb830r6xも複数のアーティファクトに現れており、研究者はこれを手がかりにキャンペーンを追跡した。Socketのチームはnpmに連絡し、このキャンペーンのパッケージを削除するよう要請している。
脅威アクターは、npmへのログインを確認し、被害者ごとのJavaScriptをテンプレート化してパッケージを公開し、unpkg.com/<package>@<version>/beamglea.jsを指すHTML誘導ページを生成するPythonツールによって、パッケージ生成の全工程を自動化していた。
誘導ページを開くと、複数あるフィッシングドメインのいずれか(例:cfn.jackpotmastersdanske[.]com)にリダイレクトされ、認証情報があらかじめ入力される。
一部のURLには、Office 365の「MFAなし」を標的にしていることを示すBase64パラメーター(例:sv=o365_1_nom)が含まれており、攻撃者がこのインフラを将来のビジネスメール詐欺(BEC)攻撃に利用する計画である可能性を示している。
この手法は、開発者のマシン上でパッケージを実行することなく、広く利用されている開発者向けCDNへの信頼を悪用する。
npm攻撃への対策
悪意ある、または侵害されたnpmパッケージへの露出を減らすには、技術的な制御、安全な開発手法、継続的な監視を組み合わせた多層防御戦略を組織が採用すべきだ。
- 安全な依存関係管理:プライベートレジストリを利用し、許可リストに登録したパッケージとバージョン固定を使って、環境に取り込む依存関係を管理する。
- スキャンと完全性チェックの自動化:を継続的に実行し、パッケージの署名またはチェックサムを検証して、改ざんや悪意あるコードを検知する。SCAツールを
- ビルド環境とネットワーク環境の強化:CI/CDパイプラインを分離し、信頼できるドメインへの外向きトラフィックに制限を設け、リスクの高いnpm installスクリプトを無効にする。
- 教育と監視:開発者にパッケージを慎重に精査するよう教育し、タイポスクワッティングや異常に注意するとともに、npmのイベントをセキュリティ監視とインシデント対応計画に組み込む。
これらの対策を組み合わせることで、組織はソフトウェアサプライチェーンを保護し、悪意ある、または改ざんされたnpmパッケージを通じた侵害のリスクを低減できる。
Beamgleaは、悪意あるインストールから、公開レジストリやCDNをフィッシングのための信頼されたインフラとして利用する手法への転換を示している。
Beamgleaのような攻撃が信頼されたツールと脅威インフラの境界を曖昧にする中、全体的なソフトウェアサプライチェーンのセキュリティの強化はこれまで以上に重要だ。

