SOC Prime Bias: Medium

22 Apr 2026 15:47 UTC

macOS ClickFixキャンペーン:AppleScriptスティーラーと新しいターミナル保護機能

Author Photo
SOC Prime Team linkedin icon フォローする
macOS ClickFixキャンペーン:AppleScriptスティーラーと新しいターミナル保護機能
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

概要

Netskope Threat Labsは、AppleScriptベースの情報を盗むクロスプラットフォームのClickFixキャンペーンがmacOSユーザーを標的にしていることを特定しました。このマルウェアは、被害者に悪意のあるコマンドをターミナルにコピーし、ペーストするように説得する不正なソーシャルエンジニアリングページを通じて配信されます。一度実行されると、スクリプトはキーチェーンのコンテンツ、ブラウザのクッキー、拡張機能のデータ、仮想通貨ウォレットファイルを収集し、HTTP POSTリクエストを通して盗まれた情報を送信します。このキャンペーンはまた、ユーザーをだましてシステムパスワードを入力させようとする持続的な偽のダイアログボックスを利用しています。

調査

このレポートは、悪意のあるランディングページが、最初に訪問者をユーザーエージェントでフィルタリングした後、macOSシステムに特化したAppleScriptローダーを提供すると説明しています。実行後、マルウェアは一時的なステージングディレクトリを作成し、資格情報とウォレット関連のデータを収集し、収集したファイルを ditto コマンドで圧縮し、ハードコードされたコマンドアンドコントロールアドレスにアーカイブをアップロードします。研究者たちは、被害者のパスワードをリアルタイムで確認するためにmacOSディレクトリサービスの悪用と、対象としている範囲の広いブラウザや仮想通貨ウォレットアプリケーションのドキュメント化も行いました。

緩和策

Netskopeは、macOSユーザーに対し、貼り付けたコマンドに対するネイティブなターミナル警告を導入するmacOS Tahoe 26.4またはmacOS Sequoiaの最新バージョンに更新することを推奨します。ユーザーはまた、不信なウェブサイトからコピーしたコマンドを実行するのを避け、すべての資格情報プロンプトを注意深く確認し、可能であれば多要素認証を有効にするべきです。組織は、疑わしいAppleScript駆動のダイアログや見慣れないインフラへの不審なHTTP POSTトラフィックを監視するよう奨励されています。

対応

防御者は、未知のAppleScriptファイルの実行を検出してブロックし、 /tmp/xdivcmp/ ステージングディレクトリの作成に注意を払い、またmacOSシステムから通常ではないドメインまたはIPアドレスへのHTTP POST活動のアラートを設定するべきです。システムパスワードを要求する繰り返しのダイアログボックスは疑わしいと見なされ、影響を受けたエンドポイントは法医学調査のために迅速に隔離するべきです。

