先講結論:

  • 一次會議邀約,四分鐘內就讓 Mac 被植入 root 後門。 沒有用到任何零時差漏洞,靠的是一個假的 Teams 等候頁和一個假的系統密碼視窗。
  • 後門在電腦上安靜運作了 193 天,第 31 天還在 Chrome 裡裝了一個偽裝成「Google 文件離線版」的間諜擴充功能,每 30 秒把所有網站的 Cookie 傳出去。
  • Telegram 開了兩步驟驗證(2FA)還是被盜,因為攻擊者拿的是「已經登入的 Session」,不是密碼。
  • 如果你懷疑中招:先用另一台乾淨的裝置登出所有 Session,再改密碼,最後重灌。 順序很重要。

本文整理自一起真實事件的鑑識調查,受害者的主機名稱、使用者名稱、個人軟體清單等識別資訊都已移除,時間一律為 UTC。這篇是寫給一般讀者看的版本,想看完整鑑識細節的人,可以讀文末「延伸閱讀」列出的事件報告與研究論文。

去年我寫過一篇 Telegram Session 劫持攻擊分析,講的是假 Zoom 安裝程式偷走 Telegram 桌面版的 Session。這次的個案是同一類攻擊的「加強版」:攻擊者不只偷一次,而是在電腦裡長住下來。

事情是怎麼開始的

2026 年 4 月 24 日,受害者在 Telegram 上收到一個以商務名義發出的視訊會議邀約。點開連結後,出現的是一個偽造的 Microsoft Teams 等候頁,上面寫著「有人會在會議開始時讓您加入」。受害者事後一直記得那是 Zoom,直到鑑識時找到當下的截圖,才發現其實是 Teams。這也說明了:假會議頁面做得夠像時,使用者連品牌都分不清楚。

接著頁面提示「音訊/SDK 需要更新」,受害者執行了下載的內容,畫面跳出一個看起來像 macOS 系統的密碼視窗。輸入密碼後,攻擊者就拿到了管理員權限。

從檔案建立時間可以還原這四分鐘:

時間(UTC) 發生什麼事
08:03:01 假密碼視窗元件 ammad.Mac-Password-Popup 出現
08:04:47 受害者截下假 Teams 等候頁
08:06:28 root 擁有的後門程式 cloudsync 寫入硬碟
08:07:18 建立 LaunchDaemon com.safari.sync.service,開機自動以 root 執行後門

密碼視窗出現在 root 檔案寫入之前,符合「拿使用者輸入的密碼去跑 sudo」的模式。換句話說,這整個攻擊鏈唯一需要的,就是你願意輸入一次密碼。

sequenceDiagram
    autonumber
    actor A as 攻擊者
    actor U as 受害者
    participant W as 假會議網頁
    participant OS as macOS
    participant BD as cloudsync 後門
    participant C2 as C2 check02id.com

    A->>U: Telegram 上邀約視訊會議
    U->>W: 開啟連結,進入假 Teams 等候頁
    W->>U: 「音訊/SDK 需要更新」
    U->>OS: 執行下載內容
    OS->>U: 假的系統密碼視窗
    U->>OS: 輸入登入密碼
    OS->>BD: 以 root 寫入後門與開機啟動項
    loop 每 60 秒
        BD->>C2: 回報(TCP 5202)
    end

193 天裡,攻擊者做了什麼

後門裝好之後,攻擊者沒有急著動手,而是分批擴張:

日期 動作
2026-04-24 root 後門 cloudsync 與 LaunchDaemon 就位
2026-05-05 下載第二階段加密資料 /Users/Shared/.apple.auth
2026-05-25 在全部 4 個 Chrome 設定檔植入假「Google 文件離線版」擴充功能,以及一個未簽章的 Native Messaging Host
2026-06-03 下載第二個 root 執行檔 /Users/Shared/.authds
2026-06-23 更新 LaunchAgent com.apple.google.auth
2026-11-03 調查當天,後門與擴充功能仍在跟 C2 連線

注意命名:com.safari.sync.service、com.apple.google.auth、.apple.auth。全部都在冒用 Apple、Safari、Google 的名字,一般人在「登入項目」或資料夾裡看到,很容易以為是系統元件。

兩層控制:系統層後門 + 瀏覽器層間諜

這次最值得注意的設計,是攻擊者同時握有兩條獨立的控制通道:

  • 系統層(cloudsync):有 root 權限、開機就啟動,可以讀寫整台電腦。但瀏覽器裡的登入狀態是加密的,它不容易直接用。
  • 瀏覽器層(假擴充功能):直接在 Chrome 裡面,拿得到 Cookie、網頁內容和你打的每一個字。

兩層各自連 C2,所以清掉其中一層,另一層還活著。實際調查也是這樣:第一輪清除了 cloudsync 之後,擴充功能仍持續跟 C2 連線,到第二輪全機掃描未簽章執行檔時才被找到。

