macOS.ZuRu 再現江湖|改良版 Khepri C2 潛藏於被篡改的 Termius App 之中
惡意程式再現:macOS.ZuRu 的新型攻擊手法
macOS.ZuRu 這個後門程式最早於 2021 年 7 月由中國博客發現,當時主要透過在百度搜索結果中投毒,將用戶誤導到一個帶有木馬的 iTerm2 終端模擬器下載頁。之後,ZuRu 變種繼續以同一手法,針對其他熱門 macOS 工具如 SecureCRT、Navicat 及微軟的 Remote Desktop for Mac,顯示幕後黑手針對的是習慣使用 SSH 及遠端連線工具的開發者及 IT 專業人士。
2024 年 1 月,JAMF 研究人員發現有盜版 macOS 軟件在感染後利用開源的 Khepri C2 框架執行後續操作。到 2025 年 5 月底,社交媒體上又出現新樣本,這次鎖定跨平台 SSH 客戶端及伺服器管理工具 Termius,並以全新方式將惡意程式植入合法應用之中。
被篡改的應用包:Termius 變身惡意載體
這次的惡意軟件以 `.dmg` 磁碟映像檔發放,內含被篡改的 Termius.app。正版 Termius 的磁碟映像約 225MB,而木馬版則因加入惡意二進制碼而增至 248MB。

由於應用包已被修改,攻擊者以自簽的 ad hoc 簽名取代原有開發者簽名,以通過 macOS 的驗證。木馬在內嵌的 `Termius Helper.app` 加入兩個可執行檔,將原本約 248KB 的 `Termius Helper` 改名為 `.Termius Helper1`。當用戶啟動程式時,新的 `Termius Helper`(高達 25MB)會同時啟動惡意載入器 `.localized` 及 `.Termius Helper1`,確保主程式表面如常運作。背後 `.localized` 會從 `download.termius[.]info` 下載另一個二進制檔,寫入 `/tmp/.fseventsd`,這就是 Khepri C2 beacon。
與舊版 ZuRu 主要透過在主程式加載外部 `.dylib` 不同,這次直接植入 Helper app,顯示手法有明顯演變。
持久化機制:LaunchDaemon 的運用
一旦啟動 `.localized`,它會連接 `download.termius[.]info` 並要求用戶提升權限。若成功,便會在 `/Library/LaunchDaemons/` 寫入名為 `com.apple.xssooxxagent` 的 plist,令系統每小時執行一次 `/Users/Shared/com.apple.xssooxxagent`(即 `.localized` 的副本)。

`.localized` 會利用 `_writePlistAndStartDaemon()` 函數執行下列命令:
launchctl bootout system/com.apple.xssooxxagent;
launchctl bootstrap system/com.apple.xssooxxagent;
sleep 1
同時,惡意程式還用上已棄用的 AuthorizationExecuteWithPrivileges API 來獲取權限。

`.localized` 會檢查自己是否已複製到 `/Users/Shared/`,如否則會自動複製,並刪除舊檔。

惡意載入器與 md5 更新機制
除了建立持久化,載入器還會進行檢查及安裝程序。

`_LockManager()` 會在 `/tmp/apple-local-ipc.sock.lock` 建立鎖定檔,確保同一時間只運行一個惡意進程。若鎖定失敗,程式會自動退出。

`_checkFileAndDownloadIfNeeded()` 則負責下載、驗證和執行第二階段 payload。它會檢查 `/tmp/.fseventsd` 是否存在,如無則從 C2 下載並用硬編碼 key `my_secret_key` 解密。如有,則計算 md5 並與遠端比對,如有差異則重新下載,這既可作為自我更新機制,也能確保 payload 未被破壞或篡改。
程式碼中還留有不少疑似舊有 campaign 或早期開發遺留的 artifacts,例如 `_startBackgroundProcess()` 及 `_startLaunchDaemon`,前者未被調用,後者用舊參數 `kickstart` 而非現時的 `bootout/bootstrap`。
改良版 ZuRu 解密程序
舊版 ZuRu 用自訂 XOR 加密,JAMF 曾描述其運算方式為「對每個 byte 進行 XOR 及減法運算,key 為 0x7a,再用 0xff 做 masking」。新版則改用 key 字串 `my_secret_key`,解密流程為:加 key byte(mod 3),再 modulo 256,然後按位置減 0、1 或 2,最後再 XOR 一次。這種自家加密方法雖然能混淆,但實際安全性極低,主要用來對抗自動分析工具。

