これまでの調査において、我々は「NWHStealer」としてWindows 分析した。このマルウェアの背後にいる攻撃者は、その拡散手段として常に新たな手法を模索している。調査活動の中で、攻撃者が「Bun」と呼ばれるJavaScriptランタイムを利用してマルウェアを拡散させていることが判明した。
Bunは、Node.jsに代わる最新かつ高性能なツールとして設計された、正規の高速オールインワンJavaScriptおよびTypeScriptツールキットです。複数の必須ツールを単一の実行ファイルに統合することで、最新のWeb開発を簡素化するために一から構築されています。
比較的新しいという点も、攻撃者にとって魅力的な要素となっている。Bunはマルウェア攻撃においてまだ広く確認されておらず、悪意のあるコードをより大きな実行ファイルにパッケージ化することで、検出されにくくすることができるからだ。
NWHStealerとは何ですか?また、どのような機能がありますか?
NWHStealerは、Rustで開発された情報窃取型マルウェアであり、さまざまなおとりや配布手法を用いて拡散されています。その手法には、Node.jsスクリプトやMSIインストーラー、そして最近ではBunランタイムで構築されたJavaScriptローダーなどが含まれます。
多くの場合、GitHub、GitLab、MediaFire、Itch.io、SourceForgeといった正規のプラットフォームにホストされており、これにより通常のソフトウェアに紛れ込みやすくなり、ユーザーがダウンロードする可能性が高まります。攻撃者は、この情報窃取型マルウェアを拡散させるため、新たなプロフィールや餌を作り続けています。
PCにインストールされると、NWHStealerは以下の動作を行います:
- オペレーティングシステム、ハードウェア、セキュリティソフトウェア、ユーザーデータ、および接続されたデバイスを含むシステム情報を収集します。
- ブラウザ、拡張機能、および暗号資産ウォレットからデータを盗み出す。
- FileZillaやCoreFTPなどのFTPアプリケーションや、SteamやDiscordなどのメッセージングアプリなど、さまざまなアプリケーションからデータを盗み出します。
- ブラウザのプロセスに悪意のあるコードを注入し、追加のペイロード(例:XMRig)を実行する。
- ユーザー アカウント コントロール (UAC) を回避しようとする。
- スケジュールされたタスクを利用して、永続性を実現する。
- Telegramから新しいコマンド&コントロール(C2)アドレスを取得する。
安全に過ごすには
攻撃者は常に手口を変え続けており、「Bun」のような新しいツールの使用は、彼らが検知をかわそうとしていることを示している。
NWHStealerは、その広範な拡散状況と標的とするデータの種類から、特に懸念されています。盗まれたブラウザデータ、保存されたパスワード、および仮想通貨ウォレットの情報は、アカウントの乗っ取り、金銭的損失、さらにはさらなる被害へと直結する恐れがあります。
安全を確保するための簡単な方法をいくつかご紹介します:
- ソフトウェアは公式ウェブサイトからのみダウンロードしてください。
- GitHubやSourceForge、あるいはファイル共有サイトなどからのダウンロードについては、その出所を信頼できる場合を除き、十分注意してください。
- 攻撃者は、この情報窃取ツールをさまざまなプラットフォームに拡散させるため、新たなプロファイルを作成し続けています。ファイルホスティングサービスやブログから何かをダウンロードする際は、そのプロファイルや開発者・発行者のプロフィール、評判、および作成された時期を確認してください。
- アーカイブの構造を確認し、内容、画像、テキストファイルがダウンロードしたものと一致しているか確認してください。また、アーカイブの名前も確認してください。通常、名前には見覚えのあるパターンがあります。
- ファイルを実行する前に、発行元とデジタル署名を確認してください。
より安全に。より速く。広告のないブラウジング。
プロのアドバイス: インストール Malwarebytes Browser Guard をインストールして、悪意のあるサイトが読み込まれる前にブロックしましょう。
テクニカル分析
新しい配布方法:Bun JavaScript Runtime
公式サイトによると、BunはJavaScript、TypeScript、JSXを統合したオールインワンツールキットです。Zigで一から構築され、AppleのJavaScriptCoreエンジンを搭載しており、高速な起動と低メモリ使用量に重点を置いています。
バンは主に4つの構成要素から成り立っています:
- JavaScriptランタイム:Node.jsのドロップイン置換として設計されたJavaScriptランタイム。
- パッケージマネージャー:npmの高速な代替ツール。
- Test Runner:標準のランナーよりもはるかに高速にテストを実行する、組み込みのJest互換ランナーです。
- Bundler:Webpack、Vite、esbuildなどのツールに代わって、コードのパッケージ化を行うツールです。
最近のキャンペーンにおいて、NWHStealerがBun JavaScriptランタイムのバンドルを利用して配布されていることが判明しました。
これまでの調査で明らかになったように、ゲーム関連やその他のソフトウェアを装ったフィッシングが、感染の連鎖を引き起こすために利用されています。これらの最近のキャンペーンで検出されたZIPファイル名には、以下のようなものがあります:
- ゲーム関連のソフトウェアやチートツールなど:
MOUSE_PI_Trainer_v1.0.zipFiveM Mod.zipVampireCrawlers_Trainer_v1.0.zipMagicalPrincess_Trainer_v1.0.zipTerraTechLegion_Trainer_v1.0.zip
- その他のソフトウェア(例:)
TradingView-Activation-Script-0.9.zipAutoTune 2026.zipMetatune by Slate Digital 2026.zipGoGoTv_Plus.zip,Autodesk.zip
本記事で分析した事例では、感染の連鎖は、以下の内容を含むアーカイブファイルから始まっている。 Installer.exeこれは、BunランタイムにバンドルされたJavaScriptコードを埋め込んだものです。
「DW」フォルダには、別のローダーが含まれており、その名前は dw.exe. この自己注入型ローダーは、以前に分析したものと同様ですが、復号ルーチンが異なります。このローダーは、分析対象となったすべてのZIPファイルに含まれているわけではありません。