假「Google 文件離線版」擴充功能能做什麼

這個擴充功能顯示的名稱是 Google Doc Sheets Offline(v1.97.1),ID 是 ppconlkbhfnachephglhgbhdgeapgjoj。真正的 Google 文件離線版 ID 是 ghbmnnjooekpmoecnnnilnnbdlolhkhi,而且只會從 Chrome 線上應用程式商店安裝。

它要求了 <all_urls> 加上 cookies、history、tabs、scripting、desktopCapture、nativeMessaging 等權限。從原始碼可以看到這些功能:

能力 頻率/方式
上傳全部網站的 Cookie(包含 HttpOnly) 每 30 秒
鍵盤側錄、剪貼簿側錄 每 60 秒上傳一次
螢幕截圖 每 6 秒
上傳每個網站的 localStorage 每次切換分頁
上傳最多 10,000 筆瀏覽紀錄 依指令
對指定網址注入任意 JavaScript 依指令
清除指定網站的 Cookie,逼你重新登入 依指令
透過 Native Host 在電腦上執行任意指令 依指令(WebSocket 即時下達)

有兩個組合特別陰險:

  1. 「清 Cookie + 鍵盤側錄」:攻擊者先把你在某個網站的登入狀態清掉,你重新登入時輸入的新密碼就被側錄走。
  2. 「注入 JavaScript」:可以對交易所、錢包網站注入腳本,例如偷偷把收款地址換掉。

另外,它還會攔截 Google Meet 的「立即加入」按鈕,趁你要進會議的那一刻要求螢幕錄製權限。這個時機點讓權限請求看起來非常合理。

為什麼瀏覽器沙箱擋不住

Chrome 的 Native Messaging 本來是讓密碼管理器這類軟體跟本機程式溝通用的1。但如果攻擊者同時控制了擴充功能和本機程式,擴充功能就等於可以在電腦上執行任何指令,沙箱形同被打穿。本案的 Native Host 叫 google.chrome.diagnostics,又是一個冒用 Google 名義、但沒有任何簽章的執行檔。

攻擊者還偽造了時間

擴充功能資料夾裡的部分檔案,建立時間顯示是 2025-10-16,Chrome 設定裡記錄的安裝時間是 2025-08-13,都早於真正的入侵日。如果只看這些時間,會以為擴充功能早就在了,跟這次事件無關。

真正的植入時間是靠一個檔案判斷出來的:擴充功能裡的 data.js 寫著受害者的使用者名稱和主機名稱,這種檔案只能在受害者電腦上產生,而它的建立時間是 2026-05-25。後來的全機掃描也在 Chrome 的 Service Worker 快取裡找到這個擴充功能 background.js 的副本,建立時間比 data.js 晚 5 秒,正好是擴充功能第一次被載入執行的時候。只靠時間線做鑑識,很可能會漏掉關鍵元件。

為什麼開了 2FA,Telegram 還是被盜

這是很多人最想問的。答案是:2FA 保護的是「登入」這個動作,不保護「已經登入」的狀態。

你登入一個網站之後,網站會把一把「登入憑證」存在瀏覽器的 Cookie 或 localStorage 裡。之後每次開網頁,瀏覽器出示這把憑證,網站就知道是你,不會再問密碼或 2FA。

Telegram Web 這類網頁版應用,就是把登入權杖存在 localStorage。這個擴充功能每次切換分頁都會把 localStorage 傳出去,攻擊者拿到之後,就可以在自己的瀏覽器裡「變成你」,完全不需要密碼,也不會觸發 2FA。在 MITRE ATT&CK 裡,這叫 T1539(竊取網頁 Session Cookie)加上 T1550.004(使用網頁 Session Cookie)2。

這也是為什麼被盜之後只改密碼沒有用:攻擊者手上的 Session 不會因為你改密碼就失效。你必須主動「終止所有其他工作階段」。

本案的 Telegram 帳號是在擴充功能運作期間被接管的。透過 localStorage/Session 竊取是證據最支持的推論,但因為日誌已超過保存期限,無法百分之百確定是哪一次外傳造成的。

這跟 BlueNoroff 有什麼關係

公開資料中,北韓背景的 BlueNoroff(一般認為是 Lazarus 旗下以金融與加密資產為目標的子團體)長期使用假視訊會議攻擊 macOS 使用者:

  • Kaspersky 在 2025 年 10 月發表的 GhostCall/GhostHire 研究指出,GhostCall 主要鎖定 macOS,透過 Telegram 接觸目標,用假 Zoom/Teams 用戶端部署竊密工具34。
  • 2025 年 6 月 Huntress 處理的一起事件中,攻擊者在會議裡使用深偽影像,再以「麥克風故障」為由,誘導受害者執行一個名為 zoom_sdk_support.scpt 的 AppleScript56。

