公司新聞

銘說|關(guān)于復(fù)雜挖礦木馬-Minas的技術(shù)分析

來源:聚銘網(wǎng)絡(luò)    發(fā)布時間:2023-05-24    瀏覽次數(shù):
 

摘要

近期,技術(shù)人員在用戶現(xiàn)場檢測時發(fā)現(xiàn)系統(tǒng)進程中存在一段可疑的 Shellcode,隨后對其進行了深入調(diào)查,最終在系統(tǒng)的隱蔽位置中發(fā)現(xiàn)了挖礦木馬——Minas。


重建Minas復(fù)雜感染鏈

雖然目前還無法重現(xiàn)整個感染過程,但是能夠從執(zhí)行的 PowerShell 對它的套路進行了復(fù)盤,如下圖所示:


圖1.Minas攻擊執(zhí)行流程


  1. PowerShell 腳本首先打入系統(tǒng)內(nèi)部,運行后通過計劃程序從遠(yuǎn)程服務(wù)器下載 lgntoerr.gif 文件;

  2. 腳本對 lgntoerr.gif 文件解密后生成一個.NET DLL,然后加載該DLL;

  3. .NET DLL 從其資源中提取并解密出三個文件:兩個 DLL 和一個加密的有效負(fù)載,并放置在程序數(shù)據(jù)目錄中;

  4. .NET DLL 同時會先創(chuàng)建一個任務(wù),以便在系統(tǒng)啟動時能夠通過任務(wù)計劃自動運行合法的 ilasm.exe 組件;

  5. 任務(wù)計劃程序從 ProgramData 目錄啟動 ilasm.exe;

  6. 然后 ilasm.exe 在同一目錄啟動 DLL,劫持 Fusion.dll 后進行融合,.dll 加載第二個解密的 DLL;

  7. 該 DLL 創(chuàng)建一個掛起的 dllhost.exe 進程,并從加密的二進制文件中解密有效負(fù)載;

  8. 解密的有效負(fù)載再作為 DLL 加載到 dllhost.exe 進程中;

  9. dllhost.exe 將進程中的PID保存到 ProgramData 目錄中的文件中,并將控制權(quán)傳遞給解密的有效負(fù)載;

  10. 最后,有效負(fù)載 DLL 提取并啟動內(nèi)存中的礦工 DLL。

通過數(shù)據(jù)庫的檢索和比對后,確認(rèn)此惡意軟件名為 Minas。根據(jù)技術(shù)人員對感染鏈的重建,發(fā)現(xiàn)它起源于作為任務(wù)運行的 PowerShell 腳本,而該腳本一般則通過 GPO 進行創(chuàng)建。


圖2.編碼后的PowerShell命令

Minas技術(shù)剖析說明

PowerShell 腳本的核心功能是啟動惡意軟件安裝過程。為此,PowerShell 腳本從遠(yuǎn)程服務(wù)器下載加密的有效負(fù)載,使用自定義XOR加密算法(密鑰“fuckkasd9akey”)對其進行解密,并將有效負(fù)載加載到內(nèi)存中:



圖3.解碼的PowerShell命令



有效負(fù)載是由 .NET 二進制文件 (DLL)傳遞的三個參數(shù):

$a.GetType(“I.C”).GetMethod(“I”).Invoke($null, ([Byte[]]($d),“A5D9FD13”,0));

  1. $d:.NET DLL 作為字節(jié)數(shù)組;

  2. A5D9FD13:(用于解密 .NET DLL 中的資源的密鑰);

  3. 0:(用于阻止創(chuàng)建多個主有效負(fù)載進程的參數(shù))。

此 .NET 二進制文件(以下簡稱“安裝程序”)負(fù)責(zé)后續(xù)安裝 .NET DLL 資源中包含的惡意軟件組件。

首先,用哈希函數(shù)(Ap,SDBM,RS)安裝程序創(chuàng)建一個目錄結(jié)構(gòu):


圖4.示例文件和目錄


接下來,它將檢查系統(tǒng)上是否存在合法的 ilasm.exe 文件(版本 4.0.30319 位于 %windir%\Microsoft.NET\Framework64\v4.0.30319\ilasm.exe 或版本 2.0.50727 位于 %windir%\Microsoft.NET\Framework64\v2.0.50727\ilasm.exe)(如果系統(tǒng)上存在 ilasm.exe,則它應(yīng)該位于這些目錄之一中)。如果未找到該文件,安裝過程將終止,一旦找到 ilasm.exe就會創(chuàng)建一個計劃任務(wù)作為持久性機制:



