【PC樣本分析】plugx家族RAT樣本分析
作者論壇賬號:yusakul
一、樣本概述
wsc_proxy.exe為海蓮花遠(yuǎn)控樣本,wsc_proxy.exe執(zhí)行后加載wsc.dll解密wsc.dump文件,得到攻擊模塊(dll),攻擊模塊注入自身到系統(tǒng)進(jìn)程后連接遠(yuǎn)控服務(wù)器上線,接收執(zhí)行遠(yuǎn)控功能。遠(yuǎn)控功能包括:管理系統(tǒng)、文件、屏幕、進(jìn)程、服務(wù)、網(wǎng)絡(luò)、遠(yuǎn)程shell、鍵盤記錄等。
wsc_proxy.exe主要功能為:
攜帶小紅傘簽名的exe文件;
加載wsc.dll。
wsc.dll主要功能為:
解密并調(diào)用wsc.dump。
wsc.dump主要功能為:
注冊自啟服務(wù);
注入自身到系統(tǒng)進(jìn)程svchost、msiexec;
被注入進(jìn)程連接cc,執(zhí)行遠(yuǎn)控指令。
二、樣本類型
樣本為越南海蓮花組織開發(fā),plugx木馬程序。未加殼,通過注冊服務(wù)的方式進(jìn)行權(quán)限維持,實(shí)現(xiàn)開機(jī)啟動(dòng)。
三、詳細(xì)分析
3.1 執(zhí)行釋放
A、攻擊組件由三個(gè)文件組成wsc_proxy.exe、wsc.dll、wsc.dump。
B、執(zhí)行經(jīng)過簽名的合法程序wsc_proxy.exe,并惡意加載loader程序wsc.dll。
C、loader程序wsc.dll解密并解壓縮payload文件。
D、解密的shellcode被注入到合法的系統(tǒng)進(jìn)程中。
E、注入的Windows進(jìn)程執(zhí)行C2 /遠(yuǎn)控功能。

執(zhí)行鏈
3.2 攻擊細(xì)節(jié)
Payload啟動(dòng)并掛起系統(tǒng)信任的文件svchost.exe,將具有解密加載功能的函數(shù)注入到svchost進(jìn)程,并在scvhost進(jìn)程入口地址構(gòu)造shellcode,喚醒scvhost進(jìn)程執(zhí)行shellcode,shellcode將跳轉(zhuǎn)到解密加載函數(shù),該函數(shù)解密wsc.dump文件并執(zhí)行payload。
如上操作后,payload將運(yùn)行在白名單進(jìn)程中,達(dá)到隱藏自身的目的,后續(xù)注入挖空進(jìn)程msiexec.exe的過程與之相同。
3.3 遠(yuǎn)控模塊
遠(yuǎn)控功能包括:系統(tǒng)配置、文件管理、屏幕監(jiān)視、進(jìn)程管理、服務(wù)管理、遠(yuǎn)程shell、網(wǎng)絡(luò)配置、注冊表管理、數(shù)據(jù)庫管理、鍵盤記錄等。
分發(fā)命令子命令描述Option0x2000鎖屏0x2001直接關(guān)機(jī)0x2002重啟動(dòng)0x2003提示將關(guān)機(jī)0x2005彈出對話框
表一
分發(fā)命令子命令描述Disk0x3000遍歷磁盤0x3001查找文件0x3002遞歸查找文件0x3004讀取文件0x3007寫文件0x300A創(chuàng)建文件0x300C創(chuàng)建隱藏桌面,并創(chuàng)建進(jìn)程0x300D文件操作(復(fù)制、移動(dòng)、重命名)0x300E根據(jù)環(huán)境變量名獲取路徑
表2
分發(fā)命令子命令描述Screen0x4000遠(yuǎn)程桌面0x4100截圖
表3
分發(fā)命令子命令描述Process0x5000創(chuàng)建進(jìn)程0x5001枚舉進(jìn)程0x5002關(guān)閉進(jìn)程
表4
分發(fā)命令子命令描述Service0x6000查詢服務(wù)配置0x6001修改服務(wù)配置0x6002啟動(dòng)服務(wù)0x6003控制服務(wù)0x6004刪除服務(wù)
表5
分發(fā)命令子命令描述Shell0x7002啟動(dòng)cmd
表6
分發(fā)命令子命令描述Telnet0x7100啟動(dòng)Tlenet服務(wù)
表7
分發(fā)命令子命令描述RegEdit0x9000枚舉注冊表鍵0x9001創(chuàng)建注冊表鍵0x9002刪除注冊表鍵0x9003復(fù)制注冊表鍵0x9004枚舉鍵值0x9005設(shè)置鍵值0x9006刪除鍵值0x9007讀取鍵值
表8
分發(fā)命令子命令描述Nethood0xA000枚舉網(wǎng)絡(luò)資源
表9
分發(fā)命令子命令描述PortMap0xB000開啟端口映射
表10
分發(fā)命令子命令描述SQL0xC000獲取數(shù)據(jù)庫信息0xC001列出驅(qū)動(dòng)程序說明s0xC002連接數(shù)據(jù)庫
表11
分發(fā)命令子命令描述Netstat0xD000獲取TCP相關(guān)信息0xD001獲取UDP相關(guān)信息0xD002設(shè)置TCP連接的狀態(tài)
表12
分發(fā)命令子命令描述KeyLog0xE000鍵盤記錄
表12
分發(fā)命令子命令描述ClipLog0xF000剪切板記錄
表13
3.4 逆向細(xì)節(jié)
3.4.1 wsc_proxy.exe
wsc_proxy.exe文件數(shù)字簽名為AVAST Software
s.r.o.,來自安全廠商AVAST。說明樣本開發(fā)者擁有該安全廠商私有證書,利用證書將樣本簽名,達(dá)到免殺目的(可能是由于廠商的數(shù)字簽名私鑰泄露或被破解)。

wsc_proxy.exe數(shù)字簽名
0x1 加載“解密dll”
wsc_proxy.exe為帶簽名的白名單程序,程序功能為:加載wsc.dll。

3.4.2 wsc.dll
0x1 構(gòu)造shellcode
wsc.dll構(gòu)造了一段shellcode調(diào)用wsc.dll導(dǎo)出函數(shù)sub_10001000,構(gòu)造地址為wsc_proxy.exe加載自身完成時(shí)。sub_10001000為加載函數(shù)。

構(gòu)造shellcode

Shellcode地址

執(zhí)行流程
0x2加載wsc.dump
讀取wsc.dump到內(nèi)存,修改內(nèi)存屬性為可執(zhí)行,跳轉(zhuǎn)到目標(biāo)wsc.dump地址執(zhí)行。

文件路徑

修改內(nèi)存屬性,跳轉(zhuǎn)執(zhí)行
3.4.3 wsc.dump
文件wsc.dump猜測為樣本開發(fā)者從內(nèi)存中dump函數(shù)指令得到二進(jìn)制文件,跳轉(zhuǎn)到文件首地址即可正常執(zhí)行函數(shù)。
0x1 解密解壓縮并執(zhí)行payload
解密wsc.dump自帶的加密數(shù)據(jù),再次解壓得到一個(gè)dll文件,在內(nèi)存中展開PE文件并修復(fù)重定位。上述操作完畢后調(diào)用該payload(dll)。
在該片內(nèi)存中標(biāo)記“PLUG”。

解密算法

解壓得到payload
3.4.4 payload
Payload每次啟動(dòng)將檢查啟動(dòng)環(huán)境,并據(jù)此進(jìn)行一些初始化操作。同時(shí)payload將根據(jù)啟動(dòng)參數(shù)執(zhí)行不同的功能。

0x1 初始化
提升權(quán)限

2) 復(fù)制到指令目錄
復(fù)制樣本組件到路徑"C:\ProgramData\Windows NT\accessories\
wsc_proxy.exe",文件屬性為隱藏,再次啟動(dòng)wsc_proxy.exe。