本案在「Telegram 邀約、假 Zoom/Teams 頁面、假系統密碼視窗、冒用 Apple/Google 命名、鎖定加密貨幣持有者」這幾點都與公開報告吻合。不過調查沒有對樣本做逆向工程,也沒有比對威脅情資平台,所以這只是「手法吻合」,信心等級中等,不是正式歸因。

至於「系統層後門 + 擴充功能 + Native Host」這種組合,在我們檢閱的公開資料中還沒有看到詳細描述。

怎麼自我檢查

以下指令都只讀取、不修改任何東西,可以在「終端機」裡貼上執行。

1. 檢查本案已知的檔案

ls -la /Library/LaunchDaemons/com.safari.sync.service.plist \
  ~/Library/LaunchAgents/com.apple.google.auth.plist \
  ~/Library/CloudSync \
  ~/Library/Identification \
  ~/Library/Staging \
  "$HOME/Library/Application Scripts/ammad.Mac-Password-Popup" \
  /Users/Shared/.authds /Users/Shared/.apple.auth /Users/Shared/.com.apple.better.env \
  /Users/root \
  2>/dev/null

沒有任何輸出代表這些檔案不存在,這是好消息。

其中 /Users/root 特別說明一下:macOS 的 root 家目錄在 /var/root,正常的 Mac 不會有 /Users/root。本案的後門以 root 身分執行時,在這裡多建了一份跟使用者家目錄一模一樣的狀態檔(Identification/ 與 Authorization/auth.db)。

2. 檢查 Chrome 擴充功能與 Native Host

# 本案的假擴充功能 ID
find "$HOME/Library/Application Support/Google/Chrome" -maxdepth 3 -type d \
  -name ppconlkbhfnachephglhgbhdgeapgjoj 2>/dev/null

# 列出所有已註冊的 Native Messaging Host
ls -la "$HOME/Library/Application Support/Google/Chrome/NativeMessagingHosts/" 2>/dev/null

另外打開 chrome://extensions,每個 Chrome 設定檔都要看,留意:

  • 名稱像 Google 官方,但 ID 不是官方 ID 的擴充功能。
  • 不是從線上應用程式商店安裝的擴充功能(詳細資料頁會寫來源)。
  • 要求「讀取和變更所有網站資料」的擴充功能,問自己是否真的需要。

NativeMessagingHosts 底下每個 .json 都會指向一個執行檔,可以用 codesign -dv <路徑> 看它有沒有正式簽章。一個叫 google.chrome.diagnostics、卻沒有 Google 簽章的東西,就是紅旗。

3. 檢查有沒有跟 C2 連線

lsof -nP -i | grep -E ':(5202|5078|8443)\b'
grep check02id /etc/hosts

4. 通用的可疑特徵

本案歸納出幾條通用規則,就算攻擊者換了檔名也適用:

編號 可疑特徵
H1 LaunchDaemon/Agent 用 /bin/sh -c 去執行 ~/Library 或 /Users/Shared 底下的程式
H2 ~/Library 或 /Users/Shared 底下有 root 擁有、沒有簽章的執行檔
H3 名稱混搭不同廠商(例如 com.apple.google.*、com.safari.*),但簽章者不是該廠商
H4 NativeMessagingHosts 底下有沒簽章的執行檔
H5 擴充功能不是商店安裝,卻放在 Chrome 的 Extensions/ 目錄
H6 擴充功能名稱冒用 Google 官方,但 ID 不同

另外,/Users/ 底下如果有對應不到任何帳號的資料夾(例如 /Users/root),也值得注意。

要列出所有開機啟動項,可以執行 sudo sfltool dumpbtm,或到「系統設定 → 一般 → 登入項目與延伸功能」逐一確認。

如果真的中招了,怎麼處理

順序很重要:先切斷攻擊者手上的 Session,再清電腦。 因為只要電腦還沒清乾淨,你在上面改的新密碼也會被側錄走。

立即(24 小時內,用另一台乾淨的裝置)

  1. Telegram:設定 → 裝置 → 「終止所有其他工作階段」;設定或更換兩步驟驗證密碼,檢查登入 Email 是否被改掉。
  2. Google 帳號:安全性 → 登出所有其他裝置,更換密碼,改用通行金鑰或實體安全金鑰。
  3. 加密貨幣:在乾淨裝置上建立全新助記詞的錢包,把資產全部轉過去;撤銷舊地址的代幣授權(approve)。
  4. 交易所、網銀、Email、雲端服務:先登出所有工作階段,再換密碼,並檢查 API 金鑰和提領白名單地址有沒有被加料。
  5. 更換 macOS 登入密碼與 Apple 帳號密碼。

清除受感染的 Mac

