返回资讯中心
外部精选
软件工程
#开发者实时流

Turla组织利用Cereal恶意软件攻击Exchange服务器

来源标题:Exchange for breakfast: Turla's Cereal tricks are not for kids

安全研究人员发现,Turla APT组织使用名为Cereal的恶意软件攻击Microsoft Exchange服务器,该恶意软件深度利用.NET框架内部机制,可绕过常规分析工具。CerealLoader是唯一以未加密形式写入磁盘的组件,它会在.NET运行时启动前执行底层机器原生代码,使调试断点失效。大量近乎相同的二进制文件表明,操作者拥有自动化编译和打包命令的内部框架。

Hacker News 最新torutofu2026/11/10 · 今天15 分钟阅读

以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。

大量几乎相同的二进制文件,每份都为特定任务而编译,这强烈表明操作者拥有一个内部框架,能自动完成命令的编译与打包。再加上围绕模块化、可互换组件构建的代码库,给人的印象是一个成熟、精心设计的平台——而非一堆松散的脚本集合。

Cereal 与近期大多数 APT 案例的不同之处,在于它深入利用了 .NET 的内部机制——.NET 是微软的软件框架,Windows 和 Exchange 自身的很大一部分都运行在它之上。

通常,.NET 程序通过 Common Language Runtime(CLR)运行,CLR 会在程序指令执行前将其转换为机器码。整个过程对标准分析工具是可见的。而 Cereal 反复绕开这些标准、可观测的路径。

CerealLoader 是 Cereal 唯一以未加密形式写入磁盘的组件。在 .NET 反编译器中,其入口点代码实质上什么也不做,即便在恶意方法上设置断点也永远不会被触发。

实际上,CerealLoader 在 .NET 运行时开始执行其常规指令之前,就已运行了底层的、机器原生的代码。它滥用了 .NET 规范中一个极少使用的特性——Vtable Fixups,从原生代码搭建了一座隐藏的桥梁,回到某个 .NET 方法,而程序的其他部分似乎都不会调用该方法。只检查 .NET 一侧的分析人员看到的是一段看似什么都不做的代码。而到那时,真正的 payload 早已执行完毕。

由于 CerealLoader 能够从原生代码自行引导启动,操作者可以把它投放到合法的、非 .NET 的 Windows 进程会加载它的位置。在一条执行链中,CerealLoader 被放置为 C:\Windows\System32\wbem\ 目录下的 ncobjapi.dll,由 Windows Management Instrumentation 服务自动加载。在另一条执行链中,它冒充同一目录下的 wbemcomn.dll。这个恶意 DLL 会转发合法的函数调用,因此受影响的进程仍能正常运行。

为提升启动性能,.NET 会在系统文件夹中缓存常用库的预编译版本。当程序请求某个库时,运行时会先检查缓存;若命中,则加载缓存版本,而不是对程序集代码进行 JIT 编译。操作者将恶意的 CerealLoader 文件放入该缓存,使用诸如 Microsoft.Exchange.Search.Mdb.ni.dll 之类的名称。当 Exchange 请求对应的库时,运行时便加载了恶意版本。由于恶意文件中并不包含真正的替换代码,.NET 会悄悄回退到正版库以提供实际功能——但此时攻击者的原生入口点代码已经执行过了。在其中一个样本中,恶意代码仅在父进程为 Exchange 搜索服务时才会激活。

上述每一种技术都记录在 .NET 规范中较为冷门的部分。不寻常之处在于,它们被如此刻意地组合进同一套工具,并专门用于藏身于 Microsoft Exchange 之中。

Cereal 中使用最新颖技术的组件是 CerealBox,这是一个专为 Microsoft Exchange 构建的邮件收集模块。

Turla 此前就曾攻击 Exchange 服务器,包括滥用传输代理(transport agents)——这是 Exchange 的一项合法功能,允许开发者接入邮件流,以完成垃圾邮件过滤等任务。然而,已安装的传输代理会在 Exchange 配置中留下可见痕迹。

CerealBox 采用了更隐蔽的方式。它不注册自身,而是直接注入到 EdgeTransport.exe——处理邮件流的 Exchange 进程。然而,要到达这一步并不简单:CerealBox 是通过一条由嵌套 Cereal 组件构成的复杂链条投递的,如图 4 所示。

进入之后,CerealBox 访问 Exchange 的内部结构,找到现有的传输代理,并用恶意代码包裹它们的处理程序。这些包裹代码先运行 CerealBox 自身的逻辑,再把控制权交还给原始代码。邮件继续正常流转。Exchange 配置中不会出现任何新的代理。简而言之:CerealBox 并不新增代理,而是劫持内存中已加载的现有代理。

由于能够洞察邮件流,CerealBox 会挑选出感兴趣的消息。一条消息若带有 .doc、.docx 或 .pdf 附件,且至少匹配若干硬编码列表中的一项——发件人地址、收件人地址、主题子串或附件名——同时不匹配忽略列表,即被视为符合条件。感兴趣的消息会被压缩、加密,并暂存为磁盘文件。操作者随后使用普通的 CerealNeuron 命令将这些文件外传并删除。

注入 Exchange 传输服务并从内部挂钩邮件流,是一种新颖的技术,此前未见诸任何恶意软件家族的文档。它要求对 Exchange 邮件管道内部结构有深入理解——这类知识需要投入大量时间和精力才能获得。

Cereal 工具集是一件精心打造的、用于长期隐蔽网络间谍活动的工具。它在磁盘上几乎不留痕迹,避免使用可能被发现并阻断的外部基础设施,并将自身隐藏在合法的 Exchange 进程之中。非托管入口点、VTable Fixups、原生映像缓存滥用,以及对 Exchange 传输管道的内存注入,这些手段的运用反映出其在 .NET 攻防技巧上的投入程度,即便在高级 APT 行为者中也属罕见。

Cereal 工具集表明,对 Turla 而言,Exchange 服务器不只是邮件服务器——它们是持久的收集点、内部执行枢纽,以及适合隐藏高级 .NET 攻防技巧的环境。

完整的失陷指标(IoC)列表可在我们的 GitHub 仓库和 Turla 白皮书中找到。

正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。

打开原文
去社区讨论 →