2025年12月、Koi Securityの調査で、VS Codeの拡張機能が、実は画面キャプチャや認証情報窃取の踏み台になっていたことが確認されています。
目次
開発者を狙うVS Codeマルウェアキャンペーンの概要
Koi Securityの調査によると、この1年間で悪意のあるVS Code拡張機能が数十件確認されています。多くは、ブラウザやクラウドの認証情報を盗んだり、マシン上で暗号資産のマイニングを行うタイプでしたが、今回のケースはそれに加えて、開発者の画面そのものをキャプチャして外部へ送信する機能を持っています。
画面に映っているコード、メール、SlackやTeamsのDMなど、表示されているものは基本的にすべて攻撃者側から見える状態になります。さらに、Wi-Fiパスワードの窃取、クリップボードの内容の読み取り、ブラウザセッションの乗っ取りといった機能も備えています。
これらの機能は、見た目は普通のテーマ拡張とAIコーディングアシスタントという2つの拡張機能にまとめられており、どちらも同じパブリッシャーが公開していました。
-
「Bitcoin Black」:ビットコインをモチーフにした“プレミアムダークテーマ”を名乗る拡張
-
「Codo AI」:ChatGPT・DeepSeekと連携できる“AIコーディングアシスタント”を名乗る拡張
レポートでは、同一の攻撃者がソーシャルエンジニアリングの手口を試行錯誤しながら、複数バージョンにわたって配布方法やペイロードを更新していった過程が分析されています。
悪用された2つの拡張機能
Bitcoin Black:テーマ拡張を装いPowerShell実行コードが含まれていた
Bitcoin Blackは、「黒背景にオレンジ/ゴールドのアクセントを持つビットコイン風のダークテーマ」としてVS Codeマーケットプレイスに掲載されていました。一見、よくある外観テーマですが、拡張の構成を確認すると普通のテーマとは明らかに異なります。
通常のVS Codeテーマ拡張は、色やフォントスタイルなどを定義したJSONファイルが中心で、コードのエントリポイントや起動イベント、スクリプト実行は不要です。しかしBitcoin Blackには、
-
activationEventsに"*"が指定されており、VS Code上のあらゆる操作で拡張がアクティブ化される -
mainエントリポイントが定義されており、JavaScript側からさらにPowerShellを呼び出すロジックが含まれている
といった挙動が含まれていました。単なるテーマであれば不要な要素ばかりであり、「見た目のテーマでありながら常に何かの処理を動かしている」状態だったことが分かります。
Codo AI:実際に動くAIアシスタントの中に埋め込まれたペイロード
Codo AIの方は、利用者から見るともっと自然に見えます。VS CodeのサイドバーからChatGPTやDeepSeekと対話できるUIを備えており、実際にAIに質問したりコード生成を依頼できるため、「機能している拡張」として違和感が少ない作りになっていました。
ただ、拡張の中核となる extension.js を追っていくと、正規のAIチャット実装の直前に不審なコードブロックが存在しています。この部分では、外部URLからスクリプトをダウンロードし、VS Codeの拡張コンテキストからシェルを起動して実行する処理が記述されていました。
さらに、その不審なコードブロックの前後には、攻撃者自身が残したと思われるコメントがあり、「この部分を削除しないように」という意図が読み取れる内容になっていました。レポートでは、これを根拠に「単発で作って放置されたものではなく、開発者(攻撃者)が自分たちのコードベースを継続的に保守している」と評価しています。
バージョンごとに変化した感染手口
調査チームは複数バージョンを比較し、攻撃者がペイロードの配布方法を段階的に変更していることを確認しています。
v2.5.0:パス付きZIPと4種類の展開方法
最も古いバージョンとして分析された v2.5.0では、拡張から起動されるPowerShellが、HTTP経由でパスワード付きZIPファイルをダウンロードし、それを展開する仕組みになっていました。ZIPのパスワードは "123" という固定値で、以下の4つの方法を順番に試す冗長な実装です。
-
Windows標準の
Expand-Archiveコマンドレット -
.NETの
System.IO.Compression名前空間を使った展開処理 -
DotNetZipライブラリをNuGetから実行時にダウンロードして利用
-
端末に7-Zipがインストールされている場合は、そのコマンドライン版を呼び出して展開
どれか一つでも成功すればペイロードが展開される構造で、「何としてもZIPの展開だけは成功させたい」という意図が感じられる内容になっていました。
加えて、この時点のスクリプトは windowsHide: false の設定で実行されており、PowerShellのコンソールウィンドウがユーザーに見えてしまう状態でした。
調査ではこれを「開発段階での設定がそのまま残ってしまったもの」と見ており、実際の利用環境では一瞬黒い画面が見える可能性があったとされています。
v3.3.0:バッチ+curlで簡素化、ウィンドウも非表示に
後のバージョンである v3.3.0では、配布手口が大幅に簡素化されています。ここでは ZIP 形式をやめ、以下のような構成に変わっていました。
-
bat.shという名前のバッチ/シェルスクリプトをダウンロードして実行 -
スクリプト内で
curlを利用し、実行ファイル(Lightshot.exe)とDLL(Lightshot.dll)を直接ダウンロード -
PowerShell起動時は
windowsHide: trueに変更し、コンソールウィンドウを表示しない -
%TEMP%\Lightshot\.doneというマーカーを作成し、再度同じ処理を実行しないよう制御
これにより、v2.5.0で見られた複雑な展開処理は全て削られ、実行の痕跡が減る方向に調整されています。レポートではこの変遷を、「攻撃者が自分たちのキャンペーンの信頼性とステルス性を高めるように設計を見直している」とまとめています。
最終的に届けられるペイロード:Lightshot+悪意あるDLL
Bitcoin BlackとCodo AIの両方が、最終的に同じインフォスティーラーに行き着くことも分かっています。攻撃者は、正規のスクリーンショットツールである Lightshot と、自作の悪意あるDLLをセットで配布しています。
配布される Lightshot.exe は、公式サイトで入手できる正規版とバイナリレベルで一致しており、署名も正しいものです。その一方で、同じディレクトリに置かれる Lightshot.dll は、VirusTotal上で 29/72 のエンジンにマルウェアとして検知されているDLLです。
Windowsは実行ファイルと同じディレクトリ内のDLLを優先してロードする仕様があるため、Lightshot.exeを起動すると、同フォルダ内のLightshot.dllが読み込まれます。この仕組みを利用し、正規のEXEプロセス内で自分たちのコードを動かす「DLLハイジャック」が実現されていました。
収集される情報とブラウザセッションの乗っ取り
このインフォスティーラーは、実行されるとまず %APPDATA%\Local\Evelyn\ というディレクトリを作成し、その配下に窃取した情報を集めていきます。レポートで確認されている主な収集対象は以下の通りです。
-
クリップボードの内容
-
インストールされているプログラム一覧
-
実行中のプロセス一覧
-
デスクトップ全体のスクリーンショット
-
保存されているWi-Fiプロファイルと各SSIDのパスワード
-
OSバージョンやハードウェア情報など、ホストに関する詳細なシステム情報
これに加えて、ブラウザのセッション情報を取得するための動きも確認されています。マルウェアは Chrome や Edge をヘッドレスモードで起動し、次のようなオプションを指定していました。
-
ウィンドウ位置を
-10000,-10000に設定し、画面外に配置 -
サイズを
1x1にしてほぼ見えない状態にする -
--no-sandboxでサンドボックス機能をオフにする -
--incognitoを指定しつつ、about:blankで空ページを開く
こうした起動方法は、ユーザーに気付かれないようにブラウザを立ち上げ、Cookieやセッション情報を操作する攻撃でよく使われるパターンと一致します。レポートではMITRE ATT&CKの T1539(WebセッションCookie窃取)、T1185(ブラウザセッションハイジャック)に該当する挙動として整理されています。
C2サーバやミューテックスなどのインジケータ
マルウェアが通信するC2サーバも特定されています。主な通信先は次のとおりです。
-
メインのC2ドメイン:
syn1112223334445556667778889990[.]org -
ペイロード配布用のURL:
-
http://syn1112223334445556667778889990.org/Lightshot.exe -
http://syn1112223334445556667778889990.org/Lightshot.dll -
http://syn1112223334445556667778889990.org/Lightshot.zip
-
-
セカンダリC2:
server09.mentality.cloud:40207
/iknowyou.model というパスも確認されており、ここから追加のモデルや設定情報が配布されていたと見られています。ドメイン名自体はランダムな数字列を並べたようなものになっており、自動生成された可能性が高いとされています。
また、マルウェアは多重実行を防ぐためにミューテックスを作成しており、その名前は
となっていました。この文字列はマルウェアの固有識別子としても使えます。レポートでは、このようなネーミングから、攻撃者がある程度ユーモアを込めて実装している様子も伺えるとしています。
Lightshotを使ったDLLハイジャックのカバー手法
レポートでは、攻撃者が単に「Lightshot」という名前を騙ったマルウェアを作るのではなく、本物の Lightshot.exe をそのまま同梱している点が強調されています。
-
配布される Lightshot.exe は公式のものとハッシュが完全一致
-
署名も本物であるため、コード署名の検証を行っても問題ないように見える
-
セキュリティ製品やEDRのホワイトリストにも入りやすい
このような状態で、同じフォルダ内に悪意ある DLL を置くと、プロセスツリー上は「正規のLightshotが動いているだけ」に見えつつ、その内部ではインフォスティーラーが実行されることになります。MITRE ATT&CKでは T1574.001(DLL検索順序ハイジャック)として整理されている手法です。
レポートでは、単にマルウェアのファイル名を「Lightshot.exe」にするだけでは得られない「署名済み正規プロセスとして振る舞える」点が、この手口のポイントだと指摘しています。
2つのルアー
Bitcoin Black と Codo AI の2つの拡張機能は、配布インフラと最終ペイロードを共有しており、同じ攻撃者によるものと見られていますが、ユーザーにとっての入口は意図的に変えられています。
-
Bitcoin Black
-
「ビットコイン風のプレミアムダークテーマ」という訴求
-
暗号資産に興味を持つ開発者を狙いやすいテーマ設定
-
-
Codo AI
-
「ChatGPTやDeepSeekと連携できるAIコーディングアシスタント」という訴求
-
開発効率向上を狙う幅広い開発者層をターゲットにしつつ、実際にAIチャット機能を提供しているため不審に思われにくい構成
-
どちらの拡張も、拡張IDとしては bigblack.bitcoin-black と bigblack.codo-ai が使われており、パブリッシャー名も「BigBlack」で統一されています。同じインフラ・同じペイロードを使いながら、異なるキャッチコピーや機能でユーザーにインストールさせようとしている、という構図になっています。
ポイント
Koi Securityの分析では、このキャンペーンには粗さと巧妙さが混在しているとまとめられています。初期バージョンではPowerShellウィンドウが見えてしまう設定のままだったり、ミューテックス名に「COOL_SCREENSHOT_MUTEX_YARRR」といった分かりやすい文字列を使っていたりと、目立つ要素も残っています。
一方で、正規署名付きのLightshot.exeを悪用したDLLハイジャックや、VS Code拡張の実装に自然に見える形でペイロード配布のコードを紛れ込ませる手法など、重要な部分はきちんと作り込まれています。
レポート執筆時点では、Codo AIがVS Codeマーケットプレイス上でまだ入手可能だったことも記載されており、「見た目が普通のテーマやAIツールだからといって安全とは限らない」という状況が開発者向けに共有されています。
出典