本案的處理步驟是:

  1. 停用開機啟動項:sudo launchctl bootout system/com.safari.sync.service,以及 launchctl bootout gui/$(id -u)/com.apple.google.auth。
  2. 終止 cloudsync、.authds 程序。
  3. 刪除前先記錄每個檔案的 SHA-256,並把樣本加密封存,留給執法單位或研究人員。
  4. 刪除上面「自我檢查」第 1 點列出的所有檔案與目錄。
  5. 完全關閉 Chrome,再刪除 4 個設定檔裡的假擴充功能和 Native Host,然後到 chrome://extensions 確認已移除。
  6. 在 /etc/hosts 加入 0.0.0.0 check02id.com 封鎖 C2。

刪除 /Users/root 之前,先確認裡面只有本案那幾個檔案,不要誤刪其他東西。

但要老實說:手動清除只能清掉「已知」的部分。 本案就是一個例子,第一輪清除漏掉了整個瀏覽器層;前兩輪人工檢查也都沒發現 /Users/root,是最後用 IoC 特徵字串掃描全機 61 萬個檔案才找到。所以:

一週內

  1. 只備份文件(不要備份應用程式和 ~/Library),然後清除磁碟、重新安裝 macOS。
  2. 重裝後的 Chrome 不要同步舊的擴充功能,需要的話從線上應用程式商店重新安裝。
  3. 向警方報案(台灣可撥 165 反詐騙專線),並通報 TWCERT/CC,附上 IoC 與樣本。

以後怎麼避免

  • 會議邀約一律用官方 App 加入。 任何會議頁面要你「更新 SDK」「安裝音訊外掛」「修正麥克風」,都當作攻擊。Zoom、Teams、Google Meet 都不需要你額外裝東西才能開會。
  • 不是你自己觸發的系統密碼視窗,一律不輸入。 先按取消,再想清楚是誰要的。
  • 加密資產放硬體錢包,助記詞永遠不要輸入電腦。
  • 定期到 chrome://extensions 看一眼,特別是那些名字很像官方、你卻不記得自己裝過的。
  • 懷疑出事時,先「登出所有裝置」,再改密碼。

入侵指標(IoC)

給資安人員與 EDR 規則使用。

網路

類型 指標 說明
網域 check02id.com 後門與擴充功能共用的 C2
IP 83.136.210.180 上述網域的解析結果(調查當時)
連接埠 TCP 5202 cloudsync 每 60 秒回報
連接埠 TCP 5078 擴充功能 HTTPS /update(Cookie、側錄資料)
連接埠 TCP 8443 擴充功能 HTTPS /update(截圖)與 wss://…/realtime 指令通道

檔案雜湊(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…

MITRE ATT&CK 重點對應

戰術 技術
初始存取 T1566.003 Spearphishing via Service(Telegram 邀約)
憑證存取 T1056.002 GUI Input Capture(假密碼視窗)
權限提升 T1548.003 Sudo and Sudo Caching
持久化 T1543.004 Launch Daemon、T1543.001 Launch Agent、T1176 Browser Extensions
防禦規避 T1036.005 Masquerading、T1564.001 Hidden Files、T1070.006 Timestomp
憑證存取 T1539 Steal Web Session Cookie
收集 T1056.001 Keylogging、T1115 Clipboard Data、T1113 Screen Capture
執行 T1059.004 Unix Shell(經 Native Host)
指揮控制 T1071.001 Web Protocols、T1571 Non-Standard Port
帳號接管 T1550.004 Web Session Cookie

延伸閱讀:完整報告

本次事件的完整鑑識數據、時間軸、UML 圖與複查範圍,整理在兩份去識別化文件裡(頁尾可切換英文版):

惡意樣本為活體惡意程式,不公開提供。資安研究人員或執法單位如有需要,請私下聯繫。

參考資料

  1. Google, “Native messaging,” Chrome for Developers. https://developer.chrome.com/docs/extensions/develop/concepts/native-messaging ↩

  2. MITRE, “ATT&CK Enterprise Matrix.” https://attack.mitre.org/ ↩

  3. Kaspersky GReAT, “BlueNoroff APT campaigns GhostCall and GhostHire,” Securelist, Oct. 2025. https://securelist.com/bluenoroff-apt-campaigns-ghostcall-and-ghosthire/ ↩

  4. Kaspersky, “GhostCall and GhostHire: hunting for crypto assets,” Kaspersky Daily, Oct. 2025. https://www.kaspersky.com/blog/bluenoroff-ghostcall-ghosthire-lazarus/54681/ ↩

  5. The Hacker News, “BlueNoroff Deepfake Zoom Scam,” Jun. 2025. https://thehackernews.com/2025/06/bluenoroff-deepfake-zoom-scam-hits.html ↩

  6. 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/ ↩