について Readme.txt ファイルはユーザーに手動での起動を求めています dw.exe もしメインが .exe ファイルが正常に実行されない。これにより、メインのBunローダーのC2がオフラインの場合でも、攻撃者はこの情報窃取型マルウェアを配布する2つの手段を得ることになる。ローダーは dw.exe Bun JavaScriptローダーとは独立して動作します。


dw.exe が開始されるこの記事では、分析を行いません dw.exe…というのは、これは以前のローダーのバリエーションに過ぎないからです。その代わりに、ここではBun JavaScriptランタイムで実行されるJavaScriptローダーに焦点を当てます。
JavaScriptローダーの分析
Bun JavaScriptランタイムによって実行されるJavaScriptコードは、 .bun セクションにあり、難読化されています。

.bun 難読化されたJavaScriptコードが含まれるセクション この悪意のあるコードは、コードの2つの部分で実装されています:
sysreq.js:スコア制を用いて仮想化対策のチェックを実行します。memload.js: C2サーバーと通信し、復号化を行い、次のステージをロードする。

このローダーは、仮想環境を検出するために、いくつかのPowerShell CIM(Common Information Model)コマンドおよびWMI(Windows Instrumentation)コマンドを実行します。 CPU 数、ディスク容量、画面解像度、USB デバイス、ハードウェアのメーカーおよび製品、インストールされているソフトウェアの数、ブラウザフォルダなどの特定のフォルダの有無、実行中のプロセスの数、ユーザー名などに関するさまざまなチェックが行われます。スコアリングシステムが実装されており、ローダーはこのスコアに基づいて、感染を継続するか終了するかを決定します。
仮想環境を検出するために、ローダーは次のような10以上のPowerShellコマンドを実行します。
Get-CimInstance -ClassName Win32_DiskDrive | Select-Object ModelGet-CimInstance -ClassName Win32_PhysicalMemory | Select-Object Manufacturer,SpeedGet-CimInstance -ClassName Win32_BIOS | Select-Object ManufacturerGet-CimInstance -ClassName Win32_BaseBoard | Select-Object Manufacturer,ProductGet-CimInstance -ClassName Win32_DiskDrive | Select-Object PNPDeviceID- (
Get-Process -ErrorAction SilentlyContinue).Count
結果はさまざまな文字列と比較されます。例えば:
- 仮想化関連のキーワード:qemu、seabios、bochs、vbox、vmware、virtualbox、kvm、xen、parallels、virtio、vmbus、red hat、edk ii
- ユーザー名サンドボックス:sandbox、malware、virus、sample、vmuser、wdagutilityaccount、defaultuser0
- 仮想環境MAC
文字列はXORとBase64デコードを用いて復号されます。タプルの配列があり、各タプルには暗号化された文字列と、XOR復号に使用される鍵が含まれています。

