PsiXBot:模块化.NET僵尸网络的进化

2020-04-18 22:54:20 浏览数 (1)

本文中我们将分享我们对模块化恶意软件 PsiXBot 的分析。该恶意软件于 2017 年首次出现,最近一段时间核心代码与模块有了很大改变。其中包括键盘记录与 Outlook 和浏览器凭据窃取,随着这些新开发项目的完成以及在野观察到的第一批大规模投放,PsiXBot 已正式在恶意软件生态中崭露头角。

介绍

2019 年 2 月 21 日,我们开始注意到一个逐渐铺开的、名为 SmokeLoader 的 Bot,将会在受感染的机器上安装额外的恶意软件,分发 .NET 恶意软件样本。进一步研究发现,该 Bot 是一个具有模块化功能的 Bot,例如从受感染主机窃取数据以及接收、执行任务的功能。当 Spelevo Exploit Kit 在 3 月 16 日开始分发相同的恶意软件时,我们觉得还有进一步调查分析的必要。

从 2017 年开始开发到目前退出 Beta 版本,可以看到它通过多个感染向量进行分发,例如 Exploit Kit 与恶意软件加载器的联动。

分析

最初的分析起源于偶然发现的一条关于 PsiXBot 恶意软件早期版本的 Twitter。同时期也有其他 Twitter 中提到了同一恶意软件的早期版本。

版本概述:

2017 年年中时期:在野发现第一个版本(SHA256:d2ee07bf04947cac64cc372123174900725525c20211e221110b9f91b7806332) 2018 年 8 月:发现更新版本(SHA256:ce0e46fa1c5b463ed4a070a05594a79203ed2dd5df96cece9f875e2957fda4fa) 2019 年年初:通过不同的感染媒介分发最新版恶意软件(SHA256:ca30c42334fcc693320772b4ce1df26fe5f1d0110bc454ec6388d79dffea4ae8)

下图显示了不同版本程序的代码结构,左侧是第一个版本,右侧是最新版本:

请注意,PsiX 来源于程序的名字,看一下 PDB 路径可以发现相同的命名:G:WORKMONEYBOTNoNamePsiXobjReleaseNoNameBot.pdb。

另外,看一下上图中间样本的代码结构,也可以看到 Radius。另外在 C&C 服务器中也可以发现部分字符:radcall.bit、radbot.bit 与 rrradiusspace.bit。

经过分析,各个版本间主要的差异是:

添加更多的模块支持新命令 使用 AES 加密字符串 版本从 Beta 1.0.0 更新到 1.0.1

以下都以最新版本为主进行介绍。

您可能已经注意到了,恶意软件使用 .NET 编写的,而且没有使用混淆。通常来说,主要的 Payload 都隐藏在一个 Dropper 内,一旦执行就会调用 Main() 函数。首先通过查看硬编码的互斥锁 gfdhfyf543543cdsdfsdf 来验证它是唯一运行的实例,然后在正式运行前执行大量循环模拟 sleep() 函数。

大多数字符串使用硬编码字符串密钥通过 AES 进行加密,分析样本的示例使用的是 1243hewqr8n1220g321&^*&^Tb0。

此外,它还会检查受害者的语言设置,如果语言设置为 ru-RU(俄语),恶意软件将会直接退出。对于所有其他语言设置,恶意软件将会继续恶意软件活动。

程序还会检查文件名是否与配置的文件名对应。对应不上时,通过 WMI 调用 CopyEx 函数后通过 WMI 复制二进制文件。安装路径为 %APPDATA% 文件夹内的 LocalMicrosoft.exe。

安装成功后,恶意软件会与配置好的 C&C 服务器进行通信,C&C 服务器的地址由以下代码初始化:

代码语言:javascript复制
public static string[] valid = new string[]{    
"pppoe.bit",    
"weather0.bit",    
"mygranny.bit",    
"six6.bit",    
"learncpp.bit"};

为了与 .bit 域名进行通信,使用硬编码的 DNS 服务器(193.37.213.223)。DNS 解析成功后,恶意软件会 ping 每个 C&C 服务器,使用第一个响应的 C&C 服务器。

Bot 向 C&C 报告从受感染主机收集的一些信息,示例请求如下:

代码语言:javascript复制
action=call&user_name=john&bot_id=D63BAFF79F3A3504C70DC3298EE74C68&av=N/A&os_major=Microsoft 
Windows 7 Home Basic N &permissions=User&os_bit=64&cpu=Intel(R) 
Core(TM) i7-6820HQ CPU @ 2.70GHz&gpu=Standard VGA Graphics 
Adapter&ram=2048&hdd=C:12345/67890&version=1.0.1&user_group=Admin&pc_net=4.0

参数的含义是:

参数

含义

action

请求的目的

user_name

受感染主机的用户名

bot_id

标识受感染主机的唯一字符串

av

安装的杀毒软件名称

os_major

操作系统名称

permissions

用户的权限

os_bit

操作系统架构

