WSH RAT分析报告

0x00 概述

基本信息

样本名称 4gdrwceq60b7dbl.sct
样本类型 蠕虫、远控木马
样本大小 394KB (403,845字节)
MD5 69B7D326575C5616D82645960B3D081A

简介

经过分析,该恶意样本是一个js脚本(伪装成.sct文件),当该样本执行起来,会再释放出两个js文件,并添加开机自启动,感染可移动设备(也通过可移动设备进行传播),并与两个C&C服务器进行交互,从C&C服务器上接收指令,执行不同的操作。其远控功能完事,能释放多种模块,执行不同的指令等。

流程图

未命名文件

样本执行流程图

0x01 样本细节详细分析

提取JS代码

该样本是一个Script Component格式的文件,属于文本文件,这里直接用记事本打开该文件,发现文件中存在大 量的JS代码,初步判断这是一个由JavaScript编写的恶意代码,通过伪装成.sct文件进行传播的。将其中JS全部拷贝至一个js文件中,本文将其命名为1.js,继续进行下一步分析。文件内容如下:

1568788099959

样本行为分析

1.文件写入行为分析

运行提取出来的JS代码,然后对所有子进程的写入行为进行过滤,发现共写入了4个文件,分别在下表的两个路径中,各释放了taskmgr.js和aFCnKVCdfY.js两个JS文件。

1
2
3
C:\User\<UserName>\AppData\Roaming

C:\Users\<UserName>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

Monitor抓取到的行为如图1:

1568790008293

图1
- 然后逐步查看文件释放过程,用monitor先对提取出来的1.js文件进行过滤,发现1.js只在C:\User\\AppData\Roaming路径下释放了taskmgr.js文件。如图1.1:

1568794415800

图1.1
  • 然后对进程taskmgr.js的文件写入行为进行过滤,发现在taskmgr.js在C:\User<UserName>\AppData\Roaming路径下释放了aFCnKVCdfY.js,并且将自身复制到开机自启动目录下,如图1.2:

    1568794858199

    图1.2
  • 然后对进程aFCnKVCdfY.js的文件写入行为进行过滤,发现aFCnKVCdfY.js将自身复制到开机自启目录下,如图1.3:

    1568795005351

    图1.3

2.进程分析

  • 查看进程树,运行提取出来的JS代码程序后,迅速结束自身。然后运行释放在AppData中的taskmgr.js。如图2:

1568790452813

图2
- 然后执行的脚本taskmgr.js又执行了释放在AppData中的aFCnKVCdf.js,如图3:

1568790636764

图3
### 3.网络行为分析

执行起来的两个脚本文件,进行了大量的网络请求。并且从中不难看出,每个脚本都在不断的与一个固定的域名进行通信,且两个脚本所通信的域名也并不相同。如图4:

1568791204672

图4
### 4.注册表行为分析

运行起来的两个脚本文件,分别添加了两个自启动项,分别为:

1
2
HKCU\Software\Microsoft\Windows\CurrentVersion\Run\taskmgr.js
HKCU\Software\Microsoft\Windows\CurrentVersion\Run\aFCnKVCdf.js

Monitor抓取的修改注册表行为,如图5:

1568791716413

图5
## 样本详细分析

释放文件taskmgr.js

打开提取出来的1.js文件,发现该文件中存在大量经过特殊处理的数据。然后经过分析,1.js这个脚本文件主要是将这些经过加工的数据还原,然后再将还原后的数据写入C:\Users\john\AppData\Roaming\taskmgr.js文件中。也就释放出了Appdata目录下的taskmgr.js文件了,行为可见行为分析图1.1所示。1.js代码执行代码如图:

1568798133825

分析taskmgr.js:解密并执行

查看taskmgr.js的代码,能发现该代码中又有大量加密过的数据。经过分析,taskmgr.js脚本主要就是将经过替换加密的数据还原,并调用eval()函数,执行解密后的数据。由于该脚本的执行逻辑比较复杂,为了读者能更好的理解,这里将调主要的执行步骤加以说明。

  • 替换过程:首先通过正则表达式选中文中所有的!- %,然后通过函数replace将正则选中的(!- %)全部替换为A,如下图:

    1568857877945

  • 解密过程:先初始化一个元素tmp,将tmp.datatype设置为base64,再将tmp.text设置为上一步替换后的数据,然后通过nodeTypeValue属性,将替换后的数据解密出来,然后再转换为字符串赋值到.oneFam1ly[1].item。此时的.oneFam1ly[1].item就是最终要执行的代码。如图:

    1568859989461

  • 执行过程:先通过meatSTEW执行,执行完返回eval(),然后再通过eval执行上一步解密出来的数据。,如图:

    1568861002712

分析taskmgr.js所执行的解密代码

这里以同样的方式进行解密,先将加密数据中的!-%替换为A,再通过notepad++进行解密,就能获取到taskmgr所执行的代码,将解密后的代码保存下来并命名为taskmgr_new_1,代码如下图:

