GlassWormがネイティブ化——インフラは同じ、配送手口はさらに堅牢に

GlassWormが再び活動を再開しました。これで何度目でしょうか。私たちが10月に初めてこのキャンペーンを暴露して以来、すでに2つの波が確認されており、被害者数は45,000人を超え、攻撃者はいまだ活動をやめる気配がありません。

前回の公開後、数週間ほど静かな状態が続いていました。しかし11月22日、見覚えのあるSolanaウォレットが新たなトランザクションと新しいC2 IPアドレスとともに動き出しました。そして数日のうちに、悪意ある拡張機能が再び出現し始めたのです。

ただし、今回の波にはこれまでと異なる点があります。

私たちが最初のレポートで暴いた、目に見えないUnicode文字を使う手法は、今回は完全に姿を消していました。

その代わりに見つかったのは、コンパイル済みのRustバイナリでした。以前は目に見えない文字列から解読できていた機能──Solanaを使ったC2の問い合わせ、AESによる復号、ペイロードのステージング──は、すべてネイティブコードとしてコンパイルされており、もはや単純にデコードすることはできません。中身を確認するには、Rustバイナリをリバースエンジニアリングする必要があります。

さらに今回は攻撃対象をOpenVSXだけにとどめず、Microsoftの公式VSCodeマーケットプレイスにも拡大しています。まずクリーンな拡張機能を公開し、その後アップデートでマルウェアを仕込むという手口です。

ウォレットと攻撃の流れ自体は以前と変わりませんが、ペイロードは今やネイティブバイナリの中に隠されています。

ここで、人気のvscode-icons themeになりすました拡張機能Iconesvscodeを見てみましょう。

Image

Image

バージョン12.15.0はクリーンな状態です。22,765行のJavaScriptで構成された、正規のアイコンテーマとして期待通りの動作をします。

しかし、バージョン12.15.1と12.15.2がリリースされると、コードベース全体が以下のように置き換えられていました。

Image

残されたのはわずか33行のみで、アイコンテーマとしての機能は一切なく、オペレーティングシステムを検出してネイティブバイナリを実行するだけのバイナリローダーと化していました。

これらの.nodeファイル──macOS向けのdarwin.node、Windows向けのos.node──はRustバイナリであり、すべての機能がここに詰め込まれています。

バイナリの中身

各拡張機能には、これらのネイティブバイナリが同梱されています。

構造:

  • Rustベース(プロジェクト名はそのままrust_implant
  • Windows向け(os.node)とmacOS向け(darwin.node)で別々にビルド
  • それぞれ約2.4MB
  • Node.jsアドオン形式

機能:

  • Solanaブロックチェーンに対してC2命令を問い合わせ
  • ペイロードを取得・復号(Base64、AES-256-CBC)
  • Googleカレンダーへのフォールバック機構を内蔵

開発者の痕跡:

macOS向けバイナリには、以下のようなパスが含まれています。

/Users/davidioasd/Downloads/rust_implant/target/release/deps/librust_implant.dylib

/Users/davidioasd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-body-util-0.1.3/src/combinators/collect.rs

このdavidioasdという文字列は、最初の波のバイナリで確認したパターンと一致します。数週間の間隔を空けているものの、同一の開発者、同一のキャンペーンによるものと考えられます。

今後の展開

該当する拡張機能はすべて削除済みです。

しかし、Solanaウォレットは依然として存在しており、攻撃者のインフラも稼働を続けています。これまで2度にわたり、テイクダウンでは長期的に活動を止められないことが証明されています。

私たちは引き続き監視を続けます。これまでのパターンから見て、今回が最後の波である可能性は低いと考えられます。

IOC(侵害指標)

拡張機能

OpenVSX:

  • bphpburn.icons-vscode
  • clangdcode.clangd-vscode
  • csvmech.csv-sql-tsv-rainbow
  • cweijamysq.sync-settings-vscode
  • eamodas.shiny-vscode
  • flutcode.flutter-extension
  • iconkief.icon-theme-material
  • msjsdreact.react-native-vscode
  • saoudrizvsce.claude-dev
  • saoudrizvsce.claude-devsce
  • solblanco.svelte-vscode
  • svltsweet.svetle-for-cursor
  • tailwind-nuxt.tailwindcss-for-react
  • vitalik.solidity
  • yamlcode.yaml-vscode-extension

Microsoft VSCode:

  • bphpburnsus.iconesvscode
  • iconkieftwo.icon-theme-materiall
  • clangdcode.clangd-vsce
  • codevsce.codelddb-vscode
  • csvmech.csvrainbow
  • cweijamysq.sync-settings-vscode
  • dart-vsc.code-dart
  • flutcode.flutter-extension
  • klustfix.kluster-code-verify
  • lyywemhan.code-formatter-and-minifier-vscode
  • msjsdreact.react-native-vsce
  • prettier-vsc.vsce-prettier
  • prisma-inc.prisma-studio-assistance
  • redmat.vscode-quarkus-pro
  • saoudrizvsce.claude-devsce
  • solblanco.svetle-vsce
  • vims-vsce.vscode-vim
  • vsceue.volar-vscode
  • yamlcode.yaml-vscode-extension

Rustインプラント(SHA-256)

darwin.node

  • 026873b940176d103d45b41c9fba73f14cfcaca60e3117be81d2eadef85a4d17
  • 9bd105ce732218f30719fd69d4555967b362d37f4f6aec04741c18aaa7411a73
  • fb07743d139f72fca4616b01308f1f705f02fda72988027bc68e9316655eadda

os.node

  • cbb3f830731fe2c9194f7fe5aa55479cffdae184039b0df078b1394209d7a49f
  • 29875e74f033c819c1acab58ef08bc35646aab5f4a2747ee0933ca41150d7099
  • 6ebeb188f3cc3b647c4460c0b8e41b75d057747c662f4cd7912d77deaccfd2f2

コマンド&コントロール:

  • 217.69.13.229
  • 45.76.45.151
  • 45.32.151.157
  • 107.191.62.170
  • 104.238.191.54(データ窃取サーバー)
  • 108.61.208.161(データ窃取サーバー)

翻訳元: https://www.koi.ai/blog/glassworm-goes-native-same-infrastructure-hardened-delivery

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