Jump to content

vilerat_featured-1200x600.jpg

早在2020年8月下旬,就有研究人員發布了DeathStalker的活動報告,包括Janicab、Evilnum和PowerSing活動。同時,在2020年8月,研究人員還首次發布了一份關於VileRAT的私人報告。 VileRAT是一種Python植入程序,是專門針對外彙和加密貨幣交易公司一種高度複雜的攻擊活動,其幕後攻擊者就是DeathStalker。

自2020年6月首次被發現以來,DeathStalker確實不斷利用和更新其VileRAT工具鏈來對付相同類型的目標。而且DeathStalker最近可能會加大力度使用此工具鏈來破壞目標。自2022年3月以來,研究人員已經識別出更多與VileRAT相關的惡意文件和新基礎設施的示例,這可能是攻擊嘗試增加的徵兆。

VileRAT的初始攻擊和工具集介紹早在2020年夏天,DeathStalker的VileRAT的攻擊就包括發送給外匯公司的魚叉式網絡釣魚電子郵件。如果目標上鉤,假冒的角色會在某個時候根據請求提供指向託管在GoogleDrive上的惡意文件的鏈接(偽裝成PDF或ZIP存檔的Windows快捷方式文件),作為身份證明文件,然後,惡意鏈接將觸發任意系統命令的執行,以釋放無害的誘餌文檔,以及我們稱為VileLoader的惡意且非常複雜的二進制加載程序。

至少從2021年末開始,攻擊技術略有變化,但最初的攻擊媒介仍然是惡意消息:通過電子郵件向目標發送Word文檔。 2022年7月,攻擊者利用嵌入在目標公司公共網站中的聊天木馬向目標發送惡意DOCX。

1.png

惡意DOCX的釣魚消息

DOCX文檔經常使用“合規性”或“投訴”關鍵字來命名,這表明攻擊者正在回答識別請求或表達某個問題作為發送它們的理由。

至少從2021年底開始,最初的攻擊和工具集部署如下圖所示。

2.png

VileRAT攻擊和工具集概述

秘密執行VileDropper最初的DOCX攻擊文檔本身是無害的,但它包含指向另一個惡意和啟用宏的DOTM文檔的鏈接作為“遠程模板”。打開DOCX時,Word會自動下載這些DOTM文件,如果收件人啟用了執行,則會觸發其嵌入的宏。

3.png

DOCX中包含的惡意遠程模板

惡意DOTM遠程模板利用VBAstomping技術來隱藏嵌入式宏的代碼。 VBAstomping使可編輯的VBA源代碼(即宏的可見代碼)不同與實際執行的代碼。這是可能的,因為可編輯源代碼和被稱為p-code的經過轉換的內部版本都嵌入在啟用宏的文檔中。由於使用了VBAstomping,將要執行的真正宏代碼對標準工具(MicrosoftWord的宏編輯工具以及OLETools)是隱藏的。

這種技術有一個嚴重的限制:隱藏的宏(即內部p代碼)只有在啟用宏的文檔使用生成它的相同Office版本打開時才能執行。否則,隱藏的宏將無法運行,而將執行可見的宏。在最後一種情況下,DeathStalker確保它會向用戶彈出一條消息。但最重要的是,DeathStalker確保將多個攻擊文檔變體傳播給目標,每個變體都針對特定的Office版本進行準備。

4.jpg

惡意DOTM遠程模板中的VBAstomping失敗

在任何情況下,可見和隱藏的宏都會下載一張圖片來取代感染文檔中的社會工程消息,並欺騙讀者相信某些事情失敗了。

5.png

執行宏時下載的圖像示例

然而,在後台,如果VBAstomping有效,嵌入DOTM的宏會使用WMI靜默收集有關安裝在目標計算機上的安全產品的信息,將它們發送到命令和控制(C2)服務器,解碼並釋放文件,然後最終執行我們稱為VileDropper的惡意混淆JavaScript(JS)後門。

