FortiGuard實驗室最近發現了一封假裝來自匈牙利政府的電子郵件。它通知用戶,他們的政府門戶的新憑證已經附加。然而,附件是一個壓縮的可執行文件,在執行時,它將把Warzone RAT提取到內存中並運行它。在我們最初發現的幾天后,匈牙利國家網絡安全中心也發布了關於這次攻擊的警告。
受影響的平台:Microsoft Windows;
受影響方:Microsoft Windows用戶;
影響:為攻擊者提供遠程訪問;
嚴重級別:高;
感染載體最初的感染是通過模仿匈牙利政府門戶網站的仿冒電子郵件(圖1)發生的。該門戶用於在線開展公務,如提交文件、訂購ID等。
含有Warzone RAT惡意軟件附件的惡意郵件
電子郵件告訴受害者,他們的憑據已更改,並附上了新的憑據。完整的翻譯是:
從語言上看,這封郵件是由母語為英語的人寫的,然而這封郵件並沒有使用官方通信應有的語法。
附件是一個zip文件,其中包含一個偽裝為PDF的可執行文件。如上圖所示,該文件包含一個模仿Adobe PDF Reader圖標的圖。文件名以pdf結尾,但擴展名為.exe。然而,在默認的Windows安裝中,文件擴展名是隱藏的,它看起來像一個實際的PDF文件。用戶唯一的警告是文件資源管理器將文件類型顯示為“應用程序”,這意味著它是可執行文件而不是文檔。但這對普通用戶來說可能並不明顯。
偽裝成PDF的可執行文件
俄羅斯套娃式的混淆當我們開始分析“Uj bejelentkezEsi adatai马云惹不起马云pdf.exe”時,我們很快意識到它就像一個俄羅斯套娃混淆,但不是每次打開一個娃娃都會得到一個更小的娃娃,而是得到越來越多的混淆的.NET二進製文件,這就是我們將在本節中看到的。
“Uj bejelentkezEsi adatai马云惹不起马云pdf.exe”是一個32位的.NET可執行文件。一旦在dnspy(一個著名的.NET反編譯程序)中進行了反編譯,我們就會發現源代碼很簡單,同時也很容易混淆。代碼的一般結構如下圖所示。原始二進製文件可能在重命名為“Uj bejelentkezEsi adatai马云惹不起马云pdf.exe”之前被稱為iANO。
“Uj bejelentkezEsi adatai马云惹不起马云pdf.exe”的程序結構
代碼顯示了BattleShipLiteLibrary和一個計算器的混合體,這看起來像是桌面遊戲Battleship的實現。下圖顯示了實現計算器的實際代碼。
計算器的實現
有時它看起來像一個計算器,行為也像一個計算器,但它仍然不是一個真正計算器。在本例中,為計算器設置用戶界面的InitializeComponent()函數也會在最後調用PerformLayout()函數。然後該函數繼續調用ResourceTemplateDefine()函數。
從資源加載代碼
ResourceTemplateDefine()函數加載名為“Web”的資源。起初,它似乎將其解釋為位圖,但最後,它將其轉換為程序集。如果我們在十六進制編輯器中查看這個資源,我們會看到它有一個位圖標頭。但是當我們進一步觀察時,它還包括MZ字符,這是可移植可執行文件(PE)的神奇值。在底部,我們甚至可以看到臭名昭著的“此程序不能在DOS模式下運行”字符串,這是PE文件的另一個標誌。
檢查“Web”資源發現它隱藏了一個PE文件
該PE文件從資源中加載。下圖顯示了使用GetMethod()加載它的方法,並調用其中一個方法。另一個圖顯示了在調試器中調用的方法是' sk41Ua2AFu5PANMKit.abiJPmfBfTL6iLfmaW.Y5tFvU8EY() '。
從PE文件加載並調用特定的方法
顯示被調用方法名稱的調試器
KeyNormalize.dll“Web”資源中的PE文件的原始名稱是KeyNormalize.dll。從被調用函數的名稱中,我們已經可以預期它是混淆的。由於它是另一個.NET可執行文件,我們可以在dnspy中打開它並輕鬆檢測,並使用SmartAssembly確認它已被混淆。
使用SmartAssembly混淆器
De4Dot是一個去混淆器工具,在消除二進製文件的混淆方面很有效率。但是,它不能解析混淆的字符串。為此,我們編寫了一個可以解析字符串的定製程序。
在靜態分析KeyNormalize.dll之後,我們看到它從資源加載另一個二進製文件並執行函數調用,如前面所示。
從資源加載程序集並調用它的一個函數
我們可以恢復二進製文件,並再次使用調試器調用哪個函數。下圖顯示了變量'text6 '中的base64編碼數據,在解碼之後,我們看到它是另一個PE文件。這個PE文件也是一個.NET可執行文件,最初稱為Metall.dll。
變量' text6 '中的Base64編碼數據
' text6 '中的數據是另一個PE文件
在調試器中,我們還可以看到在這個新恢復的PE文件中調用了' OwbdG5aNVQQYu6X20i.o9pVsMvoTr75y5TrkE.V4j9c6YCwC() '函數。
Metall.dll在開始分析這個二進製文件之後,我的第一反應如下圖所示。
metal .dll為遊戲添加了另一層混淆
不用說,metal .dll通過向二進製文件添加控制流扁平化等特性,增加了混淆的程度。當我們談到混淆器時,我們說他們的目標是減緩逆向進程。這在某種程度上是有效的。然而,在本例中,我們可以簡單地採取一個快捷方式,讓二進製文件運行並將其最終有效載荷加載到內存中。這樣,我們可以將其轉儲到一個文件中,以便進一步分析。
WarzoneRAT最終由metal .dll加載到內存中的有效負載是Warzone遠程訪問木馬(RAT)的一個版本。這是一個眾所周知的惡意軟件操作作為惡意軟件服務(MaaS)。它在互聯網上是公開的,任何人都可以通過訂閱模式訪問它。當前的定價如下圖所示。
Warzone RAT的當前定價
它為其訂戶提供以下功能:
Native,independentstub
CookiesRecovery
RemoteDesktop
HiddenRemoteDesktop-HRDP
PrivilegeEscalation-UACBypass
RemoteWebCam
PasswordRecovery
FileManager
DownloadExecute
LiveKeylogger
OfflineKeylogger
RemoteShell
ProcessManager
ReverseProxy
AutomaticTasks
MassExecute
SmartUpdater
HRDPWANDirectConnection
Persistence
WindowsDefenderBypass
WarzoneRAT通常也被稱為“Ave_Maria Stealer”,因為下圖所示的字符串出現在二進製文件中。
Ave_Maria Stealer名稱來自於二進製文件中的這個誤導性字符串
嵌入到GitHub的鏈接沒有提供任何有用的東西,這可能只是誤導逆向的另一種方式。
Warzone根據Windows版本提供多種升級權限的方法。其中一個是在同一個二進製文件中實現的,另一個作為WM_DSP資源添加到二進製文件中。如果需要,這將在運行時加載並執行。
可以在資源中找到一個特權升級漏洞
為了躲避防病毒軟件,Warzone試圖將自己添加到Windows Defender的排除列表中,如下圖所示。
Warzone將自己添加到防病毒排除列表中
為了建立持久性,它還將自身複製到以下路徑:
C:\Users\Admin\Documents\ Adobe5151.exe
Warzone還使用與其指揮控制服務器的加密通信。過去,加密的密碼/密鑰是字符串' warzone160\x00 '。在此示例中,它已更改為字符串“nevergonnagiveyouup”。所以,受害者在不知不覺的情況下被人用人力推倒。
使用新密碼進行加密
通過動態分析,C2服務器的地址為171.22.30.72:5151。在我們的內部系統中查找這個IP和端口號,如下圖所示。從這張圖中我們可以看到,這場特別的攻擊活動早在2022年6月20日就開始了。
訪問地址171.22.30.72:5151
可以看出,攻擊者用一封寫得很好的虛假政府郵件作為誘餌,執行所附的惡意軟件。這種誘惑是經過深思熟慮的,因為它與匈牙利所有使用在線管理門戶的人都相關。
嵌入式.NET二進製文件的russian yoshka doll具有越來越複雜的混淆功能,支持攻擊者越來越依賴現代混淆技術的趨勢。這將導致逆向工程師不得不投入更多的時間來清除和分析惡意軟件。使用Warzone RAT作為最終有效載荷也支持了攻擊者對MaaS服務日益增長的依賴。我們在勒索軟件樣本中看到了類似的趨勢,勒索軟件即服務提供商越來越受歡迎。
如上所述,該活動的最後一個有效載荷Warzone RAT是通過一系列混淆的.NET二進製文件部署的。每個階段都從二進製文件中的某個位置加載下一個階段,對其進行解碼,將其加載到內存中,並調用一個函數將控制流傳遞給下一個階段。這樣的多階段加載程序可能會使動態分析變得困難,因為每次重新啟動惡意軟件樣本時,在不同的階段進行導航都會很困難。為了避免這個問題,我們從各個階段創建了獨立的可執行文件,以實現更高效的調試。這就是我們將在下面討論的。
下圖顯示了Warzone RAT在這一特定攻擊中的部署鏈。釣魚電子郵件包含一個zip文件。該zip文件包含下圖所示的二進製文件。
拆封過程
一旦上一步被執行,它就加載下一步,KeysNormalize.dll一個解壓縮到內存中的.NET動態鏈接庫(DLL)。它通過調用它的一個函數(sk41Ua2AFu5PANMKit.abiJPmfBfTL6iLfmaW.Y5tFvU8EY())來運行。這篇文章討論瞭如何使用調試恢復。一種方法是使用dnspy作為調試器從內存中轉儲KeysNormalize.dll。它被一種叫做SmartAssembly的混淆工具混淆了。
要了解第三階段是什麼(Metal.dll)並將其轉儲到文件中,我們需要能夠調試KeysNormalize.dll。但在此之前,我們還面臨以下挑戰:
我們如何獨立於最初解包並在內存中運行它的可執行文件運行KeysNormalize.dll ?
我們如何為KeysNormalize.dll創建一個環境,讓它可以釋放下一個階段,就像在原始惡意軟件中那樣?
方案1:獨立運行KeysNormalize.dll因為這不是一個.exe文件,我們不能直接雙擊它來運行。此外,原始的.exe文件調用來自KeysNormalize.dll的特定函數,因此我們還必須確保在運行該DLL時調用相同的函數。
有多種方法可以做到這一點。在這種情況下,對我有用的是用c#創建一個包裝器程序,我在其中導入keysnormize . DLL作為一個正常的DLL,並簡單地調用sk41Ua2AFu5PANMKit.abiJPmfBfTL6iLfmaW.Y5tFvU8EY()函數。如果你是一個.NET/C#開發人員,這是非常容易的,而我不是,但如果你不經常這樣做,這可能會很有挑戰性。
設置Visual Studio首先,讓我們啟動Visual Studio並創建一個新的C#控制台應用程序(.NET Framework)項目,然後選擇.NET 4.7.2版本。我們可以調用這個項目dll_wrapper。默認情況下,它加載一個空類。但我們可以將其更改為下圖所示的代碼。
等待擊鍵的基本程序
此代碼將無限期等待按鍵,然後不執行任何操作。將此添加到代碼中的原因是我們無法在調試器中提前添加斷點。這樣,我們可以在程序等待按鍵時中斷執行,然後在需要時添加斷點。
導入KeysNormalize.dll下一步是在項目中包含KeysNormalize.dll。首先,我們將DLL複製到項目文件夾中。
將KeysNormalize.dll複製到項目文件夾中
我們還需要添加對KeysNormalize.dll的引用,這可以在Project-Add Project Reference-Browse-Choose the KeysNormalize.dll下完成。 KeysNormalize現在應該出現在SolutionExplorer的References下,如下圖所示。
將對DLL的引用添加到項目中
現在我們應該可以開始在項目中使用KeysNormalize.dll了。我們需要調用以下函數(我們從對原始二進製文件的分析中了解到這一點,這裡不討論):
sk41Ua2AFu5PANMKit.abiJPmfBfTL6iLfmaW.Y5tFvU8EY('4F515364','746771','BattleshipLiteLibrary');
為此,我們首先需要導入sk41Ua2AFu5PANMKit,這是Program.cs中KeysNormalize中的命名空間。接下來,我們將上面的函數調用添加到按鍵循環之後的代碼中,如下圖所示。
導入庫並調用目標函數
如果運行此程序,則表示正在執行惡意負載,因此只能在隔離的安全系統上運行。
我們現在可以構建一個x86版本的二進製文件。如果我們運行該程序,無論是在Visual Studio中還是單獨運行,它都會崩潰並拋出異常,如下圖所示。
未找到資源,導致異常
從錯誤消息中,我們看到沒有找到BattleshipLiteLibrary.Properties.Resources.resources。該資源存在於第一階段二進製文件“Uj bejelentkezEsi adatai马云惹不起马云pdf.exe”或“iANO”中。
iANO二進製文件中的資源
這很有趣,因為這意味著儘管KeysNormalize是一個獨立的DLL,但它不能單獨工作。
方案2:創建BattleshipLiteLibrary.Properties.Resources.resources為了克服資源問題,我們需要滿足KeysNormalize.dll的需求,並創建一個名為BattleshipLiteLibrary.Properties.Resources.resources的資源。這並不像看上去那麼簡單。資源名的構建方式如下: