Jump to content

PA-Pensive-Ursa-Centre.jpg

在追踪Pensive Ursa(又名Turla, Uroburos)的迭代中,Unit 42的研究人員發現了Kazuar一個新的升級變體——一個先進而隱秘的.NET後門,Pensive Ursa通常將其用作第二級有效負載。

“Pensive Ursa”是一個總部位於俄羅斯的攻擊組織,至少從2004年開始活動,與俄羅斯聯邦安全局(FSB)有聯繫。

烏克蘭CERT在2023年7月報告說,這個版本的Kazuar是針對烏克蘭國防部門的,背後攻擊組織的目標是敏感數據,比如Signal消息、源代碼控制和雲平台數據。

自從Unit 42在2017年發現Kazuar以來,研究人員只在野外看到過幾次,主要針對歐洲政府和軍事部門的組織。由於代碼相似,Sunburst後門與Kazuar聯繫在一起,這表明了它非常複雜。自2020年底以來,研究人員沒有在野外看到新的Kazuar樣本,但有報導稱Kazuar正在不斷開發中。

正如Kazuar升級版的代碼所揭示的那樣,Kazuar的開發者正在增強器隱形操作能力,他們使用各種先進的反分析技術,並通過有效的加密和混淆實踐來保護惡意軟件代碼。

Kazuar概述Kazuar是一種先進的、隱秘的.NET後門,Pensive Ursa通常將其作為第二階段的有效負載,與攻擊組織通常使用的其他工具一起傳播。

最近烏克蘭CERT報告的活動揭示了Kazuar的多階段傳播機制,以及其他工具,如新的Capibar第一階段後門。研究人員對這個新版本的技術分析顯示,它的代碼結構和功能都有了顯著的改進。

這篇文章將詳細介紹以前未記錄的功能,包括:

全面的系統分析:廣泛的數據收集。

竊取雲和其他敏感應用程序的憑證:竊取雲應用程序帳戶、源代碼控制和信號消息傳遞應用程序。

擴展命令集:總共支持45個命令,從另一個Kazuar節點或命令和控制(C2)服務器接收。

增強的任務自動化:攻擊者可以打開/關閉的一系列自動化任務。

可變加密方案:不同加密算法和方案的實現。

注入模式:多種注入模式,允許Kazuar從不同的進程運行並執行不同的功能。

至少從2018年開始,Kazuar的變體改變了它們的混淆方法,一些變體使用ConfuserEx混淆器加密字符串,其他變體使用自定義方法。

本文分析的Kazuar變體實現了多個自定義字符串加密方法,與以前的變體不同,該變體只關注Windows操作系統。

在分析Kazuar的代碼時,研究人員使用dnSpy將代碼導出到集成開發環境(IDE)中,並使用自定義腳本解密字符串。這允許研究人員編輯單獨的.cs文件,並將一些方法名稱編輯成有意義的名稱。研究人員已經解釋了屏幕截圖中出現的方法名。

最新Kazuar變體的詳細技術分析元數據其他研究機構的報告顯示,至少從2018年開始,Kazuar的開發者就在操縱他們樣本的時間戳。這個新變體的編譯時間戳是星期四,2008年11月20日10:11:18 AM GMT。與其他公開可用的變體不同,這是開發者第一次回溯到2008年偽造時間戳。

Kazuar還包含代理版本和BuildID的硬編碼、哈希標識符以及代理標籤。這些可以用作變體標識符,如下圖所示。

1.png

Kazuar樣本基本配置信息

初始化執行程序集檢查在執行Kazuar時,它使用Assembly.Location屬性來接收自己的文件路徑並檢查其名稱。只有當返回的值為空字符串時,Kazuar才會繼續執行,如圖所示。從字節數組加載文件時,Assembly.Location屬性返回一個空字符串。

這種檢查似乎是反分析機制的一種簡單形式,以確保惡意軟件的執行是由預期的加載程序完成的,而不是通過其他方式或軟件完成的。

Kazuar執行後,如果它的文件名匹配一個特定的硬編碼哈希名稱(使用FNV算法)。這種行為可能是為了調試目的,讓開發者避免在每次調試惡意軟件時使用加載程序。

2.png

檢查Kazuar變體的配置名稱

創建操作根目錄Kazuar創建一個新目錄來存儲它的配置和日誌數據,它使用%localappdata%作為主存儲路徑,並從硬編碼路徑列表中確定其根目錄。

Kazuar根據設備全局唯一標識符(GUID)選擇要使用的根目錄、文件夾名、文件名和文件擴展名,如下圖所示。雖然這些名稱乍一看似乎是隨機生成的,但GUID的使用意味著它們將在同一台受攻擊的設備上每次執行惡意軟件時保持相同的名稱。

3.png

負責返迴路徑數組索引的方法

與以前的變體一樣,Kazuar使用結構化目錄方案來保存其日誌文件和其他數據,如單個配置文件和鍵盤記錄器數據。目錄命名是偽隨機的,是根據哈希選擇的。示例包括在前面的變體中看到的FNV哈希算法的自定義實現,以及對GUID值的其他操作。