嵌入DOTM的宏本身已經揭示了一些有趣且具體的技術。它被輕微混淆,因為大多數文本字符串都是XOR編碼的,其密碼源自一個句子,例如,“OperatesCatholicsmalltownspueblosTwoof”。

6.png

DOTM嵌入宏中的XOR解碼函數

XOR解碼算法看起來非常接近過去在PowerPepper工具鏈的VBS加載程序腳本中使用的算法,而且看起來合法的函數名也讓人想起PowerPepper宏中使用的函數名,例如'insert_table_of_figures','change_highlight_color'等。

7.png

PowerPepperVBS加載程序中的XOR解碼函數(MD5DB6D1F6AB887383782E4E3D6E4AACDD0)

嵌入DOTM的宏從編碼數據中解碼並刪除兩個文件(在“%APPDATA%”文件夾中:“Redist.txt”和“ThirdPartyNotice.txt”,或“pattern.txt”和“changelog.txt”)存儲在不可見的TextBox表單中。利用Office對象屬性作為隱藏數據源也是之前採用的技術。

8.png

用作惡意DOTM文檔中數據存儲的TextBox表單,如Microsoft的VBA編輯器所示

另一個值得注意的特性是,嵌入DOTM的宏通過向固定的C2URL發送HTTPGET請求來指示執行過程中的進展或錯誤。有趣的是,VBA宏中的所有HTTP請求都是使用遠程圖片插入函數觸發的。

9.png

嵌入DOTM的宏利用“AddPicture”作為Web客戶端

在任何情況下,嵌入DOTM的宏最終都會觸發VileDropper的執行,使用“WScript”解釋器的重命名副本(“%APPDATA%”文件夾中的“msdcat.exe”或“msgmft.exe”),使用如下命令作為:

10.png

“changelog.txt”是VileDropper,“91”是VileDropper用來解碼異或數據的密碼的一部分,“pattern.txt”是一個包含VileLoader的編碼包。

VileDropper:一個過度混淆的任務調度器在DeathStalker錯綜複雜的VileRAT攻擊鏈中還有一個VileDropper。它是一個混淆的JavaScript文件,主要釋放和調度下一階段的執行:VileLoader。

11.png

VileDropper代碼的原始形式

第一次運行VileDropper至少需要兩個參數,第三個參數可以用作觸發特定環境執行變化的標誌,具體取決於安裝在目標計算機上的安全產品:

第一個是部分密碼(用於解碼XOR編碼的數據),第二個是一個編碼的有效負載文件的路徑(包含VileLoader及其配套的shellcode)。

VileDropper還會檢查它的解釋器和文件名,如果它沒有按計劃調用,則立即停止執行,這可能是為了規避沙箱檢測:

12.png

VileDropper中的反混淆執行檢查

VileDropper的確切執行流程取決於目標計算機上安裝的安全產品,但大多數時候,它將自己複製到另一個文件,重新啟動自己,並刪除其原始副本。在執行VileDropper期間:

1.收集有關目標環境的附加數據(使用WMI)以及生成目標標識符並將它們發送到C2服務器;

2.解碼並釋放VileLoader及其編碼的結果shellcode。文件名和位置會因示例而異,但他們被放在一個看似合法的公共文件夾“%APPDATA%”(例如,“exe”和“dev0Y11ZF.tmp”在“%APPDATA%\Microsoft\PrinterSettings\Printers\”)下。

3.安排一個任務在35到65秒後運行VileLoader,之後每3小時45分鐘運行一次。

