ESET研究:俄罗斯最臭名昭著的APT组织之一Sednit的复兴

ESET研究:俄罗斯最臭名昭著的APT组织之一Sednit的复兴

ESET研究:俄罗斯最臭名昭著的APT组织之一Sednit的复兴

自2024年4月以来,Sednit的先进开发团队带着一套以两对植入物BeardShell和Covenant为核心的现代化工具包重新出现,每个植入体都使用不同的云服务商以增强韧性。这种双重植入方式实现了对乌克兰军人人员的长期监控。有趣的是,这些现有工具组与该组织2010年代植入物的代码有直接渊源。

这篇博客文章的要点:

  • ESET研究人员追溯到2024年乌克兰一起案例,当时部署了名为SlimAgent的键盘记录器。
  • SlimAgent 代码源自 Xagent,Xagent 是 Sednit 2010 年代的旗舰后门。
  • 在该行动中,Sednit开发的第二款植入物BeardShell被部署。它通过一个合法的云服务提供商作为其C&C通道执行PowerShell命令。
  • BeardShell 采用了一种独特的混淆技术,这也出现在 Xtunnel 中,Xtunnel 是 Sednit 2010 年代的网络枢纽工具。
  • 在2025年和2026年,Sednit 多次部署了 BeardShell 以及其现代工具包中的第三个重要工具 Covenant。
  • Sednit 对这一开源植入物进行了大幅重构,以支持长期间谍活动,并基于另一家合法云服务提供商实施了新的网络协议。

sednit特征

Sednit 集团——也被称为 APT28、Fancy Bear、Forest Blizzard 或 Sofacy——至少自2004年起就开始运营。美国司法部将该组织列为2016年美国大选前民主党全国委员会(DNC)黑客事件的幕后黑手,并将该组织与俄罗斯军方总情报局下属的俄罗斯情报机构GRU的26165部队联系起来。该组织还被认为是全球电视网TV5Monde遭黑客攻击、世界反兴奋剂机构(WADA)邮件泄露事件以及其他多起事件的幕后黑手。

Sednit的先进植入团队后来怎么样了?

Sednit组织可以说是APT组织中在被攻破目标方面记录最为出色的之一。其著名的妥协包括德国议会(2015年)、法国电视网TV5Monde(2015年)以及美国民主党全国委员会(2016年)。

在那些高调攻击的年代,Sednit 依赖了大量定制植入装置,从完整的间谍后门如 Xagent 和 Sedreco,到专门的工具包如网络枢纽工具 Xtunnel 和用于空隙机器的数据窃取器 USBStealer。2016年,我们在白皮书《与塞德尼特同行》中详细记录了这套复杂的武器库。

然而,2019年发生了转变。从那时起,直到最近,Sednit的高端植入物很少在野外被发现(只有少数例外,比如2021年Trellix记录的Graphite恶意软件),与此同时,该组织也在加大钓鱼行动。这些钓鱼攻击中使用的定制恶意软件大多是基于脚本的植入物。这种技术转变的原因至今仍是个谜。

这篇博客文章记录了自2024年以来Sednit高端定制武器库的重新出现。这里我们重点介绍其现代工具集的使用,因为CERT-UA和Sekoia之前的出版物已介绍过它们的内部运作。

一家精品开发商店

Sednit 内部开发其间谍植入物,这一独特特征支持基于共享代码工件的归因方法。

为了说明这一能力,考虑Xagent,这是该集团在2010年代的旗舰后门。2015年,我们在乌克兰的一台Linux服务器上发现了Xagent源代码,攻击者编译后遗留在一个未受保护的存档中。图1显示插件和C&C通道通过注释输入或输出代码来启用或禁用——根据运营需求根据目标选择——毫无疑问,开发者和操作员密切协作。

图1。Xagent 源代码,带有插件和通信通道的硬编码实例化(2015)
图1。Xagent 源代码,带有插件和通信通道的硬编码实例化(2015)

此外,2018年美国司法部的起诉书明确指出Xagent是内部开发的,并指控GRU 26165单位的特定成员是其开发者。

在这篇博客文章中,我们将利用这一开发足迹作为归因机制。通过追踪不同植入物间的共享代码产物,我们将该团队2010年代的工具集与当前使用的工具组连接起来。

瘦身特工

我们对现代Sednit活动的介绍始于SlimAgent,这是一种间谍植入装置,由CERT-UA于2024年4月在乌克兰政府机器上发现。SlimAgent 是一款简单高效的监控工具,能够记录键盘输入、截图并收集剪贴板数据。

祖先

有趣的是,我们在ESET遥测中发现了此前未知的样本,其代码类似于SlimAgent,早在2018年——即乌克兰案发生六年前——就已部署于两个欧洲国家的政府实体。这些样本在代码层面与SlimAgent有强烈相似之处,包括图2所示的完全相同的六步数据采集循环。每一步的实现几乎完全相同,如图3所示,负责记录前景窗口可执行文件的例程;唯一的区别在于内部数据结构的布局。

Figure 2. Spying loop of 2024 SlimAgent (left) and 2018 samples (right)
图2。2024年SlimAgent(左)和2018年样品(右)的间谍循环
Figure 3. Logging foreground window in 2024 SlimAgent (left) and 2018 samples (right)
图3。2024 年 SlimAgent(左)和 2018 年样本(右)中前景窗口的日志

SlimAgent 包含了 2018 年样本中缺少的若干功能,比如对收集日志进行加密。然而,令人惊讶的是,相隔六年部署的样本却表现出如此强烈的代码相似性。

因此,我们高度有信心地评估,2018年和2024年SlimAgent样本均基于同一代码库构建。剩下的问题是:2018年的样本来自哪里?

臭名昭著的家族

2018年的样本内部有一个可能引起其他分析师共鸣的名称:RemoteKeyLogger.dll。这是 Xagent 的键录模块名称,Xagent 是 Sednit 2012 至 2018 年间的旗舰间谍后门(详见我们的白皮书《与 Sednit 同行》)。

通过挖掘一些旧的Xagent样本(例如SHA-1:D0DB619A7A160949528D46D20FC0151BF9775C32),我们确实发现了一些惊人的相似之处,比如图4所示。在该代码中,只有当鼠标光标移动不超过10像素时才执行(通过比较最后一个位置和当前位置之间的平方0x64,即100),并且实现时使用相同的API调用。

图4。SlimAgent(左)与Xagent(右)之间的代码比较
图4。SlimAgent(左)与Xagent(右)之间的代码比较

另一个例子是,SlimAgent 以 HTML 格式发布间谍日志,应用程序名称、记录的按键和窗口名称分别以蓝色、红色和绿色表示。图5展示了在使用notepad.exe输入和复制新创建TXT文件文本时生成的示例。Xagent 键记录器还能生成使用相同配色方案的 HTML 日志。图6展示了2015年Xagent源代码中对应颜色HTML标签的定义。

Figure 5. Example of an HTML report produced by SlimAgent
图5。SlimAgent 生成的 HTML 报告示例
Figure 6. Xagent source code with definitions of the log colors (2015)
图6。Xagent 源代码及日志颜色定义(2015)

基于这些相似性,我们认为 SlimAgent 是 Xagent 键盘记录模块的进化,Xagent 自至少 2018 年起作为独立组件部署。此外,由于Xagent是Sednit团队独家使用超过六年的定制工具组,我们高度确定SlimAgent归功于Sednit。

这引出了一个问题:为什么Sednit会重复使用源自如此知名代码库的植入体?一种可能的解释是开发能力下降。然而,2024年乌克兰机器上发现的植入物并非SlimAgent的唯一;BeardShell——Sednit定制武器库中较新的新增武器——也部署在那里。

胡须壳

BeardShell 是一个复杂的植入体,能够在 .NET 运行环境内执行 PowerShell 命令,同时利用合法的云存储服务 Icedrive 作为其 C&C 通道。

该组件体现了密集的开发努力,也是我们相信Sednit高级开发团队重新活跃起来的主要原因。例如,由于 Icedrive 没有提供公开文档的 API,开发者重新实现了官方 Icedrive 客户端的请求。每当 Icedrive 私有 API 的变动中断了 BeardShell 的通信时,Sednit 开发者会在数小时内发布更新版本以恢复访问权限。

来自过去的数学冲击

虽然我们未能找到与BeardShell直接相关的其他恶意软件家族,但我们发现与过去Sednit工具的惊人相似性,始于BeardShell最初执行的C++静态初始化器。该例程的目的(其代码如图7所示)是解密Icedrive云存储的认证令牌。

Figure 7. Static initializer to decrypt Icedrive authentication token
图7。用于解密 Icedrive 认证令牌的静态初始化器

该例程包含了一个教科书式的混淆技术示例,称为不透明谓词插入(图7红色框中高亮显示):

  • 一个对所有可能输入计算为零的算术表达式——如图7中命名为x和y——被用作时间循环的条件。实际上,循环体从未被执行,因为谓词 2(x2+ 1)+ 2 = y2+ 5没有整数解。
  • 该人工环的主体由两条原始指令(图7黄色框所示)以及输入变量y的假更新组成,以模拟真实的环体结构。
  • 假循环之后是将执行的两条原始指令:调用 Icedrive 令牌解密例程和注册清理程序。

