摘要

VanHelsing 作為一個複雜的 Ransomware-as-a-Service (RaaS) 平台出現,標誌著網路威脅環境的重大演變。該惡意軟體首次於 2025 年 3 月被觀察到,其獨特之處在於其多平台 locker,以 C++ 編寫,鎖定 Windows、Linux、BSD、ARM 和 ESXi 系統 [1] [2]。本報告提供了 VanHelsing locker 的技術剖析,重點關注其執行流程、由引數驅動的彈性,以及支撐其檔案鎖定機制的混合加密實作。該分析突顯了 Threat actor 的進階能力,包括程序優先權操作(process priority manipulation)、透過 WMI 刪除陰影複製(shadow copy),以及針對大型檔案的效能優化部分加密方案。

VanHelsing:新興 RaaS 平台的野心:跨 Windows/Linux/ESXi 的威脅分析報告 | 資訊安全新聞

1. VanHelsing RaaS 模型的簡介

VanHelsing 惡意軟體採用 RaaS 模型,這降低了網路犯罪分子的進入門檻。核心營運者管理開發、基礎設施和支付系統,而附屬組織則執行攻擊。附屬組織需支付一筆押金才能加入,並可獲得贖金支付的實質 80% 分潤 [1] [2]。這種商業模式有助於威脅的快速擴展與散布。提供給附屬組織的主要工具是 VanHelsing locker,這是一個高度可設定的二進位檔,旨在針對各種操作環境發揮最大的影響力。

2. VanHelsing Locker 的技術剖析

VanHelsing locker 是一個以 C++ 工程設計的二進位檔,著重於穩定性和效率 [1]。其執行流程的特點是幾個關鍵的初始步驟,旨在確保獨佔操作和資源優先順序。

2.1 執行流程與程序控制

一旦執行,該勒索軟體會採用一種標準技術來防止協同實例(concurrent instances),它試圖建立一個名為 "Global\\VanHelsing" 的具名 mutex [1]。這是防止多個加密程序彼此干擾可能導致的檔案損壞的關鍵步驟。

該勒索軟體也試圖提高其程序優先權,指示作業系統的排程器為加密任務分配優先資源 [1]。這種優化對於最大程度地減少 Threat actor 在受感染系統上花費的時間至關重要。

初始程序 流程可以視覺化如下:

graph TD A[Execution Start] --> B{"Mutex ''Global\\VanHelsing'' Exists?"}; B -- Yes --> C[Terminate Process]; B -- No --> D[Create Mutex]; D --> E{--Force Argument Present?}; E -- Yes --> F[Bypass Mutex Check]; E -- No --> G[Proceed with Mutex]; F --> H{--no-priority Argument Present?}; G --> H; H -- No --> I[Increase Process Priority]; H -- Yes --> J[Maintain Default Priority]; I --> K[Start Encryption/Spreading]; J --> K;

2.2 引數驅動的攻擊設定

VanHelsing 並不是一個簡單的「fire-and-forget」工具;它是為 hands-on-keyboard 攻擊設計的,其行為是透過一組廣泛的命令列引數精確控制的 [1] [2]。這種彈性讓附屬組織可以針對特定的目標環境客製化攻擊。

Argument 功能 Technical Implication
--Force 允許執行多個實例 (跳過 mutex 建立) [1]。 繞過標準的協同控制機制。
--no-priority 阻止程序提高其優先權 [1]。 用於隱蔽性或避免在關鍵系統上發生資源爭奪。
--no-admin 允許在沒有管理員權限的情況下執行 [2]。 擴大攻擊面以包含非特權使用者帳戶。
--Silent 實作兩階段加密/重新命名程序 [1] [2]。 旨在透過將加密和檔案重新命名動作分開來躲避偵測。
--spread-smb 透過 Server Message Block (SMB) 網路分享啟用散播 [1] [2]。 有助於在網路內進行橫向移動。
--skipshadow 刪除 Volume Shadow Copies (磁碟區陰影複製) [2]。 阻止受害者輕鬆復原資料。

刪除陰影複製的能力是一種標準的反復原技術。該勒索軟體透過利用 Windows Management Instrumentation (WMI) ,執行查詢來擷取和刪除 Win32_ShadowCopy 物件來達成此目的 [2]。

2.3 加密實作

該 locker 採用 混合加密方案 ,將對稱式加密的速度與非對稱式密碼學的安全性相結合 [1]。

2.3.1 密鑰交換與加密

該方案的核心依賴於二進位檔中嵌入的 Curve25519 公鑰 [1]。對於每個檔案,該勒索軟體會產生兩個暫時的、隨機的值:一個 32 位元組的 金鑰 和一個 12 位元組的 nonce。

  1. 對稱式加密: 檔案內容使用快速且安全的 ChaCha20 串流密碼配合暫時的 金鑰 和 nonce 進行加密 [1]。
  2. 非對稱式加密: 隨後使用 hardcoded Curve25519 公鑰對暫時的 金鑰 和 nonce 進行加密。這確保了只有持有對應私鑰的營運者才能解密暫時的值,進而解密檔案 [1]。