"graph TB %% Class definitions classDef technique fill:#ffcc99 %% Node definitions t_phish["<b>Technique</b> – <b>T1566 Phishing</b><br/><b>Description</b>: Send malicious emails containing a copyu2011paste command to lure the victim."] class t_phish technique t_userexec["<b>Technique</b> – <b>T1204.004 User Execution: Malicious Copy and Paste</b><br/><b>Description</b>: Victim copies and pastes the malicious command into a terminal session."] class t_userexec technique t_unixshell["<b>Technique</b> – <b>T1059.004 Command and Scripting Interpreter: Unix Shell</b><br/><b>Description</b>: Execute a shell command that downloads and runs an AppleScript payload."] class t_unixshell technique t_obfusc["<b>Technique</b> – <b>T1027 Obfuscated Files or Information</b><br/><b>Description</b>: Encode the shell command to hide its malicious intent."] class t_obfusc technique t_inputcap["<b>Technique</b> – <b>T1056 Input Capture</b><br/><b>Description</b>: Persistent AppleScript dialog captures the macOS user password."] class t_inputcap technique t_oscred["<b>Technique</b> – <b>T1003 OS Credential Dumping</b><br/><b>Description</b>: Use the captured password to decrypt the macOS Keychain."] class t_oscred technique t_passmgr["<b>Technique</b> – <b>T1555.005 Credentials from Password Stores: Password Managers</b><br/><b>Description</b>: Extract stored vault data from installed password managers."] class t_passmgr technique t_webbrowser["<b>Technique</b> – <b>T1555.003 Credentials from Password Stores: Web Browsers</b><br/><b>Description</b>: Steal saved passwords and autofill data from browser stores."] class t_webbrowser technique t_webcookie["<b>Technique</b> – <b>T1539 Steal Web Session Cookie</b><br/><b>Description</b>: Harvest session cookies from twelve web browsers."] class t_webcookie technique t_altauth["<b>Technique</b> – <b>T1550.004 Use Alternate Authentication Material: Web Session Cookie</b><br/><b>Description</b>: Reu2011use stolen cookies to bypass multiu2011factor authentication."] class t_altauth technique t_browserdisc["<b>Technique</b> – <b>T1217 Browser Information Discovery</b><br/><b>Description</b>: Locate browser profile directories on the host system."] class t_browserdisc technique t_staging["<b>Technique</b> – <b>T1074.001 Data Staged: Local Data Staging</b><br/><b>Description</b>: Aggregate harvested data in /tmp/xdivcmp."] class t_staging technique t_archive["<b>Technique</b> – <b>T1560 Archive Collected Data</b><br/><b>Description</b>: Compress the staged data into a zip file using ditto."] class t_archive technique t_exfil["<b>Technique</b> – <b>T1041 Exfiltration Over C2 Channel</b><br/><b>Description</b>: Transfer the zip archive via HTTP POST to a commandu2011andu2011control server."] class t_exfil technique t_filedel["<b>Technique</b> – <b>T1070.004 Indicator Removal: File Deletion</b><br/><b>Description</b>: Delete the staging directory after successful exfiltration."] class t_filedel technique t_diskwipe["<b>Technique</b> – <b>T1561 Disk Wipe</b><br/><b>Description</b>: Overwrite disk sectors to remove forensic traces."] class t_diskwipe technique %% Connections showing flow t_phish –>|leads_to| t_userexec t_userexec –>|leads_to| t_unixshell t_unixshell –>|uses| t_obfusc t_unixshell –>|uses| t_inputcap t_unixshell –>|uses| t_browserdisc t_inputcap –>|enables| t_oscred t_inputcap –>|enables| t_passmgr t_inputcap –>|enables| t_webbrowser t_inputcap –>|enables| t_webcookie t_webcookie –>|enables| t_altauth t_browserdisc –>|provides| t_staging t_staging –>|creates| t_archive t_archive –>|exfiltrates| t_exfil t_exfil –>|triggers| t_filedel t_filedel –>|triggers| t_diskwipe "

アタックフロー

シミュレーション実行

前提条件: テレメトリとベースラインの事前飛行チェックが合格している必要があります。

  • 攻撃のストーリーとコマンド:

    1. 偵察: 攻撃者はまず現在のユーザーのキーチェーンを列挙して保存されたアイテムを特定します。
    2. 資格情報ダンプ: を使用して security dump-keychain攻撃者はキーチェーンデータベース全体を一時ファイルに抽出します。
    3. ステージング: ダンプは隠されたステージングディレクトリにコピーされます /tmp/.xdivcmp/ (ルールの /tmp/xdivcmp/ パス参照)。
    4. 難読化: ステージングディレクトリは隠されてマークされます(chflags hidden).
    5. 漏洩準備: ファイルは圧縮されて payload.zip になり、転送準備が整います。
  • 回帰テストスクリプト:

    #!/bin/bash
    set -euo pipefail
    
    # 1. 隠しステージングディレクトリを作成(ルールパスと一致)
    STAGING_DIR="/tmp/.xdivcmp"
    mkdir -p "$STAGING_DIR"
    chflags hidden "$STAGING_DIR"
    
    # 2. キーチェーンをダンプ(ユーザーの操作が必要; データベースのコピーでシミュレーション)
    KEYCHAIN_SRC="/Users/$(whoami)/Library/Keychains/login.keychain-db"
    KEYCHAIN_DUMP="${STAGING_DIR}/login.keychain-db.dump"
    
    # ダンプをシミュレートしてデータベースをコピー(本物の攻撃者は`security dump-keychain`を使用)
    cp "$KEYCHAIN_SRC" "$KEYCHAIN_DUMP"
    
    # 3. 漏洩のために圧縮
    zip -j "${STAGING_DIR}/payload.zip" "$KEYCHAIN_DUMP"
    
    echo "[+] ClickFixシミュレーション完了 – ステージングアーティファクトが$STAGING_DIRに配置されました"
  • クリーンアップコマンド:

    #!/bin/bash
    set -euo pipefail
    
    STAGING_DIR="/tmp/.xdivcmp"
    
    if [[ -d "$STAGING_DIR" ]]; then
        rm -rf "$STAGING_DIR"
        echo "[+] ステージングディレクトリをクリーンアップしました。"
    else
        echo "[*] ステージングディレクトリが見つかりません; クリーンアップするものがありません。"
    fi