2025年3月,卡巴斯基检测到一波感染事件,这些感染发生在用户点击通过电子邮件发送的个性化钓鱼链接时。触发感染无需进一步操作,用户只需使用谷歌Chrome浏览器或其他基于Chromium的网页浏览器访问恶意网站即可。 这些恶意链接均为个性化定制,且存在时间极短,以躲避检测。不过,卡巴斯基的技术成功识别出一种复杂的零日漏洞利用程序,该程序被用于绕过谷歌Chrome浏览器的沙盒防护机制。在快速分析后,我们向谷歌安全团队报告了这一漏洞,该团队将其修复并编号为CVE-2025-2783。
关于发现CVE-2025-2783漏洞的致谢(摘自Chrome 134.0.6998.177/.178版本中包含的安全修复说明)
我们将此次行动命名为“论坛巨魔行动”(Operation ForumTroll),因为攻击者发送了定制化的钓鱼邮件,邀请收件人参加Primakov Readings讲座(普里马科夫讲座)论坛。这些诱饵邮件针对的是俄罗斯的媒体机构、大学、研究中心、政府组织、金融机构及其他组织。该恶意软件的功能表明,此次行动的主要目的是进行间谍活动。 我们追溯发现,此次攻击中使用的恶意软件可追溯至2022年,并发现该威胁行为者对俄罗斯和白俄罗斯的组织及个人发动了更多攻击。在分析这些攻击中使用的恶意软件时,我们发现了一款未知的恶意软件,经鉴定,其为意大利Memento Labs公司(前身为Hacking Team)开发的商用间谍软件,名为“但丁”(Dante)。 代码的相似性表明,论坛巨魔行动也是使用Memento Labs公司开发的工具实施的。 在这篇博客文章中,我们将详细剖析论坛巨魔行动的攻击链,并揭示我们如何发现并鉴定出“但丁”间谍软件——该软件在Hacking Team更名后隐藏多年,最终被我们识破。
攻击链
“论坛巨魔行动”攻击链
在所有已知案例中,受害者都是在点击了“鱼叉式网络钓鱼”邮件中的链接后遭受感染的,该链接将他们引导至一个恶意网站。该网站对受害者身份进行验证后,便执行了恶意利用程序。 当我们首次发现并开始分析这一攻击活动时,该恶意网站已不再包含负责实施感染的代码,而只是简单地将访问者重定向至官方“普里马科夫读书会”(Primakov Readings)网站。 因此,我们只能基于在第一波感染中发现的攻击痕迹展开工作。幸运的是,卡巴斯基技术检测到了攻击的几乎所有主要阶段,使我们得以重建并分析Operation ForumTroll(论坛巨魔行动)的攻击链。
网络钓鱼邮件
本次攻击活动中使用的恶意电子邮件示例(从俄语翻译而来)
攻击者发送的恶意邮件伪装成来自“普里马科夫读书会”科学与专家论坛组织者的邀请函。这些邮件包含用于追踪感染情况的个性化链接。邮件内容看似真实可信,没有语言错误,且写作风格与此类活动的邀请函如出一辙。精通俄语并熟悉当地特色是ForumTroll高级持续性威胁(APT)组织的显著特征,我们在该组织的其他攻击活动中也观察到了这些特点。然而,在其他一些案例中出现的错误表明,攻击者并非以俄语为母语。
验证器
验证器是一个由浏览器执行的相对较小的脚本。它会对受害者身份进行验证,并安全地下载和执行攻击的下一阶段。 验证器执行的首个操作是,利用WebGPU API计算从服务器接收到的随机数据的SHA-256哈希值,随后验证生成的哈希值。这一过程采用了Marco Ciaramella的sha256-gpu开源项目代码。此次校验的主要目的,很可能是为了确认访问该网站的是使用真实网络浏览器的真实用户,而非可能点击链接、模拟脚本并下载恶意利用程序的邮件服务器。进行此项校验的另一个可能原因是,该恶意利用程序触发了WebGPU API中的漏洞,或依赖该API进行攻击。 验证器会使用椭圆曲线迪菲-赫尔曼(ECDH)算法,将感染标识符、WebGPU API校验结果以及新生成的公钥发送至C2服务器以进行密钥交换。若校验通过,服务器会返回一个AES-GCM密钥。该密钥用于解密下一阶段的内容,这些内容隐藏在对bootstrap.bundle.min.js和.woff2字体文件的请求中。根据事件时间线和感染逻辑,下一阶段本应是针对谷歌Chrome浏览器的远程代码执行(RCE)恶意利用程序,但在本次攻击中并未获取到。
沙箱逃逸恶意利用程序
卡巴斯基发现并报告的野外零日漏洞列表
多年来,我们已发现并报告了数十个在攻击中被积极利用的零日漏洞利用程序。然而,CVE-2025-2783是我们所遇到的最有趣的沙箱逃逸漏洞利用程序之一。该漏洞利用程序着实让我们困惑不已,因为它允许攻击者在不执行任何明显恶意或被禁止操作的情况下,绕过谷歌Chrome浏览器的沙箱保护。这是由于Windows操作系统中一个鲜为人知的怪异特性所引发的强大逻辑漏洞所致。
为防范错误和崩溃,并实现沙箱功能,Chrome采用了多进程架构。主进程负责处理用户界面,并管理和监督其他进程。沙箱化的渲染进程则负责处理网页内容,且对系统资源的访问权限有限。Chrome使用Mojo和底层ipcz库来实现浏览器进程和渲染进程之间的进程间通信。
我们发现的这个漏洞利用程序自带了从官方源静态编译的Mojo和ipcz库。这使得攻击者能够与浏览器进程内的IPC代理进行通信,而无需手动构造和解析ipcz消息。然而,这给我们带来了分析上的难题,因为为了分析该漏洞利用程序,我们必须确定其使用的所有Chrome库函数。这涉及相当大的工作量,但一旦完成,我们就了解了该漏洞利用程序执行的所有操作。
简而言之,该漏洞利用程序执行以下操作:
• 利用模式搜索从dll中解析必要函数和代码片段的地址。
• 挂钩v8_inspector::V8Console::Debug函数。这使攻击者能够通过JavaScript调用逃逸沙箱并执行所需的载荷。
• 当攻击者从脚本中调用console.debug(0x42, shellcode);时,开始执行沙箱逃逸操作。
• 挂钩ipcz::NodeLink::OnAcceptRelayedMessage函数。
• 创建并发送类型为RelayMessage的ipcz消息。此消息类型用于在两个没有必要权限的进程(如渲染进程)之间传递Windows操作系统句柄。漏洞利用程序检索GetCurrentThread API函数返回的句柄,并使用此ipcz消息将其传递回自身。代理使用DuplicateHandle API函数在进程间传递句柄。
• 使用ipcz::NodeLink::OnAcceptRelayedMessage函数挂钩接收传递回来的消息,但此时消息中包含的不再是之前由GetCurrentThread API函数返回的句柄,而是浏览器进程中线程的句柄!
• 利用此句柄,通过挂起线程、使用SetThreadContext设置寄存器值并恢复线程,在目标进程中执行一系列代码片段。这导致在浏览器进程中执行shellcode,并随后安装恶意软件加载器。
那么,问题出在哪里,这又是如何发生的呢?答案可以在GetCurrentThread和GetCurrentProcess API函数的描述中找到。调用这些函数时,它们不会返回实际句柄,而是返回伪句柄,即由内核解释为指向当前线程或进程的句柄的特殊常量。对于当前进程,此常量为-1(也等于INVALID_HANDLE_VALUE,这带来了其自身的一系列怪异特性),而当前线程的常量为-2。Chrome的IPC代码已经检查了等于-1的句柄,但未对-2或其他未记录的伪句柄进行检查。这一疏忽导致了漏洞的产生。因此,当代理在处理RelayMessage时将从渲染进程接收到的-2伪句柄传递给DuplicateHandle API函数时,它将-2转换为了指向自身线程的实际句柄,并将其传递给了渲染进程。
补丁发布后不久,便发现Chrome并非唯一受此问题影响的浏览器。Firefox开发人员迅速在其IPC代码中发现了类似模式,并发布了CVE-2025-2857更新。
伪句柄首次引入时,简化了开发并有助于提升性能——这在老式PC上至关重要。如今,数十年后,这一过时的优化却给我们带来了麻烦。
我们是否会看到更多此类漏洞?绝对会。事实上,这代表了一整类值得搜寻的漏洞——其他应用程序和Windows系统服务中可能仍隐藏着类似问题。
若想了解在发现CVE-2025-2783后Google Chrome所引入的强化措施,我们建议参加Alex Gough在Kawaiicon上即将发表的演讲“应对ITW Chrome沙箱逃逸(两次!)”。
持久加载器
通过组件对象模型(Component Object Model,COM)劫持技术可实现持久化驻留。该方法利用系统对COM对象的搜索顺序实施攻击。在Windows系统中,每个COM类都有一个注册表项,该表项将COM的类标识符(128位全局唯一标识符,CLSID)与其动态链接库(DLL)或可执行文件(EXE)的位置相关联。这些表项存储在系统注册表主键HKEY_LOCAL_MACHINE(HKLM)中,但用户注册表主键HKEY_CURRENT_USER(HKCU)中的表项可对其进行覆盖。这使得攻击者能够覆盖CLSID表项,在系统尝试定位并运行正确的COM组件时运行恶意软件。
简而言之的COM劫持
攻击者利用此技术覆盖了twinapi.dll {AA509086-5Ca9-4C25-8F95-589D3C07B48A}的CLSID(类标识符),致使系统进程和网页浏览器加载恶意动态链接库(DLL)。 该恶意DLL是一个加载器,用于解密并执行主要恶意软件。负责加载恶意软件的负载部分采用了一种类似于Metasploit框架中常见的简单二进制编码器进行编码。同时,它还使用了OLLVM进行混淆处理。由于被劫持的COM(组件对象模型)对象可加载到众多进程中,因此该负载会检查当前进程的名称,仅在由特定进程(如rdpclip.exe)执行时才加载恶意软件。主要恶意软件采用经过修改的ChaCha20算法进行解密。该加载器还具备使用BIOS(基本输入输出系统)的UUID(通用唯一识别码)重新加密恶意软件的功能,从而将其绑定到受感染的计算机上。解密后的数据包含主要恶意软件以及由Donut生成的用于启动该恶意软件的shellcode(shell代码)。
精英特工
LeetAgent是“Operation ForumTroll”(论坛巨魔行动)中使用的间谍软件。我们将其命名为LeetAgent,是因为其所有指令均以“黑客语”(Leetspeak,一种将字母替换为数字或特殊字符的网络用语)编写。你可能难以置信,但这种情况在APT(高级持续性威胁)恶意软件中十分罕见。该恶意软件会连接到配置文件中指定的某个C2(命令与控制)服务器,并使用HTTPS协议接收和执行由唯一数值标识的指令:
• 0xC033A4D(COMMAND)——通过cmd.exe运行指令
• 0xECEC(EXEC)——执行进程
• 0x6E17A585(GETTASKS)——获取代理当前正在执行的任务列表
• 0x6177(KILL)——停止任务
• 0xF17E09(FILE x09)——写入文件
• 0xF17ED0(FILE xD0)——读取文件
• 0x1213C7(INJECT)——注入shellcode(shell代码)
• 0xC04F(CONF)——设置通信参数
• 0xD1E(DIE)——退出
• 0xCD(CD)——更改当前目录
• 0x108(JOB)——为键盘记录器或文件窃取程序设置参数
除了执行来自C2服务器的指令外,该恶意软件还会在后台运行键盘记录和文件窃取任务。默认情况下,文件窃取任务会搜索具有以下扩展名的文档:.doc、.xls、.ppt、.rtf、.pdf、.docx、.xlsx、.pptx。
配置数据采用TLV(标签-长度-值)方案进行编码,并使用简单的单字节异或(XOR)加密算法进行加密。数据中包含与C2服务器通信的设置,其中包括许多流量混淆设置。
在大多数观察到的案例中,攻击者使用Fastly.net云基础设施来托管其C2服务器。攻击者经常利用该平台下载并运行额外工具,如7z、Rclone、SharpChrome等,以及额外的恶意软件(下文将详细介绍)。
流量混淆设置的数量众多,这可能表明LeetAgent是一款商业工具,尽管我们目前仅发现ForumTroll APT组织在使用它。
寻找但丁
在我们看来,确定未知恶意软件的来源是安全研究中最具挑战性的环节。为何这么说?因为这不仅涉及分析单次攻击中使用的恶意软件或漏洞利用程序,还需要查找并分析过往所有可能与当前正在调查的攻击相关的恶意软件和漏洞利用程序。这需要借助攻击指标(IOC)以及战术、技术和程序(TTP),搜索并调查类似攻击,同时识别基础设施、代码等方面的重叠之处。简而言之,就是要查找并拼凑每一条证据,直至攻击者的轮廓逐渐清晰。 我们追溯发现,LeetAgent最早于2022年投入使用,并发现了更多针对俄罗斯和白俄罗斯组织及个人的ForumTroll高级持续性威胁(APT)攻击。在许多案例中,感染始于一封包含恶意附件的钓鱼邮件,这些附件名称如下: • Baltic_Vector_2023.iso(俄语直译) • DRIVE.GOOGLE.COM(可执行文件) • Invitation_Russia-Belarus_strong_partnership_2024.lnk(俄语直译) • 其他各种提及个人和公司的文件名 此外,我们还发现了另一组类似的攻击,这些攻击使用的是比LeetAgent更为复杂的间谍软件。我们还追溯发现,这种间谍软件最早也是于2022年投入使用。在这一组攻击中,感染始于包含恶意附件的钓鱼邮件,这些附件名称如下: • SCAN_XXXX_<日期>.pdf.lnk • <日期>_winscan_to_pdf.pdf.lnk • Rostelecom.pdf.lnk(俄语直译) • 其他各种名称 实施此次攻击的攻击者使用的文件系统路径与LeetAgent攻击组相似,且采用了相同的持久化方法。这让我们怀疑这两组攻击可能存在关联,而当我们发现LeetAgent启动了这种更为复杂的间谍软件的攻击时,我们证实了两者之间的直接联系。
LeetAgent与名为但丁(Dante)的商业间谍软件之间的关联
在分析完这款此前未知的复杂间谍软件后,我们确定它是由意大利Memento Labs公司开发的名为但丁(Dante)的商业间谍软件。
大西洋理事会网络空间治理倡议最近发布了一份题为《神秘生物及其踪迹:全球间谍软件市场图谱及其对国家安全与人权的威胁》(“Mythical Beasts and where to find them: Mapping the global spyware market and its threats to national security and human rights”)的有趣报告。我们认为,将商业间谍软件比作神秘生物是一个恰当的比喻。虽然业内人士都知道存在间谍软件供应商,但他们的“产品”却很少被发现或识别出来。与此同时,开发商业间谍软件的公司数量众多。其中一些最为知名的公司包括NSO集团、Intellexa、Paragon Solutions、赛托科技(Saito Tech,前身为Candiru)、维利西乌斯控股(Vilicius Holding,前身为FinFisher)、Quadream、Memento Labs(前身为Hacking Team)、negg集团和RCS实验室。有些公司一直占据着新闻头条,有些公司我们之前曾报道过,还有一些则几乎已完全淡出人们的视线。属于后一类情况的公司之一就是Memento Labs,前身为Hacking Team。
Hacking Team(也写作HackingTeam)是最为古老且知名的间谍软件供应商之一。该公司成立于2003年,因其远程控制系统(RCS)间谍软件而闻名,该软件被全球的政府客户使用,同时也因其引发的诸多争议而备受关注。2015年,该公司遭遇黑客攻击,超过400GB的内部数据被泄露到网上,此后公司的发展轨迹发生了巨大变化。2019年,该公司被InTheCyber Group收购,并更名为Memento Labs。2019年,Memento Labs的老板在接受Motherboard采访时表示:“我们想要彻底改变一切。”“我们将从头开始。”四年后,在为执法和政府情报机构举办的2023年ISS World MEA大会上,Memento Labs公布了其新型监控工具的名称——DANTE。到目前为止,人们对这款恶意软件的功能知之甚少,也未发现其在攻击中被使用过。
2023年ISS World MEA大会日程节选(会议网站上的拼写错误) 检测和确定商业间谍软件的来源存在一个难题,即供应商通常不会在其漏洞利用程序和恶意软件中包含版权信息或产品名称。然而,就但丁间谍软件而言,一旦我们去除VMProtect的混淆代码并在代码中找到恶意软件名称,确定其来源就变得十分简单。
代码中的但丁(Dante)间谍软件名称
但丁
当然,我们的归因分析并非仅基于在代码中发现的“Dante”字符串,但该字符串确实为我们指明了正确方向,是重要线索。经过进一步分析,我们发现该恶意软件有一个“2.0”版本的引用,这与前述会议演讲的标题相吻合。随后,我们搜索并识别出了Hacking Team远程控制系统(RCS)间谍软件的最新样本。Memento Labs持续改进其代码库,直至2022年该软件被但丁(Dante)所取代。然而,即便引入了新的恶意软件,也并非一切都是从头开始;后期的RCS样本与但丁(Dante)存在诸多相似之处。所有这些发现都让我们对自己的归因分析结果充满信心。
为何作者将其命名为但丁(Dante)?这或许是对传统的一种致敬,因为RCS间谍软件也曾被称为“达芬奇”(Da Vinci)。不过,这也可能是对但丁诗作《神曲》(Divine Comedy)的引用,暗指恶意软件分析师在检测和分析这款间谍软件时,因其采用的大量反分析技术,而必须经历的诸多“地狱之圈”。
首先,这款间谍软件使用了VMProtect进行打包。它对控制流进行了混淆处理,隐藏了导入的函数,并添加了反调试检查。除此之外,几乎所有的字符串都经过了加密处理。
VMProtect反调试技术
为防范动态分析,但丁(Dante)采用了以下反挂钩技术:当代码需要执行某个API函数时,会先通过哈希算法解析该函数的地址,解析其函数体以提取系统调用号,然后创建并使用一个新的系统调用存根。
但丁(Dante)防挂钩技术(简化版)
除了VMProtect的反调试技术外,但丁(Dante)还采用了一些常见方法来检测调试器。具体而言,它使用NtGetContextThread函数检查调试寄存器(Dr0-Dr7),检查KUSER_SHARED_DATA结构中的KdDebuggerEnabled字段,并使用NtQueryInformationProcess函数通过查询ProcessDebugFlags、ProcessDebugPort、ProcessDebugObjectHandle和ProcessTlsInformation类来检测调试行为。 为防止自身被发现,但丁(Dante)采用了一种有趣的方法来检查环境,以确定是否可安全继续运行。它会查询Windows事件日志,查找可能表明使用了恶意软件分析工具或虚拟机(作为客户机或主机)的事件。
但丁(Dante)在事件日志中搜索的字符串
它还会执行多项反沙箱检测。它会搜索“不良”库文件,测量sleep()函数和cpuid指令的执行时间,并检查文件系统。
这些反分析技术中,有些或许会让人感到有些棘手,但它们实际上都起不到什么作用,也无法阻止专业的恶意软件分析师。我们几乎每天都要应对这些技术手段。
在完成所有检测后,但丁会执行以下操作:解密配置信息和编排程序(orchestrator),在编排程序中找到字符串“DANTEMARKER”,用配置信息覆盖该字符串,然后加载编排程序。
配置信息是使用简单的异或(XOR)加密算法从恶意软件的数据段中解密出来的。编排程序则是从资源段中解密出来的,并伪装成字体文件。如果文件系统中有更新版本的编排程序,但丁还可以从文件系统中加载并解密该编排程序。
编排程序展现出了商业产品应有的代码质量,但并无特别引人注目之处。它负责通过HTTPS协议与命令和控制服务器(C2)进行通信,处理模块和配置信息,实现自我保护和自我删除功能。
模块可以从文件系统中保存和加载,也可以从内存中加载。感染标识符(GUID)采用Base64编码。编码后字符串的部分内容用于推导出包含模块的文件夹路径以及存储在注册表中的额外设置路径。
但丁路径推导的一个示例
包含模块的文件夹中有一个二进制文件,该文件存储了所有已下载模块的信息,包括版本和文件名。此元数据文件采用简单的异或(XOR)加密算法进行加密,而模块则采用AES-256-CBC加密算法进行加密,其中使用模块文件的前0x10个字节作为初始化向量(IV),并使用与机器绑定的密钥。该密钥等于包含CPU标识符和Windows产品ID的缓冲区的SHA-256哈希值。
为保护自身安全,编排程序采用了许多相同的反分析技术,并额外增加了对特定进程名和驱动程序的检查。
如果但丁在配置信息中指定的天数内未收到命令,它将自行删除并清除所有活动痕迹。
在撰写本报告时,由于我们的用户中目前没有活跃的但丁感染案例,因此我们无法对其他模块进行分析。不过,如果有相关模块出现,我们很乐意进行分析。如今,有关这款间谍软件的信息已公之于众,其开发者也已被确认,我们希望不久后就能发现并研究其他模块。为支持这一工作,我们分享了一种可用于识别活跃的但丁间谍软件感染的方法(详见“攻击指标”部分)。
尽管我们未发现ForumTroll高级持续性威胁(APT)组织在“论坛巨魔行动”(Operation ForumTroll)中使用但丁,但我们在与该组织相关的其他攻击中观察到了但丁的使用。值得注意的是,我们发现此次攻击与其他涉及但丁的攻击之间存在几处细微的相似之处,如相似的文件系统路径、相同的持久化机制、隐藏在字体文件中的数据以及其他细微的细节。最重要的是,我们在漏洞利用程序、加载程序和但丁中发现了相似的代码。综合这些发现,我们可以得出结论:“论坛巨魔行动”也是使用但丁间谍软件配套的工具集实施的。
结 论
这一次,我们得出的不是一条,而是三条结论。 1)DuplicateHandle是一个危险的API函数。如果进程具有特权且用户能为其提供一个句柄,那么当提供的是伪句柄时,代码应返回错误。 2)归因分析是恶意软件分析和威胁情报工作中最具挑战性的部分,但当所有线索完美拼合在一起时,也是最有成就感的部分。如果你小时候梦想成为一名侦探,像夏洛克·福尔摩斯、马普尔小姐、科伦坡或史酷比与神秘公司团队那样破解谜团,那么威胁情报工作可能正适合你! 3)早在2019年,Hacking Team的新东家在一次采访中表示,他们想要改变一切,从头开始。这花了一些时间,但到2022年,Hacking Team的几乎所有内容都已重新打造。如今Dante已被发现,或许是时候再次重新开始了。 有关本研究的完整细节,以及关于ForumTroll APT和Dante的未来更新信息,均可通过我们的威胁情报门户网站提供给APT报告服务的客户。
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……




还没有评论,来说两句吧...