以下源自分析的程式碼片段,說明了 金鑰 生成和暫時 金鑰 的加密程序:

  1. // Code snippet illustrating key generation and encryption of ephemeral keys [1]
  2. // Note: Function names are based on reverse engineering analysis.
  3. // 1. Generate 32-byte random key and 12-byte random nonce
  4. ccRtlGenRandom_32_40EE80((int)rnd_buffer_32); // Generate 32-byte key
  5. cRtlGenRandom_40F030((int)rnd_buffer_12, 12); // Generate 12-byte nonce
  6. // 2. Encrypt the ephemeral key and nonce using the embedded Curve25519 public key
  7. // encr_rndbuf_32 and encr_rndbuff_12 hold the encrypted key and nonce
  8. key_encryption_40F130(encr_rndbuf_32, (int)rnd_buffer_32, 0x20uLL, (void *)encrypt_struct->hex_bytes);
  9. key_encryption_40F130(encr_rndbuff_12, (int)rnd_buffer_12, 0xCuLL, (void *)encrypt_struct->hex_bytes);
  10. // 3. Convert the encrypted key and nonce to hexadecimal strings for storage
  11. toHex_40EEA0((int)&hex_encr_rndbuf32, 0xA1u, (int)encr_rndbuf_32, 0x50u);
  12. toHex_40EEA0((int)&hex_encr_rndbuf12, 0x79u, (int)encr_rndbuff_12, 0x3Cu);
  13. // 4. Clear the stream buffer before writing
  14. memset(encrypted_stream, 0, sizeof(encrypted_stream));

2.3.2 加密檔案結構與部分加密

最終的加密檔案結構設計為包含解密所需的必要資訊:

---key---
$KEY_HEX
---endkey---
---nonce---
$NONCE_HEX
---endnonce---
$ENCRYPTED_CHUNKS

為了優化效能,尤其是在大型檔案上,該勒索軟體實作了 部分加密 策略 [1]。如果檔案大小超過約 1 GB ( 0x3E800000 位元組),locker 只會加密檔案內容的 前 30% [1]。對於較小的檔案,整個內容都會被加密。加密本身是以大約 1 MB ( 0x100000 位元組) 的 chunk 進行的 [1]。這種優化顯著減少了使大型資料庫或虛擬機器映像無法使用的所需時間,將速度置於完整的資料破壞之上。

部分加密的邏輯可以概念性地表示為:

  1. // Conceptual code logic for partial encryption [1]
  2. if ( file_size > 0x3E800000 ) {
  3. // File is larger than ~1GB, encrypt only the first 30%
  4. file_size_to_encrypt = (30 * file_size) / 100;
  5. // Loop through the file, encrypting in 1MB chunks
  6. do {
  7. chunk_size = 0x100000; // 1MB chunk size
  8. if ( file_size_to_encrypt < 0x100000 ) {
  9. chunk_size = file_size_to_encrypt; // Handle the final, smaller chunk
  10. }
  11. // Read chunk, encrypt chunk, write encrypted chunk...
  12. readFile_40BFA0(file_handle, read_buffer, chunk_size);
  13. file_encryption_40EC60(encrypted_chunk, read_buffer, chunk_size, ...);
  14. file_size_to_encrypt -= chunk_size;
  15. } while ( file_size_to_encrypt > 0 );
  16. } else {
  17. // Encrypt the entire file
  18. // ...
  19. }

3. Multi-Platform 能力與散播

VanHelsing 的 multi-platform 本質是其關鍵差異點,其變種不僅鎖定 Windows,還鎖定 Linux、BSD、ARM 和 ESXi 系統 [1] [2]。這種廣泛的鎖定能力允許附屬組織破壞多樣化的企業環境,包括虛擬化基礎設施。

3.1 網路散播機制

該勒索軟體包含橫向移動的機制。 --spread-smb 引數使勒索軟體能夠透過網路分享進行散播 [1]。Windows 變種透過掃描 IP 範圍以尋找 SMB port (445),使用 NetShareEnum 列舉分享,然後在遠端系統上複製和執行自身來達成此目的 [2]。注意到使用嵌入的 psexec.exe 作為潛在的散播媒介,將 locker 複製到分享為 $SHARE\\vanlocker.exe 並遠端執行它 [2]。

3.2 排除邏輯

為確保系統穩定性和保持持續性,該勒索軟體採用了穩健的排除邏輯,在加密程序期間避開關鍵系統檔案和目錄 [2]。這包括諸如 "tmp" "winnt" "temp" "Windows" 等資料夾,以及帶有 .exe .dll .sys .msi 等副檔名的檔案 [2]。這種選擇性鎖定是現代勒索軟體的常見做法,目的是防止作業系統 crash ,這將停止加密程序並阻止贖金備註的顯示。

4. 結論

VanHelsing RaaS 代表著一種高度適應性強且技術精湛的威脅。其 C++ 實作、multi-platform 支援和引數驅動的設定,展現了對營運效率和廣泛鎖定的專注。使用安全的混合加密方案 (Curve25519 和 ChaCha20) 結合針對大型檔案的部分加密等效能優化,突顯了這個 malicious payload 背後的專業開發。對其程序控制、基於 WMI 的反復原和網路散播能力的技術分析,為開發針對這種不斷演變的 RaaS 行動的穩健防禦策略提供了必要的情報。