执行摘要
SentinelLabs 观察到由未知威胁行为者发起的新威胁活动集群,我们将其称为“Sandman”。
Sandman 主要针对中东、西欧和南亚次大陆的电信提供商。
这些活动的特点是战略性横向移动和最少的接触,可能最大限度地降低被发现的风险。
Sandman 利用 LuaJIT 平台部署了一种新颖的模块化后门,这在威胁环境中相对罕见。我们将此恶意软件称为 LuaDream。
LuaDream的实施表明了一个执行良好、维护良好、积极开发的具有相当规模的项目。
这个时候,我们还没有一致的归属感。LuaDream 似乎与任何已知的威胁行为者没有关系。虽然开发风格在历史上与特定类型的高级威胁行为者相关,但恶意软件的高端开发与不良的细分实践之间的不一致导致我们有可能出现类似于 Metador 的私人承包商或雇佣兵组织。
概述
SentinelLabs 与QGroup GmbH合作,在 2023 年 8 月观察到针对电信行业的威胁活动集群。这些活动是由来源不明的威胁行为者使用基于LuaJIT平台的新型模块化后门进行的。我们将此威胁参与者和后门称为 Sandman 和 LuaDream,因为我们怀疑后门的内部名称是 DreamLand 客户端。
我们观察到的活动的特点是战略性地横向移动到特定的目标工作站和最少的参与,这表明采取了一种深思熟虑的方法,旨在实现既定目标,同时最大限度地减少被发现的风险。
LuaDream 的实现和架构表明了一个正在积极开发的维护的、版本化的项目。这是一个模块化的多协议后门,其主要功能是:
1. 窃取系统和用户信息,为进一步的精准攻击铺平道路;
2. 管理攻击者提供的扩展 LuaDream 功能的插件。
尽管在威胁行为者部署插件之前就检测到并中断了入侵,但我们对 VirusTotal 上共享的 LuaDream 暂存样本的分析让我们了解了插件可能实现的功能,命令执行功能就是一个例子。
我们确定的 36 个不同的 LuaDream 组件以及对 C2 通信多种协议的支持表明该项目具有相当大的规模。LuaDream 暂存链旨在逃避检测并阻止分析,同时将恶意软件直接部署到内存中。LuaDream 的实现和暂存过程利用 LuaJIT 平台,即 Lua 脚本语言的即时编译器。这主要是为了使恶意 Lua 脚本代码难以检测。
对电信公司的青睐
根据目前的可见性,准确的聚类仍然是一个挑战。集中的、战略驱动的活动,以及使用旨在逃避检测的复杂恶意软件,都指向了一个积极主动且有能力的对手。TTP、受害者学和已部署恶意软件的特征表明,此活动很可能具有间谍动机。由于通信提供商持有敏感数据,因此经常成为间谍活动的目标。
我们观察到的活动集群和对 C2 网络流量数据的检查表明,明显侧重于地理分布广泛的电信提供商,包括中东、西欧和南亚次大陆。
受害者的地理分布
LuaDream 中发现的编译时间戳和字符串工件暗示了 2022 年上半年潜在的恶意软件开发工作,表明可能的威胁行为者活动可以追溯到 2022 年。
虽然我们无法将 LuaDream 与任何已知的威胁行为者联系起来,但我们倾向于私人承包商或雇佣军组织的可能性。LuaJIT 通常用作游戏和专业嵌入式应用程序和设备中的脚本中间件,在 APT 恶意软件中使用 LuaJIT 的情况相对较少,但使用它的人群正在变得越来越广泛。
嵌入式 Lua VM 作为高级 APT 的模块化和可扩展性机制,历史上被认为是西方或西方对齐的。然而,这种发展模式正在被更广泛的威胁行为体所接受,这些威胁行为体也以西方国家为目标,值得进一步审查,如Sandman APT 就是一个例子。我们在 LABScon 2023 上的演讲描述了这种超时开发的范例,并以我们最新发现的 Sandman APT 和可追溯至 2005 年的最早示例 Fast16 为结尾。
2023 年 3 月,卡巴斯基在季度综述中简要描述了一种主要针对巴基斯坦政府实体的新恶意软件。根据稀疏描述的特征,我们评估它们指的是 LuaDream 的一个变体——称为 DreamLand。请注意我们识别的 LuaDream 样本中的以下字符串:
C:\项目\十年\ DreamLandClient \项目\ cpp \ HttpClientLj \ testdll .dll
威胁行为者活动
我们观察到的活动发生在 2023 年 8 月的几周内。在窃取管理凭据并进行侦察后,Sandman 使用基于 NTLM 身份验证协议的哈希传递技术渗透了特定目标的工作站。在其中一个目标上,所有工作站都分配给了管理职位的人员。
平均而言,我们观察到不同端点的渗透之间存在五天的差距。获得访问权限后,Sandman 将其活动限制为部署加载和执行 LuaDream 所需的文件夹和文件,避免采取任何进一步的行动。我们观察到以下部署的文件系统工件:
C:WindowsSystem32ualapi.dll
C:ProgramDataFaxConfigfax.dat
C:ProgramDataFaxConfigfax.cache
C:ProgramDataFaxConfigfax.module
C:ProgramDataFaxConfigfax.Application
C : ProgramDataFaxLib
Sandman滥用DLL劫持技术来执行LuaDream。他们放置的文件ualapi.dll
是一个恶意 DLL,伪装成其合法对应文件(用户访问日志记录(UAL) 组件),代表复杂的 LuaDream 加载过程的第一阶段。该库由Windows 服务启动时ualapi.dll
加载。我们观察到该服务在目标工作站上加载恶意软件,并在其上下文中执行 LuaDream。FaxSpoolerSpoolerualapi.dll
值得注意的是,我们没有观察到威胁行为者重新启动Fax
和/或Spooler
服务来强制执行 LuaDream,这可能会逃避基于服务操纵的检测。相反,他们耐心等待这些服务之一ualapi.dll
在下次系统启动时加载恶意软件。
LuaDream | 暂存
LuaDream 的分级过程非常复杂,其设计重点是逃避检测和阻止分析。Fax
由该服务启动Spooler
,启动时将执行UalStart
恶意软件的导出ualapi.dll
,整个过程由七个主要阶段组成。这些完全在内存中进行,涉及完全形成的 DLL PE 映像、代码和 LuaJIT 字节码的组合。
下表显示了 LuaDream 暂存中涉及的 DLL 映像:
尽管 DLL 时间戳可能已被威胁行为者操纵,但考虑到入侵日期接近 2023 年 8 月,这些时间戳很可能是真实的。ualapi.dll
由于和的时间戳与其实际部署日期之间仅相差几天common.dll
,因此这些映像可能是专门针对此入侵而构建的。
实施的一些反分析措施包括使用该函数对调试器隐藏 LuaDream 的线程NtSetInformationThread
、对无效句柄 ( 0x123456
) 进行文件关闭操作、检测基于 Wine 的沙箱以及在内存中映射恶意 PE 映像以逃避 EDR API 挂钩和基于文件的检测。
LuaDream 分期
下一阶段的代码通常使用基于异或的加密和压缩的组合来打包。、和文件存储打包的暂存代码fax.dat
。解压出来的代码包含一个 LuaJIT 引擎,能够执行内部称为和LuaDream 本身的 LuaJIT 组件。fax.Applicationfax.modulefax.Applicationinterfacecrt
interface
从 中解压 crt fax.module
,它反过来检索 XML 格式的配置和文件内容fax.cache
——一个加密和压缩的 Lua 函数,它以 Base-64 编码形式返回 LuaDream 组件的引用名称和实现。
fax.cache(解压形式)
LuaDream配置包括C2和通信协议信息。我们分析的 LuaDream 变体配置为mode.encagil[.]com
通过 WebSocket 协议与域进行通信。
配置数据
LuaDream | 概述
LuaDream是一个多组件、多协议后门,其主要功能是管理攻击者提供的插件以及窃取系统和用户信息。LuaDream 的实现和架构表明它是一个维护、积极开发的具有相当规模的项目。
在整个分析过程中,我们观察到可能是恶意软件版本字符串 ( 12.0.2.5.23.29
),后门在窃取信息时将其发送到 C2 服务器。许多 LuaDream 函数和变量定义都遵循涉及单词 的命名约定fun
,例如dofun
, _RUN_FUN_LIST_
, and FunGetDataCache
。
LuaDream 实现了测试功能以及错误和执行状态日志记录,这表明该恶意软件可能仍在积极开发中。标记的函数中的字符串工件com_TestJson
表明 2022 年 6 月的潜在开发。
测试函数(反编译LuaJIT字节码)
10.2.101[.]99
我们观察了LuaDream 绑定通信端口的嵌入式私有 IP 地址4443
(如果已配置)。该地址不属于目标环境的IP地址空间。IP 地址可能是开发中的 LuaDream 变体或之前的 Sandman 活动遗留下来的。
LuaDream | 组件和特点
我们从目标环境中获得的 LuaDream 变体由 34 个组件组成:13 个核心组件和 21 个支持组件。它们以 LuaJIT 字节码实现,并通过使用 C 语言绑定的ffi库使用 Windows API 。
支持组件实现 Lua 库以及 LuaDream 操作所需的 Windows API 定义,例如xml2lua、Windows Sockets和NtSec API。
核心组件实现了LuaDream的功能,例如初始化、收集系统和用户信息、C2通信和插件管理。根据fax.cache
文件中的组件定义,核心 LuaDream 组件分为两类:.com
和.main
。
LuaDream核心组件
随着main
组件初始化 LuaDream,后门会连接到已配置的 C2 服务器,并窃取由 收集的系统、用户和恶意软件相关信息BGetSystemMsg
。这些信息包括恶意软件版本、分配的 IP 和 MAC 地址、操作系统版本、可用内存以及与 LuaDream 运行上下文相关的进程的名称、PID 和用户名。
泄露的信息
LuaDream 能够连接到 C2 服务器,还可以充当监听传入连接的植入程序。后门可以通过 TCP、HTTPS、WebSocket 和 QUIC 协议进行通信。、、和组件实现对这些协议的支持,并充当它们的主处理程序main_proto_X_TcpClient
。main_proto_WinHttpClientmain_proto_X_WebSocketClientmain_proto_X_QuicClientmain_z_protoInterface
协议处理(反编译的LuaJIT字节码)
该main_proto_A_QueryDns
组件使用该服务将域解析为 IP 地址cloudflare-dns[.]com
,该服务main_proto_X_WebSocketClient
用于解析 C2 域名。
main_proto_X_QuicClient
从 LuaDream 完全映射到内存中的 DLL 映像中提取功能,该功能由Acom_LoadDLL
组件实现。
LuaDream 使用thread_connect
、thread_send
和thread_recv
组件与 C2 服务器通信,它们分别负责连接到 C2 服务器、向 C2 服务器发送数据和从 C2 服务器接收数据。这些组件在单独的线程中运行。交换的数据采用 JSON 和 XML 格式,采用加密和压缩形式。该Acom_define
组件提供线程间通信和数据操作的功能。
该thread_recv
组件处理传入消息,其主要目的是管理攻击者提供的扩展 LuaDream 的插件。该组件的一些功能包括:
1. 让 LuaDream 离线(命令offline
);
2. 加载、执行(command loadplugin
)、卸载(command unloadplugin
)和保存插件(command saveplugin
);
3. 执行攻击者指定的插件功能。
LuaDream 维护一个基于键的插件信息列表,其中包括插件运行的线程的句柄和 ID,以及插件识别键。插件的加载涉及在此列表中插入新条目并在指定线程中执行插件代码。为了与插件通信,LuaDream 利用线程间通信,使用消息1234
来执行插件功能。
LuaDream插件列表(来自反编译的LuaJIT字节码)
我们对 VirusTotal 上共享的 LuaDream 暂存样本的分析表明,存在两个名为main_proto_WinHttpServer
和 的附加组件thread_test
。main_proto_WinHttpServer
实现 LuaDream 功能来侦听基于 Windows HTTP 服务器 API 的传入连接。thread_test
实现测试loadplugin
和saveplugin
命令的功能。这些函数表明存在一个名为 的插件cmd
,其名称暗示了命令执行功能。
cmd插件参考
网络基础设施
我们分析的 LuaDream 样本与 C2 服务器ssl.explorecell[.]com
和mode.encagil[.]com
. ssl.explorecell[.]com
是 Tucows 注册的域名,首次出现解析日期为 2023 年 3 月。该域名最后解析为185.82.218[.]230
,由 ITLDC 托管提供商在保加利亚托管的服务器的 IP 地址。
mode.encagil[.]com
是 Arsys 注册的域名,首次出现解析日期为 2023 年 8 月。该域名最后解析为172.67.173[.]208
和104.21.47[.]226
,主要负载平衡平台后面托管的服务器的 IP 地址。从使用直接暴露的 C2 服务器 IP 地址到负载平衡基础设施地址的转变,标志着 Sandman 基础设施管理实践的变化 - 可能会避免暴露真实的托管位置。
对 C2 网络流数据的检查显示,缺乏全面的 C2 基础设施分段,在地理位置分散的受害者环境中部署了多个 LuaDream,与同一台 C2 服务器进行通信。
结论
Sandman的归属仍然是一个谜,将其与梅塔多和其他难以捉摸的威胁行为者归为同一神秘类别,这些威胁行为者逍遥法外。LuaDream 是网络间谍威胁行为者不断创新和进步努力的一个令人信服的例证,他们将其投入到不断发展的恶意软件库中。
驾驭威胁形势的阴影需要威胁情报研究社区内的持续合作和信息共享。SentinelLabs 仍然致力于这一使命,并希望本出版物能够成为进一步合作的催化剂。我们感谢 SentinelOne EMEA IR TAM 团队的 Luca Palermo 的贡献,他协助进行了威胁的初步调查和补救。
妥协指标
1cd0a3dd6354a3d4a29226f5580f8a51ec3837d4 fax.dat
27894955aaf082a606337ebe29d263263be52154 fax.Application
5302c39764922f17e4bc14f589fa45408f8a5089 ualapi.dll
77e00e3067f23df10196412f231e80cec41c5253 fax.cache
b9ea189e2420a29978e4dc73d8d2fd801f6a0db2 UpdateCheck.dll
fb1c6a23e8e0693194a365619b388b09155c2183 updater.ver
ff2802cdbc40d2ef3585357b7e6947d42b875884 fax.module
LuaDream 文件夹 文件路径
%ProgramData%FaxConfig
%ProgramData%FaxLib
C2 服务器域
mode.encagil[.]com
ssl.explorecell[.]com
转载来源:https://www.sentinelone.com/labs/sandman-apt-a-mystery-group-targeting-telcos-with-a-luajit-toolkit/
图片来源网络侵权可联系删除