公司新聞

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

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

摘要

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


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

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


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


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

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

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

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

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

  6. 然后 ilasm.exe 在同一目錄啟動(dòng) DLL,劫持 Fusion.dll 后進(jìn)行融合,.dll 加載第二個(gè)解密的 DLL;

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

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

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

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

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


圖2.編碼后的PowerShell命令

Minas技術(shù)剖析說(shuō)明

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



圖3.解碼的PowerShell命令



有效負(fù)載是由 .NET 二進(jìn)制文件 (DLL)傳遞的三個(gè)參數(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)建多個(gè)主有效負(fù)載進(jìn)程的參數(shù))。

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

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


圖4.示例文件和目錄


接下來(lái),它將檢查系統(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)該位于這些目錄之一中)。如果未找到該文件,安裝過(guò)程將終止,一旦找到 ilasm.exe就會(huì)創(chuàng)建一個(gè)計(jì)劃任務(wù)作為持久性機(jī)制:



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

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

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

  1. 隱藏 ilasm.exe 進(jìn)程的控制臺(tái);

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

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

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

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

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


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


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

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


結(jié)論

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

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




 
 

上一篇:聚銘成立七周年之際,南京總部迎來(lái)煥新升級(jí)!

下一篇:《商用密碼管理?xiàng)l例》2023年修訂版全文公布