從假視訊會議到瀏覽器間諜:一起 macOS 長期潛伏入侵的鑑識個案研究
一起潛伏 193 天、針對 macOS 加密貨幣使用者的入侵鑑識個案研究,從假會議到結合 Native Messaging 的間諜擴充功能。
作者: 匿名(去識別化個案研究) 版本: 2026 年 11 月,公開版 分類: 數位鑑識;惡意程式分析;社交工程;瀏覽器安全
摘要
近年以加密貨幣持有者為目標的進階持續性威脅(APT),愈來愈常以「視訊會議邀約」作為初始入侵手段。本文以一台實際遭入侵的 macOS 主機為對象,透過現場鑑識(live-response forensics)重建一起從 Telegram 會議邀約開始、潛伏長達 193 天的入侵事件。研究發現,攻擊者先以偽造的 Microsoft Teams 會議頁面及偽造的系統密碼對話框取得使用者密碼,在約四分鐘內植入具 root 權限的後門與 LaunchDaemon 持久化機制;31 天後,再透過該後門於全部四個 Chrome 使用者設定檔植入一個偽裝成「Google 文件離線版」的 Manifest V3 擴充功能,並搭配未簽章的原生訊息主機(Native Messaging Host)。該擴充功能每 30 秒外傳全部網站 Cookie,並具備鍵盤與剪貼簿側錄、螢幕擷取、任意腳本注入及遠端 Shell 執行能力,足以解釋受害者 Telegram 帳號在未洩漏兩步驟驗證的情況下仍遭接管。本文進一步以 DNS 解析日誌的名稱雜湊進行關聯分析,證實系統層後門與瀏覽器擴充功能共用同一個 C2 網域,並記錄攻擊者偽造擴充功能時間戳記的反鑑識手法。研究最後提出可行的偵測啟發式規則,並討論以 Session 竊取為核心的攻擊為何使傳統的密碼加 2FA 防禦失效。所有受害者識別資訊均已移除,時間一律以 UTC 表示。
關鍵字: macOS 惡意程式、社交工程、瀏覽器擴充功能、Native Messaging、Session 劫持、BlueNoroff、數位鑑識、加密貨幣
1. 緒論
1.1 研究動機
針對 Web3 從業者與加密貨幣持有者的攻擊,已從傳統的釣魚郵件演變為高度客製化的即時社交工程。公開報告指出,北韓背景的 BlueNoroff 組織至少自 2023 年起便以假視訊會議為誘餌,鎖定 macOS 使用者 [1][2];2025 年亦有事件顯示攻擊者在會議中使用深偽(deepfake)影像,並誘使受害者下載偽裝成「Zoom 擴充功能」的 AppleScript [3][4]。
現有公開資料多著重於初始入侵鏈與第一階段酬載,對於入侵後長期潛伏期間攻擊者如何擴張控制面、以及系統層後門如何與瀏覽器層元件協同運作的完整紀錄相對較少。本文以一起真實個案補足此缺口。
1.2 研究問題
- RQ1:攻擊者如何從一次會議邀約,取得 macOS 主機的 root 權限與持久化能力?
- RQ2:在長期潛伏期間,攻擊者部署了哪些額外元件?這些元件之間如何協作?
- RQ3:在啟用兩步驟驗證的情況下,受害者的即時通訊帳號為何仍遭接管?
- RQ4:有哪些可觀測的主機層特徵,可供防禦者用於偵測同類攻擊?
1.3 貢獻
- 完整重建一起潛伏 193 天之 macOS 入侵事件的時間軸與攻擊鏈(第 4.1–4.2 節)。
- 以原始碼層級分析一個結合 Native Messaging 遠端 Shell 的瀏覽器間諜擴充功能(第 4.4 節)。
- 提出以 DNS 日誌名稱雜湊進行跨程序 C2 關聯的方法(第 4.5 節)。
- 記錄擴充功能時間戳記偽造之反鑑識手法,並提出判別依據(第 4.6 節),以及僅由全機特徵掃描發現的 root 鏡像目錄(第 4.7 節)。
- 歸納六項可落地的偵測啟發式規則(第 6.3 節)。
2. 背景與相關研究
2.1 BlueNoroff 與假會議行動
BlueNoroff(亦稱 TA444、APT38 相關群體)一般被視為 Lazarus 集團中以金融與加密資產竊取為主要目標的子團體。Kaspersky 於 2025 年 10 月公開的 GhostCall/GhostHire 研究指出,GhostCall 行動主要鎖定 macOS,透過 Telegram 與 LinkedIn 接觸目標,以假 Zoom/Microsoft Teams 用戶端及多條感染鏈部署竊密套件 [1][2]。Huntress 於 2025 年 6 月處理的事件中,攻擊者先以偽造的 Zoom 網域主持會議,再以「麥克風故障需安裝擴充功能」為由,誘使受害者執行名為 zoom_sdk_support.scpt 的 AppleScript,後續部署包含鍵盤側錄與後門在內的多個酬載 [3][4]。
2.2 瀏覽器擴充功能與 Native Messaging
Chrome 擴充功能可透過 Native Messaging 機制,與本機上註冊的原生程式以 stdin/stdout 交換 JSON 訊息。在 macOS 上,主機的註冊檔(manifest)放在使用者層或系統層的特定目錄,並以 allowed_origins 限定可呼叫的擴充功能 ID [5]。這個機制本來是讓密碼管理器等合法軟體使用,但一旦攻擊者同時控制擴充功能與原生主機,瀏覽器沙箱就形同被打穿:擴充功能能夠在本機執行任意指令。
2.3 Session 劫持與 2FA 的侷限
兩步驟驗證保護的是「登入」這個動作;登入後,網站通常以 Cookie 或 localStorage 中的權杖維持登入狀態。攻擊者若直接竊取這些權杖,即可在不知道密碼、也不需要 2FA 的情況下沿用受害者的登入狀態。MITRE ATT&CK 將此類行為歸類為 T1539(竊取網頁 Session Cookie)與 T1550.004(使用網頁 Session Cookie)[6]。
3. 研究方法
3.1 研究對象與情境
研究對象為一台搭載 macOS 26.x 的 Apple 筆記型電腦,使用者為具管理員權限的單一帳號。受害者自述曾於 2026 年 4 月經 Telegram 受邀參加視訊會議並安裝軟體,之後 Telegram 帳號遭盜用。調查於 2026 年 11 月進行,當時主機仍在日常使用中。
3.2 鑑識方法
本研究採用現場鑑識,分為四個階段:
- 唯讀蒐證:先讀取資料,任何修改之前都以 SHA-256 記錄雜湊值,並將樣本加密封存。
- 假設驅動分析:以受害者提供的時間範圍為起點,比對檔案系統的建立時間(birthtime),建立候選事件。
- 全面掃描:不受時間假設限制,對全部持久化位置、全機未簽章的 Mach-O 執行檔、所有應用程式的簽章完整性、隱私權限(TCC)資料庫、網路設定與憑證進行系統性檢查。
- 多輪複查:清除後進行三輪獨立複查,每一輪採用不同的偵測角度。
3.3 資料來源
| 資料來源 | 用途 |
|---|---|
| APFS 檔案建立時間與修改時間 | 重建事件時間軸 |
launchd 設定與背景項目資料庫(BTM) | 找出持久化機制 |
codesign/spctl | 驗證簽章與公證狀態 |
Chrome Secure Preferences 與擴充功能目錄 | 判斷擴充功能來源與安裝方式 |
| macOS 統一日誌(mDNSResponder、kernel、launchd) | 觀察 C2 活動與清除效果 |
lsof | 觀察即時網路連線 |
| LaunchServices 隔離資料庫(QuarantineEventsV2) | 下載紀錄 |
| 擴充功能 JavaScript 原始碼 | 靜態分析其能力 |
3.4 研究倫理與去識別化
本文已移除主機名稱、使用者名稱、受害者專屬識別碼、個人軟體清單與證據存放路徑,所有時間一律轉換為 UTC。受害者截圖中的影像不予公開。惡意樣本僅供研究人員與執法單位私下取得。
4. 個案分析
4.1 入侵時間軸
timeline
title 入侵事件時間軸(UTC)
2026-04-24 08h03 : 假密碼視窗元件出現
: Staging 目錄建立
2026-04-24 08h04 : 受害者截圖 - 假 Teams 等候頁
2026-04-24 08h06 : root 後門 cloudsync 寫入
2026-04-24 08h07 : LaunchDaemon 持久化建立
2026-05-05 : 第二階段加密資料
2026-05-25 03h40 : 間諜擴充功能與 Native Host 植入
2026-06-03 : 第二階段執行檔 .authds
2026-06-23 : LaunchAgent 更新
2026-11-03 : 偵測、遏止與根除
表 1:關鍵事件(UTC)
| 時間 | 事件 | 證據 |
|---|---|---|
| 2026-04-24 08:03:01 | 建立 ~/Library/Staging、ammad.Mac-Password-Popup | 檔案建立時間 |
| 2026-04-24 08:04:47 | 受害者截圖:偽造的 Teams 等候頁 | 截圖檔 |
| 2026-04-24 08:05:16 | 建立 ~/Library/Identification/、Authorization/auth.db | 檔案建立時間 |
| 2026-04-24 08:06:28 | 寫入 root 擁有的未簽章 Mach-O cloudsync(7.26 MB) | 檔案建立時間、codesign |
| 2026-04-24 08:07:18 | 建立 /Library/LaunchDaemons/com.safari.sync.service.plist | 檔案建立時間 |
| 2026-05-05 11:30 | 寫入 /Users/Shared/.apple.auth | 檔案建立時間 |
| 2026-05-25 03:40:46 | 植入擴充功能與 Native Host;data.js 內嵌受害者識別資訊 | 檔案建立時間 |
| 2026-06-03 00:20 | 寫入 /Users/Shared/.authds(5.24 MB,曾被執行) | 檔案建立時間、xattr |
| 2026-06-23 03:17:32 | 以 root 身分建立鏡像目錄 /Users/root/Library/(含 Identification/ 與 Authorization/auth.db),同一秒產生一筆 TCC 臨時簽章快取紀錄 | 檔案建立時間、TCC AdhocSignatureCache |
| 2026-06-23 05:39:36 | /Users/root/.../auth.db 被修改,同步產生另一筆 TCC 快取紀錄 | 檔案修改時間、TCC AdhocSignatureCache |
| 2026-06-23 10:59 | 更新 com.apple.google.auth.plist | 檔案修改時間 |
| 2026-11-03 11:27 | 終止後門並移除持久化 | 統一日誌 |
表 2:潛伏期量化指標
| 指標 | 數值 |
|---|---|
| 從初始入侵到偵測(dwell time) | 193 天 |
| 從頁面截圖到 root 持久化建立 | 約 2.5 分鐘 |
| 從初始入侵到植入瀏覽器擴充功能 | 31 天 |
| 擴充功能運作時間 | 162 天 |
| 後門回報頻率 | 每 60 秒一次(每日 1,440 次) |
| Cookie 外傳頻率 | 每 30 秒一次(每日 2,880 次;162 天約 46.7 萬次) |
| 受影響的 Chrome 設定檔 | 4/4 |
4.2 攻擊鏈(回答 RQ1)
sequenceDiagram
autonumber
actor A as 攻擊者
participant TG as Telegram
actor U as 受害者
participant W as 偽造會議網頁
participant OS as macOS
participant BD as cloudsync 後門
participant CH as Chrome 間諜擴充功能
participant NH as Native Host
participant C2 as C2 check02id.com
A->>TG: 以商務名義邀約視訊會議
TG->>U: 會議連結
U->>W: 進入偽造 Teams 等候頁
W->>U: 提示需更新音訊元件或 SDK
U->>OS: 執行下載內容
OS->>U: 假系統密碼對話框
U->>OS: 輸入登入密碼
Note over OS: 密碼外洩後以 sudo 提權
OS->>BD: 寫入 root 後門與 LaunchDaemon
loop 每 60 秒
BD->>C2: 回報(TCP 5202)
end
BD->>CH: 第 31 天植入擴充功能(4 個設定檔)
BD->>NH: 植入並註冊 Native Host
loop 持續 162 天
CH->>C2: Cookie、localStorage、鍵盤記錄、截圖
C2-->>CH: WebSocket 即時指令
CH->>NH: 遠端 Shell 指令
end
A->>TG: 以竊得的 Session 接管帳號
攻擊鏈有一個關鍵特徵:取得密碼的時機早於提權。假密碼對話框(Mac-Password-Popup)在 08:03 就已出現,root 檔案則在 08:06 才寫入,這與「以使用者輸入的密碼執行 sudo」的模型一致。整個過程不需要任何零時差漏洞,完全建立在使用者的信任之上。
4.3 惡意元件架構(回答 RQ2)
flowchart TB
subgraph Host["受害主機 (macOS)"]
direction TB
subgraph P["持久化層"]
LD["LaunchDaemon<br/>com.safari.sync.service"]
LA["LaunchAgent<br/>com.apple.google.auth"]
end
subgraph S1["第一階段 (root)"]
CS["cloudsync<br/>未簽章 Mach-O 7.26MB"]
ENV[".com.apple.better.env<br/>加密設定"]
end
subgraph S2["第二階段"]
AD[".authds<br/>未簽章 Mach-O 5.24MB"]
AA[".apple.auth<br/>加密資料"]
end
subgraph B["瀏覽器層"]
EXT["偽 Google 文件離線版<br/>MV3 擴充功能"]
NMH["google.chrome.diagnostics<br/>未簽章 Native Host"]
end
end
C2[("C2<br/>check02id.com")]
LD -->|開機執行| CS
CS --> ENV
CS -->|下載| AD
CS -->|下載| AA
CS -->|植入| EXT
CS -->|植入| NMH
EXT <-->|nativeMessaging| NMH
CS <-->|TCP 5202| C2
EXT <-->|TCP 5078 / 8443| C2
這套架構可以理解為兩層互補的控制面:
- 系統層(cloudsync):擁有 root 權限與持久性,但看不到瀏覽器裡加密的 Session。
- 瀏覽器層(擴充功能):直接拿得到 Cookie、頁面內容與使用者輸入,再藉由 Native Host 取得本機的指令執行能力。
由於兩層分別回報、各有通道,就算其中一層被清除,另一層仍然能維持部分控制。實際調查也驗證了這一點:第一輪清除系統層後門後,擴充功能仍持續與 C2 連線,直到第二輪複查才被發現。
4.4 瀏覽器間諜擴充功能分析(回答 RQ3)
classDiagram
class FakeDocsOfflineExtension {
+id ppconlkbhfnachephglhgbhdgeapgjoj
+manifest_version 3
+location 4 非商店安裝
+host_permissions all_urls
+permissions cookies history tabs scripting desktopCapture pageCapture nativeMessaging
}
class ContentScript1 {
+keydown 鍵盤側錄
+copy_paste 剪貼簿側錄
+click 觸發截圖
+visibilitychange 上傳 localStorage
}
class ContentScript2 {
+攔截 Google Meet 加入按鈕
+誘導授予螢幕錄製權限
}
class BackgroundWorker {
+f3 每 30 秒上傳全部 Cookie
+keylog 每 60 秒上傳
+capture 每 6 秒截圖
+cmd4 清除指定網站 Session
+cmd11 上傳瀏覽紀錄
+cmd13 注入任意 JavaScript
+cmd14_15_16 遠端 Shell
+cmd17 MHTML 頁面擷取
}
class NativeHost {
+未簽章 x86_64
+執行 payload
}
FakeDocsOfflineExtension *-- ContentScript1
FakeDocsOfflineExtension *-- ContentScript2
FakeDocsOfflineExtension *-- BackgroundWorker
BackgroundWorker --> NativeHost : sendNativeMessage
靜態分析擴充功能原始碼後,本研究歸納出三項對 RQ3 特別關鍵的能力:
- Session 竊取(f3、cmd3):每 30 秒以
chrome.cookies.getAll({})取得全部 Cookie(包含 HttpOnly),Base64 編碼後外傳。 - localStorage 外傳:每次頁面切換都會上傳該網站的 localStorage。Telegram Web 等單頁應用程式將登入權杖存在 localStorage,因此這是受害者 Telegram 遭接管最可能的途徑。
- 強迫重新登入(cmd4):攻擊者可以清除特定網站的 Cookie 與儲存資料,逼受害者重新登入,再搭配鍵盤側錄取得新輸入的密碼。這是一種「先讓 Session 失效、再收割憑證」的組合戰術。
此外,content-script2.js 會攔截 Google Meet 的「立即加入」按鈕,在受害者按下時順勢誘導授予螢幕錄製權限。這顯示攻擊者刻意利用「使用者正要加入會議」的情境,讓權限請求看起來合理。
4.5 C2 基礎設施關聯
macOS 統一日誌會以雜湊值遮蔽 DNS 查詢的網域名稱。本研究發現,在同一個開機期間內,cloudsync(PID 543)查詢的網域雜湊值,與 Chrome 程序查詢次數高達 14,202 次的網域雜湊值完全相同;而 Chrome 端的網域,已由擴充功能設定檔確認為 check02id.com。
因此可以推論,系統層後門(連接埠 5202)與瀏覽器擴充功能(連接埠 5078/8443)共用同一個 C2 網域,只以不同的連接埠區分用途。這個方法讓研究者在無法逆向工程封裝過的二進位檔時,仍能完成跨程序的基礎設施關聯。
4.6 反鑑識:時間戳記偽造
擴充功能目錄內有部分檔案的建立時間顯示為 2025-10-16,Secure Preferences 中記錄的安裝時間則是 2025-08-13,兩者都早於初始入侵。本研究以四點證據判斷這些時間是偽造的:
- 2025-10-16 當天,全機都找不到任何惡意活動或可疑下載。
- 內嵌受害者主機名稱的
data.js、以及 Native Host 執行檔,建立時間都是 2026-05-25 03:40:46。這些檔案必須在受害者主機上才能產生。 - 子目錄的建立時間早於父目錄,這種狀況符合「從保留原始時間的封存檔解壓縮」,而不是在本機上原生建立。
- 全機特徵掃描在 Chrome 的 Service Worker 腳本快取中,找到該擴充功能
background.js的快取副本,建立時間為 2026-05-25 03:40:51,比data.js晚 5 秒,與擴充功能「首次被載入執行」的情境一致。
這個發現代表:只依賴擴充功能的安裝時間做事件鑑識,可能嚴重誤判入侵起點。
4.7 以 root 身分複製的持久化狀態
全機特徵掃描另外找到一個前兩輪人工檢查都沒發現的目錄:/Users/root/Library/。macOS 的 root 家目錄是 /var/root,正常系統不會有 /Users/root。這個目錄由 root 擁有,內部結構與受害者家目錄中的惡意檔案完全相同:一個空的 Identification/,以及內容指向 Identification/.verify 的 Authorization/auth.db。
這個目錄建立於 2026-06-23 03:17:32 UTC,同一秒系統的 TCC 臨時簽章快取也新增了一筆紀錄;auth.db 在 05:39:36 UTC 被修改時,快取又同步新增一筆。可能的解釋是:惡意程式以 root 身分執行時,用「/Users/ 加目前使用者名稱」組出家目錄路徑,而不是讀取系統設定,於是在不存在的 /Users/root 底下重建了一份狀態檔。調查時並沒有任何持久化項目引用這個目錄。
這項發現說明了兩件事:一、以特徵字串進行全機掃描,能補足人工檢查的盲點;二、偵測規則不應只檢查真實使用者的家目錄,/Users/ 底下不對應任何帳號的目錄同樣值得注意。
5. 處置與驗證
stateDiagram-v2
state "偵測" as D
state "遏止系統層" as C1
state "根除系統層" as E1
state "複查一" as R1
state "遏止瀏覽器層" as C2s
state "根除瀏覽器層" as E2
state "DNS 封鎖" as B
state "複查二與三" as R2
[*] --> D
D --> C1: 發現偽裝 LaunchDaemon
C1 --> E1: 終止 root 後門
E1 --> R1: 確認無殘留
R1 --> C2s: 發現未簽章 Native Host 與 C2 連線
C2s --> E2: 隔離四個設定檔的擴充功能
E2 --> B: hosts 封鎖 C2 網域
B --> R2: 簽章、注入、腳本、日誌全面複查
R2 --> [*]
表 3:複查範圍與結果
| 檢查面向 | 結果 |
|---|---|
| 持久化(LaunchAgents/Daemons、登入項目、BTM、cron、登入掛鉤、資料夾動作) | 已清除,未見其他 |
| Shell 設定檔、hosts、PAM、sudoers、驗證外掛、核心與系統擴充 | 未遭修改 |
| 全機 2026-04 之後新增的未簽章 Mach-O | 惡意者皆已移除 |
| 所有應用程式的簽章完整性 | 無竄改 |
| DYLD 注入、launchd 環境變數 | 無 |
| 帳號、SSH、遠端登入 | 正常 |
| TCC 隱私權限 | 無異常授權(Chrome 原本就有的螢幕錄製權限遭擴充功能濫用) |
| 網路設定與受信任憑證 | 正常 |
| 清除後的 C2 活動 | 無 |
| 全機特徵掃描(610,801 個本機檔案;比對 5 個雜湊值與 11 個特徵字串) | 雜湊命中 0;字串命中中新發現 /Users/root 鏡像目錄(第 4.7 節,已移除),其餘為 Chrome 快取與連線紀錄、Wi-Fi 晶片記憶體快照,以及調查本身產生的文件 |
值得注意的是,第一輪清除並不完整。以檔案建立時間為主的初步分析漏掉了瀏覽器層元件,原因正是第 4.6 節所述的時間戳記偽造。直到第二輪改用「全機未簽章 Mach-O 掃描」才找到 Native Host,再循線追到擴充功能。
6. 討論
6.1 Session 竊取讓 2FA 防線失效
本個案說明,在端點已經被入侵的前提下,2FA 的保護範圍有根本上的限制。受害者在帳號被盜後更換密碼,也無法讓攻擊者手上已經持有的 Session 失效;必須在乾淨的裝置上主動撤銷所有工作階段,才能真正切斷存取。對使用者與服務提供者的建議如下:
- 服務端:將 Session 綁定裝置特徵,偵測異常的 Session 搬移,並對高風險操作要求重新驗證。
- 使用者端:懷疑遭入侵時,先「登出所有裝置」,之後才改密碼。
6.2 社交工程的情境設計
攻擊者在三個層次精心設計情境:通訊平台(Telegram)、會議品牌(使用者記得是 Zoom,實際截圖則是 Teams),以及權限請求的時機(在 Google Meet 按下「加入」的瞬間)。受害者事後記錯會議品牌,也顯示假會議頁面的品牌細節對使用者來說不容易辨識。
6.3 偵測啟發式規則(回答 RQ4)
| 編號 | 規則 | 本案命中元件 |
|---|---|---|
| H1 | LaunchDaemon/Agent 的 ProgramArguments 是 /bin/sh -c,並指向 ~/Library 或 /Users/Shared 底下的執行檔 | 兩個持久化 plist |
| H2 | ~/Library 或 /Users/Shared 底下有 root 擁有的未簽章 Mach-O | cloudsync、.authds |
| H3 | 標籤冒用不同廠商的命名(例如 com.apple.google.*、com.safari.*),但簽章者並非該廠商 | com.apple.google.auth、com.safari.sync.service |
| H4 | 使用者層 NativeMessagingHosts 底下有未簽章的執行檔 | google.chrome.diagnostics |
| H5 | 擴充功能 location=4(未封裝)、from_webstore=false,但程式碼放在 Extensions/ 目錄而不是開發者路徑 | 假文件離線版 |
| H6 | 擴充功能名稱冒用 Google 官方擴充功能,但 ID 跟官方不同 | ppconlk… 對比官方的 ghbmnn… |
上述規則都可以用 osquery 或 EDR 實作,誤報率預期不高。H5 與 H6 尤其值得關注,因為它們針對的是瀏覽器層,而傳統 EDR 往往不會深入檢查這一層。
6.4 歸因評估
表 4:與公開報告的比較
| 本案觀察 | 公開報告中 BlueNoroff 的手法 [1]–[4] |
|---|---|
| 經 Telegram 邀約假會議 | 吻合 |
| 偽造 Zoom/Teams 會議介面 | 吻合 |
| 以假系統對話框取得密碼 | 吻合 |
| 以 Apple/Google 名義偽裝持久化項目 | 吻合 |
| 鎖定加密貨幣使用者 | 吻合 |
| 瀏覽器擴充功能搭配 Native Host | 在本研究檢閱的公開資料中,未見詳細描述 |
手法吻合程度高,本研究給予「中度信心」。但我們沒有做樣本逆向工程,也沒有比對威脅情資平台,因此不構成正式歸因。
7. 研究限制
- 單一個案:研究結果未必能推論到所有同類攻擊。
- 沒有逆向工程:
cloudsync、.authds與 Native Host 都是封裝過的二進位檔,本研究只分析了它們的行為與外部特徵。 - 日誌保存期限:macOS 統一日誌與 Chrome 瀏覽紀錄(約 90 天)都已經沒有 4 月的資料,所以無法確定最初的誘餌網址與第一階段下載內容。
- LaunchAgent 酬載遺失:
~/Library/Identification/.verify在調查時就已不存在,它的功能無法分析。 - 全機特徵掃描範圍:掃描跳過了只存在於 iCloud 雲端、沒有下載到本機的檔案。這類檔案無法在本機執行,對結論影響有限。
- 歸因限制:如第 6.4 節所述。
8. 結論
本研究以一起潛伏 193 天的 macOS 入侵個案,說明現代假會議攻擊如何在幾分鐘內取得 root 權限,並在潛伏期間把控制範圍擴張到瀏覽器層。研究的主要發現如下:
- 攻擊靠的是信任,不是漏洞:整個入侵過程沒有使用任何零時差漏洞,完全倚賴使用者輸入密碼。
- 兩層控制面互為備援:系統層後門與瀏覽器層間諜擴充功能各自與 C2 通訊,清掉其中一層並不足以根除入侵。
- Session 竊取讓 2FA 失效:這是即時通訊帳號遭接管最可能的機制。
- 時間戳記會騙人:攻擊者偽造了擴充功能的時間,只依賴時間線的鑑識方法可能漏掉關鍵元件。
未來研究可以朝三個方向延伸:對 Native Host 的指令協定進行逆向工程;將第 6.3 節的啟發式規則實作成可公開的偵測規則;以及跨多個個案驗證「系統層加瀏覽器層」雙控制面模式的普遍程度。
參考文獻
[1] Kaspersky GReAT. BlueNoroff APT campaigns GhostCall and GhostHire. Securelist, Oct. 2025. https://securelist.com/bluenoroff-apt-campaigns-ghostcall-and-ghosthire/
[2] Kaspersky. “GhostCall and GhostHire: hunting for crypto assets.” Kaspersky Daily, Oct. 2025. https://www.kaspersky.com/blog/bluenoroff-ghostcall-ghosthire-lazarus/54681/
[3] The Hacker News. BlueNoroff deepfake Zoom scam(新聞報導,引述 Huntress 事件分析). Jun. 2025. https://thehackernews.com/2025/06/bluenoroff-deepfake-zoom-scam-hits.html
[4] BleepingComputer. North Korean hackers deepfake execs in Zoom call to spread Mac malware(新聞報導). Jun. 2025. https://www.bleepingcomputer.com/news/security/north-korean-hackers-deepfake-execs-in-zoom-call-to-spread-mac-malware/
[5] Google. “Native messaging.” Chrome for Developers. https://developer.chrome.com/docs/extensions/mv3/nativeMessaging
[6] MITRE. “ATT&CK Enterprise Matrix.” https://attack.mitre.org/
附錄 A:入侵指標(IoC)
網路
| 類型 | 指標 | 說明 |
|---|---|---|
| 網域 | check02id.com | 後門與擴充功能共用的 C2 |
| IP | 83.136.210.180 | 上述網域的解析結果 |
| 連接埠 | TCP 5202 | 後門回報 |
| 連接埠 | TCP 5078、8443 | 擴充功能外傳資料與 WebSocket 指令 |
檔案雜湊(SHA-256)
| 檔案 | SHA-256 |
|---|---|
cloudsync | 4a8059ae03301e8b0397c0c26f8b5d01fb1cb05c2563e1c2f538e11c74d37c3b |
.authds | 7f2e8e4432d80194aadca7f051e0f243ecf727af4a95bb4fd7af34490e27ea0b |
google.chrome.diagnostics | 7a0ee74dcdb2d30ef63884e2505799d7f95e670b628a5504f0f292424da37c3d |
com.google.chrome.diagnostics.json | 2e76e387b1f6a4412ce6840bf1221a1d7de4df619c78b35a4106b9e36dc2fcf4 |
background.js | 764b5681720001dc9af9da4d7aa948abf2bd458336e0bd8ccb1b2d6fcb1d66f0 |
content-script1.js | cac1539fe2e8aa9d2db9928a384554839ae6d597ec61ef01b1089e976035a586 |
content-script2.js | 530e7a28e79c8fc8d1fd651066de29c6926ec187da3d5d132c87539daa32e879 |
.apple.auth | 1b5dc3dda3c4f3b26bb9d19f731b646a794feb095af5fb382f8896c473a8fd7d |
.com.apple.better.env | d62e7d144cfb2ad761661ec2befcd2aa09ed335faafc279cd51db3a0f4af8551 |
com.safari.sync.service.plist | c189e4a9c69b7f07ce9533646f5bcaac58876da05f11795572a53fabbcb6e758 |
com.apple.google.auth.plist | 5d97e4a0e8da6cff7d85b986d1de71e992bb977119580757d45650ddba527758 |
/Users/root/.../Authorization/auth.db | fc2c4fce5446a04d33d6dfe24014ec088033d4a984bd4d095ee901e633a77c99 |
主機路徑與識別碼
/Library/LaunchDaemons/com.safari.sync.service.plist
~/Library/LaunchAgents/com.apple.google.auth.plist
~/Library/CloudSync/cloudsync
~/Library/Identification/.verify
~/Library/Staging/
~/Library/Application Scripts/ammad.Mac-Password-Popup/
~/Library/Application Support/Authorization/auth.db
/Users/root/Library/Identification/
/Users/root/Library/Application Support/Authorization/auth.db
/Users/Shared/.authds
/Users/Shared/.apple.auth
/Users/Shared/.com.apple.better.env
~/Library/Application Support/Google/Chrome/NativeMessagingHosts/google.chrome.diagnostics
~/Library/Application Support/Google/Chrome/NativeMessagingHosts/com.google.chrome.diagnostics.json
Chrome 擴充功能 ID:ppconlkbhfnachephglhgbhdgeapgjoj("Google Doc Sheets Offline" v1.97.1)
擴充功能硬編碼 token 前綴:jfweibd234HFIDhfiwef…
附錄 B:MITRE ATT&CK 對應
| 戰術 | 技術 | 本案觀察 |
|---|---|---|
| 初始存取 | T1566.003 Spearphishing via Service | Telegram 會議邀約 |
| 執行 | T1204.002 User Execution | 受害者執行「更新」 |
| 憑證存取 | T1056.002 GUI Input Capture | 假密碼對話框 |
| 權限提升 | T1548.003 Sudo | 以竊得的密碼寫入 root 檔案 |
| 持久化 | T1543.004 Launch Daemon | com.safari.sync.service |
| 持久化 | T1543.001 Launch Agent | com.apple.google.auth |
| 持久化 | T1176 Browser Extensions | 偽造的文件離線版擴充功能 |
| 防禦規避 | T1036.005 Masquerading | 冒用 Apple/Google 命名 |
| 防禦規避 | T1564.001 Hidden Files | /Users/Shared/.authds 等 |
| 防禦規避 | T1070.006 Timestomp | 偽造擴充功能時間 |
| 防禦規避 | T1027 Obfuscated Files | 加密設定、封裝的執行檔 |
| 憑證存取 | T1539 Steal Web Session Cookie | 每 30 秒外傳 Cookie |
| 收集 | T1056.001 Keylogging | content-script1 |
| 收集 | T1115 Clipboard Data | 複製/貼上側錄 |
| 收集 | T1113 Screen Capture | 每 6 秒截圖 |
| 探索 | T1217 Browser Information Discovery | 上傳瀏覽紀錄 |
| 執行 | T1059.004 Unix Shell | 經 Native Host 執行遠端指令 |
| 指揮控制 | T1071.001 Web Protocols | HTTPS/WebSocket |
| 指揮控制 | T1571 Non-Standard Port | 5078、5202、8443 |
| 外洩 | T1041 Exfiltration Over C2 Channel | 經 /update 上傳 |
| 防禦規避 | T1550.004 Web Session Cookie | Telegram 帳號遭接管 |