
GPU 科技對抗勒索金鑰:
成功破解 Akira 的祕密
本文詳細介紹如何在不支付贖金的情況下解密由 Akira 勒索軟體的 Linux/ESXI 變種從 2024 年開始加密的檔案。研究人員對勒索軟體進行了逆向工程,發現它使用奈秒時間戳記作為金鑰生成的 Seed ,以及涉及 KCipher2 和 Chacha8 演算法的複雜加密過程。克服了 VMFS 檔案系統限制和多執行緒加密等挑戰,並開發了一個 GPU 加速的暴力破解工具來識別正確的時間戳記並恢復加密金鑰。文章進一步解釋了加密的技術細節、識別 VMware 檔案中明文的過程以及其他人嘗試資料復原的實際步驟,包括獲取時間戳記、密文和利用雲端 GPU 服務。

了解 Akira 勒索軟體變體
值得注意的是,多種勒索軟體都被命名為 Akira,並且目前有多個版本處於活躍狀態。本報告中討論的特定變體已於 2023 年底至今觀察到。此版本與早期版本(2023 年中之前)不同,早期版本包含一個允許 Avast 建立解密器的錯誤。攻擊者此後更新了他們的加密,預計他們可能會在本文發布後再次這樣做。 Akira 勒索軟體的惡意軟體樣本(雜湊值)可以在網路上找到。與所述恢復工作相關的樣本被確定為 Linux V3。
暴力破解法:一線希望
研究人員最初拒絕了勒索軟體復原請求,但經過快速分析後發現這個特殊案例可能可以解決。讓暴力破解看起來可行的關鍵觀察結果是:
- 勒索軟體使用當前時間(以奈秒為單位)作為其隨機亂數產生器(Random number generator)的 Seed 。
- Linux 機器通常以奈秒的解析度記錄檔案修改時間。
- 受害者提供的部分日誌以毫秒為精確度顯示了勒索軟體的執行時間。
- 該惡意軟體使用四個不同的時間點(時間戳記)以奈秒解析度產生密鑰。前兩個和後兩個是相關的,使得直接暴力破解變得複雜。
- 金鑰產生涉及每個時間戳記的 1,500 回合的 SHA-256。
- 每個加密檔案都有一個唯一的加密金鑰。
- VMware VMFS 檔案系統(在 ESXi 環境中很常見)僅以秒級精確度記錄檔案修改時間。
- ESXi 主機日誌可能具有不同的時間戳記精確度(秒或毫秒級)。
- 勒索軟體在執行過程中使用多個執行緒。
- 檔案修改時間反映檔案關閉的時間,而不是檔案開啟進行寫入的時間。
然而,由於以下幾個因素,該過程比最初預想的要複雜得多:
逆向工程加密流程
- Akira 勒索軟體二進位檔案是用 C++ 編寫的,但未經混淆,因此可以進行逆向工程。存在明文字串和錯誤訊息表示使用了 Nettle 函式庫,有助於理解程式碼。
- 勒索軟體的隨機亂數產生使用Yarrow256演算法,以當前奈秒時間戳記為 Seed 。 generate_random 函數被呼叫四次,建立四個用於產生加密金鑰的唯一時間戳記(t1、t2、t3、t4)。然後,這些金鑰作為尾部保存在每個加密檔案的末尾,使用 RSA-4096 加密,並使用 PKCS#11 padding。
- 加密過程將檔案分成多個區塊,並根據勒索軟體的 -n 參數對每個區塊的一定百分比進行加密。在每個區塊內:
- 前 0xFFFF(65,535)個位元組使用 KCipher2 加密。
- 剩餘位元組使用 Chacha8(8 輪變體,而不是有時誤報的 Chacha20)加密。
先前威脅的迴響:MassLogger
復原方法的核心在於強制時間戳記以重新產生加密金鑰。方法最初關注的是 KCipher2 金鑰,因為這些金鑰甚至可以用於小檔案。該策略包括:
- 1.產生兩個時間戳(t3 和 t4)。
- 2.將這些時間戳記轉換為 Seed ,並使用勒索軟體的演算法產生隨機位元組。
- 3.使用這些位元組作為 KCipher2 金鑰和初始化向量 (IV)。
- 4.加密已知明文(檔案的前 8 個位元組)並將結果與加密檔案中已知的密文進行比較。
識別明文和加密時間
成功的暴力破解需要知道加密檔案中的純文字樣本。對於 VMware 環境,關鍵明文包括:
- Flat-VMDK 檔案(原始磁碟映像):前 8 個位元組取決於作業系統的 Bootloader。可以從部分可讀的 VMX 檔案(「guestOS」設定)中辨識作業系統。由於分區通常較晚開始,因此位置 65,535 處的位元組通常為零。
- Sesparse檔案(快照檔案):檔頭為0x00000000cafebabe,位置65535處的位元組常為0x0。
- 其他檔案:NVRAM 檔案、VMDK 描述檔、VMX 檔案和 VMware 日誌檔案具有可識別的明文簽名,可供使用。
- ESXi 日誌(shell.log):記錄執行惡意軟體所使用的指令,提供起始時間戳記(精確到秒或毫秒)。
- 檔案系統時間戳記(修改時間):雖然 ESXi 僅提供秒級精度,但早期加密的小檔案可能具有類似的時間戳記。由於多執行緒的原因,一個檔案的加密開始時間通常接近先前處理的檔案的修改時間。
確定加密時間戳記對於縮小暴力搜尋空間至關重要。資訊來源包括:
克服暴力破解挑戰和優化
- 強制執行一秒內所有可能的奈秒對(10 億個值)會產生天文數字的可能性(兩個時間戳記為 500 千萬億)。優化至關重要:
- 對 CPU 進行的初步可行性檢查表明,將 10 億個時間戳記轉換為隨機位元組大約需要 3 個小時。 GPU 加速顯著將此時間縮短至 6 分鐘以內。
- 由於多執行緒和系統 Payload,不同時間戳記(t3和t4)的產生之間的時間差並不是固定的。對受感染硬體進行的測試表明,典型的偏移範圍為 200 萬至 400 萬納秒,變化範圍為 150 萬至 500 萬納秒。
- 暴力破解器重點將用 KCipher2 加密檔案的前 8 個位元組與已知明文進行匹配。
- 研究人員實現了基於 CUDA 的暴力破解程序,並面臨以下挑戰:
- ChatGPT 移植的初始程式碼 (Initial code) 在常數表 (Constant table) 中存在錯誤。
- 效能最初令人失望(每秒約 6000 萬次加密)。
- 透過手動優化實現了顯著的效能提升:
- 僅關注第一個區塊進行暴力破解。
- 簡化程式碼以僅加密零區塊 (Blocks of Zeroes)。
- 忽略前 8 個位元組以外的不必要的輸出。
- 利用 GPU 上的共享記憶體更快存取常數資料。
- 直接在 GPU 上執行匹配過程,以避免記憶體向 CPU 的緩慢傳輸。
- 大量檢查並策略性地使用cudaDeviceSynchronize() 來平衡效能和準確性。
- 優化循環實作以減少核心啟動開銷。
最終優化的程式碼在 RTX 3090 GPU 上實現了每秒約 15 億次 KCipher2加密 。使用單一偏移測試 10 億個值大約需要 0.7 秒。使用觀察到的偏移範圍進行暴力破解在單一 GPU 上可能需要幾天時間,但使用多個 GPU 可以顯著減少時間(例如,使用 16 個 RTX 3090 大約需要 1 天)。 RTX 4090 GPU 提供更好的效能。
受害者的實際考慮
對於此Akira 勒索軟體變種的受害者,需要執行以下步驟才能進行恢復:
- 在進行任何修改之前,使用 stat 或 find 等工具取得加密檔案的時間戳記。 shell.log檔案可以幫助決定惡意軟體的初始執行時間。
- 取得前面所述的各種檔案類型的密文和相應的明文樣本。這需要了解受影響系統的設定(作業系統、已安裝的軟體等)。
- 測量伺服器速度來估計暴力破解器的適當偏移範圍。我們提供了惡意軟體的修補版本來協助解決此問題。
- 從 Runpod 或 Vast.ai 等雲端供應商租用 GPU,或使用本機硬體。 Runpod 提供了更簡單的設定,而 Vast.ai 可能更具成本效益,但可靠性可能較低。
- 根據收集的資料建立設定檔案,從而劃分強力工作。
- 使用提供的程式碼和 GPU 資源執行 KCipher2 暴力破解。
- 如果對較大的檔案有需要,請使用上一個步驟中找到的 t3 時間戳記來執行 Chacha8 暴力破解。
- 使用恢復的時間戳記(t1、t2、t3、t4)和提供的解密器解密檔案。解密器中Chacha8加密的百分比可能需要根據攻擊者的-n參數進行調整。
以上所提供的程式碼被描述為實驗性的,可能需要技術專長才能有效使用。管理多個 GPU 通常需要 shell Script 和不同的監控解決方案。
結論
總而言之,文章詳細介紹了在不支付贖金的情況下解密由Akira 勒索軟體 (2024) 的特定 Linux/ESXI 變體加密的檔案的成功嘗試,該嘗試透過逆向工程和針對勒索軟體基於時間戳記的 Seed 機制的 GPU 加速暴力攻擊實現。然而,這種方法非常特殊,技術要求高,需要精確的檔案時間戳記、已知的明文、大量的運算資源(租用的 GPU)和熟練的管理員才能執行。雖然這給該特定變體的受害者帶來了一線希望,但它並不是一個通用的解決方案,因為攻擊者可能會調整他們的加密方式,並且提供的程式碼是實驗性的。因此,儘管取得了這一顯著成就,但大多數情況下,沒有密鑰的勒索軟體恢復仍然極其困難。