North Korea’s Safari Campaign Delivers RATs
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
この記事では、ラザルス・グループの有名なChollimaユニットに関連付けられた新しいmacOSマルウェアフレームワークであるMach-O Manについて説明しています。このマルウェアは、侵害されたTelegramアカウントや偽の会議招待を通じて配布され、ターゲットにClickFixコマンドを実行させようとします。ツールキットには、ホストの詳細を収集し、持続性を維持し、資格情報やブラウザデータを盗むために設計されたいくつかのMach-Oバイナリが含まれており、Telegramを通じてデータが抽出されます。このキャンペーンは、暗号通貨取引所や金融部門の他の組織に焦点を当てているようです。
調査
研究者は、以下の名前のステージングバイナリを特定しました teamsSDK.bin であり、悪意のあるコマンドシーケンスを通じてダウンロードおよび実行されました。その他のコンポーネントには、 D1yCPUyk.bin, minst2.bin、 macrasv2が含まれ、これによりシステムが列挙され、持続性のためのLaunchAgentが作成され、ブラウザ拡張機能、キーチェーンデータ、およびクッキーが収集されました。コマンド・アンド・コントロール通信は、認証されていない /info エンドポイントを露出したGoベースのHTTPサーバーを利用して行われ、Telegram Bot APIトークンが漏洩しました。調査連もまた、C2ホストでRDP、WinRM、およびChrome Remote Desktopなどのリモートアクセスサービスが暴露されていることを発見しました。
軽減策
ユーザーは、未承諾の会議リンクとやり取りすることを避け、予期せぬ会話中に示唆されたターミナルコマンドの正当性を確認するべきです。組織は無許可のLaunchAgentを監視し、macOSバイナリに信頼されたコードサインを要求し、未知のファイルの実行を制限する必要があります。ネットワーク防御は、疑わしいGoベースのHTTPサーバーへのアウトバウンド接続をブロックし、 Go-http-client ユーザーエージェントを使用する通信をフラグとして立てるべきです。Telegram botトークンは曝露から保護されるべきであり、リモートデスクトップサービスは最小権限アクセス制御でロックダウンされる必要があります。
対応
セキュリティチームは未知の .bin ファイルの実行を検出し、 com.onedrive.launcherと命名されたLaunchAgentの作成を監視するべきです。疑わしいインフラストラクチャへのアウトバウンド接続に対するアラートも発生すべきであり、 Go-http-client ユーザーエージェント、ならびに /info エンドポイントへの繰り返しPOSTリクエスト。防衛者は未知のbotトークンに関連する予期しないTelegram APIアクティビティを注視すべきです。すべての悪意あるバイナリを特定して削除するための完全なホストフォレンジックを実施し、侵害された可能性のあるアカウントの資格情報をリセットする必要があります。
"graph TB %% クラス定義セクション classDef action fill:#99ccff classDef tool fill:#cccccc classDef malware fill:#ffcc99 classDef process fill:#e6ffe6 classDef file fill:#ffe6cc classDef service fill:#e6e6ff %% ノード定義 initial_access_user_execution["<b>アクション</b> – <b>T1204.001 ユーザー実行</b><br/>被害者は、Telegram会議でcurlコマンドを実行する悪意のある「修正」リンクをクリックします"] class initial_access_user_execution action tool_curl["<b>ツール</b> – <b>名前</b>: curl<br/><b>説明</b>: サーバからまたはサーバへのデータ転送用のコマンドラインユーティリティ"] class tool_curl tool file_teamsSDK_bin["<b>ファイル</b> – <b>名前</b>: teamsSDK.bin (Mach-O)<br/><b>説明</b>: ダウンロードされ実行されるステージバイナリ"] class file_teamsSDK_bin file process_curl_download["<b>プロセス</b> – curlを用いてteamsSDK.binをダウンロードおよび実行"] class process_curl_download process malware_teamsSDK["<b>マルウェア</b> – <b>名前</b>: teamsSDK<br/><b>説明</b>: 実行後にC2に接続します"] class malware_teamsSDK malware service_go_http["<b>サービス</b> – GoベースのHTTPサーバー<br/><b>ポート</b>: 80/443<br/><b>エンドポイント</b>: /info (認証されていない)"] class service_go_http service process_c2_communication["<b>プロセス</b> – /infoへのHTTP POSTでC2と通信します"] class process_c2_communication process file_minst2_bin["<b>ファイル</b> – <b>名前</b>: minst2.bin"] class file_minst2_bin file process_install_launchagent["<b>プロセス</b> – 持続性を持たせるためのLaunchAgent plistのインストール"] class process_install_launchagent process malware_fake_onedrive["<b>マルウェア</b> – 偽「OneDrive」バイナリがログイン時に起動"] class malware_fake_onedrive malware tool_macrasv2["<b>ツール</b> – <b>名前</b>: macrasv2<br/><b>説明</b>: キーチェーンのエントリ、ブラウザのパスワード、クッキー、拡張機能を抽出します"] class tool_macrasv2 tool process_keychain_extraction["<b>プロセス</b> – macOSキーチェーンおよびブラウザデータを抽出"] class process_keychain_extraction process action_discovery_system_info["<b>アクション</b> – <b>T1082 システム情報の発見</b><br/>CPU ID、ホスト名、ユーザー、インストールされたアプリを収集"] class action_discovery_system_info action action_discovery_software["<b>アクション</b> – <b>T1518 ソフトウェアの発見</b><br/>インストールされたブラウザおよび拡張機能を列挙"] class action_discovery_software action service_telegram_bot["<b>サービス</b> – Telegram Bot API<br/><b>目的</b>: 抜き出された資格情報を受信"] class service_telegram_bot service process_exfiltration["<b>プロセス</b> – 収集したデータをTelegram botに送信します"] class process_exfiltration process action_content_injection["<b>アクション</b> – <b>T1659 コンテンツ挿入</b><br/>認証されていない/infoエンドポイントによる任意のファイルアップロードを許可"] class action_content_injection action action_dynamic_resolution["<b>アクション</b> – <b>T1568 動的解決</b><br/>実行時にC2ドメインを解決します"] class action_dynamic_resolution action %% 接続 initial_access_user_execution –>|使用| tool_curl tool_curl –>|ダウンロードします| file_teamsSDK_bin file_teamsSDK_bin –>|実行される| process_curl_download process_curl_download –>|実行します| malware_teamsSDK malware_teamsSDK –>|通信します| service_go_http service_go_http –>|データを受け取ります| process_c2_communication process_c2_communication –>|トリガします| file_minst2_bin file_minst2_bin –>|インストールします| process_install_launchagent process_install_launchagent –>|作成します| malware_fake_onedrive malware_fake_onedrive –>|ログイン時に実行します| action_discovery_system_info action_discovery_system_info –>|導きます| action_discovery_software action_discovery_software –>|データを提供します| tool_macrasv2 tool_macrasv2 –>|実行します| process_keychain_extraction process_keychain_extraction –>|データを渡します| process_exfiltration process_exfiltration –>|送信します| service_telegram_bot malware_teamsSDK –>|有効にします| action_content_injection action_content_injection –>|許可します| file_minst2_bin malware_teamsSDK –>|有効にします| action_dynamic_resolution action_dynamic_resolution –>|解決します| service_go_http "
攻撃フロー
シミュレーションの実行
前提条件: テレメトリー & ベースライン事前チェックを通過していること。
根拠: このセクションでは、敵対的技術の正確な実行 (T1546.006 / T1587.001) を詳細に示し、検出ルールをトリガーします。コマンドは、Mach-O Manバイナリをリアルに「土地を利用して」デプロイする方法を反映しています。
-
攻撃の物語 & コマンド:
- すでにmacOSホストへの足場を得た攻撃者は、ステージング場所から4つのMach-O Manバイナリをコピーします (
/tmp/stage) から書き込み可能なディレクトリへ (/usr/local/bin). - バイナリは実行可能にされ、連続して起動されて、キットの初期化、偵察、持続性、およびクレデンシャル盗難のフェーズを模倣します。
- 持続性は、以下を指すlaunch daemon plistを書き込むことで達成されます
minst2.bin.
# ステップ1 – バイナリをステージ (テストアセットフォルダーからコピーしてシミュレート) mkdir -p /usr/local/bin/macho cp ./assets/teamsSDK.bin /usr/local/bin/macho/ cp ./assets/D1YrHRTg.bin /usr/local/bin/macho/ cp ./assets/minst2.bin /usr/local/bin/macho/ cp ./assets/macrasv2 /usr/local/bin/macho/ # ステップ2 – 実行可能にします chmod +x /usr/local/bin/macho/*.bin # ステップ3 – ステージおよび偵察バイナリを実行 /usr/local/bin/macho/teamsSDK.bin & /usr/local/bin/macho/D1YrHRTg.bin & # ステップ4 – minst2.binの持続性 (launch daemon) をインストール cat <<'EOF' > /Library/LaunchDaemons/com.macho.minst2.plist <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key><string>com.macho.minst2</string> <key>ProgramArguments</key><array> <string>/usr/local/bin/macho/minst2.bin</string> </array> <key>RunAtLoad</key><true/> </dict> </plist> EOF sudo launchctl load -w /Library/LaunchDaemons/com.macho.minst2.plist # ステップ5 – クレデンシャル盗難/抽出コンポーネントを実行 /usr/local/bin/macho/macrasv2 & - すでにmacOSホストへの足場を得た攻撃者は、ステージング場所から4つのMach-O Manバイナリをコピーします (
-
回帰テストスクリプト: (上記のステップを再現するセルフコンテインドなbashスクリプト)
#!/usr/bin/env bash set -euo pipefail # --- 変数 ------------------------------------------------- BIN_DIR="/usr/local/bin/macho" ASSET_DIR="$(pwd)/assets" PLIST="/Library/LaunchDaemons/com.macho.minst2.plist" # --- 事前チェック ------------------------------------------- if [[ $(id -u) -ne 0 ]]; then echo "スクリプトにはlaunch daemonをインストールするためにrootが必要です。sudoで再実行してください。" exit 1 fi # --- バイナリの展開 ------------------------------------------- mkdir -p "$BIN_DIR" for bin in teamsSDK.bin D1YrHRTg.bin minst2.bin macrasv2; do cp "$ASSET_DIR/$bin" "$BIN_DIR/$bin" chmod +x "$BIN_DIR/$bin" done # --- ステージャー & リコンの実行 --------------------------------- "$BIN_DIR/teamsSDK.bin" & "$BIN_DIR/D1YrHRTg.bin" & # --- 持続性 (launch daemon) ----------------------------------- cat <<'EOF' > "$PLIST" <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key><string>com.macho.minst2</string> <key>ProgramArguments</key><array> <string>/usr/local/bin/macho/minst2.bin</string> </array> <key>RunAtLoad</key><true/> </dict> </plist> EOF launchctl load -w "$PLIST" # --- クレデンシャル盗難コンポーネントの実行 ----------------------- "$BIN_DIR/macrasv2" & echo "シミュレーションが実行されました – テレメトリーが表示されるまで数秒待ってください。" -
クリーンアップコマンド:
#!/usr/bin/env bash set -euo pipefail BIN_DIR="/usr/local/bin/macho" PLIST="/Library/LaunchDaemons/com.macho.minst2.plist" # launch daemonをアンロード if [[ -f "$PLIST" ]]; then sudo launchctl unload -w "$PLIST" sudo rm -f "$PLIST" fi # 持続する悪意あるプロセスをすべて終了 pkill -f teamsSDK.bin || true pkill -f D1YrHRTg.bin || true pkill -f minst2.bin || true pkill -f macrasv2 || true # バイナリを削除 sudo rm -rf "$BIN_DIR" echo "クリーンアップ完了。"