cpu

CPU 型号

gpu

GPU 型号

ram

可用内存

hdd

硬盘序列号

version

恶意软件版本号(最新版为 1.0.1)

user_group

用户组名称

pc_net

安装的.NET框架版本

使用硬编码的密钥(63a6a2eea47f74b9d25d50879214997a)通过 R 算法对数据加密传输。值得注意的是,作者加密了大部分字符串,除了 R 加密密钥、纯文本的 C&C 服务器地址和 DNS 服务器地址。

C&C 服务器使用 JSON 进行回应,如下所示:

代码语言:javascript复制
{    
result_code: [        
{            
"result_code": "200",        
}    
]}

如果服务器返回有效响应,则恶意软件会在请求执行新命令前休眠 95 秒,这是通过发送数据完成的:

代码语言:javascript复制
action=command&bot_id=D63BAFF79F3A3504C70DC3298EE74C68

响应的示例如下:

代码语言:javascript复制
{  
"result_code": [    
{      
"result_code": "200"    
}  
],  "commands": [    
{      
"command_id": "1485",      
"command_action": "GetSteallerPasswords",      
"command_data": "",      "command_arg": ""    
},    
{      
"command_id": "1486",      
"command_action": "StartSchedulerModule",      
"command_data": "",      
"command_arg": ""    
}  
]}

在上面的示例中,C&C 服务器 要求执行两个命令,command_action 值是要调用的方法的确切名称,恶意软件根据该值动态解析方法。为了避免硬编码字符串,作者实现了一种简单的方法来升级恶意软件:如果在执行期间恶意软件中没有 C&C 发送的方法名称,就简单的忽略该方法。其中一个调用的方法类型为 SukaBlyat,该词在俄语俚语中是一个冒犯性词汇。

这两个接收的命令被用来请求 C&C 服务器额外的模块,请求模块的数据传输通过:

代码语言:javascript复制
action=module&bot_id=D63BAFF79F3A3504C70DC3298EE74C68&module_action=SchedulerModule

随后,下载并执行该模块,同时发送以下命令:

代码语言:javascript复制
action=result&command_id=1485&command_result=6E756C6C

当前版本支持的命令:

Download DownloadAndExecute Execute GetInstalledSoft GetKeylogs GetOutlook GetProcessesList GetScreenShot GetSteallerCookies GetSteallerPasswords StartAndroidModule StartBTC StartComplexModule StartKeylogger StartNewComplexModule StartSchedulerModule StopProcess

模块

最新版本的 Bot 支持以下模块:

BrowserModule(stMod.exe):从各种浏览器以及 FileZilla FTP 客户端 Dump 密码或 Cookie。接受一个参数指定要 Dump 的数据:-passes 密码或 -cookies cookie。程序返回一个包含所有被盗信息的字符串,看起来基于 QuasarRAT 项目 BTCModule(LESHI.exe):接受参数与加密货币地址。支持 -btc、-ether、-ltc、-monero 和 -ripple。程序每隔 3 秒监视一次剪贴板,验证复制的文本是否是有效的地址。如果检查成功则将其替换为一个配置好的钱包地址 ComplexModule(Client.exe):旧版 QuasarRAT 的开源代码,特别需要注意的是字符串 xclient(它是此模块命名空间的一部分),该字符串出现在 2016 年的一个分支中。在反编译的源代码中,我们发现了 QuasarClient KeyLoggerModule(KeyLoggerModule.exe):使用 SetWindowsHookEx 的 API 进行全局 Hook 监听键盘操作,截获的数据保存在名为 Logger.log 的文件中 NewComplexModule(RemoteClient.exe):类似远程桌面的程序,允许用户进行交互并启动浏览器 OutlookModule(OutlookPasswordRecovery.dll):Dump Outlook 密码并返回包含检索到的信息的字符串 SchedulerModule(Scheduler.exe):用于确保持久性,它只创建一个计划任务,每分钟运行一次 Bot

分发

通常来说,有两种方式分发恶意软件:

感染新的受害者

利用现有感染的机器

PsiXBot 通过垃圾邮件或者 Exploit Kit(例如 Spelevo Exploit Kit)分发恶意软件。以及通过地下黑市提供的服务,在已感染的设备通过如 SmokeLoader 等恶意软件上加载 PsiXBot。

SmokeLoader

执行分发 PsiXBot 恶意软件任务的 SmokeLoader 使用以下元数据进行配置:

代码语言:javascript复制
server_rc4_key_recv     
e097b3a6server_rc4_key  
40e5223bbot_version     
2018seller  
new1c&c    
http://5gssghhs2w.org/2/c&c    
http://dvhwzq.ru/2/c&c    
http://hdxaet.ru/2/c&c    
http://hghwwgh6.info/2/c&c    
http://jdcbhs.ru/2/c&c    
http://kdcbst.ru/2/c&c    
http://kkted54d.ru/2/c&c    
http://si3213gher.com/2/c&c    
http://vshmesz.com/2/c&c    
http://vygxxhh.bit/2/