0x2 注冊自啟服務(wù):100進(jìn)程
主要目的為注冊自啟服務(wù),注冊服務(wù)之前有檢查權(quán)限和提升權(quán)限的操作。
提權(quán)
利用方法:COM提升名稱(COM Elevation
Moniker)技術(shù)提升接口權(quán)限,ICMLuaUtil接口啟動(dòng)附帶管理員權(quán)限進(jìn)程wsc_proxy.exe進(jìn)程,啟動(dòng)參數(shù)為100。

進(jìn)程監(jiān)控
注冊服務(wù)

創(chuàng)建服務(wù)

注冊表被添加的啟動(dòng)服務(wù)
0x3 注入、挖空svchost進(jìn)程:200進(jìn)程
該進(jìn)程將查找系統(tǒng)文件svchost.exe,啟動(dòng)并掛起svchost,隨后修改svchost進(jìn)程內(nèi)存,將一個(gè)功能為“解密、解壓縮wsc.dll并加載payload”的函數(shù)寫入到svchost進(jìn)程內(nèi)存,尋找入口地址OEP并在此構(gòu)造shellcode跳轉(zhuǎn)到解密解壓縮函數(shù)。
恢復(fù)svchost主線程,執(zhí)行解密解壓縮操作,執(zhí)行payload。

創(chuàng)建掛起進(jìn)程:svchost

計(jì)算跳轉(zhuǎn)

構(gòu)建shellcode
0x4 svchost進(jìn)程:201進(jìn)程
創(chuàng)建內(nèi)存映射,保存一些工具類函數(shù),待后續(xù)使用。

保存跨進(jìn)程訪問的工具類函數(shù)

保存功能函數(shù)

磁盤管理

注冊表操作

進(jìn)程管理

枚舉網(wǎng)絡(luò)資源

獲取網(wǎng)絡(luò)狀態(tài)

計(jì)算機(jī)設(shè)置

端口映射

服務(wù)管理

啟動(dòng)遠(yuǎn)程cmd

數(shù)據(jù)庫操作

啟動(dòng)telnet服務(wù)

Hook鍵盤消息

保存鍵盤記錄到本地

剪切板記錄
操作過程與操作svchost相同,見下圖。

上線、通訊
通訊線程為OlProcNotify,該線程能夠使用三種協(xié)議嘗試連接地址steam.dajuw.com,端口為443。
通信成功后發(fā)送附帶加密key的加密報(bào)文,在接收處理循環(huán)中接收執(zhí)行遠(yuǎn)控指令。

執(zhí)行流程

上線協(xié)議

發(fā)送接收指令消息

接收消息、處理指令
4)插件管理器
遠(yuǎn)控服務(wù)器可以發(fā)送指令創(chuàng)建模塊管理線程,線程名為:OlProcManager。該線程同樣先使用指定的協(xié)議連接服務(wù)器,并進(jìn)入入一個(gè)“發(fā)送-接收-處理”循環(huán),遍歷執(zhí)行遠(yuǎn)控模塊具有的功能(管理磁盤、文件、屏幕…)。

發(fā)送消息

接收指令循環(huán)

執(zhí)行功能
0x5 msiexec進(jìn)程:209進(jìn)程
209進(jìn)程同201進(jìn)程將功能模塊函數(shù)安裝,并創(chuàng)建管道實(shí)現(xiàn)進(jìn)程通訊。此外,209進(jìn)程創(chuàng)建DoImpUserProc線程接收指令執(zhí)行功能函數(shù)。

功能安裝與管道通訊

執(zhí)行功能
0x5 300進(jìn)程
300進(jìn)程操作:關(guān)閉并刪除遠(yuǎn)控服務(wù),清理遠(yuǎn)控留下的注冊表痕跡,最后將遠(yuǎn)控程序和文件刪除。


四、樣本特征
暫不提供
原文地址:https://www.52pojie.cn/thread-1330687-1-1.html