前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >WSP ( CVE-2022-24934 ) APT

WSP ( CVE-2022-24934 ) APT

作者头像
Khan安全团队
发布2022-03-25 11:20:16
4.6K1
发布2022-03-25 11:20:16
举报
文章被收录于专栏:Khan安全团队

介绍

我们最近发现了一个APT我们正在调用的活动Operation Dragon Castling。该活动的目标是似乎在投注的公司South East Asia,更具体地说是位于TaiwanPhilippines和的公司Hong Kong。有了适度的信心,我们可以将活动归因于一个Chinese speaking APT group,但不幸的是不能将攻击归因于特定的群体,并且不确定攻击者的目标是什么。

MulCom backdoor我们发现此 APT 组 (the )使用的模块之一与他们的报告报告FFRat描述的示例之间存在显着的代码相似性。基于此,我们怀疑 FFRat 代码库正在几个中国对手团体之间共享。不幸的是,这还不足以归因,因为 FFRat 本身从未被可靠地归因。BlackBerry Cylance Threat Research Team2017 Palo Alto Networks2015

在这篇博文中,我们将描述这些攻击中使用的恶意软件和 APT 组织植入的后门,以及其他用于获得持久性和访问受感染机器的恶意文件。我们还将讨论我们看到的用于传播恶意软件的两种感染媒介:受感染的安装程序和对易受攻击的合法应用程序的利用,WPS Office.

我们在 WPS Office 更新程序 wpsupdate.exe 中发现了一个新漏洞 ( CVE-2022-24934 ),我们怀疑攻击者滥用了该漏洞。

我们要感谢台湾TeamT5为我们提供与感染媒介相关的 IoC。

基础设施和工具集

在上图中,我们描述了恶意文件之间的关系。有些关系可能不准确,例如我们不完全确定 MulCom 后门是否由CorePlugin. 但是,我们坚信它是此次活动中使用的恶意文件之一。 

感染载体

我们已经看到此活动中使用了多种感染媒介。其中,攻击者向其中一家目标公司的支持团队发送了一封带有受感染安装程序的电子邮件,要求检查其软件中的错误。在这篇文章中,我们将描述我们看到的另一个向量:一个虚假的WPS Office更新包。我们怀疑攻击者利用了 WPS 更新程序中的错误,该程序 wpsupdate.exe是 WPS Office 安装包的一部分。我们已就我们发现的漏洞 ( ) 联系了 WPS Office 团队,该漏洞CVE-2022-24934已得到修复。

在我们的调查中,我们发现 WPS 更新程序过程中存在可疑行为。在分析二进制文件时,我们发现了一个潜在的安全问题,允许攻击者使用更新程序与攻击者控制的服务器进行通信,以在受害者的系统上执行操作,包括下载和运行任意可执行文件。HKEY_CURRENT_USER 要利用该漏洞,需要修改注册表项,通过这样做,攻击者可以获得系统持久性并控制更新过程。在我们分析的案例中,恶意二进制文件是从域 下载的update.wps[.]cn,该域属于Kingsoft,但服务 IP ( 103.140.187.16) 与公司无关,因此我们假设它是攻击者使用的虚假更新服务器。  下载的二进制文件(setup_CN_2052_11.1.0.8830_PersonalDownload_Triale.exe - B9BEA7D1822D9996E0F04CB5BF5103C48828C5121B82E3EB9860E7C4577E2954) 丢弃两个文件进行旁加载:一个签名的QMSpeedupRocketTrayInjectHelper64.exe - Tencent Technology (a3f3bc958107258b3aa6e9e959377dfa607534cc6a426ee8ae193b463483c341)和一个恶意的 DLLQMSpeedupRocketTrayStub64.dll.

滴管 1 (QMSpeedupRocketTrayStub64.dll)

76adf4fd93b70c4dece4b536b4fae76793d9aa7d8d6ee1750c1ad1f0ffa75491