SmokeLoader 任务分发的 URL 是:hxxp://favoritfile.in/7-8.exe。

从分发的地址下载的样本的 SHA256 为:9b8c0c82fe79ae15e0f723d6aa267d38d359a7260613a091a2d70d770488e919。

该样本的 C&C 服务器地址为:

代码语言:javascript复制
myauto.bitsokoban.bit

Spelevo Exploit Kit

Spelevo Exploit Kit 分发的样本的 SHA256 为:ca30c42334fcc693320772b4ce1df26fe5f1d0110bc454ec6388d79dffea4ae8。

该样本的 C&C 服务器为:

代码语言:javascript复制
learncpp.bitmygranny.bitpppoe.bitsix6.bitweather0.bit

另一个分发投递的渠道是垃圾邮件,我们观测到的其中一个垃圾邮件活动与意大利有关,包含以下元数据:

代码语言:javascript复制
Receiver    
from pecfe04.sogei.it (pecfe04.sogei.it [26.2.42.237]) by PECP-BE02 (lmtpd) with LMTP id 28663.002; 
Tue, 8 Jan 2019 16:22:51  0100 (CET)Receiver    
from PECP-FE04 ([127.0.0.1]) by pecfe04.sogei.it (Dovecot) with LMTP id 474fM6e/NFysCAAAxEz/xA ; 
Tue, 08 Jan 2019 16:22:51  0100Receiver    
from mx.pec.sogei.it (localhost [127.0.0.1]) by smtps.pec.sogei.it (Postfix) with ESMTP id 43YwxQ6pm5zgYCT for <protocollo@pec.agenziariscossione.gov.it>; 
Tue, 8 Jan 2019 16:22:50  0100 (CET)Receiver    
from smtps.pec.aruba.it (smtpecgo01.pec.aruba.it [80.88.94.21]) by mx.pec.sogei.it (Postfix) with ESMTPS for <protocollo@pec.agenziariscossione.gov.it>; 
Tue, 8 Jan 2019 16:22:50  0100 (CET)Receiver    
from avvocatismcv.com (ipvspec1.pec.ad.aruba.it [62.149.152.1]) by smtps.pec.aruba.it (Postfix) with ESMTPSA id 43YwxQ2V8Sz2L7hcc; 
Tue, 8 Jan 2019 16:22:50  0100 (CET)Reply-To    
luigi.ferrandino@avvocatismcv.comReturn-Path     luigi.ferrandino@avvocatismcv.comAttachments     
["daticert.xml", "Nuovi_contratti_2019__145038.zip", "smime.p7s"]Number_of_attachments   
3Date    2019-01-08 15:22:50 (UTC)To  ["luigi.ferrandino@avvocatismcv.com"]From    
"Per conto di: luigi.ferrandino@avvocatismcv.com" <posta-certificata@pec.aruba.it>Subject     
POSTA CERTIFICATA: Re: Notificazione ai sensi della legge n. 53 del 1994

该压缩文件包含一个 JavaScript 脚本(SHA256:e4006cde4a96048ff25727459abfae0ffd37985d04581793be784d7cf50e32d7),一旦执行从 hxxp://img.martatovaglieri.it/index?83836 下载下一个阶段的 Payload。

下载的二进制文件的 SHA256 为:db1f57ffd6c58e1d40823e2c8834e45a67271557ceaa1b3bcccf4feab83243a1。

该样本文件的 C&C 服务器为:

代码语言:javascript复制
anyname.bit

控制面板

下图显示了 PsiXBot 的登录面板:

在 HTML 中可以发现以下代码:

代码语言:javascript复制
<!-- saved from url=(0043)hxxps://kyrkymalol.000webhostapp.com/admin/ -->

IOC

代码语言:javascript复制
d2ee07bf04947cac64cc372123174900725525c20211e221110b9f91b7806332ce0e46fa1c5b463ed4a070a05594a79203ed2dd5df96cece9f875e2957fda4faca30c42334fcc693320772b4ce1df26fe5f1d0110bc454ec6388d79dffea4ae86a9841b7e19024c4909d0a0356a2eeff6389dcc1e2ac863e7421cca88b94e7e06e123ce5c7c48132f057428c202638eb9d0e4daa690523619316a9f72b69d17f3846fcfdc6414685efd217a88613ed3383a61f8313a0aa7ecdcde8ed99c8ebac7bac9b3b5598059db770cdeee74f0b1cf3078c2cb54cc2fcd18ae811d42a5d630f931fec3fd436d974d767f84f66b44f6f2fc168d9e6d77b2aa2e9d3bf4cd604a5edab1596346358c8899b9f81ec49b0560da929327e0ef08ab51dcb277c9b70b01fbb8cfeb16c4232fddea6dea53212a57e73ef32ee20056cd69d29570bf55c

可以在 GitHub 页面上找到完整的 IOC 列表。

0 人点赞