npmとCDNが「フィッシングコードのホスティング」に悪用 標的型フィッシング攻撃の実態:標的は重要インフラ企業の営業担当者 Socket報告
Socketは、npmレジストリをホスティングおよび配布元として悪用した標的型フィッシング攻撃キャンペーンに関する調査報告を公開した。
サイバーセキュリティ企業Socketの脅威リサーチチームは2025年12月23日(米国時間)、npmレジストリをホスティングおよび配布元として悪用した持続的な標的型フィッシング攻撃キャンペーンに関する調査報告を公開した。
このフィッシング攻撃キャンペーンは、少なくとも5カ月にわたって行われた。米国および同盟国の重要インフラ関連業種(製造、産業オートメーション、プラスチック、医療、製薬など)の営業担当者など25人を標的としていた。
この攻撃は、6つの異なるnpmアカウントから公開された27の悪意あるパッケージが使用された。Socketによると、これらのnpmパッケージは全て、ブラウザで実行されるフィッシングコンポーネントを配布するように設計。埋め込まれたHTMLとJavaScriptのバンドルはいずれも、ページの読み込みと同時にブラウザ上で展開・実行され、安全な文書共有ワークフローや、Microsoftサインインプロセスの一部であるかのような偽の画面を表示するものだったという。
npmとCDNがフィッシング攻撃のホスティングインフラに悪用
Socketによると、この攻撃キャンペーンでは、npmとCDN(コンテンツデリバリーネットワーク)をホスティングインフラとして悪用し、npmパッケージに埋め込んだクライアントサイドHTMLおよびJavaScriptを配布していた。パッケージコードは、フィッシングページ(偽のダイアログ)をテンプレート文字列として保存したものであり、document.open()、document.write()、document.close()を用いて現在のページを消去し、脅威アクターが制御するコンテンツに置き換える。
脅威アクターが制御するコンテンツとして最初に表示されるのが、左の「MicroSecure」文書共有サービスのダイアログだ。このダイアログは、RFQ(見積もり依頼)、プロジェクトの技術説明、会社概要、レイアウト図を含むPDFが共有されたことを伝え、電子メールを確認して操作を続行するよう促している。標的となった受信者のメールアドレスがページにハードコードされている(画像では、青字のプレースホルダーに置き換えられている)。
このダイアログで「Verify and Continue」(確認して続行)ボタンを押すと、右の偽Microsoftサインインダイアログが表示される。このダイアログは、セッションがタイムアウトしたことを知らせ、再認証を促す。左のダイアログと同じく、標的のメールアドレスがあらかじめ入力されている。
セキュリティ製品による分析を回避する仕組みを実装
Socketの分析によると、悪意あるnpmパッケージは、セキュリティ製品によるサンドボックスや自動分析システムを検知して回避するため多層的なスクリーニングを実装していた。
まずスクリプトが、ブラウザの環境情報(navigator.webdriverフラグ、ユーザーエージェント、画面サイズなど)を検査し、botの特徴がないかどうかを確認する。同時に、マウスの移動やタッチイベントといった人間特有の動作が検知されるまで、「確認して続行」ボタンを無効化する。
さらに、分析自動化ツールの習性を逆手に取る「ハニーポット」の仕組みもあった。画面上では見えない隠し入力フィールド「company」を設置し、コード内の全項目を機械的に埋めようとするツールがこれに値を入力すると「人間ではない」と即座に判定する。
これらのチェックのいずれかに引っ掛かった場合、スクリプトはセッションが自動化されていると見なし、接続を遮断してフローをブロックする仕組みになっていたという。
脅威アクターが制御する認証情報収集インフラ
標的が偽のMicrosoftサインインダイアログで、誘導に従って再認証すると、スクリプトは、脅威アクターが制御する外部のWebインフラにブラウザをリダイレクトし、URLフラグメントに標的の識別子を埋め込み、下流での認証情報収集を可能にする。
それらのインフラドメインの一部は、「Evilginx」と呼ばれるツールを利用した「AiTM」(Adversary-in-the-Middle:中間者攻撃型のフィッシング手法)攻撃インフラとして以前から知られているものだ。Evilginxは、中間者攻撃を実行するためのオープンソースのツールキットであり、ユーザー名、パスワード、セッショントークンの窃取に使用される。
Evilginx経由のAiTM攻撃では、標的が対話型認証を行う際に、脅威アクターがセッションcookieやトークンを取得する。従来の多要素認証(MFA)を無効化する一般的な手法だ。
Socketが推奨する対策
従来のドメイン評価に基づくフィルタリングだけでは、正規のCDNやnpmレジストリ上の悪意あるコンテンツを防ぐことは困難だ。Socketは、npmホスト型フィッシングインフラやAiTMを用いた認証情報窃取のリスクを軽減するため、以下の対策を推奨している。
- ソフトウェアサプライチェーンとブラウザ実行環境の両方のセキュリティを強化する
- 依存関係の取り込みを厳格化する。発行元の検証、推移的依存関係の精査、バージョンの固定化、通常のライブラリには存在しない高リスクなアーティファクトのスキャンを行う。その中には、パッケージ化されたHTMLテンプレート、document.write()によるDOM(Document Object Model)の上書き、外部ホストへのフルスクリーンiframeオーバーレイ、高度に難読化されたブラウザバンドルなどが含まれる
- パッケージCDNを監視対象の制御プレーンとして扱う。そのために、ログを記録し、非開発環境からの異常なCDNリクエストについてアラートを出したり、既知の悪意あるパッケージやドメインをできるだけブロックしたりする
- 認証情報フィッシングがAiTMを用いて行われる可能性を想定し、フィッシング耐性のあるMFA(WebAuthn/パスキー)を必須化するとともに、条件付きアクセスを強制する
- 認証後に侵害が発生している兆候を監視する。その中には、セッショントークン窃取の指標、不審なサインインテレメトリー、異常なOAuthイベントなどが含まれる
Socketはnpmセキュリティチームに、この攻撃キャンペーンと、残存していたライブパッケージについて通報し、パッケージ発行者のアカウント停止を要請した。標的となった人物が所属する25の組織に通知し、トリアージを支援するため関連メトリクスを共有したという。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
ReactにCVSSスコア最大値10の深刻な脆弱性 どんな影響があるのか?
「React」のサーバコンポーネントに深刻な脆弱性が発表された。Reactのバージョン19や「Next.js」などは至急更新する必要がある。
npmパッケージを狙った2度目の大規模攻撃 492のパッケージが自己増殖型ワーム「Shai Hulud」に感染
セキュリティSaaSを手掛けるAikido Securityは、npmパッケージを標的とした自己複製型ワーム「Shai Hulud」による2回目の大規模サプライチェーン攻撃を観測したと発表した。
合計で毎週20億以上ダウンロード、「debug」「Chalk」など18の人気npmパッケージにマルウェア混入
Node.jsのパッケージマネジャー「npm」を通じて、18種類の人気npmパッケージに悪意のあるコードが埋め込まれ公開されたという。これらのパッケージは合計で、毎週20億回以上ダウンロードされている。
