注目

脅威動向 / THREATS / APT

Mirage KittenがNode.js製RAT「NodeRabbit」とJavaScript製「PollCat」を初投入 — Kasperskyが航空・金融標的の手口を分析

Kasperskyは2026年9月1日、Mirage Kittenが中東とアフリカの航空・金融を標的にNode.js製のクロスプラットフォームRAT「NodeRabbit」とJavaScript製「PollCat」を投入したと報告した。LinkedInなどの採用プラットフォームで偽リクルーターがコーディング課題を装うアーカイブを送り、改ざんしたnpmパッケージ経由で持続化と遠隔操作を図る手口が明らかになった。

攻撃者グループ
攻撃手法
ソフトウェア

Kasperskyは2026年9月1日、APTグループMirage Kittenが新たにNode.js製のリモートアクセス型トロイの木馬(RAT)「NodeRabbit」と、難読化されたJavaScript製RAT「PollCat」を運用していることを報告した。Kasperskyがアフガニスタンで不審な活動を検知したことを起点に、エジプトとエチオピアでも同系統の別変種を確認した。Mirage KittenがこれまでCやC++、Goで書かれたネイティブマルウェアをDLLの検索順序ハイジャックなどで展開してきたのに対し、Node.jsとJavaScriptを悪用する手口は同グループとして初めて公的に確認されたものだと同社は説明している。Kasperskyの製品はこれらをTrojan.JS.MirageKitten.*として検出する。

偽の採用担当がコーディング課題で誘導

Kasperskyによると、感染の起点はLinkedInなどの求人プラットフォームで偽の採用担当者(タレント・アクイジション担当を名乗るアカウント)が接触し、技術課題としてコーディングチャレンジのアーカイブを送る手口である。

最初に確認されたアーカイブはFront-Technical-Challenge.zip(MD5: 1EA83E4E4592B01E4ACAB63EB867BEE5)で、Amazon S3バケット(oracle-challenge.s3.us-east-1.amazonaws.com)でホストされていた。中身はExpress、React、Viteで作られたTaskFlowという評価用アプリケーションで、READMEには「フロントエンドの不具合を修正せよ」「server.jsは不具合がないため修正不要」「制限時間は3時間」「AIアシスタントの使用禁止」などと記されていた。Kasperskyは、server.jsの1行目に仕込まれた未知のnpmパッケージへのimportをAIコードレビューが指摘できた可能性があると指摘している。

攻撃者はcolorized_terminal(バージョン2.1.0)やpretty-log(同2.1.0)といった改ざんパッケージをアーカイブ内のnode_modulesに直接同梱していた。これらパッケージがimportされると、node_modules/.cache/.320697f1/index.jsなどに隠されたimplantが分離されたバックグラウンドプロセスとして起動する。パッケージ自体はnpmレジストリには公開されていない。

公開情報として引用された事例では、標的のソフトウェアエンジニアが大手テクノロジー企業の採用担当を名乗る人物から連絡を受け、Amazon S3上の課題リンクを渡されてダウンロードと実行を急かされたという。Kasperskyがテレメトリから再構築した配信経路も、リクルーターからの接触、技術評価を装う課題提示、正規クラウド上のトロイ化アーカイブという流れで一致した。

NodeRabbit:クロスプラットフォームのRATと3つの変種

NodeRabbitはNode.jsで書かれたRATで、Windows、Linux、macOSで動作する。Kasperskyはコード系統を共有する3つの変種を確認した。

共通の挙動

最初の変種では、NodeRabbitはホスト名、ユーザー名、OSバージョン、アーキテクチャ、MACアドレスからSHA-256ハッシュを計算し、先頭32文字をエージェント識別子とする。単一インスタンスの保証のため127.0.0.1:48739でTCPリスナーをバインドし、バインドに失敗した場合は既に常駐していると判断して終了する。

C2通信はAzureでホストされた3つのドメイン(例: plugplay.azurewebsites.net、Rgbteller.azurewebsites.net、Wslwebui.azurewebsites.net)を順に試行する。エンドポイントは/api/rabbit/checkin(エージェント登録)、/api/rabbit/task(コマンド取得)、/api/rabbit/result(結果送信)で、JSONをAES-256-GCMで暗号化し、12バイトのIVと16バイトの認証タグを付与して{"d": "base64(IV||ciphertext||tag)", "_r": "...", "_t": ...}形式で送受信する。

初期変種が備える11のコマンドには、ホスト情報取得(sys:info)、プロセス一覧・実行(proc:list / proc:start)、ファイル操作(fs:list / fs:read / fs:write / fs:delete / fs:mkdir)、ネットワーク設定列挙(net:config)、ビーコン間隔変更(agent:sleep)、任意Node.jsスクリプトの実行(script:exec)が含まれる。

持続化

OSごとの持続化は次のとおりである。

  • Windows(変種1): %APPDATA%\Microsoft\EdgeUpdate\msedge_update.jsへ自身を複製し、同フォルダのnode.exeをnodew.exeとして複製してPEサブシステムをConsoleからWindows GUIへ書き換えてコンソール非表示化、HKCU\Software\Microsoft\Windows\CurrentVersion\Run\MicrosoftEdgeUpdateを作成する。
  • Linux(変種1): ~/.config/microsoft-edge-update/msedge_update.jsへ複製し、@rebootのcronを作成する。
  • macOS(変種1): ~/.config/microsoft-edge-updateへ複製し、~/Library/LaunchAgents/com.microsoft.edgeupdate.plistをRunAtLoadとKeepAliveで作成する。