1568861303465

释放文件aFCnKVCdfY.js

执行的task_new_1,首先释放了文件aFCnKVCdfY.js,先获取Appdata的环境变量,再进行拼接路径,然后将加密的数据写入该文件中,行为可见行为分析图1.2,执行代码如图:

1568862105907

然后下面的部分就先不详细分析了,因为下面的部分与后面将要分析aFCnKVCdfY.js所执行的解密数据的内容基本都是相同的,所以会在后面分析aFCnKVCdfY.js所执行的解密数据中进行详细分析。而taskmgr.js所执行的解密数据中与aFCnKVCdfY.js所执行的解密数据,唯一的不同在于:C&C服务器不同,如图:

taskmgr_new_1.js所访问的C&C服务器
globalization.duckdns.org:50071

1568862325996

分析aFCnKVcdfY.js:解密并执行

经过对比发现释放出来的文件aFCnKVcdfY.js,与之前分析的taskmgr.js,除了要执行的代码不同外其他都是一样的。因此也就如同taskmgr.js一样,是解密数据并执行,只不过执行的代码不同罢了。这里就不在做过多的分析。两个文件的对比图如下:

1568863479242

分析aFCnKVcdfY.js所执行的解密代码

初始化信息

初始化后面要用到的数据,如:C&C服务器,和文件下载路径installdir,以及开机自启动路径等信息。如图:

1568865304626

样本主要行为函数分析

初始化完数据后,代码进入主要执行部分,接下来将逐个分析该恶意样本能做什么做了什么。它的主要行为函数段如下图:1568869097927

初始化实例,添加自启动,确保文件已运行

函数instance,修改注册表项,并调用函数upstart添加开机自启动项,并检查释放出来的文件是否已运行,若没运行便启用。如图:

1568871419284

  • 其中添加自启动项函数upstart(),修改注册表

    HKEY_CURRENT_USER\software\microsoft\windows\currentversion\run<filename>
    HKEY_LOCAL_MACHINE\software\microsoft\windows\currentversion\run<filename>

    并将自身文件拷贝到installdir目录下和开机自启动文件目录下,代码如下图:

1568871796431

感染可移动硬盘,实现传播

函数install,首先判断磁盘类型,当磁盘类型为可移动磁盘时,将自身复制到可移动磁盘中,并添加隐藏和系统属性,如图:

1568872269934然后再遍历所有文件,将所有文件属性设置为隐藏,并创建同名文件的快捷方式,该快捷方式执行命令为:

1
cmd.exe /c start <拷贝后的js文件(病毒文件本身)> & <可移动磁盘中的原文件> & exit

并通过查询注册表,获取文件的图标,将快捷方式的图标替换为文件原本图标。这样做的目的就是迷惑使用者打开伪装成正常文件的快捷方式,而该快捷方式会执行恶意程序,最终达到传播感染的目的。代码如图:

1568873846687

然后还遍历了所有文件夹,并执行了跟文件一样的操作,目的依旧是迷惑使用者运行恶意程序,最终实现通过可移动设备传播感染的目的。代码如图:

1568873952855

向C&C发送信息,并接受指令

函数post,将获取到的主机信息,发送到C&C服务器,并返回接收到的指令。如图:

1568874628464

函数post发送的数据的域名会根据函数的第一个参数,进行改变,如下图中post的 第一个参数为“is-ready”,那么该post发送数据的域名就为:unknownsoft.duckdns.org:7744/is-ready,也就是在行为分析中抓到的大量请求包的域名,可见行为分析图4。

1568874790418

  • 其中函数information,会获取主机信息。获取的信息如下表:

    获取的主机信息有:
    获取逻辑磁盘卷序列号信息
    获取主机名信息
    获取用户名信息
    获取所含有的杀软信息
    获取操作系统版本信息

information函数如下图:

1568875219107

根据接收的指令,执行相应操作

该样本不仅传播扩散自身,样本本身也是一个强大的远控木马。根据从C&C服务器接收到的指令,执行相应的操作,如图:

1568875879288

其中所有的指令及功能都汇聚在下表中:

接收到的指令 执行相应的操作
disconnect 断开连接,关闭程序
reboot 重启操作系统
shutdown 关闭计算机
excecute 执行接收到的指令2
install-sdk 下载SDK文件,并解压
get-pass 获取浏览器密码,并解密后的密码发送到C&C服务器
get-pass-offline 离线模式获取浏览器密码,大体与get-pass一样
update 更新<installdir目录>下的文件
uninstall 删除自身,清除所有远控木马程序的痕迹
up-n-exec 从C&C服务器,下载文件,并执行
bring-log 将<wshlogs\cmd[1]>文件中保存的日志内容,发送到C&C服务器
down-n-exec 从指定URL,下载文件,并执行
filemanager 从指定URL下载fm-plugin.exe,并运行
rdp 从指定URL下载rd-plugin.exe,并运行
keylogger 从指定URL下载kl-plugin.exe,并以参数为0运行
offline-keylogger 从指定URL下载kl-plugin.exe,并以参数为1运行
browse-logs 将<installdir\wshlogs>文件夹下的所有文件和文件夹信息发送到C&C服务器
cmd-shell 执行接受到的DOS命令,并将执行结果发送到C&C服务器
get-processes 将获取当前进程信息,发送到C&C服务器
disable-uac 关闭UAC,并向C&C服务器更新状态
check-eligible 检测指定文件是否存在,并向C&C服务器更新状态
force-eligible 检测当前执行权限,可执行DOS命令,并向C&C服务器更新状态
elevate 以管理员权限运行
if-elevate 判断执行参数中有无“elevated”,并将判断结果发往C&C服务器
kill-process 根据接收到的PID,结束指定进程
sleep 根据接收到的值,进行睡眠

0x02 样本溯源

C&C服务器
unknownsoft.duckdns.org:7744
globalization.duckdns.org:50071

根据下图中的skype的信息,可以查找到该样本的相关信息,搜索结果与该样本大致一致。可知该样本是名为H-worm的蠕虫病毒变种。

1568880382170

继续查H-Worm,就能查到其他厂商相关的分析报告,可从中知该样本是基于VBS(Visual Basic Script)的Houdini蠕虫(H-Worm)的最新变种,其中Houdini蠕虫最初是在2013年开发和传播的。

1568881017249

链接为:http://www.mottoin.com/detail/4066.html

0x03 查杀方案

利用自身脚本进行查杀

由于该远控软件中有删除自身的功能,且删除自身还是比较干净,因此可以利用该代码进行查杀,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
function uninstall()                        //函数:卸载远控木马,清除所有远控木马程序的痕迹
{
try {
//|-------------------------------删除文件,删除自启动项-------------------------------------|
var filename;
var foldername;
try
{
//删除注册表:HKEY_CURRENT_USER\software\microsoft\windows\currentversion\run\<filename>
//删除注册表:HKEY_LOCAL_MACHINE\software\microsoft\windows\currentversion\run\<filename>
WScript.Shell.RegDelete("HKEY_CURRENT_USER\\software\\microsoft\\windows\\currentversion\\run\\" + self_fileName.split(".")[0]);
WScript.Shell.RegDelete("HKEY_LOCAL_MACHINE\\software\\microsoft\\windows\\currentversion\\run\\" + self_fileName.split(".")[0]);
} catch (ei) {}
try
{
//删除自启动文件夹下的该文件
scripting.filesystemobject.deleteFile(startup + self_fileName, true);
//删除正在运行的文件自身
scripting.filesystemobject.deleteFile(WScript.scriptFullName, true);
} catch (eej) {}

//|--------------------------------恢复移动硬盘文件-------------------------------------------|
for (var dri = new Enumerator(scripting.filesystemobject.drives); !dri.atEnd(); dri.moveNext())
{
var drive = dri.item();
if (drive.isready == true) //判断磁盘是否存在
{
if (drive.freespace > 0) //判断磁盘可用空间大小是否大于0
{
if (drive.drivetype == 1) //判断是否是可移动磁盘
{
for (var fi = new Enumerator(scripting.filesystemobject.getfolder(drive.path + "\\").files); !fi.atEnd(); fi.moveNext())
{
var file = fi.item();
try
{
if (file.name.indexOf("."))
{
if ((file.name.split(".")[file.name.split(".").length - 1]).toLowerCase() != "lnk")
{
file.attributes = 0;
if (file.name.toUpperCase() != self_fileName.toUpperCase())
{
filename = file.name.split(".");
scripting.filesystemobject.deleteFile(drive.path + "\\" + filename[0] + ".lnk"); //删除链接文件
}
else
{
scripting.filesystemobject.deleteFile(drive.path + "\\" + file.name); //删除脚本文件
}
} else
{
scripting.filesystemobject.deleteFile(file.path); //删除脚本文件
}
}
} catch (ex) {}
}
for (var fi = new Enumerator(scripting.filesystemobject.getfolder(drive.path + "\\").subFolders); !fi.atEnd(); fi.moveNext())
{
var folder = fi.item();
folder.attributes = 0; //还原文件属性
}
}
}
}
}
} catch (err) {}
WScript.quit();
}
uninstall();

直接复制出来,保存到一个js文件,然后运行就可以进行查杀。

0x04 总结

该恶意样本是H-worm病毒的变种,是蠕虫病毒与远控木马的结合,伪装成.sct文件,进行传播。当该样本执行起来,会自动添加自启动项,感染可移动设备(可通过移动设备进行传播),并会从C&C服务器上接收指令,执行不同的操作。该样本的远控功能完事,能够盗取受害者的网络浏览器和电子邮件客户端的密码、远程控制目标计算机、上传、下载执行文件以及执行远程脚本和命令等,同时它还具有键盘记录,对抗安全软件等多种功能。