Miraj・キトゥン、偽コーディングチャレンジでNodeRabbitとPollCatのRATを展開

イランと関連のある脅威アクター「Mirage Kitten」が、ソフトウェア開発者を標的に偽の採用選考課題を送りつけ、その中に新たに確認された2種類のクロスプラットフォーム型リモートアクセス型トロイの木馬「NodeRabbit」と「PollCat」を仕込んでいることが分かりました。

今回のキャンペーンでは、LinkedInをはじめとする求人プラットフォーム上で採用担当者になりすまし、武器化されたNode.jsプロジェクトやクラウドホスト型のZIPアーカイブを利用して、Windows、Linux、macOS各環境の開発者端末に密かにアクセスします。

テレメトリからは、中東・アフリカ地域の金融テック、航空、航空宇宙分野の組織が標的になっていることが判明しています。一方で、悪意あるプロジェクトアーカイブはインド、トルコ、イスラエル、イラク、ドイツ、アイルランドの公開スキャンサービスにも提出されていました。

感染の起点となるのは、偽の採用担当者が技術職を持ちかけ、期限付きのコーディング課題を送りつけるところから始まります。あるアーカイブFront-Technical-Challenge.zipには、Express、React、Viteで構築された、一見正規のTaskFlowアプリケーションが含まれていました。

そのREADMEには、応募者に対しフロントエンドの不具合を修正するよう指示しつつ、server.jsは安全であり変更すべきではないと明記されており、改ざんされたファイルから注意をそらす狙いがありました。

悪意のあるserver.jsはバージョン2.1.0のcolorized_terminalをインポートしていましたが、これはnpmからダウンロードされたものではなく、node_modules内にローカルで同梱されたトロイの木馬化されたパッケージでした。

被害者がこのプロジェクトを実行すると、このパッケージはnode_modules/.cache/.320697f1/index.jsから隠されたNodeRabbitのペイロードを、切り離されたプロセスとして起動していました。他のサンプルでは、同様に武器化されたpretty-logという名前のパッケージが使われていました。

このソーシャルエンジニアリングの手口は、開発者に対して特に効果的です。課題自体はnpm installやアプリケーションの実行といった通常のセットアップ手順を要求しているように見える一方、人為的に設定された期限やAIアシスタントの使用を禁じる指示によって、コードレビューを行わないよう仕向けられます。

Image

Kasperskyによれば、AIベースあるいは手動での監査を行っていれば、この不審なパッケージのインポートを見抜けた可能性があるとのことです。

NodeRabbitはNode.jsベースのRATで、Windows、Linux、macOSの各環境で動作可能です。

ホスト名、ユーザー名、OS情報、アーキテクチャ、MACアドレスなどのシステム属性からホスト固有の識別子を生成した上で、OSネイティブの仕組みを利用して永続化を確立します。

Windows環境では、初期の亜種はMicrosoft Edgeに偽装したディレクトリやIntel Driver & Support Assistantのコンポーネントに自身をコピーし、リネームしたnode.exeバイナリとJavaScriptペイロードを組み合わせ、レジストリのRunキーやスケジュールタスクを作成していました。

Linux版の亜種はcronの@rebootエントリを利用し、macOS版の亜種はLaunchAgentsを作成していました。

Mirage Kittenのキャンペーン

このインプラントは、AES-256-GCMで保護された暗号化JSONリクエストを使い、Azureにホストされた指令制御(C2)インフラと通信します。

Kasperskyの研究者は当初、アフガニスタンの被害システム上でNodeRabbitを発見し、その後エジプトとエチオピアでより高度な亜種を突き止めました。

攻撃者はシステム情報やネットワーク情報の収集、プロセスの列挙、シェルコマンドの実行、ファイルの読み書き、ビーコン間隔の変更、任意のNode.jsスクリプトの実行が可能です。

その後のNodeRabbitのビルドでは、プロキシの検出・認証への対応や解析回避のチェック機能が追加されたほか、「GitHub Copilot Helper」を名乗る偽のVS Code拡張機能や、悪意のあるGitのpost-mergeもしくはpost-checkoutフックを通じた開発者向けの永続化手法も加わりました。