Khepri C2 Implant 的變種
從 C2 取得的 payload 為一個 174KB 的 universal Mach-O,需 macOS Sonoma 14.1 或以上,顯示攻擊者預期目標為較新系統。這個 beacon 是改良自 GitHub 上的 Khepri 開源版本,現專為 Termius 木馬而設。
Khepri 功能齊全,包括檔案傳輸、系統偵查、進程控制及遠端指令執行。其心跳頻率由 10 秒縮短至 5 秒,C2 端口設為 53(常用於 DNS),並以 `www.baidu[.]com` 作掩護,實際連接 `ctl01.termius[.]fun`(阿里雲 IP)。


SentinelOne Singularity 的防護能力
SentinelOne Singularity 能有效偵測及防禦 macOS.ZuRu。啟用 Protect 模式時,所有惡意組件都無法執行;Detect 模式下亦會即時終止相關進程並隔離惡意檔案。


總結
最新的 macOS.ZuRu 變種繼續沿用「以假亂真」的攻擊路線,專門針對開發者及 IT 專業人士常用的 macOS 工具。由早期的 Dylib 注入演進到今次直接植入 Helper app,明顯是為了繞過傳統防毒偵測。不過,從目標應用、域名命名到檔案及持久化手法,種種 TTP(技術、戰術及程序)都顯示這套攻擊模式仍然屢試不爽,尤其在缺乏現代化端點防護的環境下。
SentinelOne 用戶可高枕無憂,但其他機構則應參考下列入侵指標及技術細節加強防護。
入侵指標(Indicators of Compromise)
檔案路徑:
/Library/LaunchDaemons/com.apple.xssooxxagent.plist
/Users/Shared/com.apple.xssooxxagent
/private/tmp/Termius
/tmp/.fseventsd
/tmp/apple-local-ipc.sock.lock
檔案 SHA-1:
| SHA-1 | 名稱 | 描述 |
| — | — | — |
| a7a9b0f8cc1c89f5c195af74ce3add74733b15c0 | .fseventsd | Khepri C2 Beacon |
| ace81626924c34dfbcd9a485437cbb604e184426 | Termius Helper | Trojan Mach-O |
| de8aca685871ade8a75e4614ada219025e2d6fd7 | Termius9.5.0.dmg | Trojan Disk Image |
| fa9b89d4eb4d47d34f0f366750d55603813097c1 | .localized / Termius / com.apple.xssooxxagent | Malware Loader |
網絡連線:
http://download.termius.info/bn.log.enc
http://download.termius.info/bn.log.md5
ctl01.termius.fun
47.238.28.21
編輯評論:黑客攻擊的「專業化」與防線的轉變
今次 ZuRu 的再現,無疑反映出針對性攻擊已經進一步「專業化」。攻擊者不再單純靠「大海撈針」式的廣撒網,而是深諳開發者及 IT 專業用戶的日常工具、下載習慣及安全盲點,精心包裝木馬,甚至連數碼簽名、應用結構、更新機制都一一模仿。這種「供應鏈式」的滲透,對於企業及高階個人用戶來說,風險極高。
更值得警惕的是,攻擊者持續利用開源 C2 框架(如 Khepri),加以改裝,令攻擊更難追蹤、更易擴展。這說明黑客社群已經形成一套「模組化」的攻擊產業鏈,任何一個新漏洞或開源工具,都可能隨時被武器化。
香港及華語地區不少中小企或開發者,對於 macOS 的安全防禦仍存有「蘋果無毒」的迷思,甚至會為省錢而下載盜版軟件。今次案例正好敲響警鐘:即使是看似安全的工具,只要來源可疑或未有嚴格驗證,都可能成為黑客入侵的跳板。企業應盡快建立端點偵測及回應(EDR)能力,並加強員工網絡安全培訓,否則一旦中招,損失的不只是數據,更可能是整個企業的信譽與商業運作。
總結來說,這類針對性攻擊只會越來越多元、隱蔽和智能化,單靠傳統防毒早已不敷應用。面對「偽裝高手」如 ZuRu,唯有持續更新防護策略、提升用戶警覺,才能真正守住數碼防線。
