本文是 Check Point 根據其 2022 年 7 月首次發現的一個 RokRAT 樣本來做的深入分析。
早在 2022 年 7 月,APT37(Inky Squid、RedEyes、Reaper 或 ScarCruft)就開始試驗使用超大 LNK 文件傳播 RokRAT 活動,企圖利用不受信任來源的宏發起攻擊,巧的是,同月微軟開始默認阻止跨 Office 文檔的宏。與以前一樣,攻擊的目标還是韓國的目标。
研究結果表明,用于最終加載 ROKRAT 的各種多階段感染鏈被用于其他攻擊,導緻傳播與同一攻擊者相關的其他工具。這些工具包括另一個自定義後門,GOLDBACKDOOR 和 Amadey。
在前幾年,ROKRAT 感染鏈通常涉及帶有漏洞的惡意朝鮮文字處理器(HWP,韓國流行的文檔格式)文檔或帶有宏的 Microsoft Word 文檔。雖然一些 ROKRAT 樣本仍然使用這些技術,但傳播方式上還是進行了改進,即使用僞裝成合法文檔的 LNK 文件傳播 ROKRAT。這種轉變并不是 ROKRAT 獨有的,而是代表了 2022 年非常流行的更大趨勢。
ROKRAT 的背景介紹
Talos 于 2017 年 4 月首次報道了 APT37 開發的 ROKRAT(也稱爲 DOGCALL),這個工具被用來針對韓國的政府部門,記者、活動人士和脫北者。根據最初的報告,其中一個 ROKRAT 樣本使用 Twitter 作爲其命令和控制(C&C)基礎設施,而另一個則依賴于 Yandex 和 Mediafire。後一個更接近于如今 ROKRAT 的活動方式,依賴雲文件存儲服務作爲一種 C&C 機制。
最初隻支持 Windows,多年來 ROKRAT 已經适應了其他平台,在野外發現了 macOS 和 Android 版本。macOS 版本,也稱爲 CloudMensis,于 2022 年 7 月由 ESET 首次描述。雖然 Android 版本的 ROKRAT 已經存在了很長時間,但 InterLab 和 S2W 都在 Android 上推出了一個更新版本的 ROKRAT,稱爲 RambleOn(Cumulus)。所有這些都表明,這種惡意軟件仍在叠代中。
APT37 的許多工具都是自定義編寫的工具,如 ROKRAT,包括(但不限于)最近報道的 M2RAT、Konni RAT、Chinotto 和 GOLDBACKDOOR。然而,攻擊者也會使用 Amadey 等普通惡意軟件。使用普通惡意軟件使得将攻擊歸因于特定組織變得更加困難,因爲它廣泛可用,任何人都可以獲得它。
今年 2 月,AhnLab 報告了一種名爲 Map2RAT(簡稱 M2RAT)的新 RAT。這種 RAT 利用隐寫術技巧,将可執行文件隐藏在 JPEG 文件中以逃避檢測。今年 3 月,Sekoia 和 ZScaler 都發布了 APT37 使用釣魚網站和 PowerShell 後門的報告,ZScaler 導緻了另一個名爲 Chinotto 的植入程序的傳播。
誘餌和感染鏈
在過去的四個月裏,我們觀察到多個感染鏈導緻了 ROKRAT 的傳播。在大多數情況下,LNK 文件會啓動攻擊,盡管在少數情況下,DOC 文件被用于相同的目的(以前的 ROKRAT 攻擊中的方法)。在分析 ROKRAT 感染鏈的過程中,研究人員發現了導緻 Amadey 傳播的攻擊鏈,Amadey 是一種在地下論壇上出售的商業 RAT。盡管攻擊的性質不同,但研究人員認爲所有這些攻擊都是由相同的攻擊者策劃的。
誘餌和感染鏈的時間線
誘餌 LNK 感染鏈
2022 年 4 月,Stairwell 發表了對 GOLDBACKDOOR 的詳細分析,這是一種針對韓國記者的有針對性攻擊中使用的惡意軟件。Stairwell 對利用運行 PowerShell 的大型 LNK 文件的感染鏈進行了徹底分析,導緻在釋放誘餌文檔的同時執行新發現的惡意軟件。這項技術是一個名爲 EmbeddExeLnk 的公共工具的獨特實現。
雖然最初與 GOLDBACKDOOR 有關,但對最近與 APT37 相關的誘餌的分析表明,這種技術已經成爲一種重要的方法,用于傳播與同一攻擊者相關的另一種工具,即 ROKRAT。ROKRAT 和 GOLDBACKDOOR 加載機制的實現非常相似,隻有在檢索有效負載時才能區分。
在過去的幾個月裏,研究人員能夠利用 ZIP 和 ISO 檔案中提供的這種獨特實現來識别多個誘餌。隻有其中一些誘餌被證實會導緻 ROKRAT 的傳播。所有的誘餌都以韓國國内外事務爲主題。
LNK 感染鏈分析
目前已知的所有 LNK 都會導緻幾乎相同的感染鏈。下面以 " 利比亞項目 " 中描述的一個感染爲例進行說明:
" 利比亞項目 " 誘餌的感染鏈
點擊惡意 LNK 文件會觸發 PowerShell 的執行,并啓動以下感染鏈:
1.PowerShell 從 LNK 中提取文檔文件,将其放入磁盤,然後打開它。這個文件是一個誘餌,欺騙用戶以爲他們隻是打開了一個普通的 PDF 或 HWP 文件。
2.PowerShell 從 LNK 中提取 BAT 腳本,将其放入磁盤并執行。
3.BAT 腳本執行一個新的 PowerShell 實例,該實例從 OneDrive 下載有效負載,通過将有效負載的第一個字節作爲密鑰對其進行解碼,并将其與有效負載的其餘部分進行異或。
4. 生成的有效負載以反射方式注入 PowerShell,使其作爲新線程運行。
5.shellcode 使用四字節異或密鑰對有效負載的 ROKRAT 部分進行解碼并執行它。
典型的 ROKRAT 感染鏈
ROKRAT 運營商在采取新的行爲同時,仍夾雜了一些舊習慣,比如,ROKRAT 仍然使用惡意 Word 文檔進行部署。
2022 年 12 月,有人向 VirusTotal 提交了一份惡意的 Word 文檔,命名爲 ".doc"(Case fee_Payment request.doc)。該文件本身包含一個輸入個人和銀行信息的簡短表格。然而,對該文件的仔細檢查顯示,其中提到了韓國的統一部。
一旦用戶打開惡意文檔并允許宏執行,就會觸發以下感染鏈:
1. 宏通過設置 AccessVBOM 注冊表項以加載其他代碼來檢查并确保它可以訪問 Visual Basic 項目。
2. 宏解碼一個新的 VBA 腳本,将其寫入宏中的一個新模塊,然後執行它。這是在不将任何代碼釋放到磁盤的情況下完成的。
3. 第二個 VBA 腳本運行 notepad.exe 并将 shellcode 注入其中。
4.shellcode 在 notepad.exe 中運行,并進入 OneDrive 下載 ROKRAT 有效負載并在内存中執行它。
這裏描述的感染鏈與 MalwareBytes 在 2021 年 1 月報告的非常相似,MalwareBytes 也通過将 shellcode 注入 notepad.exe 并将 RAT 加載到内存中來傳播 ROKRAT。然而,MalwareBytes 研究中描述的樣本的編譯日期是從 2019 年開始的,而 checkpoint 發現的新 ROKRAT 樣本似乎是在 2022 年 12 月 21 日編譯的,距離文件提交給 VirusTotal 隻有六天時間。
此外,在 2023 年 4 月發現的另一個文件似乎是同一感染鏈的一部分,隻是這次注入的目标進程是 mspaint.exe,該文件以朝鮮的核武器爲主題。不幸的是,在我們進行分析時,URL 不再響應下載負載的請求。但是,這份文件很有可能也是爲了傳播 ROKRAT。
與 Amadey 的關聯
2022 年 11 月初,一個名爲 securityMail.zip 的文件被提交給了 VirusTotal。這個 ZIP 包含兩個 LNK,它們的大小都不到 5MB,令人懷疑。PowerShell 命令在兩個 LNK 中的實現是唯一的,并且僅與 ROKRAT 和 GOLDBACKDOOR LNK 感染重疊。然而,這個特定的感染鏈最終傳播了 Amadey,這是一種可在網絡犯罪論壇上出售的惡意軟件。Amadey 過去曾被認爲是 Konni 開發的,Konni 組織與 APT37 的背景類似。
" 安全郵件 " 誘餌的感染鏈,打開這些 LNK 中的任何一個都會産生惡意流程:
1.PowerShell 命令從 LNK 中提取一個誘餌 HTML 文件,并将其放入磁盤,其方式與 ROKRAT 感染鏈類似:
2. 這個 PowerShell 還從包含 DLL 的 LNK 中提取一個 ZIP 文件。然後将 DLL 作爲 mfc100.dll 放入磁盤。
3.PowerShell 最終也從 LNK 中提取了一個 BAT 腳本,将其放到磁盤上并執行。
4.BAT 腳本運行帶有 rundll32.exe 的 DLL 并删除自身。
對 DLL 文件的初步分析顯示,它包含了商業代碼保護解決方案 Themida。在分析了它執行的内存轉儲後,我們能夠确認這實際上是 Amadey。誘餌 HTML 文件中包含一個僞造的 Kakao 銀行的登錄頁面,Kakao 是韓國一家受歡迎的銀行。對 HTML 的進一步分析表明,它不是用于密碼釣魚,而是用來隐藏攻擊者的意圖。
僞造 Kakao 銀行登錄頁面
ROKRAT 技術分析
ROKRAT 隻是 APT37 使用的許多自定義工具之一,但它絕對是通用且強大的。ROKRAT 主要側重于運行額外的有效負載和大量的數據竊取。它的 C&C 功能依賴于雲基礎設施,包括 DropBox、pCloud、Yandex cloud 和 OneDrive。ROKRAT 還收集有關計算機的信息,以防止被其他競争者再次感染。
雖然在過去幾年中,ROKRAT 并沒有發生重大變化,但其破壞力依然不容小觑,這可以歸因于它巧妙地使用内存執行,将 C&C 通信僞裝成潛在的合法雲通信,以及額外的加密層,以阻礙網絡分析和逃避網絡簽名。因此,最近發表的關于 ROKRAT 的文章并不多。
通用惡意軟件結構
ROKRAT 的大多數樣本都有一個非常簡單的 WinMain 函數。到目前爲止分析的所有樣本都包含一個數據收集功能(CollectMachineData,如下圖所示),該功能在主 RAT 線程(MainRATThread)執行之前執行。這個線程初始化 RAT 并運行一個循環,以嘗試從 C&C 獲取命令,然後解析并執行它們。
WinMain 函數中嵌入了兩個額外的功能,我們隻在樣本的一個子集中觀察到了這兩個功能。第一個檢查 RAT 是否能夠寫入 TEMP 目錄(CheckTemp,如下圖所示)。第二個創建了一個線程(KillCertainProcessesThread),用于停止與以前利用 Hancom Office 漏洞的感染載體相關的某些進程。
ROKRAT 中 WinMain 函數的示例
受害目标分析
ROKRAT 在執行時調用的第一個函數旨在收集有關受感染計算機的數據。在初始攻擊階段,這可能有助于攻擊者區分這是否是一個期望的目标,然後采取相應的行動。
在這個函數(以及許多其他函數)中,ROKRAT 使用加密字符串來防止靜态分析看不到使用的一些技術。此處收集的信息包括程序是否在 WOW64 上運行(表示 32 位應用程序在 64 位窗口上運行)、vmtoolsd.exe 的版本(VMWare Tools Daemon,如果已安裝)、注冊表中的 SMBIOS 數據以及注冊表中的系統 BIOS 版本。
RAT 還收集用戶名、計算機名和 RAT 正在執行的可執行文件的完整路徑。後者很重要,因爲感染鏈通常涉及将 ROKRAT PE 文件注入現有進程的内存。換言之,這使攻擊者能夠查看 ROKRAT 是否在預期的進程中執行,如 powershell.exe 或 notepad.exe。最後,該函數檢查可執行文件是否有權在 C:Windows 下創建用于寫入的文件。
CollectMachineData 收集有關受感染計算機的各種信息
雖然在上述函數中收集了大量目标的數據,但在 ROKRAT 開始接受命令之前,還有另一個數據收集函數在主 RAT 線程的上下文中運行。第二個函數檢查調用 IsDebuggerPresent API,将結果存儲爲字符(0 或 1)。此外,它還調用了一個函數來獲取計算機的屏幕截圖。
将執行在主線程中執行的數據收集,每次 ROKRAT 嘗試獲取命令時發送收集的數據。
在同一函數中,一些示例還檢查是否有一個名爲 360Tray.exe 的正在運行的進程,該進程是名爲 360 Total Security 的防病毒軟件的一部分。結果存儲在一個全局布爾變量中,并在用于執行 shellcode 有效負載的單獨函數中訪問。有趣的是,如果找到了進程,ROKRAT 會将等待 shellcode 完成運行的超時時間從 24 秒增加到 48 秒。如果 shellcode 運行超過超時時間,并且之前未檢測到 360Tray.exe,ROKRAT 将嘗試終止 shellcode 線程。
如前所述,一些 ROKRAT 示例執行一個名爲 KillCertainProcessesThread 的線程。這個線程阻止了兩個進程:gbb.exe 和 gswin32c.exe,它們負責解析 Hancom Office 中的 postscript 數據。過去,ROKRAT 樣本來自惡意的 HWP 文檔,這些文檔利用這些進程來獲取代碼執行。最有可能的是,這是在試圖清除之前活動中的任何利用痕迹時留下的代碼。
ROKRAT 沒有爲這些進程名稱使用硬編碼或加密的字符串,而是包含一個簡單的哈希算法,該算法基于整數值确定進程名稱。它的工作方式如下:
C&C 通信
在我們分析的每個 ROKRAT 樣本中,惡意軟件配置包含一個代表雲基礎設施的 ID 号,以及使用它的 API 令牌。ID 号可以具有以下值,以對應不同的雲提供商,以及允許 RAT 與本地計算機通信的測試模式:
1 - 本地計算機(無雲)
3 - Dropbox
4 - pCloud
5 - Yandex
雲存儲提供商的 Switch case 語句
進一步的分析表明,通常有兩種 C&C 配置,一種用作主要基礎設施,另一種用作備份。在我們發現的最新樣本中,主要的 C&C 是 pCloud,次要的是 Yandex Cloud。
ROKRAT 從初始化令牌開始,然後從 C&C 獲取文件夾内容,以确保它具有訪問權限并且令牌有效:
列出 pCloud 中文件夾目錄的 GET 請求标頭
ROKRAT 使用的文件的名稱是基于 GetTickCount API 和 rand API 的随機值生成的,并以執行時間作爲依據。
ROKRAT 向服務器上傳一個文件,其中包含有關受害計算機的以下信息:
硬編碼值 0xBAADFEDE –稍後在 C&C 通信中使用;
IsDebuggerPresent 值;
之前保存到以下路徑的惡意軟件的屏幕截圖:%TEMP%
進程數據—每個工作進程的 pid:
Tick Count;
XOR 密鑰–用于解密 C&C 中的命令和有效負載;
生成的文件名 - 稍後用于下載和執行某些命令中的有效負載;
IsWow64Process 标識;
Windows 版本;
計算機名;
用戶名;
計算機類型—通過查詢 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesmssmbiosData 下的 SMBiosData 注冊表值獲得;
VMware 工具版本數據;
系統 BIOS 版本;
爲了進一步隐藏其蹤迹,ROKRAT 将收集到的有關計算機的數據标記爲 MP3:
将從受害計算機收集的加密數據發送到 pCloud 的 POST 請求标頭
首先,使用一個随機的四字節密鑰對數據進行異或運算。由于這個原因,數據以硬編碼的四字節值 0xBAADFEDE 開始。由于攻擊者知道硬編碼的值,他們可以通過使用 0xBAADFEDE 對異或數據的前四個字節進行異或來獲得異或密鑰。然後用 AES-CBC 對異或數據進行加密。最後,使用硬編碼的 RSA 公鑰對 AES 密鑰進行加密,以确保隻能使用 RSA 私鑰對有效負載進行解密。
盡管 C&C 通信已經在 HTTPS 流量中加密,但 ROKRAT 通過使用 AES 加密上傳到 C&C 的數據進一步進行了加密。當惡意軟件初始化時,它會生成兩個随機的 16 字節值,作爲用于加密命令和有效負載的 AES 密鑰的基礎。惡意軟件還附帶了一個硬編碼的 16 字節值,然後對兩個随機值進行異或。結果是兩個 AES 密鑰,一個用于加密和解密命令,另一個用于加密和解密有效負載。
ROKRAT 命令
每個命令都由一個字符标識。有些命令采用參數,并且這些參數是在命令 ID 字符之後提供的。在識别出正确的命令後,代碼會根據命令的類型解析參數。下表列出了研究人員在 ROKRAT 中發現的命令,以及它們預期的參數和操作:
在收到清理命令(d)後,ROKRAT 運行以下命令來删除惡意軟件最初未使用的持久性機制。它們可能與感染後的活動有關。
在接收到命令 1-4 後,ROKRAT 創建一個名爲 out.txt 的文件,其中包含有關系統的信息:
總結
我們介紹了臭名昭著的 APT37 的最新活動,介紹了幾種不同的感染鏈,其中大多數導緻 ROKRAT 有效負載。這些感染鏈表明,自 2022 年以來,該組織已經不再嚴重依賴惡意文件來傳播惡意軟件,而是開始将有效負載隐藏在超大的 LNK 文件中。這種方法可以通過簡單的點擊觸發同樣有效的感染鏈,這比 n 天漏洞或需要額外點擊才能啓動的 Office 宏更可靠。
雖然 ROKRAT 功能最近沒有太大變化,但用于傳播它的加載程序确實發生了變化。事實上,這是我們第一次看到 ROKRAT 帶有 LNK 感染鏈,類似于用于傳播 GOLDBACKDOOR 的 LNK 感染鏈。值得注意的是,這并不意味着 APT37 不再使用惡意文檔,因爲研究人員在 2023 年 4 月就發現了此類使用的證據。
們還分析了幾個新的 ROKRAT 樣本,并介紹了它接受的命令,這有助于我們了解惡意軟件的内部機制和功能。