PR

VSCode拡張19件、偽PNGに潜むトロイの木馬を同梱

Security

Source:https://www.bleepingcomputer.com/news/security/malicious-vscode-marketplace-extensions-hid-trojan-in-fake-png-file/

🛡 概要

2025年にかけて、Visual Studio Code(VSCode)マーケットプレースで配布されていた19件の拡張機能に、偽のPNGファイルに隠した不正実行ファイルとトロイの木馬が同梱されていたことが判明しました。これらは依存フォルダ内に細工を加えることで、VSCode起動時に自動実行されるよう設計され、開発者環境を狙うサプライチェーン型攻撃の一例です。報告を受け、該当拡張は削除済みですが、導入済み環境の確認とスキャンが推奨されます。CVSSは現時点で該当情報が公開されていません。

🔍 技術詳細

当該拡張は『node_modules』フォルダを同梱し、インストール時にnpmレジストリから依存関係を取得させない作りでした。同梱フォルダ内の依存パッケージ『path-is-absolute』または『@actions/io』が改変され、index.jsに追加されたクラスがVSCode起動時に自動実行されるよう細工されていました。これにより、同梱の『lock』ファイル内に隠した難読化JavaScriptドロッパーを復号・実行します。さらに依存フォルダには『banner.png』という名前のファイルが存在しますが、実体はアーカイブであり、WindowsのLoLBinである『cmstp.exe』とRustで書かれたトロイの木馬の2つのバイナリを格納していました。『cmstp.exe』は正規署名済みバイナリの悪用(Signed Binary Proxy Execution)として知られ、ポリシー回避やスクリプト実行の踏み台として使われ得ます。Rust製トロイの木馬の完全な機能は継続分析中とされ、確定情報は限定的です。拡張名は『Malkolm Theme』『PandaExpress Theme』『Prada 555 Theme』『Priskinski Theme』など、いずれもバージョン1.0.0で公開されていました。なお『path-is-absolute』自体は広く利用される人気パッケージですが、武器化はこの19拡張に同梱された改変版に限られていました。VSCode拡張はユーザプロファイル配下(例: Windowsは%USERPROFILE%\.vscode\extensions、Linux/macOSは~/.vscode/extensions)に配置され、起動時に拡張コードが読み込まれるため、改変依存物の自動実行に悪用されました。

⚠ 影響

開発者端末のユーザ権限で任意コードが実行される恐れがあります。機密ソースコード・認証情報・トークンの窃取、リポジトリ汚染やビルドパイプラインへの横展開など、開発組織に特有の高リスク事象につながる可能性があります。Rust製トロイの木馬の詳細能力は未確定ですが、持続化や情報窃取、追加ペイロード取得を試みる潜在的リスクを考慮する必要があります。

🛠 対策

  • 拡張の棚卸しと駆除: VSCodeのインストール済み拡張を一覧化し、問題名やバージョン1.0.0の不審拡張を無効化・削除。拡張フォルダ配下のnode_modulesに『index.js』『lock』『banner.png』等の不審物がないか点検。
  • ファイル真正性の確認: 『banner.png』がPNG署名(先頭バイト列 89 50 4E 47 0D 0A 1A 0A)を持つか、ZIP署名(50 4B 03 04)などの不整合がないか確認。ハッシュ算出と隔離スキャンを実施。
  • 実行制御: AppLocker/WDACで『cmstp.exe』などLoLBinの実行を用途限定または拒否。正規バイナリの悪用を監視するEDRルールを適用。
  • 拡張導入ポリシー: 信頼済み発行者のみに限定、レビュー件数・更新履歴を確認。node_modules同梱拡張は特にソース精査。
  • 開発環境の分離: 個人利用と開発作業の分離、最小権限、シークレットの保護(環境変数・秘密管理)。
  • 脆弱性・マルウェア対策: リアルタイム保護、HTTP/HTTPS出口監視、未知バイナリのサンドボックス解析。

📌 SOC視点

  • プロセス監視: 『Code.exe/VSCode』→『node.exe』→『cmstp.exe』の親子関係を検出。Windows Security 4688(プロセス作成、コマンドライン有効化必須)、Sysmon Event ID 1(Process Create)、ID 3(Network Connection)、ID 11(FileCreate)。
  • ファイル監査: %USERPROFILE%\.vscode\extensions 配下の新規/変更生成を監視。拡張内の『lock』『banner.png』作成・展開・実行痕跡。
  • 不正なPNG判定: PNGを名乗るがZIP署名を持つファイル検出。EDR/YARAで『cmstp.exe』の出現源とハッシュを追跡。
  • ネットワーク: VSCodeやnode.exe起点の異常外向き通信、Rustバイナリの初回通信試行を検知。
  • 除染手順: 該当拡張を隔離、残存タスク・スタートアップ・スケジュールを確認し、端末健全性チェックを実施。

📈 MITRE ATT&CK

  • Initial Access: T1195.001(ソフトウェア依存関係/開発ツールの妥協)— 改変した依存パッケージを拡張に同梱し、インストール時に取得回避して実行基盤を確保。
  • Execution: T1059.007(JavaScript)— index.jsに追加したクラス経由で難読化ドロッパーを実行。
  • Defense Evasion: T1218.003(Signed Binary Proxy Execution: CMSTP)— 正規のcmstp.exeを同梱・悪用。
  • Defense Evasion: T1036(Masquerading)— アーカイブを『banner.png』に偽装。
  • Defense Evasion: T1027(Obfuscated/Compressed Files and Information)— 『lock』内の難読化JavaScript。
  • Persistence/Execution: T1546(Event-Triggered Execution)— VSCode起動イベントで拡張コードが自動実行。

🏢 組織規模別助言

  • 小規模(〜50名): 拡張の許可制運用と端末のEDR一元管理を優先。疑わしい拡張は即時削除し、開発端末のフルスキャンを実施。
  • 中規模(50〜500名): ソフトウェア資産管理(拡張含む)とロールベースの導入ワークフロー整備。LoLBin実行制御ポリシーを段階的に適用。
  • 大規模(500名以上): 開発環境のゼロトラスト化、拡張レジストリのミラーリングと署名検証、CI/CDへのサプライチェーン検証(SBOM, SLSA)を組み込み。

🔎 類似事例

  • IconBurst(npmのタイポスクワッティング/悪性パッケージ、2022年)
  • Octopus Scanner(GitHub上のリポジトリ感染、2020年)
  • 3CXデスクトップアプリのサプライチェーン侵害(2023年)

いずれも開発者やビルドチェーンを狙い、正規配布経路を悪用する点が共通しています。

🧭 次の一手

  1. 自組織のVSCode拡張インベントリを即時収集し、該当名・バージョンの有無を確認。
  2. 検出端末は隔離し、拡張削除・残存ファイルのハッシュ採取・EDRでの横展開確認を実施。
  3. AppLocker/WDACでcmstp.exeの実行制御を導入、監視ルールを本番適用。
  4. 今後の導入は信頼発行者・ソース精査・SBOM確認を標準手順に組み込み。
  5. ベンダ通報・ReversingLabsの続報を追い、IOCが公開された場合は即時照合。