RaaS威脅組織Hunters International近期開始使用新的遠端存取木馬SharpRhino,該木馬偽裝成合法軟體,以獲取受害者電腦的遠端存取權限,讓攻擊者能夠執行不同的命令並進一步傳播惡意軟體。本文將詳細剖析SharpRhino的安裝及執行過程。
知名的勒索軟體即服務(RaaS)威脅組織Hunters International近期開始使用新的遠端存取木馬(RAT),這款惡意軟體最早於2024年8月被發現,因其使用C#開發,因此被命名為SharpRhino。該木馬偽裝成合法軟體,以獲取受害者電腦的遠端存取權限,使攻擊者能夠執行不同的命令並進一步傳播惡意軟體。
SharpRhino概述
被分析的樣本透過Nullsoft Scriptable Install System(NSIS)打包為安裝程式,並帶有Angryip.org描述及有效的數位簽章,但該公司名稱是虛構的,如圖1所示。
圖1 SharpRhino透過Nullsoft Scriptable Install System(NSIS)打包為安裝程式。
如圖2所示,該安裝程式包含:
圖2 SharpRhino安裝程式內容。
‧額外的安裝程式
‧受密碼保護的壓縮檔案
‧其他在惡意軟體執行過程中使用的文件
安裝過程
當執行時,樣本會將所有內嵌文件投放至「C:\ProgramData\Microsoft\WindowsUpdate24」目錄,並執行ipscan-3.9.1-setup.exe(合法的Angry IP Scanner安裝程式),如圖3所示。
圖3 透過合法的Angry IP Scanner安裝程式進行安裝。
在受害者分心的同時,惡意軟體會從受密碼保護的UpdateFull.zip解壓縮文件,使用內嵌的7za.exe進行解壓縮,並使用以下指令:
C:\ProgramData\Microsoft\ WindowsUpdate24\7za.exe x C:\ProgramData\Microsoft\ WindowsUpdate24\UpdateFull. 7z -pTG98HJerxsdqWE45 -o C:\ProgramData\Microsoft\ WindowsUpdate24
解壓後的文件內容,如圖4所示。
圖4 解壓後的文件內容。
樣本會在解壓縮後建立新目錄「C:\ProgramData\Microsoft\LogUpdateWindows」,並將解壓縮的文件複製到該新目錄。利用兩個不同的安裝目錄,可以幫助攻擊者提高持久性,即使其中一個目錄被刪除,惡意軟體仍可繼續運行,因為這些目錄內的文件在執行過程中具有相似的作用。
接下來,樣本會在Windows註冊表添加新的啟動鍵值,路徑為「HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run」,該鍵值指向Microsoft.AnyKey.lnk,此快捷方式指向以下目標:
C:\ProgramData\Microsoft\ LogUpdateWindows\Microsoft.AnyKey. exe abnormal c\programdata \%username%0 cmd /c C:\ProgramData\ Microsoft\LogUpdateWindows\ LogUpdate.bat
Microsoft.AnyKey.exe也是從壓縮檔案中釋放出來的,它實際上是一個合法的程式,屬於Node.js Tools for Visual Studio,其原始名稱為Microsoft.NodejsTools.PressAnyKey.exe。
執行階段
惡意腳本LogUpdate.bat和WindowsUpdate.bat具有相同功能,但加載不同的文件,如圖5所示。
圖5 惡意腳本加載不同的文件。
「Wiaphoh7um.t」和「kautix2aeX.t」這兩個文件皆包含混淆數據。這些文件的原始數據與密鑰不同,但解碼後的結果數據相同。解碼過程完成後,樣本將此數據定義為.NET程式集(Assembly),並調用其中的一個方法,傳遞一些參數進行執行,如圖6所示。
圖6 惡意文件內容。
在轉儲腳本中的所有數據後,可以觀察到以下的變數:
‧$var1、$var2、$var3這些變數用於確定所引用的程式集(Assembly),當它們串聯在一起時,形成字串「System.Drawing.dllSystem.Web.Extensions.dllSystem.Windows.Forms.dll」。 ‧$var4在每個文件中都不同,並包含C2伺服器地址。
表1是用於.NET程式集調用的參數對應表。
$fjwZrHB1k2RF代表被加載至記憶體的.NET程式集(Assembly)。在轉儲數據後,可以觀察到C#程式碼。該PowerShell腳本會調用Bzxmlpi命名空間中OyrWkb類別的某個函數。如圖7所示,在該類別的開頭,可以看到一些額外的引用載入(Imports),以及難以辨識的變數名稱。
圖7 該PowerShell腳本會調用Bzxmlpi命名空間中OyrWkb類別的某個函數。
事實上,這個文件是開源專案ThunderShell的修改版本,原始專案經過了多項更改(圖8):
圖8 該文件是開源專案ThunderShell的修改版本。
‧移除了鍵盤側錄器(Keylogger)、螢幕截圖及.NET程式集(Assembly)加載功能,同時刪除了伺服器端對應的相關指令。
‧所有類別、函數和變數名稱均被重新命名。
‧新增預設值,使其在未提供參數的情況下仍能執行惡意負載(Payload)。
SharpRhino程式碼與ThunderShell程式碼的比較
此函數首先生成一個16位元的隨機字串。在初始化Random類別時,樣本使用當前日期、時間和進程ID作為隨機種子。接下來,它會獲取一些環境變數,例如COMPUTERNAME、USERDOMAIN和USERNAME,並對這些數據進行格式化處理,如圖9所示。
圖9 SharpRhino程式碼內容。
最終,生成的字串如圖10所示。
圖10 最後生成的字串。
接下來,樣本將此字串傳遞給一個函數,該函數會將其發送至伺服器。在此過程中,數據會使用RC4加密演算法進行加密,並且加密密鑰來自於傳遞的第二個參數,如圖11所示。
圖11 樣本將此字串傳遞給一個函數,該函數會將其發送至伺服器。
RC4加密流程
在加密過程完成後,樣本會向請求中添加額外的數據,並將加密後的字串轉換為Base64格式,如圖12所示,所有這些數據最終會被發送至伺服器。
圖12 樣本會向請求中添加額外的數據,並將加密後的字串轉換為Base64格式。
在首次連線時,樣本會忽略來自伺服器的回應。當樣本進入循環時,它會再次連線至伺服器,但兩個參數均為null。接著,它會將伺服器的回應儲存下來,並與先前儲存的數據進行比對。
‧若接收到delay指令,樣本會取得額外的參數,並調整傳遞給sleep函數的時間值。
‧若接收到exit指令,樣本則會終止循環並結束執行。
‧若接收到的數據不是delay或exit,樣本將建立新線程(Thread),並使用該數據作為函數參數執行。
所有這些操作都會以95秒的間隔進行重複執行,如圖13所示。
圖13 樣本執行過程。
來自伺服器的回應會被傳遞至zWxFlnVASjHYb類別中的反序列化(Deserialization)函數,該函數會擷取並儲存成數據,包括UUID、ID和Data,如圖14所示。
圖14 來自伺服器的回應會被傳遞至zWxFlnVASjHYb類別中的反序列化函數。
C2伺服器
雖然範例中提供的連結已經下線,但可以使用來源專案中的伺服器來了解通訊是如何運作的。首先,需要更改伺服器配置,該配置包含多個欄位,包括伺服器IP地址、加密金鑰、GUI設定以及HTTP和HTTPS設定。接著,需要更改callback-url、gui-host和encryption-key參數。這裡將從SharpRhino範例中提取加密金鑰參數,如圖15所示。
圖15 更改伺服器配置、callback-url、gui-host以及encryption-key參數。
這個伺服器是Python應用程式,並需要一個正在運行的Redis伺服器。啟動後,它會輸出一些有關伺服器的資訊,如圖16所示。
圖16 輸出與伺服器相關的資訊。
這包括一個網頁GUI地址。當打開時,用戶必須先登錄。雖然輸入什麼用戶名稱並不重要,但密碼必須使用配置文件中的密碼。登錄後,將顯示儀表板部分。它包含有關會話和日誌的資訊,如圖17所示。
圖17 登錄之後顯示儀表板,包含有關會話和日誌的資訊。
有效負載可以在網頁GUI中建構。必須提供服務器的IP地址,以及有效負載類型,如圖18所示。
圖18 設定負載資訊。
選擇會話後,攻擊者可以與之互動。輸入「help」,會顯示會話中所有支援的命令,如圖19所示。
圖19 輸入「help」就會顯示會話中所有支援的命令。
C2通訊命令
這些命令有預定義的字串,會附加到攻擊者輸入作為參數的數據上,如圖20所示。例如,使用「shell [command]」將在發送的字串開頭附加「cmd.exe /c」。另一個例子是「ps」命令,它將發送PowerShell腳本到客戶端。
圖20 C2命令有預定義的字串,會附加到攻擊者輸入作為參數的數據上。
該命令以RC4加密並以Base64格式編碼的方式傳送到客戶端。如圖21所示,它包含ID和UUID參數,其中ID是客戶端ID,而UUID是命令ID。
圖21 該命令以RC4加密並以Base64格式編碼的方式傳送到客戶端。
所有這些數據都被傳遞到新線程中,這個線程中的函數使用PowerShell模組來執行給定的命令,如圖22所示。
圖22 所有數據都被傳遞到新線程中。
透過管道,樣本獲得執行命令的輸出,然後這些數據將被加密並返回到伺服器,如圖23所示。
圖23 透過管道,樣本獲得執行命令的輸出。
結語
ThunderSharp是一個最後更新於近四年前的舊開源項目,被Hunters International用來向受害者傳遞惡意軟體。它作為一個AngryIP掃描器工具的安裝程式,並丟下及執行惡意的PowerShell腳本。透過PowerShell功能,這些腳本執行編碼的.NET組件,因此不需要帶來任何額外的已編譯可執行檔(惡意程式碼在記憶體中被調用和執行)。雖然原始程式碼經過修改,但它保留了主要功能:在目標系統上遠程執行命令,這就是這類開源項目的危險。它們通常是為了教育或滲透測試目的開發,但卻被用於真正的攻擊。
<本文作者:王榮信Acronis大中華區首席技術顧問。專精外對內之資安技術防護措施、內對外之機敏資料外洩保護、資安事件關連分析及進階勒索軟體防護,透過企業資訊安全風險評估及框架,規劃符合需求的安全策略及架構。曾輔導多個大金融機構建立資料外洩防護架構、進階惡意程式防護架構及ATM與伺服器系統防駭解決方案。>