第二変種(エジプトで確認、pretty-log経由)は解析環境対策を追加した。メモリ容量、CPU数、稼働時間、分析者に関連するユーザー名やホスト名、分析ツールの存在を検知すると、www.google.comなどへの良性HEADリクエストを送ってからC2に一切接続せず終了する。プロキシ環境にも部分的に対応し、環境変数やWindowsインターネット設定、WinHTTP設定を参照してHTTP CONNECTでトンネルし、必要に応じてcurl.exeへNTLM/Negotiateを委譲する。単一インスタンス用のポートも固定ではなく、エージェント識別子の先頭4文字から41984 + (値 mod 5000)で計算するホスト固有のポート(41984~46983)を使う。持続化はIntel Driver & Support Assistantを偽装し、Windowsでは%LOCALAPPDATA%\Intel\DSA\idriver_support.jsとIntelDSA.exeへの複製と、IntelDriverSupportUpdateという毎日10時実行のスケジュールタスクを作成する。

第三変種(エチオピアで確認)はC2エンドポイントを/sdk/v2/ready/sdk/v2/config/sdk/v2/eventsへ変更し、AzureとCloudflareのドメイン(visitfinancedentists.com など)のチェーンを使う。コマンドは23個へ拡張され、ドライブ列挙(fs:drives)、プロセス強制終了(proc:kill)、C2リストの差し替え(agent:servers)、OutlookのOST/PSTからのメールアドレス収集(outlook:emails)、VS Code拡張やGitフックを使った持続化の確認・導入(persist:vscode、persist:project:injectなど)が追加された。

開発者ワークフローを悪用する持続化

第三変種は、開発者が日常的に使う2つの経路で再感染を狙う。

  1. 偽のVS Code拡張: GitHub Copilot Helperという表示名とAI coding assistant helper serviceという説明、onStartupFinishedで起動するextension.jsを持つ偽拡張を作成し、インストール先のpayloadをNode.jsで起動する。ローカルの拡張メタデータから借用した信頼できるpublisher名を表示して目立たなくする。Windowsでは拡張ディレクトリがなくてもRunキーでの持続化を試みる。
  2. Gitフックへの注入: persist:projects:scanで最近のVS Codeワークスペースや~/projects~/source配下の最大60件の直下ディレクトリから最大20件のリポジトリを列挙し、persist:project:inject.git/hooks/post-merge.git/hooks/post-checkout# shepherd-persistマーカー付きのランチャーを追記する。次回Git操作でフックが発火するとpayloadが起動する。

PollCat:別課題で配布されたJavaScript製RAT

NodeRabbitの追跡中に見つかったPollCatも、プログラミング課題を装って配布された。サンプルはRankChallenge-reactというReactのコード修正課題に含まれ、npm i && node index.jsで起動する構成だった。パッケージ名はctf-server、バックエンドはCTF server runningと表示するなど、CTF用語が繰り返し使われており、攻撃者がAIコーディング支援で生成したテンプレートに悪性コンポーネントを挿入した可能性をKasperskyは指摘している。

課題のアーカイブに同梱されたPDFチュートリアルは「Continueをクリックし、6桁のOTPコードを入力して1時間以内に完了せよ」「コードはリクルーターから提供され使い切りで短時間で失効する」などと説明し、リクルーターがコードを直接渡すことでアクセスを制御しつつ、期限切れとカウントダウンで実行を急かす設計になっていた。

標的とインフラ

Kasperskyは、アフガニスタン、エジプト、エチオピアの各システムでNodeRabbitの異なる変種を回収し、テレメトリの横断的なハンティングでキャンペーンの広がりを確認した。公開された分析では、標的の業種として中東とアフリカの航空とFinTechを挙げている。

C2インフラはAzure WebsitesやCloudflare上のドメインが使われ、変種ごとにエンドポイントとドメインの組み合わせが異なる。攻撃者は課題アーカイブをAmazon S3でホストし、正規のクラウド基盤を悪用して配信していた。

対策と検出

Kasperskyは、今回のNodeRabbitとPollCatが同グループとして初めて確認されたNode.jsおよびJavaScriptベースのマルウェアであり、同社の製品ではTrojan.JS.MirageKitten.*として検出されるとしている。

同社の分析は、NodeRabbitの持続化がMicrosoft Edge UpdateやIntel DSAといった正規に見えるパスやタスク名に偽装すること、VS Code拡張やGitフックといった開発者環境に常駐する経路を用いることを示している。Kasperskyはレポート末尾で、ファイルハッシュやドメイン、IPを含む詳細な侵入指標(IoC)とYARAルールを公開している。

出典: Kaspersky Securelist, Mirage Kitten targeting aviation and FinTech sectors across the Middle East and Africa with a new malware set (Omar Amin, 2026年9月1日) https://securelist.com/mirage-kitten-new-backdoors-noderabbit-pollcat/121244/

この記事は、公開情報と編集部の調査・知見をもとに構成しています。内容は公開時点の情報に基づく解説であり、個別の環境への診断・対応を保証するものではありません。重要な判断では、記事内の出典や各提供元の最新情報もご確認ください。