NOVABLIGHTの概要
NOVABLIGHTは、フランス語の習熟度を示す脅威グループによって開発および販売された、NodeJSベースのMaaS(Malware-as-a-Service)情報窃取ツールです。これは、主要な販売およびサポート プラットフォームである Telegram と Discord での議論や運営上のコミュニケーションから明らかです。
NOVABLIGHTの最新リリースバージョンの分析に基づいて、次のコードスニペットは、 Nova SentinelとMALICORDの背後にあるグループであるSordeal GroupもNOVABLIGHTに責任があることを示唆しています。
重要なポイント
- NOVABLIGHT は教育ツールとして説明されている情報窃取者ですが、Telegram チャネル メッセージでは機密情報と編集されていないスクリーンショットが明らかになります。
- NOVABLIGHT ライセンスは最長 1 年間有効で、バイナリは Telegram または Discord 経由で生成できます。
- 多くの機能を備えた高度に難読化されたコード。
ディスカバリ
Elastic Security Labsは、インターネットユーザーのMaaS感染の初期アクセスの誘惑として、偽のビデオゲームインストーラーのダウンロードを利用する複数のキャンペーンを特定しました。ある例では、URL http://gonefishe[.]com
、バイナリをダウンロードし、Steam で最近リリースされたものに匹敵する名前と説明を持つゲームのフランス語版をインストールするようユーザーに促しました。
配信、収益化、コミュニティ
このグループは、以前はSellixとSellpass、現在はBillgangなど、さまざまなオンラインプラットフォームで製品を宣伝および販売していました。
このグループは、有効期限が 1 か月から 12 か月の間にあるAPIキーを販売しています。このキーを使用して、Telegram ボットまたは Discord を介して NOVABLIGHT のインスタンスを構築できます。
このグループは、報酬として API キーを使用して Discord チャネルで紹介プログラムを推進しています。
ユーザーは、被害者から収集した情報を表示するグループがホストするダッシュボードにアクセスできます。次のドメインが特定されましたが、他のドメインが存在する可能性があります。
api.nova-blight[.]top
shadow.nova-blight[.]top
nova-blight[.]site
nova-blight[.]xyz
bamboulacity.nova-blight[.]xyz
ダッシュボードパネルで使用される画像の一部は、さまざまなアカウントに関連付けられた GitHub リポジトリでホストされているため、グループに関する詳細が公開されました。
GitHubアカウント KSCHcuck1
は、アカウント KSCH-58
(WEB ARCHIVE LINK)でGitHubでホストされていたスティーラーの初期バージョンの無料版であるMALICORDの前作成者と同様のペンネームです。X アカウントにも類似点があり、2023 年には「史上最高のスティーラー」を積極的に宣伝していた @KSCH_dsc
。
グループに関連して、次の GitHub アカウントが特定されています。
- https://github.com/KSCHcuck1
- https://github.com/CrackedProgramer412/caca
- https://github.com/MYnva
- https://github.com/404log(死亡)
彼らの公開 Telegram チャネルは、チュートリアルとユーザー コミュニティをホストしています。次の画像キャプチャでは、ユーザーはビルドプロセスのスクリーンショットを共有しています。
インフォスティーラーのユーザーは、高級品や送金の画像を公然と共有していますが、NOVABLIGHT は教育目的のみであると説明されているため、これは注目に値します。
NOVABLIGHT分析
NOVABLIGHTは、Electronフレームワークを備えたNodeJS上に構築されたモジュール式で機能豊富な情報スティーラーです。その機能は、単純な資格情報の盗難を超えて、データの収集と流出、サンドボックス検出、および高度な難読化の方法を組み込んでいます。
マルウェアのビルド プロセスの注目すべき点は、そのモジュール構成です。顧客は特定の機能を無効にすることを選択できますが、それらの機能の基になるコードは最終的なペイロード内に残ります。これは休止状態であり、ビルドの構成フラグに基づいて実行されません。
このレポートのコード スニペットは、実装の詳細がバージョン 2.2 サンプルと一致する場合は難読化されていないバージョン 2.0 サンプルからのもの、または異なる場合はバージョン 2.2 サンプル の手動で難読化解除されたコードからのものです。
コード構造
初期設定からデータ盗難まで、インフォスティーラーは、高レベルの「フロー」コントローラーによって管理される明確な多段階のパイプラインに編成されます。主な段階は次のとおりです。
- flow/init で指定します。 プリフライトチェック(実行中のインスタンス、管理者権限、インターネット接続)、アンチ分析チェック、システム情報の列挙、永続性の確立など。
- フロー/インジェクション: アプリケーションのインジェクションとパッチ適用(Atomic、Mullvad、Discordなど)
- flow/grabb: データ収集
- flow/ClipBoard: クリップボードのハイジャック
- flow/sending: データ流出
- フロー/無効化:システム妨害行為(Windows Defenderの無効化、システムのアンチリセット、インターネット接続の切断など)
- フロー/クリーニング: 流出後のクリーンアップ
コード構造の詳細については、NOVABLIGHTのコアモジュールと実行フローのそれぞれに直接依存関係をリストしたGitHub Gistをご覧ください。
アンチデバッグとサンドボックス検出
NOVABLIGHTは、環境フィンガープリンティングと積極的な対策を組み合わせて、分析環境を検出して回避するための複数の技術を組み込んでいます。これらのチェックには次のものが含まれます。
- VM 関連の GPU 名の検出 (vmware、virtualbox、qemu)
- ブラックリストに登録されているユーザー名のチェック (サンドボックス、テスト、マルウェア)
- VM 固有のドライバー ファイル (balloon.sys の識別、ケムガ)
- 画面解像度が低いか、USBデバイスがないか確認する
- IP、HWID、ユーザー名、プログラム、組織、GPU 名、PC 名、オペレーティング システムのブラックリストについて GitHub にクエリを実行する
- リモートリストで見つかった既知の分析およびデバッグツールをアクティブに強制終了する
ブラックリストは GitHub でホストされています。
- https://raw.githubusercontent.com/Mynva/sub/main/json/blocked_ips.json
- https://raw.githubusercontent.com/Mynva/sub/main/json/blocked_progr.json
- https://raw.githubusercontent.com/Mynva/sub/refs/heads/main/json/blockedorg.json
- https://raw.githubusercontent.com/Mynva/sub/main/json/blocked_GPUTYPE.json
- https://raw.githubusercontent.com/Mynva/sub/main/json/nope.json
- https://raw.githubusercontent.com/Mynva/sub/main/json/blocked_hwid.json
- https://raw.githubusercontent.com/Mynva/sub/main/json/blockedpcname.json
- https://raw.githubusercontent.com/MYnva/sub/refs/heads/main/json/blockedOS.json
Defender を無効にし、タスク マネージャーを無効にしようとします
NOVABLIGHT は、バッチ スクリプト DisableWD.batをダウンロードして実行することで、Windows Defender および関連する Windows セキュリティ機能を無効にしようとします。パブリック GitHub リポジトリから。
このマルウェアはタスク マネージャーを無効にできるため、技術者以外のユーザーが悪意のあるプログラムを特定して終了することが困難になると主張しています。regedit-rs
パッケージのsetValues
を使用して、DisableTaskMgr
値を HKCU\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Policies\\\\System
の1
に設定します。
ただし、regedit-rs
リポジトリ(v1.0.3)を見ると、エクスポートされた関数はsetValues
ではなく、putValue
だけです。この機能は意図したとおりに動作しない可能性があります。
インターネットアクセスを無効にする
被害者のインターネット接続を妨害するために、マルウェアは 2 つの異なる方法を採用します。1 つ目は、外部 npm パッケージ wifi-control とその resetWiFi 機能を利用して、高速ループで Wi-Fi アダプターを繰り返しリセットすることで、Wi-Fi アダプターを永続的に無効にすることです。
2 番目の方法では、 netsh
コマンドを使用してプライマリ "イーサネット" ネットワーク アダプターを無効にし、 5 秒ごとに実行して、再有効化の試行を無効にします。
システムの回復を破る
このマルウェアは、構成でantireset
フラグが有効になっている場合、Windows 回復環境 (reagentc /disable
) を無効にし、すべてのボリューム シャドウ コピー (vssadmin delete shadows /all
) を削除することで、システムの回復を妨害する可能性があります。
ファイル削除のブロック
被害者にとって明らかな別のシステム妨害機能には、DE が削除権限を拒否し、DC が親フォルダーを介して削除を禁止するicacls “${filePath}” /deny ${currentUser}:(DE,DC)
を通じてセキュリティ権限を変更し、オプションで「トロール」メッセージを含むポップアップ メッセージ ボックスを作成することで、マルウェア自体の実行可能ファイルを削除不能にすることが含まれます。
また、自分自身をロックする前に、PowerShellコマンドを実行して、次のシステムグループから被害者のアカウントを削除します: Administrators
、 Power Users
、 Remote Desktop Users
、 Administrateurs
。
クリップボードのアドレス置換
このマルウェアは、マシンのクリップボードでCryptoまたはPayPalアドレスをアクティブに監視し、それらを構成で定義されたアドレスに置き換える「クリッパー」モジュールを実装しています。ペイロードを構築したユーザーが独自のアドレスを提供しなかった場合、マルウェアはデフォルトでハードコードされたセットになり、おそらく開発者によって制御され、経験の浅いユーザーから資金を獲得できます。
電子応用注入
NOVABLIGHTは、いくつかの一般的なElectronベースのアプリケーションに悪意のあるコードを挿入できます。ペイロードは、エンドポイント https://api.nova-blight[.]top/injections/*targeted_application*/*some_key*
から動的にフェッチされ、次のようなアプリケーションを対象としています。
- Discordクライアント
- Exodusウォレット
- Mullvad VPNクライアント
- アトミックウォレット
- Mailspring 電子メール クライアント
パブリックGitHubリポジトリからすべてのモジュールを取得することができました。
インジェクションの実装は、Electron Appの再パックの典型的な例であり、ASARファイルを解凍し、ターゲットのソースファイルを書き換えてから、再パックします。Mullvadクライアントを含む例を見ると、まずProgram Files\\Mullvad VPN\\resources\\app.asar
を一時ディレクトリに解凍し、https://api.nova-blight[.]top/injections/mullvad/dVukBEtL8rW2PDgkwdwfbNSdG3imwU8bZhYUygzthir66sXXUuyURunOin9s
からバックドアバージョンのaccount.js
を取得し、ソースファイルをaccount.js
上書きし、最後に再パックします。2025.4 などの古いバージョンの Mullvad でも動作する可能性がありますが、これは、最新バージョンのMullvadでは機能しないようです。
Exodus クライアントの同様のケースで、NOVABLIGHT 開発者は Exodus アプリケーションのメインモジュールの setPassphrase 関数を変更し、資格情報を盗む機能を追加しました。
これは、Exodus 25.28.4 の正規リリース main/index.js
次のようになります。
トロイの木馬化された index.js
では、ユーザーが入力したパスフレーズは、公式のTelegram APIまたはカスタムTelegram APIプロキシのいずれかを使用して、構成可能なDiscord WebhookとTelegramを介して盗み出されます。
Chrome の機密データの抽出
バージョン 137 で実行されている Chromium ベースのブラウザ (Brave、Chrome、Edge) を標的にするために、マルウェアは Chrome データ復号化ツールを含む zip ファイルを https://github.com/Hyutop/pandakmc-auto-vote/blob/main/bin.zip からダウンロードします。
GitHub リポジトリは、Minecraft 投票管理ツールになりすまそうとします。
ただし、zipファイルには、bin.zip
xaitax によるChrome App-bound decrypter PoCプロジェクトのバージョン0.11.0のコンパイルされたコード( decrypt.exe およびchrome_decrypt.dll)が 含まれています。
システム列挙
NOVABLIGHTがアクティブになると、被害者のマシンとユーザーアクティビティの完全なプロファイルを構築するように設計された包括的なシステム列挙機能スイートを実行します。各モジュールは特定の情報を対象としており、コマンド アンド コントロール サーバーにアップロードされる前にローカル ディレクトリに保存されます。検出エンジニアは、各手法の具体的な実装と、十分な可視性を提供するデータソースに注意する必要があります。
captureSystemInfo()
:デバイスのフィンガープリントを行うための広範なハードウェアおよびソフトウェア仕様を収集します。これには、ハードウェア ID (HWID)、CPU および GPU モデル、RAM サイズ、ディスク情報、Windows OS バージョン、および接続されているすべての USB デバイスのリストが含まれます。- アウトプット:
*configured_path*/System Info.txt
captureScreen()
: 被害者のデスクトップの完全なスクリーンショットをキャプチャし、ユーザーの現在のアクティビティを即座に把握できます。- 方法: スクリーンショット デスクトップ ライブラリを利用します。
- 出力: タイムスタンプ付きの画像ファイル ( 例: configured_path/hostname_2025-10-26_14-30-00.png')。
captureTaskList()
: 状況認識のために現在実行中のすべてのプロセスのリストを取得し、攻撃者がアクティブなアプリケーションとセキュリティ ツールを確認できるようにします。- メソッド: コマンド
tasklist /FO CSV /NH
を実行します。 - アウトプット:
*configured_path*/TaskManagerInfo.txt
- メソッド: コマンド
captureAVDetails()
: Windows セキュリティ センターにクエリを実行して、インストールされているウイルス対策製品またはエンドポイント保護製品を識別します。- メソッド: PowerShell コマンドを実行します
Get-CimInstance -Namespace root/SecurityCenter2 -ClassName AntiVirusProduct | Format-List
- アウトプット:
*configured_path*/Avdetails.txt
- メソッド: PowerShell コマンドを実行します
captureClipboardContent()
: パスワードやコピーされたメッセージなどの機密性の高い一時的な情報を含むことができる、ユーザーのクリップボードの現在のコンテンツをダンプします。- 方法: PowerShell コマンド
Get-Clipboard
を実行します。 - アウトプット:
*configured_path*/Clipboard.txt
- 方法: PowerShell コマンド
captureWebcamVideo()
: システムのプライマリ Web カメラを使用してビデオを秘密裏に録画し、被害者とその環境に関する視覚的インテリジェンスを提供します。- 方法: ビデオキャプチャに
direct-synch-show
ライブラリを活用します。 - アウトプット:
*configured_path*/Bighead.avi
- 方法: ビデオキャプチャに
captureWifiPasswords()
: デバイスに保存されているすべての Wi-Fi ネットワークのパスワードを盗み出し、被害者が使用する他のネットワークへの潜在的な横方向の移動やアクセスを可能にします。- 方法: プロファイルごとにコマンド
netsh wlan show profile *wifi_ssid* key=clear
を実行します。 - アウトプット:
*configured_path*/WifiPasswords.txt
- 方法: プロファイルごとにコマンド
getFilesUrgents
: この機能は、 バックアップ、デフォルト、コード、discord、トークン、passw、mdp、motdepasse、mot_de_passe、ログイン、秘密、アカウント、アカウント、アカウント、アパック、バンク、銀行、マタマスク、ウォレット、クリプト、エクスドゥース、2fa、a1f、メモ、コンポーネ、ファイナンス、シークレト、クレジット、CNI などのキーワードのセットに従ってディスク上のファイルを盗み出し、これらのファイルはfiles.zip
としてアーカイブされ、C2 に送信されます。
データ漏えい
盗まれたデータには、NOVABLIGHT グループが所有する公式 Web パネル、Discord Webhook API、Telegram API の 3 チャネルがあります。メインのプロキシ API と Web パネルが現在ダウンしているため、これらのチャネルのステータスは不明であり、同じプロキシ インフラストラクチャに依存している場合、Discord チャネルと Telegram チャネルの機能が中断される可能性があります。
Web パネルは、主要なデータ管理プラットフォームとして宣伝されていたため、かつては公式の流出チャネルでした。
Telegram 実装は、最初に構成されたプロキシ URL にデータを送信しようとし、コードは URL にこの場合は https://bamboulacity.nova-blight[.]xyz/req/dVukBEtL8rW2PDgkwdwfbNSdG3imwU8bZhYUygzthir66sXXUuyURunOin9s
の文字列 req
が含まれているかどうかをチェックします。
プロキシURLが構成されていないか、条件を満たさない場合、モジュールは、構成されたuserId、chatId、botTokenを使用して公式のTelegram API( https://api.telegram[.]org/bot*token*/sendMessage
)と直接通信し、盗まれたデータを送信します。
Telegram モジュールとは異なり、Discord Webhook の実装ははるかに簡単です。フォールバックメカニズムなしで、流出に単一のURLを使用します。分析されたサンプルでは、この目的のために一貫してカスタム プロキシ URL が使用されていました。
NOVABLIGHTは、冗長で多層のインフラストラクチャを採用しています。このマルウェアは、単一障害点を作成する単一のアップロード ホストに依存する代わりに、正規のサードパーティのファイル ホスティング サービスと独自の専用バックエンドを組み合わせて利用します。ドメインとエンドポイントの抽出されたリストを次に示します。
https://bashupload[.]com
https://litterbox.catbox[.]moe/resources/internals/api.php
https://tmpfiles[.]org/api/v1/upload
https://oshi[.]at/
http://sendfile[.]su/
https://wsend[.]net
https://api.gofile[.]io/servers
https://gofile[.]io/uploadFiles
https://rdmfile[.]eu/api/upload
https://bamboulacity.nova-blight[.]xyz/file/
ターゲットデータ
NOVABLIGHTは、インストールされているソフトウェアの特定のリストから資格情報とセッションファイルを盗むように設計された標的ルーチンを実行します。キュレーションされたリストは、この GitHub Gist で入手できます。
難読化技術
配列マッピング
最初に取り組む手法は、マルウェアによる配列マッピングの使用です。このスクリプトは、スクリプトで使用されるほぼすべてのリテラル値を考慮に入れる、異なる型とエンコーディングの値を使用して 1 つの大きなグローバル配列 __p_6Aeb_dlrArray
を初期化します。
配列インデックス参照を置き換えた後、完全な文字列を構成する多くの小さな文字列チャンクが実行時に分割され、連結されますが、この段階では、NOVABLIGHTバージョン番号を簡単に識別できます。
文字列エンコーディング
文字列を非表示にするために使用される 2 番目の手法は、base91 エンコーディングの使用です。関数ラッパー __p_xIFu_MAIN_STR
は整数引数で呼び出されます。
整数は、エンコードされた文字列を含むセカンダリ配列マッピング __p_9sMm_array
のインデックスです。エンコードされた文字列を取得し、デコードルーチン __p_xIFu_MAIN_STR_decode
に渡します。
__p_xIFu_MAIN_STR_decode
その後、カスタムアルファベットを使用してデコードします。vFAjbQox\>5?4K$m=83GYu.nBIh\<drPaN\^@%Hk:D_sSyz"ER9/p,(*JwtfO)iUl&C\[~\}\{|Z+gX1MqL;60!e]T#2cVW7
して、デコードされた文字列を返します。
アクセスパターンの難読化
このコードでは、オブジェクトや関数に直接アクセスする代わりに、中間のフラット化された「プロキシ」オブジェクトとマングルされたキーを使用し、オブジェクトを別のオブジェクトレイヤーにラップして元のアクセスパターンを隠します。
たとえば、関数 __p_LQ1f_flat_…
にはフラット オブジェクト __p_w3Th_flat_object
が渡されます。このオブジェクトには、プロパティ 3 get アクセサが含まれており、そのうちの 1 つは設定から取得した disableNetwork フラグを返し、ディスパッチャー呼び出しのラッパー (__p_jGTR_dispatcher_26
) を返します。コード全体を通して、プロパティ名が empretecerian.js
で始まるパターンがあり、これはスクリプト ファイルの名前でもあります。呼び出し先関数は、呼び出し元によって入力されたこのフラット オブジェクトを介して、実際のオブジェクトと関数にアクセスできます。
制御フローの難読化
コードの実行パスの一部は、最初の引数名が短い ID 文字列を取り取る中央ディスパッチャー __p_jGTR_dispatcher_26
を介してルーティングされます。
各 ID は個別の関数にマップされます。たとえば、ID jgqatJ
は modules/init/Troll.js
モジュールによって参照され、「トロール」ポップアップメッセージボックスを担当します。
プロキシ変数
まず、難読化により、関数構文が「残りのパラメータ構文」に変換され、パラメータが直接変数ではなく変数値を格納する配列に置き換えられ、コードは配列を数値で参照します。たとえば、関数 __p_xIFu_MAIN_STR_decode
は直接パラメーターでは呼び出されません。代わりに、その引数は最初に __p_A5wG_varMask
配列(22行目)に配置され、関数は事前定義されたインデックスから引数を取得するようにプログラムされます。たとえば、25 行目で、配列のインデックス -36
は、文字 "c" のインデックスを __p_A5wG_varMask[171]
に格納された文字列に格納します。
NOVABLIGHTとMITRE ATT&CKの
Elasticは、 MITRE ATT&CK フレームワークを使用して、企業ネットワークに対してAdvanced Persistent Threatが使用する一般的な戦術、手法、手順を文書化しています。
戦術(Tactics)
手法
- ファイルまたは情報の難読化
- プロセスディスカバリー
- コマンドとスクリプト インタープリター: PowerShell
- コマンドおよびスクリプトインタプリタ: JavaScript
- データステージング: ローカルデータステージング
- システム情報の検出
- ファイルとディレクトリの検出
- スクリーンキャプチャ
- クリップボードデータ
- ビデオキャプチャ
- 仮想化/サンドボックス回避:システムチェック
- アカウントアクセスの削除
- パスワードストアからの資格情報: Webブラウザからの資格情報
- 防御の障害:ツールの無効化または変更
- Webサービスを介した流出:クラウドストレージへの流出
まとめ
NOVABLIGHTは、あまり知られていないマルウェアでも、いかに影響を与えるかを示しています。Telegram や Discord などのプラットフォームを通じて洗練された使いやすいツールを提供することで、その作成者は誰でも簡単にサイバー犯罪に巻き込まれるようにしました。
さらに、この脅威は静的なものではありません。私たちの分析により、NOVABLIGHT は継続的かつ活発に開発されていることが確認されています。この継続的な進化により、NOVABLIGHT は当面の間、永続的かつ適切な脅威であり続けることが保証されます。
NOVABLIGHTの検出
ヤラ
Elasticセキュリティは、このアクティビティを識別するためのYARAルールを作成しました。
rule Windows_Infostealer_NovaBlight {
meta:
author = "Elastic Security"
creation_date = "2025-07-18"
last_modified = "2025-07-28"
os = "Windows"
arch = "x86"
category_type = "Infostealer"
family = "NovaBlight"
threat_name = "Windows.Infostealer.NovaBlight"
reference_sample = "d806d6b5811965e745fd444b8e57f2648780cc23db9aa2c1675bc9d18530ab73"
strings:
$a1 = "C:\\Users\\Administrateur\\Desktop\\Nova\\"
$a2 = "[+] Recording..." fullword
$a3 = "[+] Capture start" fullword
condition:
all of them
}
観測
この研究では、次の観測量について議論しました。
すぐれた監視性 | タイプ | 名前 | 参考 |
---|---|---|---|
ed164ee2eacad0eea9dc4fbe271ee2b2387b59929d73c843281a8d5e94c05d64 | SHA-256の | NOVABLIGHT バージョン 2.2 | |
39f09771d70e96c7b760b3b6a30a015ec5fb6a9dd5bc1e2e609ddf073c2c853d | SHA-256の | NOVABLIGHT バージョン 2.1 | |
97393c27195c58f8e4acc9312a4c36818fe78f2ddce7ccba47f77a5ca42eab65 | SHA-256の | NOVABLIGHT バージョン 2.0 | |
api.nova-blight[.]top | ドメイン | NOVABLIGHTダッシュボード | |
shadow.nova-blight[.]top | ドメイン | NOVABLIGHTダッシュボード | |
nova-blight[.]site | ドメイン | NOVABLIGHTダッシュボード | |
nova-blight[.]xyz | ドメイン | NOVABLIGHTダッシュボード | |
bamboulacity.nova-blight[.]xyz | ドメイン | NOVABLIGHTダッシュボード |
参照資料
上記の研究を通じて、以下のことが参照されました。