第一阶段是与 C&C ( mirrors.centos.8788912[.]com) 通信的后门。在联系 C&C 服务器之前,后门会执行几个准备操作。它挂钩了三个函数:GetProcAddress, FreeLibrary, LdrUnloadDll. 为了获得 C&C 域,它将自身映射到内存并1064 从末尾的偏移量开始读取数据。域名未以任何方式加密,而是以明文形式以宽字符串形式存储在二进制文件中。 

JScript然后它为一个名为 item 的类初始化一个对象ScriptHelper。dropper 使用ImpersonateLoggedOnUser API 调用来重用令牌,explorer.exe因此它可以在同一用户下有效地运行。此外,它还用于RegOverridePredefKey 将当前用户重定向HKEY_CURRENT_USERHKEY_CURRENT_USER  模拟用户。为了与 C&C 通信,它构造了一个带有一些系统信息(例如注册表值)的 UserAgent 字符串。Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.1;.NET CLR 2.0). The information that is exfiltrated is: Internet Explorer version, Windows version, the value of the “User Agent\Post Platform”

之后,示例构造JScript 代码来执行。代码的头部包含两个变量的定义:server带有 C&C 域名和硬编码的key. 然后它将 HTTPGET 请求发送到/api/connect,响应应该是加密的JScript 代码,该代码被解密,附加到构造的标头并使用JScript 之前创建的类执行。

在分析时,C&C 没有响应,但从遥测数据我们可以得出结论,它正在从hxxp://mirrors.centos.8788912.com/upload/ea76ad28a3916f52a748a4f475700987.exeto下载下一阶段%ProgramData%\icbc_logtmp.exe并执行它。

滴管 2 (IcbcLog)

a428351dcb235b16dc5190c108e6734b09c3b7be93c0ef3d838cf91641b328b3

第二个 dropper 是一个运行程序,在执行时,它会尝试通过COM Session Moniker Privilege Escalation提升权限,然后删除一些二进制文件,这些二进制文件与以下资源 ID 一起存储:(MS17-012)

资源 ID

文件名

描述

1825

smcache.dat

C&C 域名列表

1832

日志文件

加载器 (CoreX) 64 位

1840

bdservicehost.exe

用于侧载 64 位的签名 PE

1841

不适用

侧载的文件名

1817

安装文件

工作路径

1816

主机配置文件

用于Host标头,用于 C&C 通信

1833

bdservicehost.exe

用于侧载 32 位的签名 PE – N/A

1831

日志文件

加载程序(32 位) - 不适用

加密的有效载荷具有以下结构:

加密密钥是一个从 offset 开始的宽字符串0x8。加密数据从 offset 开始0x528。为了解密数据,使用CryptHashData API 创建密钥的 SHA256 哈希,然后与硬编码的 IV一起使用API 和算法 0123456789abcde解密数据。之后,解密的数据用. 为了验证解密是否顺利,计算数据的 并与原始资源数据偏移处的值进行比较。当所有的有效载荷都被放到磁盘上时,执行以运行下一阶段。CryptDecrypt AES256RtlDecompressBufferCRC320x4 bdservicehost.exe

加载程序 (CoreX)

97c392ca71d11de76b69d8bf6caf06fa3802d0157257764a0e3d6f0159436c42

DLL在Loader (CoreX) 前一阶段被侧载(Dropper 2)并充当释放器。与 类似Dropper 1,它挂钩GetProcAddressFreeLibraryAPI 函数。这些钩子执行这个库的主要代码。主代码首先检查它是否被加载regsvr32.exe,然后从其资源中检索加密数据。此数据被放入与 相同的文件夹中syscfg.dat。然后使用 AES-256 加载并解密该文件,并使用以下设置选项:

  • 键是计算机名,IV 是qwertyui12345678
  • AES-256 设置参数以<key>#<IV>. 所以你可能会看到cbfc2vyuzckloknf#8o3yfn0uee429m8d

AES-256 设置参数

主代码继续检查进程ekrn.exe是否正在运行。ekrn.exe是 ESET 内核服务。如果 ESET 内核服务正在运行,它将尝试重新映射ntdll.dll. 我们假设这是用来绕过ntdll.dll挂钩的。 

