PassiveNeuron网络间谍活动:针对Windows服务器的高级攻击技术剖析

本文详细分析了PassiveNeuron网络间谍活动,该活动针对政府、金融和工业组织运行Windows Server的服务器,使用SQL服务器攻击、多层DLL加载器、Neursite后门和NeuralExecutor加载器等复杂技术进行渗透和数据窃取。

引言

早在2024年,我们简要描述了一个名为“PassiveNeuron”的复杂网络间谍活动。该活动涉及使用此前未知的APT植入程序“Neursite”和“NeuralExecutor”入侵政府组织的服务器。然而,自发现以来,PassiveNeuron活动一直笼罩在神秘之中。例如,尚不清楚相关植入程序是如何部署的,或幕后黑手是谁。

在我们于2024年6月检测到该活动并阻止其扩散后,在相当长的一段时间内(约六个月)我们没有看到任何与PassiveNeuron相关的进一步恶意软件部署。然而,自2024年12月以来,我们观察到与PassiveNeuron相关的新一波感染,最近一次可追溯到2025年8月。这些感染针对位于亚洲、非洲和拉丁美洲的政府、金融和工业组织。在识别这些感染后,我们得以揭示该活动许多此前未知的方面。因此,我们设法发现了初始感染的细节并收集了归因线索。

SQL服务器遭受攻击

在调查2024年和2025年的PassiveNeuron感染时,我们发现绝大多数受攻击的机器运行的是Windows Server。具体来说,在一个特定的感染案例中,我们观察到攻击者通过Microsoft SQL软件在受感染的服务器上获得了初始的远程命令执行能力。虽然我们不清楚攻击者是如何滥用SQL软件的,但值得注意的是,SQL服务器通常通过以下方式被攻破:

  • 利用服务器软件本身的漏洞
  • 利用服务器上运行的应用程序中存在的SQL注入漏洞
  • 获取数据库管理账户的访问权限(例如通过暴力破解密码)并使用它执行恶意SQL查询

在借助SQL软件获得代码执行能力后,攻击者部署了一个ASPX Web Shell,用于在受感染的机器上执行基本的恶意命令。然而,在这个阶段,事情并未按对手的计划进行。安装在机器上的卡巴斯基解决方案阻止了Web Shell的部署尝试,并且安装Web Shell的过程变得相当引人注目。

为了逃避对Web Shell的检测,攻击者尝试以下列方式安装它:

  • 他们在系统上投放了一个包含Base64编码的Web Shell的文件。
  • 他们投放了一个负责对Web Shell文件进行Base64解码的PowerShell脚本。
  • 他们启动PowerShell脚本,试图将解码后的Web Shell有效负载写入文件系统。

由于卡巴斯基解决方案阻止了Web Shell的安装,我们观察到攻击者多次重复上述步骤,并进行了一些小的调整,例如:

  • 使用Web Shell的十六进制编码代替Base64
  • 使用VBS脚本代替PowerShell脚本来执行解码
  • 逐行写入脚本内容

在部署Web Shell失败后,攻击者决定使用更高级的恶意植入程序来继续入侵过程。

恶意植入程序

在过去两年中,我们观察到在PassiveNeuron感染过程中使用了三种植入程序,分别是:

  • Neursite,一个用于网络间谍活动的自定义C++模块化后门
  • NeuralExecutor,一个用于运行额外.NET有效负载的自定义.NET植入程序
  • Cobalt Strike框架,一个用于红队行动的商业工具

虽然我们看到这些植入程序以不同的组合部署在目标机器上,但我们观察到在绝大多数情况下,它们是通过一系列DLL加载器链加载的。链中的第一级加载器是一个放置在系统目录中的DLL文件。其中一些DLL文件路径是:

  • C:\Windows\System32\wlbsctrl.dll
  • C:\Windows\System32\TSMSISrv.dll
  • C:\Windows\System32\oci.dll

将这些DLL存储在这些路径下对攻击者有利,因为将具有这些名称的库放入System32文件夹可以自动确保持久性。如果文件系统上存在这些DLL,由于采用了Phantom DLL Hijacking技术,它们会在启动时自动加载(前两个DLL加载到svchost.exe进程中,后者加载到msdtc.exe中)。

