【PC样本分析】plugx家族RAT样本分析
作者论坛账号:yusakul
一、样本概述
wsc_proxy.exe为海莲花远控样本,wsc_proxy.exe执行后加载wsc.dll解密wsc.dump文件,得到攻击模块(dll),攻击模块注入自身到系统进程后连接远控服务器上线,接收执行远控功能。远控功能包括:管理系统、文件、屏幕、进程、服务、网络、远程shell、键盘记录等。
wsc_proxy.exe主要功能为:
携带小红伞签名的exe文件;
加载wsc.dll。
wsc.dll主要功能为:
解密并调用wsc.dump。
wsc.dump主要功能为:
注册自启服务;
注入自身到系统进程svchost、msiexec;
被注入进程连接cc,执行远控指令。
二、样本类型
样本为越南海莲花组织开发,plugx木马程序。未加壳,通过注册服务的方式进行权限维持,实现开机启动。
三、详细分析
3.1 执行释放
A、攻击组件由三个文件组成wsc_proxy.exe、wsc.dll、wsc.dump。
B、执行经过签名的合法程序wsc_proxy.exe,并恶意加载loader程序wsc.dll。
C、loader程序wsc.dll解密并解压缩payload文件。
D、解密的shellcode被注入到合法的系统进程中。
E、注入的Windows进程执行C2 /远控功能。

执行链
3.2 攻击细节
Payload启动并挂起系统信任的文件svchost.exe,将具有解密加载功能的函数注入到svchost进程,并在scvhost进程入口地址构造shellcode,唤醒scvhost进程执行shellcode,shellcode将跳转到解密加载函数,该函数解密wsc.dump文件并执行payload。
如上操作后,payload将运行在白名单进程中,达到隐藏自身的目的,后续注入挖空进程msiexec.exe的过程与之相同。
3.3 远控模块
远控功能包括:系统配置、文件管理、屏幕监视、进程管理、服务管理、远程shell、网络配置、注册表管理、数据库管理、键盘记录等。
分发命令子命令描述Option0x2000锁屏0x2001直接关机0x2002重启动0x2003提示将关机0x2005弹出对话框
表一
分发命令子命令描述Disk0x3000遍历磁盘0x3001查找文件0x3002递归查找文件0x3004读取文件0x3007写文件0x300A创建文件0x300C创建隐藏桌面,并创建进程0x300D文件操作(复制、移动、重命名)0x300E根据环境变量名获取路径
表2
分发命令子命令描述Screen0x4000远程桌面0x4100截图
表3
分发命令子命令描述Process0x5000创建进程0x5001枚举进程0x5002关闭进程
表4
分发命令子命令描述Service0x6000查询服务配置0x6001修改服务配置0x6002启动服务0x6003控制服务0x6004删除服务
表5
分发命令子命令描述Shell0x7002启动cmd
表6
分发命令子命令描述Telnet0x7100启动Tlenet服务
表7
分发命令子命令描述RegEdit0x9000枚举注册表键0x9001创建注册表键0x9002删除注册表键0x9003复制注册表键0x9004枚举键值0x9005设置键值0x9006删除键值0x9007读取键值
表8
分发命令子命令描述Nethood0xA000枚举网络资源
表9
分发命令子命令描述PortMap0xB000开启端口映射
表10
分发命令子命令描述SQL0xC000获取数据库信息0xC001列出驱动程序说明s0xC002连接数据库
表11
分发命令子命令描述Netstat0xD000获取TCP相关信息0xD001获取UDP相关信息0xD002设置TCP连接的状态
表12
分发命令子命令描述KeyLog0xE000键盘记录
表12
分发命令子命令描述ClipLog0xF000剪切板记录
表13
3.4 逆向细节
3.4.1 wsc_proxy.exe
wsc_proxy.exe文件数字签名为AVAST Software
s.r.o.,来自安全厂商AVAST。说明样本开发者拥有该安全厂商私有证书,利用证书将样本签名,达到免杀目的(可能是由于厂商的数字签名私钥泄露或被破解)。