服务检查后,它会解压并执行 shellcode,然后加载一个 DLL 进行下一阶段。DLL 作为 shellcode 的一部分存储,未加密。shellcode 枚举ntdll.dll 所有函数(windows 原生 API 系统调用)名称的散列并构建一个数组,Zw*然后按它们的 RVA 对它们进行排序。Zw*通过这样做,shellcode利用了函数的RVA顺序等于相应系统调用的顺序这一事实,因此Zw*该数组中函数的索引是系统调用号,可以使用系统调用指令进行调用。因此,可以基于用户空间中 API 的挂钩来绕过安全解决方案。最后,加载并执行嵌入式核心模块DLL。

Proto8(核心模块)

f3ed09ee3fe869e76f34eee1ef974d1b24297a13a58ebff20ea4541b9a2d86c7

核心模块是一个单独的 DLL,负责设置恶意软件的工作目录、加载配置文件、更新其代码、加载插件、向 C&C 服务器发送信标并等待命令。

它具有级联结构,分为四个步骤:

第1步

第一部分专门介绍初步检查和一些规避技术。首先,核心模块验证 DLL 是由spdlogd.exe(用于持久性的可执行文件,见下文)运行还是不是由它运行。rundll32.exe.如果此检查失败,则执行终止。DLL 通过挂钩GetProcAddressFreeLibrary 函数继续执行主函数,类似于之前的感染阶段。

GetProcAddress 挂钩包含一个有趣的调试输出“in googo”。

然后,恶意软件会创建一个Sample带有自定义回调函数的新窗口(名为 )。带有 ID 的消息0x411 被发送到窗口,通过SendMessageW该消息导致上述回调执行 main 函数。回调函数也可以处理0x412 消息 ID,即使它没有绑定特定的功能。

导出函数 Core2 发送消息 0x411

导出函数 Ldr2 发送消息 0x412

窗口回调仅包含消息 0x411 的实现,但也检查了 0x412

第2步

第二步,模块尝试自我更新、加载配置文件并设置其工作目录(WD)。

自我更新

恶意软件首先寻找一个名为的文件new_version.dat——如果它存在,它的内容被加载到内存中,在一个新线程中执行并“run code ok”打印出一个调试字符串。我们没有遇到这个文件,但根据它的名称和上下文,这很可能是一个自我更新功能。

加载配置文件inst.dat 并设置工作目录。首先在以下三个位置查找核心模块配置文件inst.dat:

  • 核心模块DLL所在目录
  • 加载核心模块DLL的EXE所在目录
  • C:\ProgramData\

它包含恶意软件工作目录的明文路径。如果未找到,则使用硬编码的目录名称并创建目录。工作目录是恶意软件用来删除或读取其在后续执行阶段使用的任何文件的位置。

加载配置文件smcache.dat

设置工作目录后,示例将从其中加载配置文件smcache.dat。该文件包含用于与 C&C 服务器通信的域、协议和端口号(步骤 4 中的详细信息)以及一个“comment”字符串。此字符串可能用于识别活动或个人受害者。它用于在受害者的计算机上创建一个空文件(见下文),并在与 C&C 服务器通信时作为初始信标的一部分发送。我们将其称为 “comment string”smcache.dat 是因为我们已经看到了字符串内容所在的几个版本, “the comment string here”并且它也存在于另一个配置文件中,其名称comment.dat具有 INI 文件格式并在键 COMMENT 下包含此字符串.

创建log 文件

在样本找到并读取 smcache.dat 之后,它会根据受害者的用户名和 smcache.dat 中的注释字符串创建一个文件。如果注释字符串不存在,它将使用默认的硬编码值(例如M86_99.lck)。根据扩展名,它可能是某种日志,但我们还没有看到恶意软件的任何部分写入其中,因此它只能用作锁定文件。成功创建文件后,恶意软件会创建一个互斥锁并继续下一步。

第 3 步