在此之后,將文件復(fù)制到先前創(chuàng)建的目錄中。然后,惡意軟件安裝程序的前100個字節(jié)將會追加到從“_64_bin”.NET DLL 資源中提取的文件 {RSHash(MachineName)},并生成加密的文件。此外,多達 10240個隨機字節(jié)會附加到 fusion.dll 和 {SDBMHash(MachineName)}.dll 文件中,從而使反惡意軟件產(chǎn)品的哈希檢測無效。

接下來,安裝程序啟動先前為 ilasm.exe 創(chuàng)建的任務(wù),該任務(wù)又加載位于同一目錄中的惡意 fusion.dll 庫,假設(shè)它使用的是合法的 fusion.dll (DLL劫持)。

惡意軟件執(zhí)行過程由兩個加載程序組成:DLL 劫持者融合 .dll 和下一階段加載程序 {SDBMHash(MachineName)}.dll,同時 DLL 劫持者通過以下步驟進行檢查:

  1. 隱藏 ilasm.exe 進程的控制臺;

  2. 確定進程的名稱是否為 ilasm.exe,否則它將終止進程;

  3. 基于 SDBM 哈希函數(shù),構(gòu)建路徑 C:\ProgramData\{SDBMHash(MachineName)}\{SDBMHash(MachineName)}.dll嘗試通過 LoadLibraryA API 函數(shù)將該 DLL 加載到內(nèi)存中。

{SDBMHash(MachineName)}.dll DLL 會再次檢查進程的名稱是否為 ilasm.exe。然后,生成文件路徑 C:\ProgramData\{SDBMHash({SDBMHash(MachineName)})}并檢查它是否存在。如果該文件存在,它將從中讀取值(十進制數(shù)),此十進制數(shù)是 dllhost.exe 進程的 PID 乘以上一次Minas運行創(chuàng)建的0x1F4,然后加載程序嘗試使用該 PID 終止進程。

接下來,它讀取并解密位于 C:\ProgramData\{ApHash(MachineName)}\{RSHash(MachineName)}\{RSHash(MachineName)} 的主有效載荷(礦工)。此外,加載程序會創(chuàng)建一個進程環(huán)境變量 (SetEnvironmentVariable) 配置,其值為 {“addr”:“185.243.112.239:443”,“p”:“143e256609bcb0be5b9f9c8f79bdf8c9”}。

圖5.通過流程傳遞參數(shù)


之后,{SDBMHash(MachineName)}.dll 創(chuàng)建一個掛起的 dllhost.exe 進程,創(chuàng)建一個部分,將其映射到 dllhost.exe 進程,并寫入先前讀取和解密的文件(帶有礦工組件的原始加載器)。然后,它讀取 dllhost.exe 進程的內(nèi)存,確定主線程的入口點并將其重寫為:


將創(chuàng)建的 dllhost.exe 進程中的 PID 乘以 0x1F4 寫入 C:\ProgramData\{SDBMHash({SDBMHash(MachineName)})}后, dllhost.exe 進程恢復(fù),終止 ilasm.exe 進程。最后,dllhost.exe 將控制流傳遞給解密的原始加載程序,使加載程序在進程內(nèi)存中映射XMRig礦工(DLL 文件形式的 XMRig 礦工程序集),然后使用反射加載啟動它,礦工使用 GetEnvironmentVariable 獲取流程環(huán)境變量配置的值掘加密貨幣。

圖6.流程環(huán)境變量值


結(jié)論

雖然目前無法準(zhǔn)確掌握最初的 PowerShell 命令是如何執(zhí)行的,但可以確定攻擊向量是通過 GPO 執(zhí)行的味著攻擊者已經(jīng)破壞了網(wǎng)絡(luò)不遺余力地安裝工木馬。

Minas 挖礦木馬由于能夠加密、隨機生成名稱并使用劫持和注入等技術(shù)手段進行入侵,使常規(guī)的安全檢測方難以發(fā)現(xiàn),需要提高網(wǎng)絡(luò)安全防范意識,避免感染此類病毒。




 
 

上一篇:聚銘成立七周年之際,南京總部迎來煥新升級!

下一篇:《商用密碼管理條例》2023年修訂版全文公布