使用預設的User-Agent(C2的URL和User-Agent的變化取決於VileDropper的示例),VileDropper使用一個HTTPGET請求將數據發送到C2服務器到一個固定的URL(例如,“hxxp://hubflash[.]co/admin/auth.php”)。有用的信息被存儲為一個JSON項,然後該文檔被xor編碼、base64編碼、url編碼,並被設置為HTTP請求中的cookie值:

JSON 項和內容(JSON 值)如下:

1.u,目標標識符:標識符是目標登錄(%USERNAME% 環境變量)和計算機UUID(在WMI 查詢的第一個結果中獲得的類似UUID 的自定義表示形式:SELECT UUID FROM Win32_ComputerSystemProduct)。然後這個類似UUID 的值是base64 編碼和URL 編碼的。由於標識符生成邏輯的固定長度和填充,標識符的最終形式總是48 個字符長。

2.d,一個硬編碼的VileDropper 標識符,它可能指定一個活動或版本(例如,“9745B355”)。

3.a,安裝在目標計算機上的安全產品(WMI 中的AntiVirusProduct)名稱列表,以豎線符號(|) 分隔,然後是XORed、base64 編碼和URL 編碼。

4.n,目標的完全限定登錄,作為“%USERDOMAIN%\%USERNAME%”的shell擴展,然後進行異或、base64 編碼和URL 編碼。

5.w ,目標的操作系統版本,從WMI 查詢SELECT Version FROM Win32_OperatingSystem 返回,然後是base64 編碼和URL 編碼。

由VileDropper調度的任務(其名稱因樣例而異,如“CDS同步”或“UpdateModel任務”)會觸發以下類型的執行命令:

14.png

命令行中方括號之間的字符(例如[u])指定相應JSON項的內容,即[u]是編碼的目標標識符。

在繼續討論VileLoader之前,請注意VileDropper使用XOR編碼方案來保護髮送到C2服務器的數據,因為類似的方案將在以後使用。該算法生成的數據塊佈局如下,有時還會進一步進行base64編碼和URL編碼:

類型一:

15.png

生成的blob是自給自足的,並且可以由接收者解碼,而無需訪問預共享密鑰。在VileDropper中,作為JavaScript混淆的一部分編碼的字符串受益於額外的異或:嵌入數據blob中的異或密鑰還使用特定於腳本的固定密碼進行了異或,此固定密碼的一部分被傳遞給VileDropper在攻擊鏈中的前一個DOTM宏執行的命令行上,另一部分在VileDropper中硬編碼。

後來,VileLoader和VileRAT使用該算法的其他變體。

類型二:

16.png

類型三:

17.png

類型四:

18.png

VileLoader:一個多階段植入程序下載器VileLoader它自2020年第2季度就被公佈,首次公開記錄為dddp.exe,但此後一直在不斷更新和維護,並且在撰寫本文時仍然部署在VileDropper上。 VileLoader的主要目標是從C2服務器下載並執行額外的有效負載。雖然我們只觀察到它觸發了VileRAT的執行,但加載程序在技術上可以下載並執行其他植入程序。

最近的VileLoader示例是由一個二進制可執行文件(第1階段)和一個編碼的配套shellcode文件(第2階段)組成。以前的VileLoader示例通常將shellcode直接嵌入到二進制可執行文件中,並將呈現為單個整體文件。

第1階段:修改二進制解包器VileLoader最初是作為二進制可執行文件呈現的,它確保第1階段執行。這個二進製文件始終是合法的,被攻擊者精心修改以集成惡意解包器類型的有效負載。因此,從快速自動靜態代碼分析的角度來看,二進製文件可能看起來是合法的,它包含合法應用程序的所有代碼,但不會按預期工作。這個“解包器”階段旨在解碼、加載和執行內存中的第2階段。

VileLoader的工作流程從等待17秒開始。然後它解析命令行參數。命令行必須至少包含五個參數,否則VileLoader會終止執行。在實踐中,VileDropper通常會向VileLoader提供七個參數,正如我們之前所描述的。 VileLoader然後打開其編碼的附帶的shellcode文件。其名稱作為第二個參數傳遞給VileLoader,例如,“devENX1C6SS.tmp”,使用第二個類型的XOR算法讀取並解碼它,將去混淆數據映射到一個區域中讀取、寫入和執行(RWX)權限,並通過啟動新線程來運行下一階段(第2階段)。

VileLoader的第1階段包含非常獨特的“簽名”技術,自我們在2020年第二季度分析的第一個示例以來一直很穩定:

利用“Sleep”和“GetTickCount”Windows API函數來生成隨機的等待延遲。這些函數以一種不尋常的方式解析:通過從當前二進制映像的開頭引用硬編碼偏移量,這些偏移量直接指向合法可執行文件的導入地址表(IAT)中的條目;

VileLoader的編碼附帶的shellcode文件的解包和加載利用了多個自定義系統調用,這些調用類似於針對不同Windows版本的低級WindowsAPI函數(NTDLL):NtOpenFile、NtReadFile、NtAllocateVirtualMemory、NtCreateThreadEx和NtWaitForSingleObject。

19.png

VileLoader的第1階段自定義系統調用

然而,雖然舊示例通過解析和調用專用WindowsAPI函數(例如“GetCommandLineW”)來解析命令行參數,但最近的示例直接從它們自己的PEB(進程環境塊)結構中讀取此信息。這樣做可能是為了更好地繞過對某些安全解決方案的檢測。

第2階段:內存下載器第2階段的內容從VileLoader的編碼附帶的shellcode文件中提取,並由VileLoader的第1階段在內存中的新線程中運行。從數據的角度來看,第2階段的shellcode是一個PE二進製文件,它的標頭被去掉並嵌入了額外的編碼數據。

第2階段首先從其本身的內容中解碼(使用第三類XOR算法)所需的數據。一些數據被解碼為使用djb2算法生成的哈希值。這些哈希值反過來用於通過自定義IAT解析所需的函數導入:加載所需的庫,解析它們的導出表,使用djb2對導出的函數名稱進行哈希,並將哈希值與從內部數據解碼的哈希值進行比較。第2階段繼續創建一個互斥鎖,其名稱自2020年第二季度以來沒變過,與VileRAT中的相同(“Global\wU3aqu1t2y8uN”)。

最後,VileLoader的第2階段構建一個HTTPGET請求,用於下載植入程序包。在較早的VileLoader示例中,下載器使用瞭如下所示的一個靜態URL:

20.png

唯一的規避嘗試是在四個固定列表中隨機選擇一個HTTPUser-Agent標頭值。 VileLoader使用目標系統的正常運行時間作為“隨機性”的來源。在最近的示例中,開發人員試圖改進這些規避技術,HTTP請求現在看起來如下所示:

21.png

現在,所有以紅色著色的值都是從從第2階段內容解碼的硬編碼列表中隨機選擇的(使用C類XOR算法)。加密的blob(cookie值)最初是一個JSON字典,使用RC4算法加密(使用密鑰“BDDE96D29C68EE064964D1E58A860512B09A50004EF2E4925C76ABFC9023DFC6”,從第2階段內容解碼)、異或(使用B型異或算法)、base64編碼和URL編碼。實際的JSON內容與VileDropper發送到C2服務器的內容非常相似:

22.png

然後,C2服務器在HTTP響應正文中進行了響應,並使用以下其中一個指令:

什麼都不做:答案是四個空字節;

植入包:答案是要解析的編碼植入包(見下文);

發送截圖:答案是一個值為“1”的字節,後面是三個空字節;

在較早的版本中,VileLoader的第2階段並沒有嵌入截圖功能,但是VileRAT實現了截圖功能。

如果C2服務器使用植入程序包進行應答,它會發送一個第四類的異或blob。生成的數據使用LZMA1算法進一步解壓縮,並包含一個或多個帶有以下附加元數據的“文件”:

一個CSIDL值,表示必須將文件釋放的根文件夾(使用“SHGetFolderPathW”WindowsAPI函數解析);

子目錄名稱;

一個文件名;

如果要安排文件執行,則為任務名稱;

如果要執行文件,則為命令行參數。

如果在C2服務器響應數據中設置了特定標誌,VileLoader會為最後放置的文件創建一個Windows計劃任務以設置其持久性。該任務是使用ITaskService接口創建的。最後一個被刪除的文件也會使用“CreateProcessW”Windows API函數立即

0 Comments

Recommended Comments

There are no comments to display.

Guest
Add a comment...