值得一提的是,在代碼中有一個當前未引用的選項,用於創建一個名為wordlist的文件。這個文件可以為研究人員提供一個尚未實現的功能的線索,也許是使用目錄、文件名或密碼暴力破解的單詞列表。

配置文件惡意軟件創建一個單獨的主配置文件,其中包含以下數據:

C2服務器;

注入模式;

其他運行配置數據;

下圖顯示了下面這個文件的一個片段,你可以在附錄中找到Kazuar配置文件的加密方法。

4.png

配置文件的片段

互斥鎖名稱生成Kazuar正在使用互斥鎖來檢查其註入到另一個進程中。 Kazuar通過異或處理當前進程ID和硬編碼值0x4ac882d887106b7d來生成它的互斥鎖名,然後用設備的GUID 異或處理它,如下圖所示。這意味著幾個Kazuars可以在同一設備上串聯操作,只是不注入到同一過程中。

5.png

互斥對象名稱生成

體系結構設置Kazuar的注入模式新版本的Kazuar使用了它在配置中描述的“注入模式”,如表所示,默認模式為inject:

6.1.png

6.2.png

Kazuar注入模式和描述

在zombify模式下,Kazuar被注入到用戶的默認瀏覽器中,並有一個回退機制,在默認瀏覽器的查詢失敗時將自己注入到svchost.exe中。下圖顯示了Kazuar的開發者通常使用zombify一詞來處理進程注入:

7.png

Kazuars在zombify模式下的代碼注入片段

多線程模型Kazuar以多線程模式運行,而Kazuar的每個主要功能都作為自己的線程運行。換句話說,一個線程處理來自其C2的接收命令或任務,而求解線程處理這些命令的執行。這個多線程模型使Kazuar的開發者能夠建立一個異步和模塊化的流控制。任務解析流如下:

8.png

Kazuar的任務解決機製圖

任務解析器組件:Kazuar的PuppeteerKazuar接收新任務,解決它們並將輸出寫入結果文件。求解線程正在處理從C2服務器或另一個Kazuar節點接收到的新任務。然後對任務內容進行加密,並將其寫入磁盤的任務文件中。

每個任務文件實現一個混合加密方案:

1.使用RNGCryptoServiceProvider生成兩個包含隨機數的字節數組,它們分別是16和32字節。 1.1使用第一個數組作為AES (Rijndael)初始化向量(IV)。使用第二個數組作為AES密鑰。

2.在將結果加密並寫入磁盤之前,基於內存中的result內容生成HMACMD5哈希,使用上面第一個項目中描述的數組作為密鑰。

3.用硬編碼的RSA密鑰加密HMACMD5哈希、AES密鑰和IV,並將加密後的BLOB寫到文件的開頭。通過使用快速的AES算法來加密較大的對象,例如結果的內容,並使用較慢的RSA加密來隱藏AES密鑰和IV, Kazuar提高了其性能。這還禁用了僅從磁盤恢復受攻擊文件的選項,因為對稱密鑰是使用非對稱密鑰加密的。

4.使用AES加密來加密result文件的內容。

如下圖所示,任務完成後,生成的結果文件將保存到磁盤上:9.png

Kazuar加密和寫入結果文件方法片段

除了上述加密數據外,Kazuar還將以下字段寫入結果文件的開頭:

1.四個零字節(研究人員認為這是一種分隔符);生成的結果標識符;

2.加密GUID的長度,使用與初始化部分相同的異或算法(這裡的加密消息是“System info at [datetime] (-07)”);

3.加密的GUID本身;

4.RSA加密HMACMD5哈希,IV以及AES密鑰;

5.AES加密後的任務內容。

下圖顯示了來自磁盤的加密結果文件內容:

10.png

來自磁盤的加密結果文件內容

字符串加密Kazuar的代碼包含大量與功能和調試相關的字符串。當以純文本形式顯示時,它們揭示了Kazuar的內部工作原理和功能。為了避免研究人員創建基於字符串的指示YARA和檢索規則,Kazuar的字符串是加密的,它在運行時解密每個字符串。

Kazuar使用愷撒密碼(Caesar cipher)的變體作為字符串加密/解密算法。在這個算法中,Kazuar實現了一個簡單地交換每個成員的密鑰和值的字典。最近的Kazuar變體只實現了一個字典,而新的變體實現了多個字典,每個字典包含80對字符,如下圖所示。

11.png

包含用於字符串解密的字典類

下圖顯示了在給定字符串上迭代的循環,並檢查給定字符的序數值是否在相關類的字典鍵中。如果是,Kazuar交換鍵和值,並將其附加到精心製作的字符串。否則,它將保持原來的字符。

除了字符串混淆之外,開發者還為代碼中的類和方法提供了無意義的名稱,以使分析更加困難。

12.png

創建反混淆字符串的循環

Kazuar解碼的其中一個字符串返回值“Invalid pong response”,如下圖所示。似乎有一個惡意軟件的編碼員忘了把俄語中的C換成英語中的S。

13.png

' response '字符串中的錯別字