接下来,恶意软件收集有关受感染环境的信息(例如用户名、DNS 和 NetBios 计算机名称以及操作系统版本和架构)并设置其内部结构,最显着的是一个 “call objects”. 调用对象是每个与特定函数相关联的“dispatcher”结构,并使用硬编码的 4 字节键保存到映射中的结构中。这些键稍后用于根据来自 C&C 服务器的命令调用函数。 

键值 (ID) 似乎是结构化的,其中前三个字节在给定样本中始终相同,而最后一个字节对于我们看到的所有核心模块样本中的给定用法始终相同。例如,调用函数的函数在我们看到的核心模块的某些版本和其他版本中RevertToSelf 由数字标识。这表明 ID 号的前三个字节与核心模块版本相关,或者更可能是基础设施版本,而最后一个字节是函数的实际 ID。 0x202103260x19181726

ID(最后一个字节)

功能说明

0x02

未实现的功能

0x19

检索内容smcache.dat并将其发送到 C&C 服务器

0x1A

将数据写入smcache.dat

0x25

模拟登录用户或 explorer.exe 进程

0x26

调用的函数RevertToSelf

0x31

接收数据并将其复制到新分配的可执行缓冲区中

0x33

接收核心插件代码,将其放在磁盘上,然后加载并调用它

0x56

将值写入comment.dat

Webdav 

在初始化调用对象时,核心模块还尝试通过调用hxxps://dav.jianguoyun.com/dav/使用用户名12121jhksdf 和密码连接到 URL 。该地址在分析时没有响应,但属于中文文件共享服务。我们的假设是,这要么是获取插件代码的一种方式,要么是核心模块本身的更新版本。121121212 WNetAddConnection3Wjianguoyun[.]com

插件

核心模块包含一个函数,该函数接收带有插件 DLL 数据的缓冲区,将其保存到kbg<tick_count>.dat恶意软件工作目录中具有该名称的文件中,将其加载到内存中,然后调用其导出的函数InitCorePlugMoveFileExW 磁盘上的插件文件通过参数调用设置为在重启时删除MOVEFILE_DELAY_UNTIL_REBOOT。有关插件的更多信息,请参阅专用插件部分。

第四步

在最后一步,恶意软件将遍历 smcache.dat 配置文件中包含的 C&C 服务器,并尝试访问每一个服务器。配置文件的结构smcache.dat如下:

smcache.dat配置文件的结构

协议字符串可以有九个可能的值之一: 

  • TCP
  • HTTPS
  • UDP
  • DNS
  • ICMP
  • HTTPSIPV6
  • WEB
  • SSH
  • HTTP

根据与特定 C&C 域相关的协议,恶意软件会建立连接,向 C&C 发送信标并等待命令。

在这篇博文中,我们将主要关注 HTTP 协议选项,因为我们已经看到它被攻击者使用。

在使用 HTTP 协议时,核心模块首先打开两个持久化请求句柄——一个用于请求,POST 一个用于GET 请求,两者都对“/connect”. POST 通过在请求中发送一个空缓冲区并检查请求的 HTTP 状态代码来测试这些句柄GETInternetWriteFile在此之后,恶意软件通过使用先前打开的请求句柄调用 API 将初始信标发送到 C&C 服务器,并通过调用从请求POST 句柄中读取数据。GET InternetReadFile

HTTP 数据包顺序

HTTP POST 信标

