本文中我们将分享我们对模块化恶意软件 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:\WORK\MONEY\BOT\NoName\PsiX\obj\Release\NoNameBot.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% 文件夹内的 Local\Microsoft.exe。
安装成功后,恶意软件会与配置好的 C&C 服务器进行通信,C&C 服务器的地址由以下代码初始化:
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 报告从受感染主机收集的一些信息,示例请求如下:
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 进行回应,如下所示:
{
result_code: [
{
"result_code": "200",
}
]}
如果服务器返回有效响应,则恶意软件会在请求执行新命令前休眠 95 秒,这是通过发送数据完成的:
action=command&bot_id=D63BAFF79F3A3504C70DC3298EE74C68
响应的示例如下:
{
"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 服务器额外的模块,请求模块的数据传输通过:
action=module&bot_id=D63BAFF79F3A3504C70DC3298EE74C68&module_action=SchedulerModule
随后,下载并执行该模块,同时发送以下命令:
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。
执行分发 PsiXBot 恶意软件任务的 SmokeLoader 使用以下元数据进行配置:
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 服务器地址为:
myauto.bitsokoban.bit
Spelevo Exploit Kit 分发的样本的 SHA256 为:ca30c42334fcc693320772b4ce1df26fe5f1d0110bc454ec6388d79dffea4ae8。
该样本的 C&C 服务器为:
learncpp.bitmygranny.bitpppoe.bitsix6.bitweather0.bit
另一个分发投递的渠道是垃圾邮件,我们观测到的其中一个垃圾邮件活动与意大利有关,包含以下元数据:
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 服务器为:
anyname.bit
下图显示了 PsiXBot 的登录面板:
在 HTML 中可以发现以下代码:
<!-- saved from url=(0043)hxxps://kyrkymalol.000webhostapp.com/admin/ -->
d2ee07bf04947cac64cc372123174900725525c20211e221110b9f91b7806332ce0e46fa1c5b463ed4a070a05594a79203ed2dd5df96cece9f875e2957fda4faca30c42334fcc693320772b4ce1df26fe5f1d0110bc454ec6388d79dffea4ae86a9841b7e19024c4909d0a0356a2eeff6389dcc1e2ac863e7421cca88b94e7e06e123ce5c7c48132f057428c202638eb9d0e4daa690523619316a9f72b69d17f3846fcfdc6414685efd217a88613ed3383a61f8313a0aa7ecdcde8ed99c8ebac7bac9b3b5598059db770cdeee74f0b1cf3078c2cb54cc2fcd18ae811d42a5d630f931fec3fd436d974d767f84f66b44f6f2fc168d9e6d77b2aa2e9d3bf4cd604a5edab1596346358c8899b9f81ec49b0560da929327e0ef08ab51dcb277c9b70b01fbb8cfeb16c4232fddea6dea53212a57e73ef32ee20056cd69d29570bf55c
可以在 GitHub 页面上找到完整的 IOC 列表。