文字列の復号化を行う関数がいくつかあり、その中にはC2通信で使用される設定ファイルの復号化を行う関数も含まれています。設定ファイルの一部:
C2 server: https://silent-harvester.cc
BUILD_ID: 0ddbfec60307
C2 Path: /api/status, /api/update
ローダーはエンドポイントへの初期リクエストを取得し、送信します https://C2-server/api/report 侵害されたシステムに関する暗号化されたデータとともに:
- api.ipify.org へのリクエストにより取得したパブリック IP。
- システム情報
- VM対策の結果
- Base64エンコードされたスクリーンショット
- タイムスタンプ
その後、2つのGET HTTPリクエストを送信します:
https://C2-server/api/status?v={BUILD_ID}、AES鍵導出に使用するシードを取得するため。https://C2-server/api/update?v={BUILD_ID}、AESのノンスと認証タグを含む暗号化されたペイロードを取得するため。
次の段階では、AES-256-CBCを使用して復号化が行われます。C2から返されたAESデータは、以下のAPIを使用して自己注入型ローダーによって読み込まれます:
VirtualAllocVirtualProtectLoadLibraryAGetProcAddressRtlAddFunctionTableCreateThreadSearchPathA
これらのWin32 APIは、Bunモジュールを介して実行されます bun:ffiこれにより、JavaScriptからネイティブライブラリを呼び出すことが可能になります。
このプロセスの終了時点で、分析対象の事例においてNWHStealerが展開されていた。
妥協の指標(IOCs)
ドメイン
whale-ether[.]pro: NWH Stealer C2サーバー
cosmic-nebula[.]cc: NWH Stealer C2サーバー
silent-harvester[.]cc: Bun Loader C2 サーバー
silent-orbit[.]cc: Bun Loader C2 サーバー
support-onion[.]club: Bun Loader C2 サーバー
ハッシュ
d3a896f450561b2546b418b469a8e10949c7320212eb1c72b48e2b1e37c34ba5
96fe4ddfe256dc9d2c6faea7c18e2583cd9d9c0099a4ad2cf082f569ee8379f4
3710fb27d2032ef1eb1252ebf5c4dd516d2b2c0a83fb82c664c89e504b990fa9
33d07aa24b217f27df6a483295c817da198e12511a6989bcc6b917feaf8e491d
5427b4cefb329ed0e9585b3ce58a2788baf87e3b0c7221373f9bbd5f32c85b62
308da9f49ffa1d1744e428b567792ab22712159974e9da8d8e0414ecd81de93e
021838f30a43026084978bce187c165c6b640d8d474ec009d48078d21ec62025
c8e96b55f13435c4b43b7209d2403f1a0e0f9deb05edc50e0f777430be693b07
0614c4cc6375ab6bdcdd2dfa913a67d32c3e8be9b95a4a2aa09bb131b98191c8
0020999b2e3e4d1b2cfb69e4df9440d3ce05d508573889fdc12b724ce75a0cd8
0fa42df08cc467ec52b2d388b5575114a8ec067d13f6b1a653ec33fe879f88ca
15f79980650393d182f81cd6e389210568aa1f5f875e515efe6cb9485d64b7fb
20454ba58d509300fd694ae6159db4efa1b7ff965f98c29e7d087e20f96578c1