2つ目に新たに確認されたマルウェアファミリーであるPollCatは、難読化されたJavaScript製のRATで、RankChallenge-reactという別のReactベースの選考課題を通じて配布されます。

DownloadAntivirus Software

Image

この誘導手口では、採用担当者から提供された短時間有効のOTPコードと1時間の制限時間が使われますが、被害者がコードを入力する前の、アプリケーション起動時点でマルウェアがバックグラウンドで動作を開始します。

登録が完了すると、PollCatはホストの情報収集、コマンドの実行、ファイルの一覧表示・削除、ドライブや実行中プロセスの列挙、双方向でのファイル転送、隠しプロセスの起動、そして攻撃者から提供されたJavaScriptの実行が可能になります。

そのSYSTEM_CHECKルーチンは、ソフトウェアやセキュリティ製品関連のディレクトリを調査対象としており、Microsoft、CrowdStrike、SentinelOne、Palo Alto Networks、Fortinet、Sophos、Kasperskyに関連するパスも含まれます。

PollCatのC2設計は、同グループが以前使用していたRetrograde/MiniFastツールとも共通点が見られます。いずれもHTTP 400レスポンスをセッションハンドシェイクの成功と見なし、socketIdを抽出してこの値をコマンドのポーリングに利用します。

共通するプロトコル構造、同一のデフォルトビーコン間隔、被害者の傾向、さらにAzure WebsitesとCloudflareを利用したドメインの反復的な使用が、KasperskyによるMirage Kittenへの高確度の帰属判定を裏付けています。

今回のキャンペーンは、Mirage Kittenにとって大きな転換を示しています。同グループはこれまで、DLLサーチオーダーハイジャッキングを通じて配布されるネイティブのC、C++、Go言語のマルウェアを好んで使用してきました。

これに対しNodeRabbitとPollCatは、Node.jsの依存関係、JavaScriptの実行、IDE拡張機能、Gitフック、クラウドホスト型の選考課題ファイルを悪用することで、現代の開発者のワークフローに巧みに溶け込んでいます。

組織は、依頼していないコーディング課題を信頼できないソフトウェアとして扱い、選考課題は使い捨て環境で隔離することが求められます。

実行前に同梱された依存関係を検査し、予期しないNode.jsプロセスや新規のスケジュールタスクを監視するとともに、Gitフックおよび VS Code拡張機能のディレクトリを確認してください。

Kasperskyはこの活動をTrojan.JS.MirageKitten.*として検知しています。

IOC(侵害指標)

種別 ドメイン
ドメイン oracle-challenge.s3.us-east-1.amazonaws.com
ドメイン naturalapplication.azurewebsites.net
ドメイン retaildemo.azurewebsites.net
ドメイン tubitak.azurewebsites.net
ドメイン rgbteller.azurewebsites.net
ドメイン wslwebui.azurewebsites.net
ドメイン plugplay.azurewebsites.net
ドメイン crossdwm.azurewebsites.net
ドメイン wdisystem.azurewebsites.net
ドメイン wslmenus.azurewebsites.net
ドメイン dnshnsdev.azurewebsites.net
ドメイン hpjumpsrv.azurewebsites.net
ドメイン storview.azurewebsites.net
ドメイン healthcomfsdpower.com

注記: IPアドレスおよびドメインは、誤って名前解決やハイパーリンク化されるのを防ぐため、意図的にディフェンジング処理(例: [.])を施しています。再フェンジング(re-fang)は、MISP、VirusTotal、あるいは自社のSIEMといった管理されたスレットインテリジェンス基盤内でのみ行ってください。

★ どのセキュリティツールを削るべきか? 1ページで採点 – 「継承されたセキュリティスタック」ガイドをダウンロード

Securityscans service

翻訳元: https://gbhackers.com/mirage-kitten-campaign/

本記事は gbhackers.com の記事を翻訳・要約したものです。