还应注意的是,这些DLL的大小超过100 MB——它们的大小被攻击者通过添加垃圾覆盖字节人为地夸大了。通常这样做是为了使恶意植入程序更难被安全解决方案检测到。

启动时,第一级DLL遍历已安装的网络适配器列表,计算每个适配器MAC地址的32位哈希值。如果所有MAC地址都不等于加载器配置中指定的值,则加载器退出。此MAC地址检查旨在确保DLL仅在预期的受害者机器上启动,以阻碍在沙箱环境中执行。如此详细地缩小受害者范围意味着对手对特定组织的兴趣,并再次强调了此威胁的针对性。

检查到它在目标机器上运行后,加载器继续执行,加载存储在磁盘上的第二级加载器DLL。存储第二级DLL的路径及其名称(例如elscorewmyc.dllwellgwlserejzuai.dll)在不同机器之间有所不同。我们观察到第二级DLL的文件大小也被人为夸大(超过60 MB),其恶意目标是打开一个包含Base64编码和AES加密的第三级加载器的文本文件,并随后启动它。

有效负载文件内容片段

这个有效负载也是一个DLL,负责在另一个进程(例如WmiPrvSE.exemsiexec.exe)中启动第四级Shellcode加载器,该进程以挂起模式创建。反过来,这个Shellcode加载最终的有效负载:一个转换为自定义可执行格式的PE文件。

总之,加载最终有效负载的过程可以用下图表示:

最终有效负载加载

还值得注意的是,攻击者尝试对某些目标组织使用略微不同的加载方案变体。例如,我们见过没有将有效负载注入另一个进程的情况,或者使用VMProtect对磁盘上的DLL进行混淆的情况。

Neursite后门

在我们上面提到的三个最终有效负载植入程序中,Neursite后门是最强大的。我们这样命名它是因为我们在发现的样本中观察到以下源代码路径:E:\pro\code\Neursite\client_server\nonspec\mbedtls\library\ssl_srv.c。该植入程序的配置包含以下参数:

  • C2服务器及其端口列表
  • 可用于连接到C2服务器的HTTP代理列表
  • 连接到基于HTTP的C2服务器时使用的HTTP头列表
  • 与基于HTTP的C2服务器通信时使用的相对URL
  • 两次连续C2服务器连接之间的等待时间范围
  • 后门可运行的小时和星期几的字节数组
  • 应打开以侦听传入连接的可选端口

Neursite植入程序可以将TCP、SSL、HTTP和HTTPS协议用于C2通信。从配置可以看出,Neursite可以直接连接到C2服务器,或者等待另一台机器通过指定端口开始通信。在我们观察到的案例中,Neursite样本被配置为使用外部服务器或受感染的内部基础设施进行C2通信。

此后门内部实现的默认命令范围允许攻击者:

  • 检索系统信息。
  • 管理运行中的进程。
  • 通过其他感染了Neursite植入程序的机器代理流量,以便于横向移动。

此外,该植入程序配备了一个允许加载补充插件的组件。我们观察到攻击者部署了具有以下功能的插件:

  • Shell命令执行
  • 文件系统管理
  • TCP套接字操作

NeuralExecutor加载器

NeuralExecutor是在PassiveNeuron活动过程中部署的另一个自定义植入程序。该植入程序基于.NET,我们发现它使用开源的ConfuserEx混淆器来防止分析。它实现了多种网络通信方法,即TCP、HTTP/HTTPS、命名管道和WebSockets。在与C2服务器建立通信通道后,后门可以接收允许它加载.NET程序集的命令。因此,此后门的主要能力是从网络接收额外的.NET有效负载并执行它们。

棘手的归因

我们发现在PassiveNeuron活动中使用的两个自定义植入程序Neursite和NeuralExecutor,在以前的任何网络攻击中均未被观察到。我们必须寻找可能暗示PassiveNeuron背后威胁行为者的线索。

早在2024年开始调查PassiveNeuron时,我们就发现了一个非常明显的线索:

在NeuralExecutor内部发现的函数名

