ChromeLoader:新的顽固恶意软件活动
执行摘要
2022 年 1 月,发现了一个名为ChromeLoader(也称为 Choziosi Loader 和 ChromeBack)的新浏览器劫持者/广告软件活动。尽管使用了简单的恶意广告,该恶意软件还是变得广泛传播,可能会泄露成千上万用户和组织的数据。
恶意软件作者没有使用 Windows 可执行文件 ( .exe ) 或动态链接库 ( .dll )等更传统的恶意软件,而是使用浏览器扩展作为最终负载。浏览器扩展充当广告软件和信息窃取者,泄露用户的所有搜索引擎查询。我们在整个活动的演变过程中发现了显着的变化和功能的增加,我们预测随着活动的继续会有进一步的变化。
在本文中,我们研究了该恶意软件的技术细节,重点关注其不同版本之间的演变,并描述其感染过程中的变化。本文还回顾了尚未公开报道的新变种。
使用Cortex XDR和WildFire的Palo Alto Networks 客户可以立即获得针对这种新发现的恶意软件的保护。
讨论的恶意软件名称ChromeLoader, Choziosi 加载器, ChromeBack
ChromeLoader 恶意软件简介
ChromeLoader 是一个多阶段恶意软件家族。每个变种在其感染链中都包含不同的阶段,但不同变种之间的感染链通常看起来非常相似,包括所有变种中使用的恶意浏览器扩展。
我们跟踪的不同有效负载扩展具有攻击者添加的硬编码版本。这种标签例程有助于研究过程,将不同版本与同一个活动联系起来——并按正确的时间顺序排列。
各种扩展版本与此恶意软件的不同变体有关。我们不仅通过相关的扩展版本来区分这些变体,还通过在整个感染链和目标操作系统中使用的技术来区分这些变体。
本文按检测顺序提到了不同的变体,并在整个文档中引用如下:
变体 0:以这种方式命名,因为它在变体 1(在野外发现的第一个变体)之前处于活动状态。它使用 AutoHotKey (AHK) 编译的可执行文件和 Chrome 扩展的 1.0 版。它的第一次已知攻击发生在 12 月。在本文中,第四次讨论了这个变体(在标题为“真正的第一个 Windows 变体”的部分中)。
变体 1:首先提到(从“感染媒介”部分开始)。它使用 Chrome 扩展的 2.0-4.4 版本作为其有效负载和一个 DotNet 可执行文件,该可执行文件启动混淆的 PowerShell 作为其释放器。它主要在1月份活跃。
变体 2:提到的第三个(请参阅“第二个 Windows 变体”部分)。它使用 6.0 版的 Chrome 扩展程序,并使用一个经过混淆的可执行文件作为其初始释放器。自三月以来一直活跃。
MacOS Variant:第二个提到(参见“ MacOS Variant ”一节)。此变体专注于 MacOS 计算机(而其他变体仅针对 Windows 用户)。使用 6.0 版本的扩展。从三月开始活跃。
图 1. 不同变体的感染链。
感染载体(变体 1)
ChromeLoader 恶意软件的第一个变体(在简介中称为变体 1)于 2022 年 1 月首次出现。
当用户通过广告网站和社交媒体平台上的恶意广告活动被诱使下载种子文件或破解视频游戏时,事件链就开始了。用户扫描这些网页上的 QR 码并被重定向到显示 ISO 映像(光盘映像文件,通常与 CD/DVD 一起使用)的受感染网站。用户下载 ISO 镜像,通过双击挂载它并执行挂载的 ISO 镜像中包含的内容。
图 2. Twitter 上发布的二维码示例。
图 3. 来自 QR 码的恶意 ISO 映像的下载链接示例。
部署
下载的 ISO 映像包含以下内容:
- Microsoft.Win32.TaskScheduler.dll:由 Microsoft 签名的合法 .NET DLL,由其他 .NET 程序用于与计划任务机制集成。
- 语言文件夹:包含所提到的 DLL 使用的资源文件。
- CS_installer.exe及其配置文件:恶意软件作者编写的恶意可执行文件(请注意,名称可能会从一个版本更改为另一个版本)。在某些版本中,作者(可能不小心)将包含调试数据的 PDB 文件也留在了此文件夹中
- _meta.txt:此恶意软件高级版本中的文本文件,包含加扰的ASCII 字母。
此目录中的大部分文件都是隐藏的,普通用户在使用 Windows 文件资源管理器打开此目录时不会注意到它们。唯一的非隐藏文件是CS_installer.exe,它诱使受害者双击它来完成软件安装下载。
图 4. 已安装的恶意 ISO 映像示例(选择“显示隐藏文件”后)。
受害者通过双击启动CS_installer.exe 。在大多数情况下,可执行文件会显示如下图 5 所示的消息,表明程序执行失败。然而,这是作者试图误导他们的目标。
图 5. 由 dropper 呈现的消息框,旨在欺骗用户。
可执行文件是用 .NET 编写的非混淆程序,因此 .NET 反射器可以对其进行反编译以读取源代码。当可执行文件加载到反射器中时,会显示图 6 中所示的代码。此代码创建一个计划任务,配置为每十分钟执行一次恶意 base64 编码的 PowerShell 命令。任务名称由与namesDict数组中的随机后缀连接的Chrome字符串构成。
图 6. 反编译的 CS_installer.exe 源代码示例。
脚本内容来自_meta.txt文件,由下面图 7 中的以下预定义函数解密,该函数应用简单的字符替换。
图 7. 解读功能示例。
该恶意软件变体的早期版本中缺少一些提到的功能。例如,在图 8 所示的版本中,该版本仅比图 6 和图 7 中提到的版本早一周发现,作者没有使用解扰函数,而是简单地将编码的 PowerShell 脚本硬编码到 .NET 可执行文件中,并使用为他们的任务预定义ChromeLoader名称,而不是生成更随机的后缀。
图 8. 旧版本 Variant 1 的源代码示例。
攻击者使用编码的 PowerShell 脚本下载恶意浏览器扩展并将其加载到用户的 Chrome 浏览器中。
图 9. PowerShell 释放器中的变量定义示例。
图 10. 负载下载尝试示例。
图 11. 尝试将有效负载加载到用户浏览器中。
从这个恶意软件的早期版本到后来的版本的演变也可以在编码的 PowerShell 脚本中看到。图 12 显示了由该变体的早期版本执行的 PowerShell 脚本,该变体明显更短,包含的代码也不那么复杂。
图 12. 此 PowerShell 释放器的旧版本示例。
滴管统计
从该活动的第一天开始,我们的行为威胁保护模块就阻止了对 Palo Alto Networks Cortex XDR 客户的 ChromeLoader 攻击。但是,我们对这次攻击的以下阶段感到好奇。因此,我们决定继续研究,追踪攻击者的足迹和意图。
计划任务是使用恶意软件下载恶意 Chrome 扩展并将其安装到受害者的浏览器中。托管 Chrome 扩展程序的 URL 被硬编码在混淆的 PowerShell 命令中,并且在不同版本之间发生变化。
图 13. 安装服务器的第一次感染尝试。
图 14. 安装服务器连接尝试分布。
图 15. 每个区域阻止的感染。
图 16. 变体 1 最活跃时间期间每台安装服务器每天的感染尝试。
有效载荷
该恶意软件的有效负载是一个 Chrome 扩展程序——每个可下载的扩展程序都具有相同的格式:
图 17. 下载的扩展文件示例。
使用清单文件中的一些定义,并使用已知的合法图片,扩展声称是合法且无害的。但是,该扩展程序要求提升权限。请求的权限包括访问浏览器数据、操纵 Web 请求和访问每个可能的 URL 地址,而合法的浏览器扩展程序不会这样做。
图 18. 下载的扩展清单文件示例。
Javascript文件conf.js声明了常量变量,后面会用到主脚本background.js。C2 域存储在_ExtDomNoSchema中。
图 19. 下载扩展的 conf.js 文件示例。
background.js是一个包含所有扩展功能的单行 JavaScript 文件;它被严重混淆,但可以通过一系列简短的步骤转换为可读的 JavaScript 代码。但是,任何使用已知的公共 JavaScript 反混淆工具对该代码进行反混淆的尝试都将失败,原因将在后面详述。
图 20. 下载扩展的模糊 background.js 文件示例。
该脚本使用各种混淆技术来隐藏其目的和恶意代码。执行的第一个函数之一是负责将标准 JavaScript 函数和对象复制到具有打乱名称的新对象中,稍后将使用脚本来解码位于该脚本最后一条指令中的最终有效负载。
图 21. 重命名机制的示例。例如,在本例中,String 对象存储为 b4VV。
在此脚本的整个执行过程中,作者使用了面向 switch-case 的编程来使恶意软件分析人员更难阅读和理解他们的程序。
图 22. 一个面向 switch-case 的编程示例。
程序使用上面图 22 中所示的E3变量循环,并对每个值执行不同的操作。当 switch case 中的相关流程结束时,程序将E3的值更改为下一条指令。该程序还使用前面提到的混淆对象名称。在图 22 中,我们在相关代码行下方的注释中添加了原始对象名称。
在了解了混淆名称和面向 switch-case 的编程之后,我们可以更好地分析这段代码的目的。它使用硬编码的四大小整数数组,将其转换为相关的 ASCII 字符并按随机顺序对其进行排序。稍后,这个数组将被连接到一个字符串,程序将搜索以该名称定义的函数。如果未找到该函数,则执行流程将重新开始。
这个阶段揭示了脚本中的另一种混淆技术。标准反混淆工具使用的关键特性之一是删除未引用的函数和对象。通常,它有助于缩短代码,省去永远不会真正运行的复杂部分——删除其全部目的是误导恶意软件分析师的功能。但是,在这种情况下,使用反混淆工具会丢弃一个必不可少的功能,如果没有它,脚本将陷入无限循环。
在脚本执行期间,函数h0QQ甚至没有被直接引用一次。然而,前面提到的使用随机排序算法的代码部分最终会尝试执行它,因为h0QQ是0hQQ字符串的排列。如果h0QQ不存在,代码只是尝试对字符进行排序并反复查找函数名。
图 23. 未引用的关键函数的示例。
这个函数返回一个长的加扰字符串,通过一个硬编码的键进行异或,然后拆分成一个字符串数组。
图 24. 包含恶意软件使用的字符串的 deXORed 数组示例。
恶意软件最终使用这些字符串来解码其恶意代码。它引用此数组中相关索引处的字符串,而不是在代码中硬编码字符串名称。
图 25. 恶意软件使用 deXORed 数组解码其最终有效载荷的示例。您还可以看到,恶意软件不使用整数作为数组的索引,而是将字符串与算术运算结合使用。
在使用调试器执行初始化代码后,我们导出了提到的列表成员。然后我们使用 Python 脚本对 JavaScript 代码的其余部分进行去混淆处理。
图 26. 用于反混淆 background.js 的脚本。
信息窃取者和广告软件
为了与恶意扩展程序进行通信,作者使用了命令和控制服务器 (C2),这与之前用于安装扩展程序的安装服务器不同。该恶意软件使用各种扩展功能,使其在用户浏览器中占有一席之地。
图 27.恶意软件安装的警报示例。
安装扩展程序时,它会添加两个 Chrome 警报(警报允许开发人员安装将定期触发的回调/计划任务)。当这些警报被触发时,会调用两个相应的函数:
- 当触发广告警报时,扩展程序会向 C2 请求广告并将其显示在新选项卡中。
- hb回调触发与 C2 通信的函数,通知它当前的执行状态。
图 28. 触发警报时恶意软件的反应示例。
在图 29 中显示的代码中可以看到另一个有趣的活动。扩展安装了一个侦听器,它允许它拦截每个传出请求,并使用它来检查请求是否发送到搜索引擎 - Google、Yahoo 或 Bing。如果是这样,扩展程序会将搜索详细信息发送到 C2,从而泄露受害者的想法和兴趣。
图 29. 浏览器劫持功能示例。
此外,扩展使用不同的机制来验证它是否正确执行。例如:
- 每个传出到 C2 的数据包都有一个名为dd的硬编码标头。C2 可以使用它来识别不同的分销渠道/附属公司。
图 30. 添加的 dd 标头示例。
- 取消搜索建议,可能是为了确保搜索查询是用户想要的。
- 从浏览器中卸载现有的 Chrome 扩展程序。它还将扩展名发送到 C2 并返回一个允许列表 json,以排除所选扩展名被删除。
- 禁用所有访问chrome://extensions并打开chrome://setting的尝试,以防止用户卸载此恶意扩展。
版本控制
大多数恶意扩展包含一个名为conf.js的文件以及存储在background.json中的主要 Javascript 代码。此conf.js(或manifest.json或background.js文件,如果缺少conf.json)文件存储扩展的相关配置:C2 的主机名(例如,krestinaful[.]com和tobepartou[.]com),验证头的dd值、扩展名及其版本。似乎版本信息是准确的——我们看到的版本(2.0、3.0 和 4(.0,.3,.4))之间存在一些差异。(关于我们对变体和版本之间关系的观察,请参见“简介”部分。)
2.0 版(2022 年 1 月 4 日首次发布):
缺少的功能:
- 没有针对受害者的广告。
- 仅从 Google 收集的搜索引擎查询。
- 不删除现有的浏览器扩展。
3.0 版(2022 年 1 月 6 日):
新增功能:
- 搜索引擎查询现在也从 Yahoo 和 Bing 收集。
- 添加的SetWithExpiry()和GetWithExpiry()函数分别用于存储变量(即查询 URL)和删除现有扩展。
- 现有的扩展删除机制。
4.* 版本(2022 年 1 月 7 日):
新增功能:
- 整个脚本中的更多混淆。
- 添加了 Chrome 广告机制。
- 更改了硬编码的 C2 URL。
- Chrome 警报机制。
MacOS 变体
2022 年 3 月,出现了一个针对 MacOS 用户的新变体。此变体仍然处于活动状态,并使用类似的技术来安装其有效负载并隐藏其操作。它使用相同的感染方法将受害者引导到受感染的按次下载付费网站安装其滴管。
在这种情况下,dropper 是一个磁盘映像 (DMG) 文件——ISO 文件的 MacOS 实现——包含多个文件,包括一个 bash 脚本。bash 脚本以多种方式类似于预定的 PowerShell 脚本:
- 下载有效负载——来自远程安装服务器的浏览器扩展。
- 将有效负载加载到目标的浏览器中——Google Chrome 和内置的 Safari 浏览器。
图 31. MacOS 安装脚本的早期版本示例。
在更高级的情况下,作者不是在 bash 脚本中硬编码下载执行部分,而是将这些命令编码在一个单独的文件中,然后由 bash 脚本使用 OpenSSL 解码和执行。
图 32. 稍后的 MacOS 安装脚本示例。
下载的扩展功能与 Windows 操作系统版本中使用的类似。MacOS 变体使用相同的混淆方法来执行相同的重要组件——收集搜索引擎查询并展示广告。此外,该版本还使用了新的 C2 地址。
根据该变种提供的恶意扩展的版本号,攻击者将 MacOS 变种引用为晚于 Windows 变种,这符合该活动的感染时间线。在我们的研究中,使用该变体发现的扩展被标记为该恶意软件的 6.0 版本。
第二个 Windows 变体(变体 2)
2022 年 3 月,在最后一次已知的变体 1 感染几周后,我们发现了一个与第一个有多个相似之处的新活动,这使我们相信我们实际上正面临本博客中提到的相同 ChromeLoader 恶意软件的另一个变体作为变体 2。
此变体 2 的感染媒介与变体 1 相同。通过按安装付费网站和社交媒体上的恶意广告活动,诱使用户下载 torrent 或破解视频游戏。
用于变体 2 的 ISO 映像包含新的可执行文件。受害者只会看到一个 Windows 快捷方式,他们可以双击该快捷方式来安装所需的软件或观看电影。
图 33. 恶意挂载 ISO 的示例。
但是,ISO 映像包含在受害者启动 Windows 快捷方式时执行的其他隐藏文件(.lnk文件)。.lnk文件只运行一个名为resources.bat的批处理脚本。反过来,该脚本将app.zip的内容提取到%APPDATA%中。zip 存档包含一个名为Tone.exe的可执行文件,该可执行文件最终由批处理脚本存储到注册表运行密钥中,从而使感染持续存在。
图 34. LNK 文件配置示例。
图 35.resources.bat 内容示例。
与变体 1 一样,变体 2 安装了相同类型的 Chrome 扩展程序。该恶意软件启动了一个cmd.exe进程,该进程又执行了powershell.exe。PowerShell 进程执行 WMI 查询,用于安装名为chrome *的新计划任务,启动另一个编码的 PowerShell 命令。
图 36. 恶意软件安装计划任务时的因果链示例。
在分析上述混淆的 PowerShell 脚本时,我们遇到了一个用作 dropper 的脚本。此脚本不直接安装新的 Chrome 扩展,因此它与变体 1 的 PowerShell 脚本模式不完全匹配。但是,变量的结构和使用类似于变体 1 的行为。
图 37. 解码后安装的计划任务脚本内容示例。
使用 XQL 查询,当安装服务器可用时,PowerShell 脚本会创建并加载熟悉的恶意 Chrome 扩展程序(6.0 版本,用于最新的 MacOS 变体)。
图 38. 编码 PowerShell 下载的文件示例。
真正的第一个 Windows 变体 – 2021 年 12 月(变体 0)
由于其多次感染事件,该恶意软件家族在网络安全界引起了全世界的关注。
如前所述,我们在调查期间检测到此恶意软件的不同版本。每个版本不仅由我们标记,还由恶意软件作者自己标记。我们检测到的最早的标记版本是 2.0。因此,我们确信这不是这些攻击者第一次发动攻击,我们决心公开该恶意软件的实际第一个版本。
由于攻击者频繁更新有效载荷的历史,我们确信第一个感染病例发生在 2022 年 1 月与目前报告的感染病例比较接近。
透视用于 Variant 1 PowerShell dropper 的安装服务器域显示,另一款恶意软件在 2021 年 12 月使用其中一些域作为其安装服务器。
这个恶意软件是一个使用 AutoHotKey (AHK) 编写的可执行文件——一个用于脚本自动化的框架。
使用此工具,程序员可以使用 AHK 语法编写简短、易于理解的脚本。然后,根据程序员的定义,框架会创建匹配的钩子来执行这些脚本。
在将 AHK 脚本转换为 Windows 可执行文件时,原始脚本源代码被粘贴到可执行文件的末尾,与使用重度混淆的其他变体相比,研究人员的调查过程更加轻松。在这种情况下,硬编码脚本包含以下源代码,看起来与我们已经分析过的 PowerShell 释放器非常相似:
图 39. AutoHotKey 脚本内容的示例。
简而言之,这个dropper从它的安装服务器下载一个payload。我们可以通过用于下载的有效负载 ( Extension_Name )的变量名称假设此有效负载是另一个浏览器扩展。
经过更彻底的调查,我们找到了下载的扩展程序。不出所料,它还包含与 ChromeLoader 恶意软件家族相关的功能——但更重要的是,它被标记为 1.0 版(!)
这些扩展与与该系列相关的其他扩展非常相似,但有一个主要区别——这一次,扩展没有被混淆。它甚至包含作者对不同代码部分的一些评论。
图 40. 此变体下载的扩展示例,我们这边没有任何更改。
结论
该博客记录了使用恶意广告传播的新恶意软件系列 ChromeLoader 的不同示例。该恶意软件展示了网络犯罪分子和恶意软件作者的决心:在很短的时间内,ChromeLoader 的作者发布了多个不同的代码版本,使用了多个编程框架、增强功能、高级混淆器、修复了问题,甚至添加了跨操作系统支持目标Windows 和 MacOS。
该恶意软件用于劫持受害者的浏览器搜索和展示广告——这两种行为不会造成严重损害或泄露高度敏感的数据。然而,基于攻击者在如此短的时间内获得的广泛分布,他们能够造成比 Chrome 扩展程序的两个主要功能造成的损害更大的损害。
此外,作者非常有条理,标记了他们不同的恶意软件版本,并在整个攻击例程中使用了类似的技术。这可能使他们在开发攻击框架和维护攻击链时生活更轻松,但无意中,这也使调查过程变得更加容易。事实上,它极大地提高了研究能力,以至于我们能够检测到该恶意软件的两个新版本——第一个版本和最新版本,之前从未与该恶意软件家族相关联。
最后,这个攻击链展示了安全产品甚至普通用户应该注意的恶意软件作者中的两个上升趋势——使用 ISO(和 DMG)文件和使用浏览器扩展。
文章转自:
纳达夫巴拉克