OX Securityは、同じ悪意あるHTMLファイルを含むnpmパッケージ24個を確認しました。ファイルの正体は、Cloudflareの認証画面を装った偽CAPTCHAです。攻撃者の主な狙いは、パッケージをインストールした開発者を直接感染させることではありませんでした。npmレジストリや、パッケージを自動同期するunpkgなどのミラーを、信頼できそうなフィッシングページのホスティング先として利用していたのです。
2
17
npmは「感染経路」ではなくホスティング基盤に
今回の手法が従来のnpmサプライチェーン攻撃と異なるのは、インストール時にコードを実行するパッケージではなく、単一の静的HTMLファイルを使っていた点です。npmやそのミラー上の対象ファイルを開くと、見慣れたサービスドメイン上にCloudflare風の認証画面が表示されます。
2
17
つまり、ファイルをnpmからダウンロードしただけで、直ちに感染が起きるとは限りません。攻撃者が求めていたのは、外部から拡散したリンクを利用者にクリックさせ、npmのレジストリやミラーを経由して偽ページへ誘導することでした。
17
リダイレクト先は状況に応じて変更
偽CAPTCHAは本物の認証ではなく、複数段階のリダイレクトの入口でした。OX Securityによると、初期のバージョンはMicrosoftの正規ドメインに似せたタイポスクワッティングドメインへ接続。その後は誘導先やインフラが変化し、microcloud[.]homesやlogin[.]microsofte[.]liveなどのドメインが確認されました。
2
18
さらに、このキャンペーンでは公開型のKeyValキーバリューストアが、誘導先を示すリゾルバー、いわば「デッドドロップ」として使われていました。これにより、同じHTMLファイルを24個のパッケージすべてで更新しなくても、被害者を送る先を変更できます。
21
この構成は、攻撃者にとって摘発や遮断を難しくします。npm上のパッケージを削除しても、すでにミラーへ同期されたファイルや、そのURLを含む既存のリンクまで自動的に無効になるわけではありません。報道では、レジストリから削除された後も、一部のパッケージファイルやミラー上のページが利用可能な状態に残っていたとされています。
17
18
最終段階はClickFix型のソーシャルエンジニアリング
偽CAPTCHAの役割は、利用者を安心させるための「おとり」です。ページは利用者にコマンドをコピーし、貼り付け、自分の端末上で実行するよう促します。これは、ソフトウェアの脆弱性を突くのではなく、利用者自身の権限で悪意あるコマンドを実行させるClickFixの典型的な手口です。
20
25
同様の攻撃では、偽の認証ボタンや指示がクリップボードにコマンドをひそかにコピーし、キーボードショートカットやOSの実行画面を使うよう案内する例も確認されています。
26
28
覚えておきたい原則は明快です。CAPTCHAやブラウザーの認証画面が、シェル、PowerShell、Terminal、あるいは「ファイル名を指定して実行」画面を開き、コピーした文字列を実行するよう求めることはありません。
ダウンロード数はどの程度だったのか
OX Securityによると、削除前の各パッケージの週間ダウンロード数は、おおむね50~300件でした。
2 ただし、この数字はnpmレジストリ上の活動を示すもので、直接送られたリンクやミラーのURLを通じて偽ページを見た人数まで含むものではありません。
そのため、通常のパッケージダウンロード数だけでは、キャンペーンが狙った到達範囲を正確に測れません。パッケージ群は、攻撃者が用意したランディングページのネットワークとして機能しており、URLはフィッシングメッセージ、侵害されたウェブサイト、その他の経路で拡散できました。
2
17
拡大するClickFix攻撃の一例
このnpmキャンペーンは、より広いClickFixの流れにおける「インフラの応用例」と見るのが適切です。近年の報告では、攻撃者はCAPTCHA、ブラウザーエラー、偽アップデート、便利なソフトウェアなど、もっともらしいおとりと、利用者に自分でコマンドを実行させる指示を組み合わせています。Proofpointはこの手法がマルウェア配布の拡大する手段になっていると説明し、Microsoftも、妨害とソーシャルエンジニアリングを組み合わせて実行率を高める関連手法を報告しています。
22
25
27
PavinLoader、EtherHiding、Amatera Stealer、Mac開発者を狙う偽OpenAI Codexページ、ACR Stealer、さらに175個のnpmパッケージを悪用したとされる初期のBeamgleaキャンペーンは、ユーザー操作を利用した攻撃という大きな傾向を考えるうえでの例です。ただし、提示された証拠だけでは、今回の24パッケージのキャンペーンが、それらと同じ攻撃者によって運営されていたとは確認できません。
また、Beamgleaの175パッケージに関する主張についても、今回提供された証拠からは、その詳細やOX Securityのキャンペーンとの運用上の関係を裏付けることはできません。
npmサプライチェーン攻撃の定義を広げる事例
今回の事例が示すのは、npmパッケージがインストール時に悪意あるコードを実行しなくても、攻撃者にとって有用な存在になり得るということです。信頼性の高いレジストリとミラーを通じて配信される静的HTMLファイルが、フィッシング作戦の入口になる可能性があります。
開発者やセキュリティ担当者は、予期しないnpmやCDNのURLを確認し、偽の認証指示をソーシャルエンジニアリングとして扱う必要があります。ブラウザーやエンドポイントで不審なコマンド実行を監視し、ウェブページからコピーしたコマンドを実行しないことも重要です。
最大の警告サインは、CAPTCHAそのものではありません。通常のセキュリティ手順を回避し、文字列を貼り付けて実行するよう求めてくることです。