核心功能為了避免宕機,Kazuar使用被劫持的合法網站作為其C2基礎設施,這是Pensive Ursa的典型做法。此外,正如在註入模式一節中提到的,Kazuar還支持通過命名管道進行通信。它使用這兩種機制來接收遠程命令或任務(如代碼中所述)。

支持的C2命令Kazuar支持從C2接收的45種不同任務,如下表所示。相比之下,Kazuar在2017年分析的第一個變體僅支持26個C2命令。

研究人員將Kazuar的命令分為以下幾類:

主機數據收集;

擴展取證數據收集;

文件處理;

任意命令執行;

與Kazuar的配置交互;

註冊表查詢和操作;

腳本執行(VBS, PowerShell, JavaScript);

自定義網絡請求;

竊取憑證和敏感信息;

14.1.png

14.2.png

14.3.png

14.5.png

14.6.png

Kazuar支持的C2命令

雲、源代碼管理和消息應用程序憑證盜竊Kazuar能夠通過接收來自C2的竊取或無人參與命令,嘗試從受攻擊計算機中的許多工件中竊取憑證。這些工件包括多個眾所周知的雲應用程序。

Kazuar可以嘗試竊取包含這些應用程序憑證的敏感文件。 Kazuar針對的工件包括Git SCM(一種在開發人員中流行的源代碼控制系統),以及Signal(一種用於私人即時消息的加密消息服務)。

15.png

Kazuar可能試圖竊取的Git SCM憑證的代碼片段

全面的系統評測當Kazuar最初生成一個唯一的解析線程時,它自動執行的第一個任務是對目標系統進行廣泛的收集和分析,Kazuar的開發者將其命名為first_systeminfo_do。 Kazuar將收集有關受攻擊計算機的大量信息,並將其發送給C2。這包括有關操作系統、硬件和網絡的信息。

Kazuar將這些數據保存到info.txt文件中,並將執行日誌保存到logs.txt文件中。如任務解析部分所述,我們可以在內存中看到結果。在本文的樣本中,它是一個存檔,如下圖所示。

16.png

內存中first_systeminfo_do壓縮的結果

除了前面提到的兩個文本文件之外,作為該任務的一部分,惡意軟件還會截取用戶的屏幕截圖。下圖顯示了在加密並發送到C2之前將所有這些文件壓縮到一個文件中的過程:

17.png

加密前first_systeminfo_do存檔提取內存的結果

創建自動任務(auto)Kazuar能夠設置以指定間隔運行的自動任務,以從受攻擊的計算機收集信息。下圖顯示了Kazuar配置中記錄的該功能的一個示例。

這些自動化任務包括:

收集系統信息;

屏幕截圖;

竊取憑證;

獲取取證數據;

獲取自動運行數據;

正在從指定的文件夾中獲取文件;

獲取LNK文件列表;

使用MAPI竊取電子郵件;

18.png

Kazuar的Autos函數配置

監控活動窗口(Peeps)Kazuar有能力讓攻擊者在配置中設置他們所謂的“peep rules”。雖然Kazuar沒有自帶這些規則,但根據惡意軟件的代碼,似乎這個功能使攻擊者能夠監控指定進程的窗口。這使得攻擊者可以跟踪受攻擊設備上感興趣的用戶活動。

與CC的通信HTTP在與C2服務器建立通信之前,除了上述反分析檢查外,Kazuar還檢查配置數據發送時間間隔,該檢查包括確定是否應該在周末發送數據。

在首次通信時,Kazuar以XML格式發送收集到的數據,並期望獲得帶有新任務的XML結構化響應。

Kazuar使用硬編碼值169739e7-2112-9514-6a61-d300c0fef02d轉換為字符串,並將Base64編碼為cookie。

19.jpeg

HTTP POST命令,其正文中包含發送到C2的XML

Kazuar為XML生成密鑰名,Base64在將內容髮送到C2之前對其進行加密。 XML的內容包括:

結果文件的加密內容;

結果標識符;

偽隨機的4字節數,可能是另一種類型的標識符;

一個基於設備GUID偽隨機生成的值數組;

硬編碼GUID連接字符串169739e7-2112-9514-6a61-d300c0fef02d;

設備的唯一GUID。

使用命名管道進行通信除了與C2進行直接HTTP通信外,Kazuar還具有代理功能,可以向受攻擊網絡中的其他Kazuar代理接收和發送命令,它通過命名管道進行代理通信,根據設備的GUID生成它們的名稱。

Kazuar使用這些管道在不同的Kazuar實例之間建立點對點通信,將每個實例配置為服務器或客戶端。命名管道通信支持表3所示的遠程請求。

20.png

使用命名管道的Kazuar請求和響應

反分析檢查Kazuar使用了基於一系列詳細檢查的多種反分析技術,以確保它不被分析。開發者對Kazuar進行了編程,使其要么在安全的情況下繼續運行,要么在調試或分析時保持空閒狀態並停止所有C2通信。研究人員可以將這些檢查分為三大類

0 Comments

Recommended Comments

There are no comments to display.

Guest
Add a comment...