不透明谓词通常用于阻碍静态分析,但在如此小的例程中并不特别有用。请注意,其他 BeardShell 静态初始化器——它们不处理重要数据——也采用了同样的保护技术,因此开发者似乎只是无差别地对所有这些初始化器应用了保护。

现在,谓词公式可以简化为(两边各减2) 2(x2+ 1)= y2+ 3.有趣的是,同样的不透明谓词在2013年至2016年间被用于Xtunnel(一个仅由Sednit使用的网络枢轴工具),并在我们的白皮书《En Route with Sednit》中进行了记录。图8展示了Xtunnel(SHA-1: 99B454262DC26B081600E844371982A49D334E5E)中混淆代码的例子,其谓词不成立。

Figure 8. Xtunnel opaque predicate (2015)
图8。Xtunnel 不透明度谓词(2015)

该谓词不仅与BeardShell中使用的相同,且“永不执行”块的构建方式类似,通过复制两个原始指令(黄色框内)并对其中一个谓词输入(此处为x)进行虚拟更新。

据我们所知,这种不透明谓词除了在Xtunnel中未曾被观察到。甚至有人会怀疑它是否可能被用作假旗,尤其是它在2016年BlackHat Europe的演示中被公开提及为Xtunnel独有。然而,假旗操作很可能使用相同的谓词,而不是方程两边均为+2的变体。

这种罕见的混淆技术的共同使用,加上与 SlimAgent 的共址,使我们高度有信心地评估 BeardShell 是 Sednit 定制武器库的一部分。

自2024年首次事件以来,Sednit持续部署BeardShell,直至2025年及2026年初,主要用于针对乌克兰军人的长期间谍行动。为了保持对这些高价值目标的持续访问,Sednit系统性地与BeardShell——盟约——其现代武器库的最后一个组件——一起部署了另一枚植入体。

盟约

Covenant 是一个开源的 .NET 后利用框架,首次发布于 2019 年 2 月。它支持通过基于网页的仪表盘创建和管理.NET植入物——见图9中的示例——并内置了90多个任务,支持数据泄露、目标监控和网络枢纽等功能。

Figure 9. Covenant dashboard
图9。Covenant 仪表盘

自2023年以来,Sednit开发者对Covenant进行了多次修改和实验,将其确立为主要间谍植入装置,BeardShell主要作为Covenant遇到运行问题(如云基础设施瘫痪)时的备选方案。

例如,Sednit 用确定性方法取代了 Covenant 最初的植入命名机制(见图 10),生成基于机器特性的标识符,而不是每次执行生成新的随机值(见图 9 中 Grunts 部分的名称列)。这一修改说明了 Sednit 如何将 Covenant 用于长期间谍活动,而非短期的后利用活动:在长期运营中,每次重启后同一台机器以不同标识符出现会让仪表盘杂乱,降低运营效率。

Figure 10. Grunt ID generation routine added by Sednit
图10。Sednit添加的Grunt ID生成例程

Sednit还改变了《盟约》的执行流程,这是一种两阶段植入,可能是为了避免行为检测。他们没有让第一阶段下载器使用固定索引(最初实现的)调用第二阶段.NET汇编的第一方法,而是引入了DisplayName属性并迭代方法属性以找到入口点。在2023年初的变体中,Sednit开发者甚至尝试将两阶段嵌入到单一二进制中。

Covenant 官方仅支持 HTTP 和 SMB,这导致了 Sednit 最重要的 Covenant 修改:增加了基于云的网络协议。为此,Sednit 开发者利用了 C2Bridge 项目,这是 Covenant 原作者创建的独立框架,以促进新通信协议的集成。使用 C2Bridge,开发者只需在植入端实现符合 IMessenger 接口的类,提供读写方法来管理底层通信。C2Bridge可以作为控制器上的独立组件运行,用于中继消息,而控制器新创建的植入物则使用已实现的通信方法。

图11展示了Sednit开发者引入的类,用于与Filen云服务商通信,自2025年7月起使用。FilenMessenger 类实现了 IMessenger,并依赖 FilenClient 与 Filen API 交互。此前,2023年Sednit的Covenant滥用了合法的云服务pCloud,2024至2025年间,Koofr也使用了类似的实现。