wsc_proxy.exe数字签名
0x1 加载“解密dll”
wsc_proxy.exe为带签名的白名单程序,程序功能为:加载wsc.dll。

3.4.2 wsc.dll
0x1 构造shellcode
wsc.dll构造了一段shellcode调用wsc.dll导出函数sub_10001000,构造地址为wsc_proxy.exe加载自身完成时。sub_10001000为加载函数。

构造shellcode

Shellcode地址

执行流程
0x2加载wsc.dump
读取wsc.dump到内存,修改内存属性为可执行,跳转到目标wsc.dump地址执行。

文件路径

修改内存属性,跳转执行
3.4.3 wsc.dump
文件wsc.dump猜测为样本开发者从内存中dump函数指令得到二进制文件,跳转到文件首地址即可正常执行函数。
0x1 解密解压缩并执行payload
解密wsc.dump自带的加密数据,再次解压得到一个dll文件,在内存中展开PE文件并修复重定位。上述操作完毕后调用该payload(dll)。
在该片内存中标记“PLUG”。

解密算法

解压得到payload
3.4.4 payload
Payload每次启动将检查启动环境,并据此进行一些初始化操作。同时payload将根据启动参数执行不同的功能。

0x1 初始化
提升权限

2) 复制到指令目录
复制样本组件到路径"C:\ProgramData\Windows NT\accessories\
wsc_proxy.exe",文件属性为隐藏,再次启动wsc_proxy.exe。

0x2 注册自启服务:100进程
主要目的为注册自启服务,注册服务之前有检查权限和提升权限的操作。
提权
利用方法:COM提升名称(COM Elevation
Moniker)技术提升接口权限,ICMLuaUtil接口启动附带管理员权限进程wsc_proxy.exe进程,启动参数为100。

进程监控
注册服务

创建服务

注册表被添加的启动服务
0x3 注入、挖空svchost进程:200进程
该进程将查找系统文件svchost.exe,启动并挂起svchost,随后修改svchost进程内存,将一个功能为“解密、解压缩wsc.dll并加载payload”的函数写入到svchost进程内存,寻找入口地址OEP并在此构造shellcode跳转到解密解压缩函数。
恢复svchost主线程,执行解密解压缩操作,执行payload。

创建挂起进程:svchost

计算跳转

构建shellcode
0x4 svchost进程:201进程
创建内存映射,保存一些工具类函数,待后续使用。

保存跨进程访问的工具类函数

保存功能函数

磁盘管理

注册表操作

进程管理

枚举网络资源

获取网络状态

计算机设置

端口映射

服务管理

启动远程cmd

数据库操作

启动telnet服务

Hook键盘消息

保存键盘记录到本地

剪切板记录
操作过程与操作svchost相同,见下图。

上线、通讯
通讯线程为OlProcNotify,该线程能够使用三种协议尝试连接地址steam.dajuw.com,端口为443。
通信成功后发送附带加密key的加密报文,在接收处理循环中接收执行远控指令。

执行流程

上线协议

发送接收指令消息

接收消息、处理指令
4)插件管理器
远控服务器可以发送指令创建模块管理线程,线程名为:OlProcManager。该线程同样先使用指定的协议连接服务器,并进入入一个“发送-接收-处理”循环,遍历执行远控模块具有的功能(管理磁盘、文件、屏幕…)。

发送消息

接收指令循环

执行功能
0x5 msiexec进程:209进程
209进程同201进程将功能模块函数安装,并创建管道实现进程通讯。此外,209进程创建DoImpUserProc线程接收指令执行功能函数。

功能安装与管道通讯

执行功能
0x5 300进程
300进程操作:关闭并删除远控服务,清理远控留下的注册表痕迹,最后将远控程序和文件删除。


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