macOS ClickFix のルアーがAppleScriptスティーラーと永続的RATを展開する
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
ロシア語を話す脅威アクターが、ClickFixというソーシャルエンジニアリングキャンペーンを利用して、2段階にわたるmacOSマルウェア感染を展開しています。攻撃はファイルレス実行チェーンで始まり、ターミナルコマンドを介して起動され、Meow(DEBUG)と呼ばれるAppleScriptベースのインフォスティーラー及び永続的なリモートアクセス型トロイの木馬を配信します。このマルウェアは仮想通貨ウォレット、ブラウザ認証情報、メッセージングセッションデータを標的にし、デスクトップウォレットアプリケーションへの侵入型のコードインジェクションも行います。
調査
Netskope Threat Labsは、2026年5月31日に、より強力なRATに移行した更新版のキャンペーンを確認しました。彼らの分析では、洗練されたファイルレス感染フローや、ロシア語を話す被害者を避けるためにデザインされたジオフェンシングロジック、macOS Gatekeeperの保護を回避するために使用されたアドホックな再署名が明らかになりました。研究者たちはまた、同じ登録者連絡先情報を共有する25の短命なルアードメインとキャンペーンを結びつけました。
軽減策
防御者は、ルアードメインをブロックし、以下に関与する疑わしいターミナルコマンドを監視することを優先すべきです curl and osascript。組織はターミナルアクセスの管理を強化し、仮想通貨ウォレットアプリのバンドルに対する不正な変更を監視すべきです。ホストベースの検出でも永続性のplistに焦点を合わせることができます。 com.apple.accountsd および /tmp/shub_ ステージングパターン。
対応
この活動が検出された場合、さらなるデータ盗難や潜在的な横移動を阻止するために、影響を受けたmacOSホストを直ちに隔離します。すべてのインストールされたデスクトップ用仮想通貨ウォレットは危険にさらされていると扱われ、信頼できるソースから再インストールされるべきです。捜査官はまた、LaunchDaemonsとLaunchAgentsの不正なエントリを確認し、特に com.apple.accountsd.
"graph TB %% Class Definitions classDef action fill:#99ccff classDef tool fill:#cccccc classDef malware fill:#ff9999 classDef persistence fill:#99ff99 classDef exfiltration fill:#ffff99 %% Initial Access and Execution attack_drive_by["<b>Action</b> – <b idea='T1189'>Drive-by Compromise</b><br/>Victims visit malicious lure domains<br/>such as filesapphirecanvas.sbs or<br/>filemintcastle.sbs masquerading as<br/>macOS utilities or GitHub repositories."] class attack_drive_by action attack_user_exec_copy["<b>Action</b> – <b idea='T1204.004'>User Execution: Malicious Copy and Paste</b><br/>Social engineering victims to copy<br/>commands from fake websites into<br/>the macOS Terminal."] class attack_user_exec_copy action attack_obfuscation["<b>Action</b> – <b idea='T1027.009'>Obfuscated Files or Information: Embedded Payloads</b><br/>Uses gzip-compressed and base64-encoded<br/>heredoc to run a stage 1 loader in memory."] class attack_obfuscation action %% Loader Logic and Guardrails loader_stage1["<b>Process</b> – <b idea='Stage 1 Loader'>Memory Resident Loader</b><br/>Executes via obfuscated command chain<br/>to avoid disk footprint."] class loader_stage1 tool guardrail_geofence["<b>Action</b> – <b idea='T1480.002'>Execution Guardrails: Mutual Exclusion</b><br/>Checks macOS keyboard layout to<br/>avoid Russian-speaking users via<br/>geofencing logic."] class guardrail_geofence action loader_reflective["<b>Action</b> – <b idea='T1620'>Reflective Code Loading</b><br/>Fetches second-stage AppleScript<br/>via curl and pipes directly into<br/>osascript memory."] class loader_reflective action %% Payload and Credential Theft malware_meow["<b>Malware</b> – <b idea='Meow Payload'>Meow Payload</b><br/>Memory-resident payload active<br/>after reflective loading."] class malware_meow malware attack_gui_capture["<b>Action</b> – <b idea='T1056.002'>Input Capture: GUI Input Capture</b><br/>Uses a spoofed System Preferences<br/>dialog to harvest user login passwords."] class attack_gui_capture action attack_securityd["<b>Action</b> – <b idea='T1555.002'>Credentials from Password Stores: Securityd Memory</b><br/>Unlocks macOS keychain to extract<br/>Safe Storage keys using harvested<br/>passwords."] class attack_securityd action %% Data Theft and Exfiltration attack_browser_discovery["<b>Action</b> – <b idea='T1217'>Browser Information Discovery</b><br/>Scans for browser data across<br/>Chrome, Safari, and Firefox."] class attack_browser_discovery action attack_session_steal["<b>Action</b> – <b idea='T1539'>Steal Web Session Cookie</b><br/>Exfiltrates session cookies to<br/>maintain unauthorized access."] class attack_session_steal exfiltration attack_crypto_theft["<b>Action</b> – <b idea='T1657'>Financial Theft</b><br/>Targets cryptocurrency wallets including<br/>MetaMask extensions and desktop apps<br/>like Exodus and Ledger."] class attack_crypto_theft exfiltration %% Persistence and C2 persistence_launch["<b>Persistence</b> – <b idea='T1543.001'>LaunchAgent or LaunchDaemon</b><br/>Creates a persistent mechanism<br/>disguised as com.apple.accountsd."] class persistence_launch persistence c2_beaconing["<b>Action</b> – <b idea='T1568'>Command and Control</b><br/>Establishes a 60-second beaconing loop<br/>with Dynamic Resolution for arbitrary<br/>code execution."] class c2_beaconing tool %% Connections attack_drive_by –>|leads_to| attack_user_exec_copy attack_user_exec_copy –>|triggers| attack_obfuscation attack_obfuscation –>|executes| loader_stage1 loader_stage1 –>|performs| guardrail_geofence guardrail_geofence –>|enables| loader_reflective loader_reflective –>|loads| malware_meow malware_meow –>|performs| attack_gui_capture attack_gui_capture –>|facilitates| attack_securityd attack_securityd –>|leads_to| attack_browser_discovery attack_browser_discovery –>|leads_to| attack_session_steal attack_browser_discovery –>|leads_to| attack_crypto_theft malware_meow –>|establishes| persistence_launch malware_meow –>|communicates_with| c2_beaconing "
攻撃フロー
検出
不審なコマンド&コントロールに対する異常なトップレベルドメイン(TLD)DNSリクエスト(dns経由)
表示
可能性のあるMacOSブラウザパスワード探索試行(cmdline経由)
表示
可能性のあるBase64エンコード文字列の操作[MacOS](cmdline経由)
表示
改造されたアプリケーションバンドルの強制的なコード署名(cmdline経由)
表示
MacOS資格情報のDscl Authonlyによる検証(cmdline経由)
表示
不審なCurl実行試行[MacOS](cmdline経由)
表示
アーカイブはMacOS一時フォルダ内で作成されました(file_event経由)
表示
ファイルレスのmacOS AppleScriptステーラー実行の検出[Linuxプロセス作成]
表示
シミュレーション実行
前提条件:テレメトリ&ベースラインのプリフライトチェックが合格している必要があります。
論理的根拠:このセクションでは、検出ルールを発動させるために設計された敵の技術(TTP)の正確な実行を詳細に説明します。コマンドと記述は特定されたTTPを直接反映し、検出ロジックによって期待される正確なテレメトリを生成することを目的としなければなりません。抽象的な例や無関係な例は誤診につながります。
-
攻撃の流れとコマンド: 攻撃者は悪意のあるウェブサイトを介して初期アクセスを得ています。彼らはファイルレスのmacOS AppleScriptを実行し、ファイルベースのスキャンを回避します。スクリプトの目的は、正当なChromeのブラウザユーザーエージェントを偽装して基本的なネットワーク検査を回避し、その後すぐに仮想通貨ウォレットアプリケーションを終了することです。
osascriptを呼び出してcurl特定のフラグとともにkill -9これらのアクションを実行します。 -
リグレッションテストスクリプト:
#!/bin/bash # ファイルレスmacOS AppleScriptステーラーのシミュレーション echo "[+] シミュレーション開始: ファイルレスmacOSステーラー" # ステップ1: osascriptを介したcurlペイロードのフェッチをシミュレート(Triggers selection_curl_ua) echo "[+] ステージ1実行: osascriptによる偽装Curl..." osascript -e 'do shell script "curl -k -s --max-time 30 -H "User-Agent: Mozilla/5.0" http://localhost:8080/payload"' 2>/dev/null & # プロセス作成のためにしばらく待ちます sleep 2 # ステップ2: プロセス終了をシミュレート(Triggers selection_kill) # システムを混乱させないためにダミープロセスを使用して終了します echo "[+] ステージ2実行: osascriptによるプロセス終了..." sleep 1 osascript -e 'do shell script "kill -9 $$"' # 注:これは現在のサブシェルを終了し、意図をシミュレートします # より現実的なターゲットに似たクリーンなシミュレーションの場合 # sleep 1 & sleep 1 & # osascript -e 'do shell script "kill -9 $!"' echo "[+] シミュレーションコマンド送信完了。" -
クリーンアップコマンド:
# スクリプトによって作成されたファイルはありませんが、バックグラウンドプロセスが残っていないことを確認します。 killall osascript 2>/dev/null echo "[+] クリーンアップ完了。"