关键点
-
Avast 发现并分析了劫持 eScan 防病毒更新机制以分发后门和挖矿程序的恶意软件活动
-
Avast 向 eScan 防病毒软件和印度 CERT 披露了该漏洞。2023年7月31日,eScan确认问题已修复并成功解决
-
该活动是由可能与 Kimsuky 有联系的威胁行为者精心策划的
-
已发现两种不同类型的后门,针对大型企业网络
-
GuptiMiner分配的最终有效负载也是XMRig
介绍
我们一直在这里追踪一个好奇的人。首先,GuptiMiner 是一种高度复杂的威胁,它使用有趣的感染链以及多种技术,包括向攻击者的 DNS 服务器执行 DNS 请求、执行旁加载、从看似无辜的图像中提取有效负载、使用自定义可信根对其有效负载进行签名锚定认证机构等。
GuptiMiner 的主要目标是在大型企业网络中分发后门。我们遇到过这些后门的两种不同变体:第一种是 PuTTY Link 的增强版本,提供本地网络的 SMB 扫描,并允许通过网络横向移动到网络上可能易受攻击的 Windows 7 和 Windows Server 2008 系统。第二个后门是多模块的,接受攻击者的命令安装更多模块,并专注于扫描本地系统上存储的私钥和加密钱包。
有趣的是,GuptiMiner 还在受感染的设备上分发 XMRig,这对于如此深思熟虑的操作来说有点出乎意料。
GuptiMiner 背后的攻击者一直在利用印度防病毒供应商 eScan 更新机制中的不安全性,通过执行中间人攻击来传播恶意软件。我们向 eScan 和印度 CERT 披露了此安全漏洞,并于 2023 年 7 月 31 日收到 eScan 的确认,表明该问题已修复并成功解决。
GuptiMiner 是一种历史悠久的恶意软件,其痕迹可以追溯到 2018 年,尽管它的历史可能更早。通过观察 Kimsuky 键盘记录器和 GuptiMiner 操作部分之间的相似性,我们还发现 GuptiMiner 可能与臭名昭著的朝鲜 APT 组织 Kimsuky 存在联系。
在本次分析中,我们将介绍 GuptiMiner 的功能及其随时间的演变。我们还将指出哪些示例包含或引入了特定功能,以支持对各种 IoC 的整体理解。
还需要注意的是,由于用户很少在他们的计算机上安装多个反病毒软件,因此我们对 GuptiMiner 的活动及其整体范围的了解可能有限。因此,我们可能只看到了冰山一角,整个行动的真实范围可能仍有待发现。
感染链
为了说明整个感染的复杂性,我们提供了包含链所有部分的流程图。请注意,根据 GuptiMiner 的具体版本,某些使用的文件名和/或工作流程可能会略有不同,但下面的流程图说明了整个过程。
整个过程从 eScan 向更新服务器请求更新开始,其中未知的 MitM 拦截下载并将更新包与恶意包交换。然后,eScan 解压并加载该包,并由 eScan 干净的二进制文件旁加载 DLL。该 DLL 启用链的其余部分,随后是多个 shellcode 和中间 PE 加载程序。
由此产生的 GuptiMiner 包括在受感染的计算机上使用 XMRig 以及引入后门,这些后门在大型企业网络中部署时会被激活。
演变和时间表
GuptiMiner 至少从 2018 年起就一直活跃。多年来,其背后的开发人员已经显着改进了恶意软件,带来了新功能。我们将在各个小节中详细描述具体功能。
话虽如此,我们还想以时间线表示形式说明重要的 IoC,以及它们如何随时间变化 – 重点关注互斥体、PDB 和使用的域。这些时间线是基于在大型样本数据集上扫描 IoC、获取样本的第一个和最后一个编译时间戳,然后形成间隔而创建的。请注意,扫描的数据集大于IoC 部分中列出的 IoC 。有关 IoC 的更详细列表,请访问我们的GitHub。
时间域
一般来说,GuptiMiner 在运行过程中使用以下类型的域:
-
Malicious DNS– GuptiMiner 托管自己的 DNS 服务器,通过 DNS TXT 响应为 C&C 服务器的真实目标域地址提供服务
-
Requested domains– 恶意软件向 DNS 服务器查询的域
-
PNG download– 用于下载 PNG 文件形式的有效负载的服务器。这些 PNG 文件是有效图像(T-Mobile 的徽标),其末尾包含附加的 shellcode
-
Config mining pool– GuptiMiner 包含两种不同配置的矿池。一个直接硬编码在 XMRig 配置中,在该组中表示
-
Modified mining pool– GuptiMiner 能够修改此组中表示的预定义矿池
-
Final C&C– GuptiMiner 最后后门阶段使用的域,在后门系统中提供额外的恶意软件功能
-
Other– 服务于不同目的的域,例如,在脚本中使用
请注意,由于恶意软件直接连接到恶意 DNS 服务器,因此 DNS 协议与 DNS 网络完全分离。因此,任何合法的 DNS 服务器都不会看到来自该恶意软件的流量。这里使用 DNS 协议作为 telnet 的功能等效项。因此,该技术不是 DNS 欺骗,因为欺骗通常发生在 DNS 网络上。
此外,GuptiMiner 在该类别中要求的服务器Requested domain实际存在的事实纯粹是巧合,或者更确切地说是网络混淆,以迷惑网络监控工具和分析人员。
时间线展示了 GuptiMiner 对域的及时使用情况
从这个时间线可以明显看出,GuptiMiner 背后的作者意识到正确设置 DNS 服务器对于整个链的正常工作至关重要。因此,我们可以观察到该Malicious DNS组中存在最大的轮换和较短的时间范围。
此外,由于该组中的域名Requested domain是不相关的(至少从技术角度来看),我们可以注意到作者在更长的时间内重复使用相同的域名。
时间互斥体
互斥体有助于确保软件的正确执行流程,恶意软件作者经常将这些命名对象用于相同目的。自 2018 年以来,GuptiMiner 已多次更改其互斥体。最重要的是,我们可以注意到自 2021 年以来的变化,作者更改了互斥体以反映新版本的编译/分发日期。
时间轴展示了 GuptiMiner 使用互斥体的时间
细心的读者可能会注意到两个要点:第一个是MIVOD_6
、SLDV15
、SLDV13
和的使用中明显的异常值GlobalWed Jun 2 09:43:03 2021。根据我们的数据,这些互斥体确实在不同的构建中被重复使用了多次,从而产生了比预期更长的时间范围。
PROCESS_另一点是去年年底重新引入了互斥量。这时候作者又重新引入了UTF-16编码的字符串的互斥体,我们单独注释一下。
及时的 PDB
关于调试符号,GuptiMiner 的作者在其二进制文件中留下了多个 PDB 路径。大多数时候,它们包含诸如MainWork
,Projects
等 字符串。
时间线说明了 GuptiMiner 中包含的 PDB 的时间
阶段 0 – 安装过程
拦截更新
每个人都应该更新他们的软件,对吗?通常,个人要么从官方供应商的网站手动下载新版本,要么最好是软件本身自动执行更新,而无需用户过多思考或采取行动。但是,当有人能够劫持这个自动过程时会发生什么呢?
当我们开始观察到一些用户收到来自其他合法请求的异常响应时,我们开始了调查,例如:
http://update3[.]mwti[.]net/pub/update/updll3.dlz
这确实是下载文件的合法 URL updll3.dlz,在正常情况下,该文件是包含 eScan 防病毒更新的合法存档。然而,我们开始在一些客户端上发现可疑行为,这些行为正是源自这样的 URL。
我们发现,GuptiMiner 背后的攻击者正在执行中间人 (MitM) 操作,在受害者的 PC 上下载受感染的安装程序,而不是更新。不幸的是,我们目前没有关于 MitM 是如何执行的信息。我们假设受害者的设备或其网络上必须存在某种预感染,从而导致 MitM。
更新包
c3122448ae3b21ac2431d8fd523451ff25de7f6e399ff013d6fa6953a7998fa3
(version.dll, 2018-04-19 09:47:41 UTC)
在整个分析过程中,我们不仅会尝试描述感染链的流程、恶意软件技术和各个阶段的功能,而且还会关注不同的版本,描述恶意软件作者如何随着时间的推移开发和更改 GuptiMiner。
我们找到的第一个 GuptiMiner 样本是在 2018 年 4 月 19 日星期二编译的,并于第二天从印度上传到 VirusTotal,随后又从德国上传:
c3122448ae3b21ac2431d8fd523451ff25de7f6e399ff013d6fa6953a7998fa3
该文件的命名C:Program FileseScanVERSION.DLL表明目标受众是真正的 eScan 用户,它来自 AV 下载的更新包。
尽管此版本缺少较新示例中的一些功能,但安装过程仍然相同,如下所示:
-
eScan更新程序触发更新
-
由于缺少 HTTPS 加密(执行了 MitM),下载的软件包文件被线上的恶意文件替换
-
updll62.dlz更新程序下载并解压 恶意软件包
-
该包的内容包含version.dll由 eScan 旁加载的恶意 DLL(通常称为 )。由于旁加载,DLL 以与源进程 eScan 相同的权限运行,并且在 eScan 下次运行时加载,通常是在系统重新启动后
-
如果系统中不存在互斥体(取决于版本,例如Mutex_ONLY_ME_V1),恶意软件将搜索services.exe进程并将其下一阶段注入它可以找到的第一个阶段
-
执行清理,删除更新包
恶意 DLL 包含干净的 DLL 中不存在的附加功能。值得庆幸的是,这些名称非常冗长,因此大多数名称都不需要进行分析。功能列表如下所示。
附加导出函数
然而,有些功能是独一无二的。例如,该函数X64Call提供Heaven’s Gate,即它是一个帮助函数,用于在64位系统上的32位进程内运行x64代码。恶意软件需要它才能运行注入的 shellcode,具体取决于操作系统版本以及services.exe进程的位数。
天堂之门在需要时在 x64 环境中运行 shellcode
为了保持原始 eScan 功能的完整性,恶意软件version.dll还需要处理原始的遗留version.dll功能。这是通过转发原始 DLL 中的所有导出函数来完成的。当识别出对旧 DLL 函数的调用时,GuptiMiner 会解析原始函数并随后调用它。
确保所有原始version.dll导出可用的解析功能
在 services.exe 中注入 Shellcode
shellcode注入后services.exe,作为下一阶段的加载器。这是通过读取纯文本形式的嵌入 PE 文件来完成的。
shellcode加载的嵌入PE文件
该PE文件通过标准方式加载,但此外,shellcode还破坏PE的DOS标头并通过调用其入口点来运行它,并且从原始位置内存中完全删除嵌入的PE。
命令行操作
在整个GuptiMiner感染链中,每个加载和注入PE文件的shellcode也会操纵当前进程的命令行。这是通过操作结果来完成的,GetCommandLineA/W该结果更改了任务管理器中显示的结果命令行。
命令行操作功能
检查此功能后,我们认为它要么没有按照作者的预期工作,要么我们不理解它的用法。长话短说,命令行的更改方式是–parameter跳过第一个之前的所有内容,然后将此参数附加到进程名称中。
为了说明这一点,我们可以使用一个命令:
notepad.exe param1 --XX param2
它将被转换为:
notepad.exeXX param2
然而,我们还没有看到这样的用法power –shell.exe param1 param2会导致:
powershell.exe param1 param2
我们也没有看到任何参数隐藏(例如 XMRig 的用户名和密码),这是我们在遇到此类情况时预期的一种行为。无论哪种情况,此功能都会混淆命令行外观,这一点值得一提。感兴趣的读者可以在此处的很棒的 godbolt.org 上试用该功能。
代码虚拟化
7a1554fe1c504786402d97edecc10c3aa12bd6b7b7b101cfc7a009ae88dd99c6
(version.dll, 2018-06-12 03:30:01)
另一个带有互斥锁的版本ONLY_ME_V3引入了代码虚拟化。这可以通过 PE 文件中名为 的附加部分观察到.v_lizer。此部分在后来的版本中也被重命名了几次。
包含虚拟化代码的新部分称为.v_lizer
值得庆幸的是,只要 shellcode 和嵌入的 PE 文件仍然是明文形式,混淆就相当弱。
此外,作者开始version.dll通过额外的互斥体来区分 shellcode 加载的阶段和 PE 文件。以前,两个阶段都使用共享互斥体ONLY_ME_Vx,现在侧面加载用作MTX_V101互斥体。
阶段 0.9 – 安装改进
3515113e7127dc41fb34c447f35c143f1b33fd70913034742e44ee7a9dc5cc4c
(2021-03-28 14:41:07 UTC)
随着时间的推移,安装过程经历了多次改进,并且由于它与旧版本相比有很大不同,因此我们决定将其单独描述为中间阶段 0.9。通过这些改进,作者引入了计划任务、WMI 事件、两个不同加载的下一阶段(阶段 1 – PNG 加载器)、关闭 Windows Defender 以及将精心设计的证书安装到 Windows 的使用。
此阶段还删除了多个文件,从而使恶意软件能够进一步进行旁加载。这些文件是干净的,专门用于旁加载目的。被侧面加载的恶意 DLL 是两个 PNG 加载器(第一阶段):
de48abe380bd84b5dc940743ad6727d0372f602a8871a4a0ae2a53b15e1b1739 *atiadlxx.dll
e0dd8af1b70f47374b0714e3b368e20dbcfa45c6fe8f4a2e72314f4cd3ef16ee *BrLogAPI.dll
WMI 事件
de48abe380bd84b5dc940743ad6727d0372f602a8871a4a0ae2a53b15e1b1739
(atiadlxx.dll, 2021-03-28 14:30:11 UTC)
在此阶段,WMI 事件用于加载第一个 PNG 加载器。该加载程序被提取到路径:
C:PROGRAMDATAAMDCNextatiadlxx.dll
与此同时,附加的干净文件被删除,它们用于侧面加载,在这些位置之一(可以是两个):或
C:ProgramDataAMDCNextslsnotif.exe
C:ProgramDataAMDCNextmsvcr120.dll
C:Program Files (x86)AMDCNextCCCSlimslsnotify.exe
C:Program Files (x86)AMDCNextCCCSlimmsvcr120.dll
然后通过 WMI 事件注册干净文件slsnotify.exe,以便在满足以下条件时执行该文件:
触发侧面加载的 WMI 条件
换句话说,侧载是在 1 月、7 月或 11 月的工作日执行的。代表的数字%d是随机选择的值。该小时的两个可能性正好相隔两个小时,并且在 11-16 或 13-18(含)范围内。这种情况进一步凸显了 GuptiMiner 运营的长久性。
计划任务
e0dd8af1b70f47374b0714e3b368e20dbcfa45c6fe8f4a2e72314f4cd3ef16ee
(BrLogAPI.dll, 2021-03-28 14:10:27 UTC)
与 WMI 事件类似,GuptiMiner 也会在此位置放置一个用于旁加载的干净二进制文件:
C:ProgramDataBrotherBrmfl14cBrRemPnP.exe
然后,恶意 PNG 加载器被放置在以下位置之一(或两个位置):
C:Program Files (x86)BrotherBrmfl14cBrLogAPI.dll
C:Program FilesBrotherBrmfl14cBrLogAPI.dll
计划任务是通过调用任务计划程序创建的。计划任务具有以下特点:
-
它被创建并命名为C:WindowsSystem32TasksMicrosoftWindowsBrotherBrmfl14c
-
执行:C:ProgramDataBrotherBrmfl14cBrRemPnP.exe
-
执行是在包含要旁加载的 DLL 的文件夹下完成的,例如:C:Program Files (x86)BrotherBrmfl14c
-
TASK_TRIGGER_BOOT每次启动 ( ) 时都会以SYSTEM特权 执行该执行
停机期间部署
3515113e7127dc41fb34c447f35c143f1b33fd70913034742e44ee7a9dc5cc4c
(2021-03-28 14:41:07 UTC)
现在让我们看看所有这些文件(无论是干净的还是恶意的)是如何部署的。GuptiMiner 的技巧之一是,它仅在系统关闭过程中删除包含 PNG 加载阶段的最终有效负载。因此,这种情况发生在其他应用程序关闭并且可能不再保护用户时。
Stage 0.9 变体的主要流程 – 在系统关闭期间丢弃最终有效负载
从上面的代码中,我们可以观察到,只有当SM_SHUTTINGDOWN指标非零时,意味着当前会话正在关闭,并且所有支持的干净文件都已成功删除,最终的有效负载 DLL 也会被删除。
感兴趣的读者还可能会注意到上面的代码中被调用的第一个函数禁用了 Windows Defender。这是通过修改注册表项的标准方法来完成的。只有禁用 Defender 后,恶意软件才能继续执行恶意操作。
将证书添加到 Windows
大多数时候,GuptiMiner 使用自签名二进制文件进行恶意活动。然而,这一次,攻击者更进一步。在这种情况下,两个删除的 PNG 加载程序 DLL 均由自定义的受信任根锚点证书颁发机构签名。这意味着签名本质上是不可信的,因为 Windows 中的常见验证过程无法信任攻击者的证书颁发机构。
然而,在恶意软件安装过程中,GuptiMiner 还会将根证书添加到 Windows 的证书存储中,从而使该证书颁发机构受到信任。因此,当这样的签名文件被执行时,就被理解为正确签名。这是通过使用CertCreateCertificateContext
、CertOpenStore
和CertAddCertificateContextToStore函数来完成的。
将GuptiMiner的根证书添加到Windows的功能
该证书以纯文本形式直接存在于 GuptiMiner 二进制文件中。
恶意软件将其作为根添加到 Windows 的明文形式的证书
在我们的研究过程中,我们发现 GuptiMiner 操作期间使用了三种不同的证书颁发者:
GTE Class 3 Certificate Authority
VeriSign Class 3 Code Signing 2010
DigiCert Assured ID Code Signing CA
请注意,这些名称是人为的,与合法认证机构的任何相似之处均应被视为巧合。
在注册表中存储有效负载
8e96d15864ec0cc6d3976d87e9e76e6eeccc23c551b22dcfacb60232773ec049
(upgradeshow.dll, 2023-11-23 16:41:34 UTC)
在后期的开发阶段,GuptiMiner 背后的作者开始通过将有效负载存储在注册表项中来集成更好的有效负载持久性。此外,有效负载还使用固定密钥通过异或加密。这确保了有效载荷在肉眼看来毫无意义。
到目前为止,我们已经发现这些注册表项位置可用于存储有效负载:
SYSTEMCurrentControlSetControlNlsSortingIdsen-US
SYSTEMCurrentControlSetControlPnPPciCardList
SYSTEMCurrentControlSetControlWdfDMCF
SYSTEMCurrentControlSetControlStorVSPParsers
第 1 阶段 – PNG 加载器
ff884d4c01fccf08a916f1e7168080a2d740a62a774f18e64f377d23923b0297
(2018-04-19 09:45:25 UTC)
当 PE 文件的入口点由阶段 0的 shellcode 执行时,恶意软件首先创建一个计划任务,尝试通过从系统中 删除updll62.dlz存档和库来清除初始感染。version.dll
此外,PE 通过联系攻击者的恶意 DNS 服务器来充当其他阶段的投放程序。这是通过向攻击者的 DNS 服务器发送 DNS 请求,获取带有响应的 TXT 记录来完成的。TXT 响应包含真实 C&C 服务器的加密 URL 域,应请求额外的有效负载。此有效负载是一个有效的 PNG 图像文件(T-Mobile 徽标),其末尾还附加有一个 shellcode。随后,恶意软件在单独的线程中执行 shellcode,在下一阶段提供进一步的恶意软件功能。
请注意,由于 DNS 服务器本身是恶意的,因此请求的域名并不重要 – 或者,以更抽象的方式思考此功能,它可以被视为传递到服务器的“密码”,决定 DNS 服务器是否应该提供带有说明的所需 TXT 答案。
正如我们在域名时间线部分中已经提到的,使用了多个此类“请求的域名”。在此处引用的版本中,我们可以看到使用了这两个:
ext.peepzo[.]com
crl.peepzo[.]com
本例中的恶意DNS服务器地址为:
ns1.peepzo[.]com
在这里我们可以看到使用 Wireshark 捕获的 DNS TXT 响应。请注意,Transaction ID = 0x034b在 GuptiMiner 运营的所有年份中,这一点都保持不变。我们发现这很有趣,因为我们预计这很容易被受影响网络中的防火墙或 EDR 标记。
Wireshark 捕获的 DNS TXT 响应
恶意软件执行查询时的请求是随机间隔完成的。对 DNS TXT 记录的初始请求在 PNG 加载程序执行后的前 20 分钟内执行。针对恶意软件的更新例程执行的连续请求在两次尝试之间等待长达 69 小时。
这种更新机制通过使用 shellcode 版本号创建单独的互斥体来体现,该版本号由解密的 DNS TXT 响应的前两个字节表示(解密过程见下文)。这可以确保相同版本的 shellcode 不会在系统上运行两次。
互斥量由 shellcode 的版本信息编号
DNS TXT记录解密
收到 DNS TXT 记录后,GuptiMiner 使用 Base64 对内容进行解码,并使用用作密钥派生函数的 MD5 和用于解密的 RC2 密码的组合进行解密。请注意,在该恶意软件的更高版本中,作者还使用校验和和附加解密密钥改进了解密过程。
对于密钥导出函数和解密过程,作者决定使用标准 Windows CryptoAPI 函数。
标准 Windows CryptoAPI 函数的典型用法
有趣的是,敏锐的眼睛可以观察到上面所示的初始化过程中的疏忽,特别是在CryptHashData函数中。CryptHashData API函数的原型是:
BOOL CryptHashData(
[in] HCRYPTHASH hHash,
[in] const BYTE *pbData,
[in] DWORD dwDataLen,
[in] DWORD dwFlags
);
该函数的第二个参数是一个指向长度为 的字节数组的指针dwDataLen。但是,该恶意软件提供 Unicode (UTF-16) 格式的字符串L”POVO@1″,由 bytes 数组表示*pbData。
因此,该数组的前六个字节仅db ‘P’, 0, ‘O’, 0, ‘V’, 0有效地将密钥切成两半并用零填充。尽管恶意软件作者多年来不断更改解密密钥,但他们从未修复这一疏忽,并且它仍然存在于最新版本的 GuptiMiner 中。
DNS TXT记录解析
此时,我们将演示解密的 TXT 记录以及如何解析它。在此示例中,在访问攻击者的恶意 DNS 服务器ns.srnmicro[.]net和请求的域时spf.microsoft[.]com,服务器返回了以下 DNS TXT 响应:
VUBw2mOgagCILdD3qWwVMQFPUd0dPHO3MS/CwpL2bVESh9OnF/Pgs6mHPLktvph2
完全解码和解密该字符串后,我们得到:
该结果包含多个字段,可以解释为:
前两个字节,版本 1 和版本 2,构成 PNG shellcode 版本。目前尚不清楚为什么有两个这样的版本,因为程序中实际上从未使用过版本 2。仅考虑版本1是否执行更新,即是否下载并加载PNG shellcode。无论哪种情况,我们都可以将这些数字视为主要版本和次要版本,并且只有主要版本才能触发更新过程。
第三个字节是密钥大小,表示之后应读取多少字节,形成密钥。此外,密钥和 URL 之间不需要额外的分隔符,因为密钥大小已知并且 URL 跟随。最后,可以通过计算所有字节的总和(模)来验证两字节校验和0xFF。
DNS TXT 记录被解码和解密后,恶意软件会从提供的 URL 以 PNG 文件的形式下载下一阶段的内容。这是通过使用标准WinINetWindows API 来完成的,其中 被User-Agent设置为包含当前正在运行的进程的位数。
恶意软件将运行进程的位数传达给 C&C
C&C 服务器将这些User-Agent信息用于两件事:
-
以正确的位数提供下一阶段(shellcode)
-
作为保护机制,过滤任何不包含此信息的 HTTP 请求
解析 PNG 文件
下载的文件之后是一个有效的 PNG 文件,其中还包含末尾附加的 shellcode。该图像是 T-Mobile 徽标,并且具有精确的805字节数。这些字节被恶意软件跳过,文件的其余部分(从偏移量 开始0x325)由 RC2 使用 TXT 响应中提供的密钥(使用 MD5 派生)进行解密。使用图像作为此“前缀”的原因是为了进一步混淆网络通信,其中有效负载看起来像合法图像,可能会忽略附加的恶意软件代码。
包含从以下位置开始的 shellcode 的 PNG 文件0x325
从位置加载 shellcode 后0x325,它会继续从内存加载额外的 PE 加载器,以使用 Gzip 解压下一个阶段。
IP地址屏蔽
294b73d38b89ce66cfdefa04b1678edf1b74a9b7f50343d9036a5d549ade509a
(2023-11-09 14:19:45 UTC)
2023 年末,作者决定放弃多年来使用 DNS TXT 记录分发有效负载的方法,转而采用 IP 地址屏蔽。
这种新方法包括以下几个步骤:
-
gethostbyname使用API函数 通过标准方式获取攻击者注册的硬编码服务器名称的IP地址
-
对于该服务器,返回两个 IP 地址 – 第一个是 IP 地址,它是屏蔽地址,第二个表示可用的有效负载版本,并23.195.以前两个八位字节 开头
-
如果版本比当前版本新,则屏蔽 IP 地址将被取消屏蔽并生成真实的 C&C IP 地址
-
真实的 C&C IP 地址与硬编码常量字符串(在 URL 路径中使用)一起使用来下载包含 shellcode 的 PNG 文件
去屏蔽过程是通过分别将 IP 地址的每个八位字节与0xA
、0xB
、0xC
、进行异或来完成的0xD。然后获取结果,并将硬编码常量字符串添加到 URL 路径中。
例如,我们观察到的一个这样的服务器是www.elimpacific[.]net.当时,它正在返回:
该地址23.195.101[.]1表示版本,如果它高于当前版本,则通过下载带有 shellcode 的 PNG 文件来执行更新。此更新是通过从真实的C&C服务器请求PNG文件来下载的,其地址是通过去屏蔽179.38.204[.]38地址计算得出的:
然后发出请求以及计算出的 IP 地址185.45.192[.]43和硬编码常量elimp。从某种意义上说,使用这样的常量可以充当附加密码:185.45.192[.]43/elimp/
GuptiMiner 正在从真实 IP 地址请求有效负载
下载 PNG 文件后,其余过程与平常相同。
到目前为止,我们已经发现了两个用于此功能的服务器:
反虚拟机和反调试技巧
294b73d38b89ce66cfdefa04b1678edf1b74a9b7f50343d9036a5d549ade509a
(2023-11-09 14:19:45 UTC)
除了上述其他更新之外,我们还观察到使用反虚拟机和反调试技巧的演变。这些是通过检查众所周知的磁盘驱动程序、注册表项和正在运行的进程来完成的。
GuptiMiner 通过枚举来检查这些磁盘驱动程序
HKEY_LOCAL_MACHINESYSTEMControlSet001servicesDiskEnum:
-
vmware
-
qemu
-
vbox
-
virtualhd
具体来说,该恶意软件还会检查注册表项HKEY_LOCAL_MACHINESOFTWARECylance是否存在 Cylance AV。
与其他反虚拟机措施一样,该恶意软件还会检查系统是否具有超过 4GB 的可用 RAM 和至少 4 个 CPU 核心。
最后但并非最不重要的一点是,恶意软件还通过前缀检查这些进程的存在:
在注册表中存储图像
6305d66aac77098107e3aa6d85af1c2e3fc2bb1f639e4a9da619c8409104c414
(2023-02-22 14:03:04 UTC)
与在注册表中存储有效负载类似,在 GuptiMiner 的后期阶段,作者也开始将下载的 PNG 图像(包含 shellcode)保存到注册表中。与存储有效负载相反,图像不会另外进行异或运算,因为其中的 shellcode 已使用 RC2 进行加密(有关详细信息,请参阅DNS TXT 记录解密部分)。
到目前为止,我们已经发现这些注册表项位置可用于存储包含 shellcode 的加密图像:
SYSTEMCurrentControlSetControlArbitersClass
SYSTEMCurrentControlSetControlCMFClass
SYSTEMCurrentControlSetControlCMFCORE
SYSTEMCurrentControlSetControlCMFDEF
SYSTEMCurrentControlSetControlCMFEls
SYSTEMCurrentControlSetControlCMFASN
SYSTEMCurrentControlSetControlMSDTCBSR
第 2 阶段 – Gzip 加载器
357009a70daacfc3379560286a134b89e1874ab930d84edb2d3ba418f7ad6a0b
(2019-04-02 07:30:21 UTC)
这个阶段是最短的,Gzip加载器是由PNG文件中的shellcode提取并执行的,是一个简单的PE,它使用Gzip解压另一个shellcode并在单独的线程中执行它。
该线程还加载第 3 阶段,我们将其称为 Puppeteer,它协调恶意软件的核心功能 – 加密货币挖掘以及在适用时在受感染系统上部署后门。
在整个 GuptiMiner 操作过程中,Gzip 加载程序在后续版本中并未发生变化。
第3阶段——傀儡师
364984e8d62eb42fd880755a296bd4a93cc071b9705c1f1b43e4c19dd84adc65
(2019-03-15 10:07:36 UTC)
现在让我们看看最大的第三阶段:傀儡师。它在受感染系统的各处进行控制,操纵 GuptiMiner 组件来执行其命令,这就是我们选择的名称。它协调进一步的行动并部署恶意软件的两个核心组件——一个 XMRig 挖矿程序和两种针对大型企业网络中存在的设备的后门。当然,Puppeteer 还为整个 GuptiMiner 操作的武库引入了额外的技巧。
GlobalSLDV此阶段还使用我们在互斥体时间轴中描述的众多互斥体之一。例如,这个特定示例SLDV01用作其互斥锁。
傀儡师设置
Puppeteer 执行几个步骤才能正确设置。首先,它在 Windows 中添加了新的电源方案,这样 PC 就不会进入睡眠状态。如果 CPU 只有一个核心(反虚拟机)或互斥锁已存在,则恶意软件将通过进入无限睡眠来停止运行。
在下一阶段,恶意软件会杀死所有名为msiexec.exe、cmstp.exe或 的进程credwiz.exe。之后,它创建一个单独的线程,将 XMRig 注入恶意软件新创建的 credwiz.exe 进程中。该恶意软件还通过将其服务启动状态设置为禁用来禁用 Windows Defender。
为了坚持,Puppeteer 选择了一个有趣的方法。首先,它创建一个具有以下配置的计划任务:
-
rundll32.exe复制并重命名合法文件C:ProgramDataMicrosoftCryptoEscandss.exe,并从计划任务执行该文件
-
恶意 DLL 被放置到并由(导出函数) C:ProgramDataMicrosoftCryptoEscanupdll3.dll3加载该文件dss.exeValidateFile
-
TASK_TRIGGER_BOOT该任务在每次启动 ( ) 和TASK_RUNLEVEL_HIGHEST优先级 时执行
-
该任务被命名并位于C:Windowssystem32tasksMicrosoftwindowsautochkESUpgrade
这样,恶意软件就会将内容复制updll3.dll3到内存中,并从磁盘中删除原始文件。然后,Puppeteer通过等待metric 设置为非零值(指示关闭)来等待系统关闭(类似于阶段 0.9SM_SHUTTINGDOWN )。每 100 毫秒检查一次。仅当启动系统关闭时,恶意软件才会将updll3.dll3文件重新引入磁盘。
在系统重新启动之前将恶意 DLL 放回去确实很偷偷摸摸,但也可能产生潜在的负面后果。如果受害者的设备遇到崩溃、断电或任何其他类型的意外关闭,文件将不会从内存中恢复,Puppeteer 将从此停止工作。也许这就是作者在后来的版本中实际上删除了这个技巧的原因,用复杂性换取了恶意软件的稳定性。
确保重启后正确执行的代码
updll3.dll3上面代码中看到的重复加载,其实就是Puppeteer的更新过程。DLL 最终将执行从 C&C 服务器请求新的PNG shellcode的步骤,如果是新版本,链将被更新。
XMRig部署
在设置过程中,Puppeteer 创建了一个单独的线程,用于将 XMRig coinminer 注入credwiz.exe进程中。然而,在注射之前,需要执行一些准备步骤。
XMRig 配置直接存在于 Puppeteer 二进制文件中存储的 XMRig 二进制文件(标准 JSON 配置)中。但是,可以将该配置动态修改为不同的值。在下面的示例中,我们可以看到根据受感染系统硬件的稳健性动态分配挖掘线程。
即时修补 XMRig 配置,动态分配挖掘线程
注入是标准的:恶意软件创建一个新的挂起进程credwiz.exe,如果成功,则通过组合注入并执行硬币WriteProcessMemory挖矿CreateRemoteThread。
Puppeteer 持续监控系统的运行进程,默认情况下每 5 秒监控一次。如果遇到下面的任何监控工具,恶意软件就会通过停止整个credwiz.exe进程来杀死任何现有的挖矿,并应用渐进式睡眠,将另一次重新注入尝试推迟 5 小时。
taskmgr.exe
autoruns.exe
wireshark.exe
wireshark-gtk.exe
tcpview.exe
此外,恶意软件需要定位updll3.dll3系统上的当前版本,以便将其最新版本存储在内存中、从磁盘中删除,并在另一个系统重新启动之前删除。使用两种方法来实现此目的:
-
读取 eScan 文件夹位置HKEY_LOCAL_MACHINESOFTWAREAVC3
-
如果检查的进程之一被称为download.exe,这是一个合法的 eScan 二进制文件,它会获取文件位置来发现该文件夹。输出可能如下所示:
DeviceHarddiskVolume1Program Files (x86)eScandownload.exe
检查download.exe作为查找 eScan 安装文件夹的替代方法,该代码似乎深受MSDN 上 从文件句柄获取文件名的示例代码的启发。
最后,Puppeteer 还持续监控系统上的 CPU 使用情况并调整核心分配,使其不占用太多资源并保持在雷达之下。
后门设置
4dfd082eee771b7801b2ddcea9680457f76d4888c64bb0b45d4ea616f0a47f21
(2019-06-29 03:38:24 UTC)
后门是由前一阶段 Puppeteer 设置的,首先会发现计算机是否在 Windows Server 上运行。这是通过检查 DNS 服务器注册表项来完成的(DNS 服务器服务通常在 Windows Server 版本上运行):
SOFTWAREMicrosoftWindows NTCurrentVersionDNS Server
之后,恶意软件运行命令来检查并获取加入域的计算机数量:
net group “domain computers” /domain
该命令打印的数据net group通常使用每台加入域的计算机 25 个字符,加上每三台计算机一个换行符 ( CR+LF),可以通过以下示例进行说明:
net group 命令的输出示例
在此版本的后门设置中,Puppeteer 检查返回的字节数是否超过 100。如果是,Puppeteer 假设它在与至少五台计算机共享的网络中运行,并从硬编码的 C&C ( https://m.airequipment[.]net/gpse/) 下载额外的有效负载并执行它使用 PowerShell 命令。
请注意,在 GuptiMiner 的更高版本中,返回字节数的阈值有所不同,并且明显更高,这可以在讨论模块化后门的专门部分中看到,导致仅损害那些在同一域中加入超过 7000 台计算机的网络!
如果上述检查通过,Puppeteer 将使用 PowerShell 命令下载并执行有效负载,有趣的是,它既在当前进程中运行,又注入到explorer.exe.
此外,无论受感染的计算机是否存在于一定规模的网络中,它也会尝试从中下载额外的有效负载dl.sneakerhost[.]com/u。此有效负载是另一个带有附加 shellcode 的 PNG 文件。我们知道这一点是因为代码使用与阶段 10×325中所述的 PNG 文件的特定偏移量完全相同的解析。然而,在我们的分析过程中,该域名已被删除,我们无法验证此处分发的有效负载类型。
Puppeteer 的后门设置过程在其长期开发过程中进行了多次改进和调整。在接下来的小节中,我们将重点关注更重要的变化,主要是那些影响恶意软件其他部分或呈现全新功能的变化。
后来的木偶师版本
在更高版本中,攻击者切换到日期时间互斥范例(如时间部分中的互斥体中所示),并且还引入了对更多 Sysinternals 工具(如 Process explorer、Process Monitor)以及其他工具(如 OllyDbg、WinDbg 和 TeamViewer)的附加进程监控。
池配置
487624b44b43dacb45fd93d03e25c9f6d919eaa6f01e365bb71897a385919ddd
(2023-11-21 18:05:43 UTC)
此外,GuptiMiner 作者还开始使用新方法修改 XMRig 配置中的池地址。他们开始根据受感染系统上的可用物理内存使用“ r”和“ ”子域。m如果至少有 3 GB 可用 RAM,恶意软件将使用:
-
m.domain.tldwithauto模式并启用大页面。
如果可用 RAM 小于 3 GB,则使用:
-
r.domain.tldwithlight模式和禁用大页。
为了不让事情变得简单,作者后来p在某些版本中也开始使用“ ”作为子域名,而没有任何特定的命名约定原因(也许只是说它是一个“池”)。
所有此类域的使用情况可以在域时间线中及时看到。
使用的 DLL 的多样性
多年来,Puppeteer 使用许多不同名称和位置的 DLL 进行旁加载或使用计划任务直接加载。例如,这些可能是:
C:Program Files (x86)eScanupdll3.dll3
C:Program FilesCommon FilesSYSTEMSysResetErrSysResetErr.DLL
C:Program FilesMicrosoft SQL ServerSpellCheckingMsSpellChecking.DLL
C:Program FilesMicrosoft SQL ServerSpellCheckingMsSpellCheckingHost.DLL
C:ProgramDataAMDCNextatiadlxx.dll
C:ProgramDataMicrosoftAssistanceLunarGvulkan-1.dll
C:ProgramDataMicrosoftCryptoEscanupdll3.dll
C:ProgramDataMicrosoftCryptoEscanupdll3.dll3
C:ProgramDataMicrosoftNetworkEscanAutoWake.dll
傀儡师清理
1c31d06cbdf961867ec788288b74bee0db7f07a75ae06d45d30355c0bc7b09fe
(2020-03-09 00:57:11 UTC)
我们还看到了“更干净”的 Puppeteers,这意味着它们不包含后门的设置过程,但当检测到正在运行的监控工具时,它们能够从系统中删除恶意 DLL。
每季度部署
1fbc562b08637a111464ba182cd22b1286a185f7cfba143505b99b07313c97a4
(2021-03-01 10:43:27 UTC)
在此特定版本中,后门的部署每 3 个月执行一次,即每季度部署一次。
部署发生在三月、六月、九月和十二月
第四阶段——后门
由于没有人在恶意软件活动中付出如此大的努力,只会在受感染的设备上部署挖矿程序,因此让我们更深入地研究 GuptiMiner 的其他功能集 – 在受感染的设备上部署两种类型的后门。
腻子后门
07beca60c0a50520b8dbc0b8cc2d56614dd48fef0466f846a0a03afbfc42349d
(2021-03-01 10:31:33 UTC)
E:Projectsputty-srcwindowsVS2012x64Releaseplink.pdb
GuptiMiner 部署的后门之一基于 PuTTY Link 的自定义构建 ( plink)。此版本包含本地 SMB 网络扫描的增强功能,它最终可以通过网络横向移动,通过受害者受感染的设备传输 SMB 流量来 进行潜在的攻击Windows 7和机器攻击。Windows Server 2008
本地SMB扫描
首先,Puppeteer 使用每季度部署的方法将 plink 二进制文件注入到 netsh.exe 进程中。成功注入后,恶意软件通过读取受害者设备的 IP 表来发现本地 IP 范围,并将其添加到本地和全局 IP 范围列表中。
这样,恶意软件就会继续在获取的 IP 范围上进行本地 SMB 扫描:xx.yy.zz.1-254.当发现支持 SMB 的设备时,会将其保存在专用列表中。不支持 SMB 的 IP 也是如此,有效地拒绝将它们列入未来的操作中。此拒绝列表保存在名为Sem和的特定注册表子项中Init,位于以下位置:
HKEY_LOCAL_MACHINE SYSTEMCurrentControlSetControlCMFClass
其中Init包含找到的 IP 地址及其Sem总数。
执行此类扫描时会发生一些条件。例如,扫描只能在一周中的某一天(!)、每季度部署时进行,并且只能在中午 12 点到 18 点之间进行。在这里,我们在条件中用唯一的(!)编码制品表示,因为不需要检查星期几(始终为真)。
SMB 扫描的条件有问题
最后,恶意软件还会HKEY_LOCAL_MACHINESYSTEMRNGFFFF在成功扫描三小时后创建一个新的注册表项。这作为扫描应该完成的标志,并且不需要更多扫描。
RNGFFFF在注册表删除的条件中可以看到一个更有趣的与日期时间相关的错误。完成删除是为了表明恶意软件可以在一段时间后执行另一次 SMB 扫描。
如下图所示,恶意软件通过SystemTimeToVariantTimeAPI函数获取注册表项的写入时间和当前系统时间并将其相减。减法结果是一个浮点数,其中整数部分表示天数。
此外,恶意软件60*60*60*24=5184000在删除注册表项的条件下使用恒定的秒数(60 天)。然而,条件是将VariantTime(天)与秒进行比较。因此,后门可以每天激活,51.84而不是(预期的?)60 天。真正因祸得福。
取出钥匙,几天RNGFFFF后部署后门51.84
SMB 流量上的横向移动
本地 SMB 扫描完成后,恶意软件会根据收到的 SMB 数据包结果检查响应的 IP 地址是否正在运行Windows 7或Windows Server 2008.如果在本地网络上发现任何此类系统,恶意软件会将这些 IP 地址添加到潜在目标列表中。
此外,GuptiMinermain()使用人工参数执行 plink 中的遗留函数。这将445在攻击者的服务器gesucht[.]net和受害者的设备 之间的端口上创建一条隧道。
plink main()函数使用的参数
该隧道用于通过受害者的设备将 SMB 流量发送到目标列表中的 IP 地址,从而实现本地网络上的横向移动。
请注意,部署此后门的这个版本的 Puppeteer 是从 2021 年开始的。我们还提到了 onlyWindows 7和Windows Server 2008是有针对性的,它们相当古老。我们认为这可能是因为攻击者试图在这些旧系统上部署可能存在的漏洞。
TID为了编排 SMB 通信,后门通过修改和字段来动态手工制作 SMB 数据包,UID以反映以前的 SMB 通信。如下面的反编译代码所示,packet 4由恶意软件制作和发送的 SMB 包含本地网络设备的响应中的 TID和。UID
后门动态手工制作 SMB 数据包
在这里,我们提供了恶意软件发送 SMB 数据包在 Wireshark 中的样子的示例。建立连接后,恶意软件会尝试以匿名身份登录,并向IPC$命名管道发出请求。
Wireshark 捕获的 SMB 流量
有兴趣的读者可以在我们的GitHub上找到捕获的 PCAP 。
模块化后门
f0ccfcb5d49d08e9e66b67bb3fedc476fdf5476a432306e78ddaaba4f8e3bbc4
(2023-10-10 15:08:36 UTC)
我们在研究过程中发现的另一个由 Puppeteer 分发的后门是一个针对大型企业网络的模块化后门。它由两个阶段组成——恶意软件扫描设备是否存在本地存储的私钥和加密货币钱包,第二部分是以 shellcode 的形式注入模块化后门。
检查私钥、钱包和公司网络
这部分后门重点扫描系统上的私钥和钱包文件。这是通过在以下位置 搜索文件来完成的.pvk:.wallet
-
C:Users*
-
D:*
-
E:*
-
F:*
-
G:*
如果系统中找到这样的文件,则其路径会记录在新创建的文件中C:UsersPublicCa.txt。有趣的是,我们可用的代码并没有单独处理该文件。我们假设稍后当后门下载更多模块时,数据将被窃取。
执行扫描的事实是通过创建注册表项来标记的:
HKEY_LOCAL_MACHINESYSTEMSoftwareMicrosoftDECLAG
如果在系统上发现一些私钥或钱包,或者恶意软件在大型企业环境中运行,则恶意软件会继续以 shellcode 的形式将后门注入到进程中mmc.exe。
猜测企业环境的规模与Puppeteer的后门设置方法相同,只是规模不同。在此,恶意软件将域中返回的计算机列表与 200,000 个字符进行比较。概括地说,该命令打印的数据每台加入域的计算机使用 25 个字符,加上每三台计算机 net group使用一个换行符 ( )。CR+LF
net group命令输出示例
这实际上意味着恶意软件运行的网络必须至少有 7781 台计算机加入域,这是一个相当大的数字。
后门
8446d4fc1310b31238f9a610cd25ea832925a25e758b9a41eea66f998163bb34
该 shellcode 与我们迄今为止在 GuptiMiner 活动中看到的代码完全不同。它被设计为多模块,能够在执行流程中添加更多模块。然而,只有网络通信模块是硬编码的并且默认可用,其散列为.
74d7f1af69fb706e87ff0116b8e4fa3a9b87275505e2ee7a32a8628a2d066549 (2022-12-19 07:31:39 UTC)
注入后,后门使用 RC4 解密硬编码配置和硬编码网络模块。RC4 密钥也是硬编码的,可直接在 shellcode 中使用。
配置包含有关要联系哪个服务器、要使用哪些端口、命令/请求之间应设置的延迟长度等详细信息。此配置中用于通信的域是www.righttrak[.]net:443IP 地址185.248.160[.]141。
解密网络模块配置
网络模块包含七个不同的命令,攻击者可以使用这些命令来指示后门做什么。网络模块接受的命令的完整列表可以在下表中找到。请注意,后门可以使用的每个模块都包含自己的这样的命令处理程序。
这些模块以加密形式存储在注册表中,确保其持久性:
HKEY_LOCAL_MACHINESOFTWAREMicrosoftPCB
该后门还使用哈希混淆导入来解析 API 函数。哈希函数是一个简单的算法,它获取导出函数名称的每个字节,加 1,然后将之前计算的数字(calculated_hash,从 0 开始)乘以 131,并将其添加到该字节:
服务器www.righttrak[.]net:443当时拥有有效的证书。例如,请注意作者使用的 完全不可疑的电子邮件地址。
www.righttrak[.]net:443Censys 显示的证书
模块化后门的其他感染载体
af9f1331ac671d241bf62240aa52389059b4071a0635cb9cb58fa78ab942a33b
在我们的研究过程中,我们还发现了一个 7zip SFX 可执行文件,其中包含两个文件:
-
ms00.dat
-
notepad.exe
notepad.exe是一个小型二进制文件,ms00.dat使用 RC4 和密钥来解密文件V#@!1vw32。解密的ms00.dat文件与上述相同的模块化后门恶意软件。
然而,我们还没有看到 GuptiMiner 分发这个 SFX 可执行文件。这表明该后门也可能由不同的感染媒介传播。
相关和未来的研究
在我们的研究过程中,我们还观察到了其他或多或少相关的样本。
PowerShell 脚本
有趣的是,我们还在其他脚本中发现了来自后门设置阶段(在 Puppeteer 中)的 C&C 域,这些脚本并不是由我们所知的传统 GuptiMiner 操作分发的。我们认为这可能是共享 GuptiMiner 基础设施的另一种攻击,尽管它可能是不同的活动。格式化的 PowerShell 脚本如下:
针对 eScan 的 PowerShell 脚本(已格式化)
在这种情况下,仅当安装了防病毒软件时,才会从恶意域下载并执行有效负载,并且其名称超过 4 个字母并以eS.即使不是拼字游戏冠军,也能发现恶意软件作者再次瞄准了 eScan AV。当安装的 AV 名称少于 5 个字母时,恶意代码也会运行。
我们发现该脚本通过计划任务使用使用的命令运行:
"cmd.exe" /c type "<domain>SYSVOL<domain>scriptsgpon.inc" | "<domain>SYSVOL<domain>scriptspowAMD64.dat" -nop -
where powAMD64.datis a copy of powershell.exe.任务名称和地点是C:WindowsSystem32TasksScheduledDefrag
使用被盗证书
我们发现了两个被盗的用于签署 GuptiMiner 有效负载的证书。有趣的是,其中一份被盗证书源自 Winnti 操作。在此特定示例中,数字签名具有哈希值:
529763AC53562BE3C1BB2C42BCAB51E3AD8F8A56
这个证书和卡巴斯基10多年前提到的一样。然而,我们还发现该证书被用于多个恶意软件样本,而不仅仅是 GuptiMiner,这表明泄漏范围更广。
被盗证书及其用途的完整列表如下表所示:
与 Kimsuky 的可能联系
7f1221c613b9de2da62da613b8b7c9afde2ea026fe6b88198a65c9485ded7b3d
(2021-03-06 20:13:32 UTC)
在我们的研究过程中,我们还发现了一个信息窃取程序,它拥有与整个 GuptiMiner 活动中使用的相当相似的 PDB 路径 ( MainWork):
F:!PROTECTRealstartW-2008MainWorkReleaseMainWork.pdb
但是,我们还没有看到它是由 GuptiMiner 分发的,并且根据我们的数据,它不属于同一操作和感染链。该恶意软件执行窃取活动,例如捕获每次击键、从打开的浏览器选项卡中收集 HTML 表单、记录打开程序的时间等,并将其存储在日志文件中。
然而,真正有趣的是,这个信息窃取者可能来自 Kimsuky 的操作。Kimsuky 也被称为 Black Banshee 等别名,是朝鲜国家支持的 APT 组织。
它包含与AhnLab和Cisco Talos Intelligence在其信息收集模块49B46336-BA4D-4905-9824-D282F05F6576部分中提到的类似的搜索 AhnLab 实时检测窗口类名称的方法。如果发现这样的窗口,它将被终止/隐藏在受感染用户的视野之外。
搜索并终止AhnLab实时检测窗口类的函数
此外,窃取者在资源中包含加密的有效负载,具有哈希值:并且具有以下 PDB 路径:
d5bc6cf988c6d3c60e71195d8a5c2f7525f633bb54059688ad8cfa1d4b72aa6c (2021-02-19 19.02.2021 15:00:47 UTC)
F:PROTECTRealstartW-2008HTTPProReleaseHTTPPro.pdb
该模块使用标准 RC4 算法和密钥进行解密messi.com。该模块用于下载附加阶段。使用的 URL 之一是:
http://stwu.mygamesonline[.]org/home/sel.php
http://stwu.mygamesonline[.]org/home/buy.php?filename=%s&key=%s
该域名mygamesonline[.]org是 Kimsuky 常用的域名(具有各种子域名)。
键盘记录器还会下载下一阶段,称为ms12.acm:
下一阶段下载时带有名称ms12.acm
这样,我们就看到了一种可能的模式,具有命名约定和模块化后门的链接。正如其他感染媒介部分中所述,7z SFX 存档包含一个名为 的加密文件ms00.dat,我们很难忽略它的相似之处。
dddc57299857e6ecb2b80cbab2ae6f1978e89c4bfe664c7607129b0fc8db8b1f最后但并非最不重要的一点是,另一个可能归因的强有力指标是Talos 的同一篇博文中提到的Kimsuky 键盘记录器样本包含一个名为 的部分.vlizer,如下所示:
Kimsuky 键盘记录器部分
在 GuptiMiner 安装过程(第 0 阶段)中,我们撰写了有关威胁参与者在 2018 年引入代码虚拟化的文章。这是通过使用名为 的专用部分来完成的.v_lizer。
结论
在本次分析中,我们详细描述了有关我们称为 GuptiMiner 的长期威胁的发现。这种复杂的操作一直在针对 eScan 防病毒供应商的更新机制进行 MitM 攻击。我们向 eScan 和印度 CERT 披露了该安全漏洞,并于 2023 年 7 月 31 日收到 eScan 的确认,表明该问题已修复并成功解决。
在 GuptiMiner 操作期间,攻击者部署了广泛的阶段和功能链,包括向攻击者的 DNS 服务器执行 DNS 请求、旁加载、从看似无辜的图像中提取有效负载、使用自定义的受信任根锚点证书颁发机构对其有效负载进行签名等其他的。
发现了两种不同类型的后门,针对大型企业网络。第一个提供了本地网络的 SMB 扫描,允许通过网络进行横向移动,从而可能利用网络上易受攻击的 Windows 7 和 Windows Server 2008 系统。第二个后门是多模块的,在后台接受命令以安装更多模块,并专注于窃取存储的私钥和加密钱包。
有趣的是,GuptiMiner 分发的最终有效负载也是 XMRig,这对于如此深思熟虑的操作来说有点出乎意料。
我们还发现了与臭名昭著的朝鲜 APT 组织 Kimsuky 可能存在的联系,同时观察 Kimsuky 键盘记录器与 GuptiMiner 操作分析过程中发现的片段之间的相似性。
妥协指标 (IoC)
在本节中,我们将总结本分析中提到的妥协指标。由于它们是指标,因此并不自动意味着提到的文件和/或域本身就是恶意的。
有关整个 GuptiMiner 活动的 IoC 的更详细列表,请访问我们的GitHub。https://github.com/avast/ioc/tree/master/GuptiMiner
域名
_spf.microsoft[.]com
acmeautoleasing[.]net
b.guterman[.]net
breedbackfp[.]com
crl.microsoft[.]com
crl.peepzo[.]com
crl.sneakerhost[.]com
desmoinesreg[.]com
dl.sneakerhost[.]com
edgesync[.]net
espcomp[.]net
ext.microsoft[.]com
ext.peepzo[.]com
ext.sneakerhost[.]com
gesucht[.]net
gesucht[.]net
globalsign.microsoft[.]com
icamper[.]net
m.airequipment[.]net
m.cbacontrols[.]com
m.gosoengine[.]com
m.guterman[.]net
m.indpendant[.]com
m.insomniaccinema[.]com
m.korkyt[.]net
m.satchmos[.]net
m.sifraco[.]com
ns.bretzger[.]net
ns.deannacraite[.]com
ns.desmoinesreg[.]com
ns.dreamsoles[.]com
ns.editaccess[.]com
ns.encontacto[.]net
ns.gravelmart[.]net
ns.gridsense[.]net
ns.jetmediauk[.]com
ns.kbdn[.]net
ns.lesagencestv[.]net
ns.penawarkanser[.]net
ns.srnmicro[.]net
ns.suechiLton[.]com
ns.trafomo[.]com
ns.trafomo[.]com
ns1.earthscienceclass[.]com
ns1.peepzo[.]com
ns1.securtelecom[.]com
ns1.sneakerhost[.]com
p.bramco[.]net
p.hashvault[.]pro
r.sifraco[.]com
spf.microsoft[.]com
widgeonhill[.]com
www.bascap[.]net
Mutexes
ESOCESS_
GlobalFri Aug 13 02:17:49 2021
GlobalFri Aug 13 02:22:55 2021
GlobalMon Apr 19 06:03:17 2021
GlobalMon Apr 24 07:19:54 2023
GlobalMon Feb 27 08:11:25 2023
GlobalMon Jun 14 03:22:57 2021
GlobalMon Mar 13 07:29:11 2023
GlobalMon Mar 22 09:16:00 2021
GlobalSun Jun 13 08:22:07 2021
GlobalThu Aug 10 03:25:11 2023
GlobalThu Aug 12 02:07:58 2021
GlobalThu Feb 23 08:37:09 2023
GlobalThu Mar 25 02:03:14 2021
GlobalThu Mar 25 09:31:19 2021
GlobalThu Nov 2 08:21:56 2023
GlobalThu Nov 9 06:19:40 2023
GlobalTue Apr 25 08:32:05 2023
GlobalTue Mar 23 02:37:32 2021
GlobalTue Oct 10 08:07:11 2023
GlobalWed Aug 11 09:16:37 2021
GlobalWed Jan 5 09:15:56 2022
GlobalWed Jun 2 09:43:03 2021
GlobalWed Mar 1 01:29:48 2023
GlobalWed Mar 23 08:56:01 2022
GlobalWed Mar 23 09:06:36 2022
GlobalWed May 10 06:38:46 2023
Global1
GlobalMIVOD_V4
GMCM1
MIVOD_6
MTX_EX01
Mutex_ONLY_ME_V1
Mutex_ONLY_ME_V2
Mutex_ONLY_ME_V3
PROCESS_
SLDV014
SLDV02
SLDV024
SLDV04
SLDV10
SLDV11
SLDV13
SLDV15
SLDV17
SLDV22
SLDV26
PDB路径
E:projectsprojectsRunCompressedSCx64ReleaseRunCompressedSC.pdb
E:Projectsputty-srcwindowsVS2012x64Releaseplink.pdb
F:CODE-20221019ProjectsRunCompressedSCx64ReleaseRunCompressedSC.pdb
F:ProMainWorkReleaseMainWork.pdb
F:ProMainWorkx64ReleaseMainWork.pdb
F:Projects2020-NEW20200307-NEWMainWork-VS2017-IPHLPAPIReleaseMainWork.pdb
F:Projects2020-NEW20200307-NEWMainWork-VS2017-IPHLPAPIx64ReleaseMainWork.pdb
F:Projects2020-NEW20200307-NEWMainWork-VS2017-nvhelperReleaseMainWork.pdb
F:Projects2020-NEW20200307-NEWMainWork-VS2017-nvhelperx64ReleaseMainWork.pdb
F:ProjectsRunCompressedSCx64ReleaseRunCompressedSC.pdb
F:V202102MainWork-VS2017 – MonitorReleaseMainWork.pdb
F:V202102MainWork-VS2017 – Monitorx64ReleaseMainWork.pdb
H:projectsMainWorkReleaseMainWork.pdb
阶段 0 – 安装过程
http://update3[.]mwti[.]net/pub/update/updll3.dlz
c3122448ae3b21ac2431d8fd523451ff25de7f6e399ff013d6fa6953a7998fa3 C:Program FileseScanVERSION.DLL
7a1554fe1c504786402d97edecc10c3aa12bd6b7b7b101cfc7a009ae88dd99c6 updll65.dlz
阶段 0.9 – 安装改进
第 1 阶段 – PNG 加载器
ff884d4c01fccf08a916f1e7168080a2d740a62a774f18e64f377d23923b0297
http://www.deanmiller[.]net/m/
294b73d38b89ce66cfdefa04b1678edf1b74a9b7f50343d9036a5d549ade509a
6305d66aac77098107e3aa6d85af1c2e3fc2bb1f639e4a9da619c8409104c414
SYSTEMCurrentControlSetControlArbitersClass Registry
SYSTEMCurrentControlSetControlCMFClass Registry
SYSTEMCurrentControlSetControlCMFCORE Registry
SYSTEMCurrentControlSetControlCMFDEF Registry
SYSTEMCurrentControlSetControlCMFEls Registry
SYSTEMCurrentControlSetControlCMFASN Registry
SYSTEMCurrentControlSetControlMSDTCBSR Registry
第 2 阶段 – Gzip 加载器
357009a70daacfc3379560286a134b89e1874ab930d84edb2d3ba418f7ad6a0b
第三阶段——傀儡师
364984e8d62eb42fd880755a296bd4a93cc071b9705c1f1b43e4c19dd84adc65
C:ProgramDataMicrosoftCryptoEscandss.exe
C:ProgramDataMicrosoftCryptoEscanupdll3.dll3
C:Windowssystem32tasksMicrosoftwindowsautochkESUpgrade Scheduled task
HKEY_LOCAL_MACHINESOFTWAREAVC3 Registry
DeviceHarddiskVolume1Program Files (x86)eScandownload.exe
4dfd082eee771b7801b2ddcea9680457f76d4888c64bb0b45d4ea616f0a47f21
SOFTWAREMicrosoftWindows NTCurrentVersionDNS Server Registry
net group ”domain computers” /domain Command
https://m.airequipment[.]net/gpse/
487624b44b43dacb45fd93d03e25c9f6d919eaa6f01e365bb71897a385919ddd
C:Program Files (x86)eScanupdll3.dll3
C:Program FilesCommon FilesSYSTEMSysResetErrSysResetErr.DLL
C:Program FilesMicrosoft SQL ServerSpellCheckingMsSpellChecking.DLL
C:Program FilesMicrosoft SQL ServerSpellCheckingMsSpellCheckingHost.DLL
C:ProgramDataAMDCNextatiadlxx.dll
C:ProgramDataMicrosoftAssistanceLunarGvulkan-1.dll
C:ProgramDataMicrosoftCryptoEscanupdll3.dll
C:ProgramDataMicrosoftCryptoEscanupdll3.dll3
C:ProgramDataMicrosoftNetworkEscanAutoWake.dll
1c31d06cbdf961867ec788288b74bee0db7f07a75ae06d45d30355c0bc7b09fe
1fbc562b08637a111464ba182cd22b1286a185f7cfba143505b99b07313c97a4
第四阶段——后门
07beca60c0a50520b8dbc0b8cc2d56614dd48fef0466f846a0a03afbfc42349d
E:Projectsputty-srcwindowsVS2012x64Releaseplink.pdb PDB
HKEY_LOCAL_MACHINE SYSTEMCurrentControlSetControlCMFClass Registry
HKEY_LOCAL_MACHINESYSTEMRNGFFFF Registry
f0ccfcb5d49d08e9e66b67bb3fedc476fdf5476a432306e78ddaaba4f8e3bbc4
HKEY_LOCAL_MACHINESYSTEMSoftwareMicrosoftDECLAG Registry
8446d4fc1310b31238f9a610cd25ea832925a25e758b9a41eea66f998163bb34 Shellcode
74D7F1AF69FB706E87FF0116B8E4FA3A9B87275505E2EE7A32A8628A2D066549
443 :
HKEY_LOCAL_MACHINESOFTWAREMicrosoftPCB Registry
af9f1331ac671d241bf62240aa52389059b4071a0635cb9cb58fa78ab942a33b
感谢您抽出
.
.
来阅读本文
点它,分享点赞在看都在这里
原文始发于微信公众号(Ots安全):GuptiMiner:劫持防病毒更新以分发后门和休闲挖矿