Figure 11. Additional Covenant classes handling communications with a Filen cloud drive
图11。处理与Filen云驱动器通信的额外Covenant类

这些改编表明Sednit开发者在Covenant方面积累了深厚专业知识——该植入体的官方开发于2021年4月停止,可能被防御者视为未被使用。这一令人惊讶的作战选择似乎奏效:Sednit多年来一直成功依赖Covenant,尤其是在对乌克兰的特定目标时。例如,2025年我们对Sednit控制的Covenant云驱动器的分析显示,有些机器被监控超过六个月。据CERT-UA报道,2026年1月,Sednit还在一系列利用CVE-2026-21509漏洞的鱼叉式钓鱼行动中部署了Covenant。

结论

在这篇博客文章中,我们展示了Sednit的高级开发团队再次活跃起来,运营着以两种植入体——BeardShell和Covenant——为核心的武器库,这些植入物是同步部署的,并且各自利用不同的云服务提供商。这种配置使运营商能够在基础设施瘫痪时迅速恢复访问。我们认为这种双重植入式策略并不新鲜。例如,在Trellix记录的2021年活动中,Sednit并行部署了两个植入体:Graphite,使用OneDrive作为其C&C通道,以及PowerShell Empire,依赖独立的专用基础设施。

BeardShell的复杂性以及对Covenant的广泛修改表明,Sednit的开发者依然完全有能力制造先进的定制植入物。此外,这些工具与2010年前身的共享代码和技术,强烈表明开发团队内部存在延续性。

这引发了一个问题:这些开发者在这些年里到底做了什么?当时安全社区主要观察到来自Sednit的钓鱼活动。一种可能是在俄罗斯入侵乌克兰后,先进的开发工作被重新启动。另一个原因是他们从未停止工作,反而变得更加谨慎。

如对我们在WeLiveSecurity上发布的研究有任何疑问,请通过 threatintel@eset.com 联系我们。

ESET研究提供私人APT情报报告和数据流。如对此服务有任何疑问,请访问ESET威胁情报页面。

国际象征委员会

文件

全面的入侵指标(IoC)和示例可在我们的GitHub仓库中找到。

SHA-1文件名检测描述
5603E99151F8803C13D48D83B8A64D071542F01Beapphost.dllWin64/Spy.KeyLogger.LSSlimAgent。
6D39F49AA11CE0574D581F10DB0F9BAE423CE3D5tcpiphlpsvc.dllWin64/BeardShell.ABeardShell。

MITRE AT&CK 技术

本表使用了 MITRE ATT&CK 框架的第 18 版构建

战术身份证名称描述
资源开发T1583.006获取基础设施:网络服务BeardShell依赖Icedrive云存储。
Covenant 依赖于 Filen 云存储。
T1587.001开发能力:恶意软件BeardShell 和 SlimAgent 是自定义恶意软件。
处决T1059.001命令与脚本解释器:PowerShellBeardShell 执行 PowerShell 命令。
T1129共享模块BeardShell 和 SlimAgent 是完整的 DLL 文件。
特权升级T1546.015事件触发执行:组件对象模型劫持BeardShell 和 SlimAgent 通过劫持 COM 对象实现持久化。
防御规避T1027混淆文件或信息BeardShell Icedrive 令牌解密是混淆的。
T1140解码/解码文件或信息BeardShell 解密其字符串。
T1480执行护栏BeardShell 只在 taskhost.exe 或 taskhostw.exe 执行。
SlimAgent只在explorer.exe执行。
T1564隐藏文物SlimAgent 日志会写入隐藏文件中。
发现T1082系统信息发现BeardShell 发送了被攻破机器的指纹。
收藏T1005本地系统数据BeardShell、Covenant 和 SlimAgent 从被攻破的机器中收集数据。
T1056.001输入捕获:键记录SlimAgent 执行键盘记录。
T1113屏幕截图SlimAgent 截取了被攻破机器的截图。
T1115剪贴板数据SlimAgent 收集剪贴板数据。
指挥与控制T1001数据混淆BeardShell 通过伪造图片泄露数据。
T1071.001应用层协议:网络协议BeardShell 和 Covenant 使用 HTTPS 进行 C&C。
T1102网络服务BeardShell 会接收 Icedrive 的指令。
Covenant从Filen那里接收指令。
T1573.002加密信道:非对称密码学BeardShell与Icedrive的通信采用HTTPS加密。
契约与其控制器的通信使用RSA加密的会话密钥。
外流T1567通过网络服务进行外部渗透BeardShell 将数据泄露到 Icedrive。
Covenant将数据泄露到Filen。