在我们2024年观察到的NeuralExecutor样本代码中,所有函数的名称都被替换为以“Супер обфускатор”(俄语,意为“超级混淆器”)为前缀的字符串。然而,重要的是要注意,这个字符串是攻击者在使用ConfuserEx混淆器时故意引入的。当涉及到故意插入恶意软件的字符串时,在归因过程中应谨慎评估。这是因为威胁行为者可能会插入他们不使用的语言的字符串,以制造虚假标志,旨在混淆研究人员和事件响应者,并促使他们在试图归因威胁时做出错误判断。因此,我们在2024年对“Супер обфускатор”字符串的存在赋予了很小的证据权重。

在检查了2025年使用的NeuralExecutor样本后,我们发现俄语字符串消失了。然而,今年我们注意到了与此植入程序相关的另一个特殊线索。虽然2024年的样本设计为直接从配置中检索C2服务器地址,但2025年的样本通过使用Dead Drop Resolver技术来实现。具体来说,我们发现的新的NeuralExecutor样本设计为检索存储在GitHub仓库中的文件内容,并从中提取一个字符串:

存储在GitHub上的配置文件内容

恶意软件通过搜索两个分隔符wtyyvZQYstU7BU0R来定位此字符串,这两个分隔符标记配置数据的开始和结束。然后对该字符串的字节进行Base64解码并使用AES解密以获得C2服务器地址。

植入程序配置片段

值得注意的是,这种从GitHub获取C2服务器地址的确切方法,使用包含分隔符序列的字符串,在中文威胁行为者中相当流行。例如,我们经常观察到它在EastWind活动中被使用,我们之前将该活动与中文威胁行为者APT31和APT27联系起来。

此外,在我们的调查过程中,我们了解到另一个可能对归因有用的事实。我们观察到在一个特定组织中多次尝试部署PassiveNeuron加载器。在发现又一次失败的部署后,我们检测到一个名为imjp14k.dll的恶意DLL。对该DLL的分析显示,它具有PDB路径G:\Bee\Tree(pmrc)\Src\Dll_3F_imjp14k\Release\Dll.pdb。这个PDB字符串在Cisco Talos一份关于可能与威胁行为者APT41相关的活动的报告中曾被引用。此外,我们确定发现的DLL表现出与Cisco Talos报告中描述的相同的恶意行为。然而,目前尚不清楚为什么这个DLL被上传到目标机器。可能的解释是,攻击者将其作为PassiveNeuron相关植入程序的替代品进行部署,或者它被另一个与PassiveNeuron背后的攻击者同时入侵该组织的攻击者使用。

在处理已知涉及虚假标志的网络攻击归因时,很难理解应该信任哪些归因指标,或者是否应该信任任何指标。然而,PassiveNeuron活动的整体TTP最类似于中文威胁行为者通常采用的TTP。由于TTP通常比字符串等指标更难伪造,因此我们目前将PassiveNeuron活动归因于一个中文威胁行为者,尽管置信度较低。

结论

PassiveNeuron活动的独特之处在于它主要针对服务器机器。这些服务器,特别是暴露在互联网上的服务器,通常是APT的有利可图的目标,因为它们可以作为进入目标组织的入口点。因此,密切关注服务器机器的保护至关重要。在可能的情况下,应将这些服务器相关的攻击面减少到最低限度,并且应监控所有服务器应用程序以及时防止新出现的感染。应特别注意保护应用程序免受SQL注入攻击,这是威胁行为者通常用来获取初始访问权限的手段。另一个需要关注的焦点是防范Web Shell,它们被部署以促进服务器的入侵。

入侵指标

PassiveNeuron相关加载器文件

  • 12ec42446db8039e2a2d8c22d7fd2946
  • 406db41215f7d333db2f2c9d60c3958b
  • 44a64331ec1c937a8385dfeeee6678fd
  • 8dcf258f66fa0cec1e4a800fa1f6c2a2
  • d587724ade76218aa58c78523f6fa14e
  • f806083c919e49aca3f301d082815b30

恶意imjp14k.dll DLL

  • 751f47a688ae075bba11cf0235f4f6ee
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计