核心模块使用以下(大部分是硬编码的)HTTP 标头:

  • Accept: */*
  • x-cid: {<uuid>}GET/POST – 为每个请求对生成新的 uuid
  • Pragma: no-cache
  • Cache-control: no-transform
  • User-Agent: <user_agent>– 从注册表生成或硬编码(见下文)
  • Host: <host_value>– C&C 服务器域或来自 hostcfg.dat 的值(见下文)
  • Connection: Keep-Alive
  • Content-Length: 4294967295(最大 uint,仅在 POST 请求中)

用户代理标头

User-Agent 字符串由注册表构造,与Dropper 1模块中的方式相同(包括访问注册表时的登录用户模拟),或者如果注册表访问失败,则使用硬编码字符串:“Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)”.

主机头

设置此标头时,恶意软件会查找包含 的资源或如果找不到资源则 ID 1816调用的文件。hostcfg.dat如果找到资源或文件,则将其内容用作Host 所有 C&C 通信的 HTTP 标头中的值,而不是在smcache.dat. 它不会更改发出请求的实际 C&C 域——这表明 C&C 服务器可能位于反向代理后面。

初始信标

恶意软件发送到 C&C 服务器的第一个数据包包含 base64 编码的 LZNT1 压缩缓冲区,包括新生成的 uuid(不同于 x-cid 标头中使用的 uuid)、受害者的用户名、操作系统版本和架构、计算机 DNS和 BIOS 名称以及在smcache.dat 或中找到的注释字符串 comment.dat。如果此文件存在,则from 的值comment.dat优先。

在我们分析的核心模块示例中,读取值的函数中实际上存在拼写错误 comment.dat ——它查找的是键 “COMMNET”而不是“COMMENT”.

在此之后,恶意软件进入一个循环,以其中一个调用对象的 ID 值的形式等待来自 C&C 服务器的命令。 发送到 C&C 服务器的每条消息都包含一个硬编码的四字节数字值,其结构与调用对象映射中用作键的值相同。我们看到的与发送到 C&C 服务器的消息相关的 ID 号是:

ID(最后一个字节)

用法

0x1B

给 C&C 的消息,其中包含smcache.dat 内容

0x24

给 C&C 的消息,其中包含调试字符串

0x2F

给 C&C 的一般信息

0x30

给 C&C 的消息,具体目的不明

0x32

向 C&C 发送与插件相关的消息

0x80

到 C&C 服务器的初始信标

关于协议的有趣观察,除了 HTTP 协议:

  • HTTPS 不使用持久请求句柄
  • HTTPS 使用 HTTPGET 请求和 cookie 标头中经过 Base64 编码的数据来发送初始信标
  • HTTPS、TCP 和 UDP 使用自定义的“魔术”标头:Magic-Code: hhjjdfgh

关于核心模块的一般意见

我们观察到的核心示例经常通过OutputDebugStringAOutputDebugStringW /或将调试字符串发送到 C&C 服务器来输出调试字符串。核心模块使用的调试字符串的例子有:它的文件路径在开始执行时,“run code ok”在自我更新之后,“In googo”在 的钩子中GetProcAddress“recv bomb”以及“sent bomb”在主 C&C 通信函数中等。

字符串混淆

我们遇到了仅包含明文字符串的核心模块示例,但也遇到了某些字符串的示例,这些示例通过使用唯一(每个示例)硬编码密钥对它们进行异或运算来混淆。 

即使在包含混淆字符串的样本中,也存在许多明文字符串,并且似乎没有逻辑来决定哪些字符串将被混淆,哪些不会。例如,大多数格式字符串都被混淆了,但重要的 IoC(如凭证或文件名)却没有。 

为了说明这一点:从 comment.dat 文件中检索值的函数中的大多数字符串都被混淆了,并且调用GetPrivateProfileStringWGetProcAddress API 动态解析,但是写入同一配置文件的函数中的所有字符串都是明文和可以直接调用WritePrivateProfileStringW

总体而言,核心模块代码非常健壮,并包含许多针对不同场景的故障保护和选项(例如,用于 C&C 通信的可能协议的数量),但是,我们可能只看到了这种仍在积极开发中的恶意软件样本有许多功能尚未实现,仅用作占位符。

插件

在下面的部分中,我们将描述用于Core Module (Proto8)扩展其功能的插件的功能。 

我们将描述三个具有各种功能的插件,例如:

  • 实现持久性
  • 绕过 UAC
  • 注册 RPC 接口
  • 创建新帐户
  • 后门功能
核心插件

0985D65FA981ABD57A4929D8ECD866FC72CE8C286BA9EB252CA180E280BD8755

该插件是由上述无文件核心模块 ( ) 加载的 DLL 二进制文件Proto8。它通过添加管理其他插件的方法来扩展恶意软件的功能。这些附加插件导出"GetPlugin"核心插件执行的功能。

这部分使用与核心模块相同的基于命令 ID 的调用约定(见上文),添加了三个新方法:

ID(最后一个字节)

功能说明

0x2B

将有关插件位置的信息发送到 C&C 服务器

0x2C

删除插件

0x2A

加载插件

核心模块使用的所有插件二进制文件都存储在名称下的工作目录中 kbg<tick_count>.dat。加载后Core Plugin,它首先从工作目录中删除所有插件——见下图。

Zload(Atomx.dll,xps1.dll)

2ABC43865E49F8835844D30372697FDA55992E5A6A13808CFEED1C37BA8F7876

我们调用的 DLLZload 是由Core Plugin. 它导出四个函数:“GetPlugin”“Install”和。该插件的主要功能是设置持久性、创建后门用户帐户以及将自身隐藏在受感染的系统上。我们将专注于导出的函数和默认函数,因为它们包含最有趣的功能。“core_zload””zload”zloadcore_zloadDllMain

Zload(进程启动器)

这个函数相当简单,它的主要目标是执行另一个二进制文件。它首先检索Zload 插件二进制文件所在目录的路径,并在其中(<root_folder>)创建一个新的子文件夹 "mec" 。在此之后,它重命名并将三个文件移动到其中:

  • 插件二进制Zload 文件本身为 <root_folder>\mec\logexts.dll
  • <root_folder>\spdlogd.exe作为<root_folder>\mec\spdagent.exe
  • <root_folder>\kb.ini作为 <root_folder>\mec\kb.ini

文件被重命名和移动后,它通过执行二进制文件<root_folder>\mec\spdagent.exe(最初<root_folder>\spdlogd.exe)创建一个新进程。

core_zload(持久性设置)

该函数负责通过将自身注册到安全支持提供者 (SSP) 列表中来实现持久性。Local Security Authority (LSA)Windows SSP DLL在系统启动时被加载到进程中。mimikat_ssp/AddSecurityPackage_RawRPC 此函数的代码与 github 上的源代码非常相似。

DllMain(旁加载,设置)

默认的 DllMain 函数利用了几种持久性和规避技术。它还允许攻击者在受感染的系统上创建后门帐户并降低整体系统安全性。

持久性

该插件首先检查其 DLL 是否由进程“lsass.exe”“spdagent.exe”. 如果 DLL 是由 加载的“spdagent.exe”,它将调整当前进程的令牌权限。

如果它被加载“lsass.exe”,它将“kb<num>.dll”从配置文件中检索路径“kb.ini”并将其写入注册表项下HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\WinSock2\\Parameters AutodialDLL。这确保了持久性,因为它会在“kb<num>.dll”每次ws2_32.dll调用 Winsock 2 库 ( ) 时加载 DLL。

逃避

为避免被检测到,插件首先检查“avp.exe”(卡巴斯基反病毒软件)的运行进程列表,“NortonSecurity.exe”如果发现其中任何一个则退出。如果在系统上找不到这些进程,它会继续通过将自己的进程名称更改为 来隐藏自己“explorer.exe”

该插件还具有绕过 UAC 机制并通过CMSTP COM接口提升其进程权限的能力,例如CMSTPLUA {3E5FC7F9-9A51-4367-9063-A120244FBEC7}.

后门用户帐户创建

接下来,插件执行注册表操作(详细信息可在附录中找到),通过以下方式降低系统的保护:

  • 允许本地帐户在通过网络登录进行身份验证时拥有完整的管理员权限
  • 在没有用户密码的情况下启用与机器的 RDP 连接
  • 禁用管理员帐户的管理员批准,这意味着所有应用程序都以完全管理权限运行
  • 使匿名 SID 成为 Windows 中的所有人组的一部分
  • 允许“Null Session”用户列出域中的用户和组
  • 允许“Null Session”用户访问共享文件夹
  • 设置“空会话”用户可以访问的管道名称

完成此步骤后,插件将WebClient 服务启动类型更改为“Automatic”. “DefaultAccount”它使用名称和密码创建一个新用户,“Admin@1999!”然后将其添加到“Administrator”“Remote Desktop Users”组中。它还会在登录屏幕上隐藏新帐户。

作为最后一步,插件检查正在运行的进程列表中的进程名称“360tray.exe”,如果都没有找到,则“360sd.exe”执行该文件。"spdlogd.exe"

MecGame(kb%num%.dll)

4C73A62A9F19EEBB4FEFF4FDB88E4682EF852E37FFF957C9E1CFF27C5E5D47AD

MecGame 是另一个可以由Core Plugin. 它的主要目的类似于前面描述的Zload插件——它执行二进制文件“spdlogd.exe”并通过注册一个 RPC 接口来实现持久性UUID {1052E375-2CE2-458E-AA80-F3B7D6EA23AF}。这个 RPC 接口代表一个函数,它解码和执行 base64 编码的 shellcode。

MecGame 插件有多种执行 spdlogd.exe 的方法,具体取决于可用权限的级别。它还使用名称MSSYS.lck<UserName>-XPS.lck根据加载它的进程的名称创建一个锁定文件,并删除文件atomxd.dlllogexts.dll.

它可以作为具有服务名称的服务安装,也可以由通过库“inteloem”连接到 Internet 的任何可执行文件加载。Winsock2

穆尔康

ABA89668C6E9681671A95B3D7A08AAE2A067DEED2D835BA6F6FD18556C88A5F2

此 DLL 是一个后门模块,它导出四个函数:“OperateRoutineW”“StartRoutineW”和; 主要的恶意功能是。“StopRoutineW””WorkRoutineW”“StartRoutineW”

为了正确执行,后门需要通过文件映射名称为“Global\\4ED8FD41-2D1B-4CC3-B874-02F0C60FF9CB”或的共享对象访问配置数据"Local\\4ED8FD41-2D1B-4CC3-B874-02F0C60FF9CB”。不幸的是,我们没有遇到配置数据,因此我们缺少一些信息,例如该模块使用的 C&C 服务器域。

此后门支持 15 个命令(尽管其中一些未实现),由以下数字标识符引用:

命令编号

功能说明

1

从执行的命令发送收集的数据。仅当使用代理的身份验证通过 NTLM 完成时才使用

2

查找有关进程的域名、用户名和安全标识符的信息explorer.exe。它找出所有远程桌面会话的用户名、域名和计算机名。

3

枚举根磁盘

4

枚举文件并找出它们的创建时间、上次访问时间和上次写入时间

5

创建具有重复令牌的进程。令牌是从列表中的进程之一获得的(见附录)。

6

枚举文件并找出创建时间、上次访问时间、上次写入时间

7

重命名文件

8

删除文件

9

创建目录

101

发送通过GetLastError API 函数获取的错误代码

102

枚举特定文件夹中的文件并找出它们的创建时间、上次访问时间和上次写入时间

103

上传文件到 C&C 服务器

104

未实施(保留)

105/106/107的组合

创建目录并从 C&C 服务器下载文件

通讯协议

MulCom 后门能够通过 HTTP 和 TCP 协议进行通信。它与 C&C 服务器交换的数据分别通过 RC4 和 aPack 算法进行加密和压缩,使用从配置数据对象加载的 RC4 密钥。

它还能够使用 Basic、NTLM、Negotiate 等方案进行代理服务器身份验证,或者通过 SOCKS4 和 SOCKS5 协议进行身份验证。

在通过代理服务器成功认证后,后门发送由常量异或的数据0xBC。该数据是具有以下结构的集合:

数据结构

这个后门的另一个有趣的功能是使用分层的 C&C 服务器。如果在配置对象中启用了这个选项(不是默认选项),第一个请求会去第一层C&C服务器,它返回第二层的IP地址。任何后续通信都直接进入第二层。

如前所述,我们发现MulCom DLL 和FFRat (aka FormerFirstRAT) 之间存在一些代码相似之处。

结论

我们已经描述了一个强大的模块化工具集,该工具集最有可能被一个针对东南亚赌博相关公司的中文 APT 组织使用。FFRat 正如我们在这篇博文中提到的,样本和MulCom 后门之间存在显着的代码相似之处。根据 Palo Alto Network 的报告,该报告已与公开相关联,该报告又与中文攻击者常用的后门FFRat"FormerFirstRAT''工具相关联。 DragonOK groupPoisonIvyPlugX

我们还描述了两种不同的感染媒介,其中一种武器化了易受攻击的 WPS Office 更新程序。我们认为这种感染媒介所代表的威胁非常高,因为 WPS Office 声称在全球拥有 12 亿安装量,并且此漏洞可能允许以简单的方式在任何这些设备上执行任意代码。我们已就我们发现的漏洞与 WPS Office 联系,该漏洞已得到修复。

我们的研究指出了一些悬而未决的问题,例如可靠的归因和攻击者的动机。

附录

进程列表:

  • 360sd.exe
  • 360rp.exe
  • 360Tray.exe
  • 360Safe.exe
  • 360rps.exe
  • ZhuDongFangYu.exe
  • kxetray.exe
  • kxescore.exe
  • KSafeTray.exe
  • KSafe.exe
  • audiodg.exe
  • iexplore.exe
  • MicrosoftEdge.exe
  • MicrosoftEdgeCP.exe
  • chrome.exe

Zload 插件更改的注册表值:

注册表路径HKEY_LOCAL_MACHINE

注册表项

SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System

LocalAccountTokenFilterPolicy = 1 FilterAdministratorToken = 0

SYSTEM\\CurrentControlSet\\Control\\Lsa

LimitBlankPasswordUse = 0 EveryoneIncludesAnonymous = 1 RestrictAnonymous = 0

System\\CurrentControlSet\\Services\\LanManServer\\Parameters

RestrictNullSessAccess = 0 NullSessionPipes = RpcServices

核心模块工作目录(WD)

默认硬编码 WD 名称(在 C:\ProgramData\或 中创建%TEMP%):

  • spptools
  • NewGame
  • TspSoft
  • InstallAtomx

用于测试权限game_<tick_count>.log的文件: – 写入 WD 路径,然后删除该文件。

用于 WD 访问的硬编码安全描述符:. D:(A;;GA;;;WD)(A;OICIIO;GA;;;WD)

锁定文件名格式:“<working_dir>\<victim_username>-<comment_string>.log”

核心模块互斥锁:

Global\sysmon-windows-%x(%x 是受害者用户名的 MD5 哈希的 CRC32)

Global\IntelGameSpeed-%x(%x 是受害者用户名的 MD5 散列的 CRC32

Global\TencentSecuriryAgent-P01-%s (%s 是受害者的用户名)

妥协指标 (IoC)

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 基础设施和工具集
    • 感染载体
      • 滴管 1 (QMSpeedupRocketTrayStub64.dll)
        • 滴管 2 (IcbcLog)
          • 加载程序 (CoreX)
            • Proto8(核心模块)
              • 第1步
              • 第2步
              • 第 3 步
              • 第四步
              • 关于核心模块的一般意见
              • 插件
          • 结论
            • 附录
              • 进程列表:
              • Zload 插件更改的注册表值:
              • 核心模块工作目录(WD)
          • 核心模块互斥锁:
            • 妥协指标 (IoC)
            相关产品与服务
            多因子身份认证
            多因子身份认证(Multi-factor Authentication Service,MFAS)的目的是建立一个多层次的防御体系,通过结合两种或三种认证因子(基于记忆的/基于持有物的/基于生物特征的认证因子)验证访问者的身份,使系统或资源更加安全。攻击者即使破解单一因子(如口令、人脸),应用的安全依然可以得到保障。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档