GOFFEE是一个威胁行为者,最早在2022年初引起了我们的注意。从那以后,我们观察到其恶意活动专门针对位于俄罗斯联邦的实体,利用带有恶意附件的鱼叉式网络钓鱼电子邮件实施攻击。从2022年5月开始直至2023年夏天,“GOFFEE”在其攻击活动中部署了经过修改的奥沃瓦(Owowa,恶意的IIS模块)。截至2024年,“GOFFEE”开始通过鱼叉式网络钓鱼部署经过篡改的恶意版“explorer.exe”程序实例。
在2024年下半年,“GOFFEE”继续针对俄罗斯的多个组织发动定向攻击,使用了名为“PowerTaskel”的非公开的用PowerShell编写的“神话”(Mythic)代理程序,并引入了一种我们称之为“PowerModul”的新型植入程序。攻击目标所在的行业领域包括媒体和电信、建筑、政府机构以及能源公司。
本报告要点如下:
• “GOFFEE”更新了传播方案。
• 引入了一种此前未被描述过的、名为“PowerModul”的植入程序。
• “GOFFEE”越来越多地放弃使用“PowerTaskel”,转而采用二进制的“神话”(Mythic)代理程序来进行横向移动攻击。
如需了解更多信息,请联系:[email protected]
技术细节
初始感染
目前,多种感染方式同时被使用。通常起始点是一封带有恶意附件的网络钓鱼邮件,但从这之后感染方式会略有不同。我们将梳理研究期间相关的两种感染方式。
第一种感染方式使用一个 RAR 压缩包,里面有一个伪装成文档的可执行文件。在某些情况下,文件名会使用双重扩展名,比如 “.pdf.exe” 或 “.doc.exe” 。当用户点击该可执行文件时,一个诱饵文档会从命令与控制服务器(C2)下载并打开,与此同时恶意活动会并行开展。
诱饵文档示例
该文件本身是一个 Windows 系统文件(资源管理器程序文件 explorer.exe 或 XPS 查看器程序文件 xpsrchvw.exe),其部分代码被植入了恶意的外壳代码。这种外壳代码与我们在早期攻击中看到的类似,但除此之外还包含一个经过混淆处理的 Mythic(神话)代理程序,该代理程序会立即开始与命令控制(C2)服务器进行通信。
恶意软件执行流程 版本1
在第二种情况中,该RAR压缩档案包含一份带有宏的微软Office文档,这个宏起到了恶意程序释放器的作用。
恶意软件执行流程 版本 2
带有宏的恶意文档
当打开文档时,会显示乱码文本以及一条带有提示信息的警告图片,提示内容为“此文档是使用早期版本的 Microsoft Office Word 创建的。若要让 Microsoft Office Word 正确显示内容,请单击‘启用内容’”。点击“启用内容”会激活一个宏,该宏会隐藏警告图片,并通过常规的字符替换操作恢复文本。此外,该宏会在用户的当前文件夹中创建两个文件:一个 HTML 应用程序(HTA)文件和一个 PowerShell 文件,并且会利用注册表项“HKCUSoftwareMicrosoftWindows NTCurrentVersionWindows”下的“LOAD”注册表值,将 HTA 文件写入注册表。
尽管该宏本身不会启动任何程序或创建新进程,但注册表项“LOAD”值中列出的程序会为当前已登录的用户自动运行。
用户缓存配置文件(UserCache.ini)的HTA文件内容
恶意的HTA文件会运行一个PowerShell脚本(PowerModul),但并非直接运行。相反,它首先借助cmd.exe和输出重定向功能,将一个名为“UserCacheHelper.lnk.js”的JavaScript文件存放到磁盘上,然后执行该文件。只有在这之后,被释放的JavaScript文件才会运行PowerModul脚本。
值得注意的是,“UserCache.ini.hta”和“UserCacheHelper.lnk.js”包含的文件路径字符串是完整路径,其中包括本地用户名,而不是使用环境变量。因此,控制键以及文件大小会因当前用户名的不同而有所差异。
“UserCacheHelper.lnk.js” 文件内容
“UserCacheHelper.lnk.js” 文件会启动一个名为 “UserCache.ini” 的 PowerShell 文件,该文件是由最初的宏释放的。此文件包含经过编码的 PowerModul 脚本。
模块
PowerModul是一个PowerShell脚本,它能够从命令与控制(C2)服务器接收并执行额外的PowerShell脚本。这种植入程序首次被检测到使用是在2024年初。起初,它被用于下载并启动PowerTaskel植入程序,并且被认为是用于启动PowerTaskel的一个相对次要的组件。然而,由于它使用了一种独特的协议、不同类型的有效载荷,且其命令与控制(C2)服务器与PowerTaskel的不同,这使得我们将它归类为一个独立的恶意软件家族。
“UserCache.ini” 文件内容
在我们所描述的这种情形中,PowerModul代码是以Base64编码字符串的形式嵌入到“UserCache.ini”文件中的。解码后的脚本开头和结尾如下面的图片所示,而中间部分包含了该HTA文件的一个副本,以及负责将HTA文件释放到磁盘上、写入注册表并通过将其属性更改为“隐藏”来隐藏该文件的代码。从本质上讲,这段代码复制了在Word文档中发现的VBA宏的部分功能,不过隐藏文件这一功能除外,因为在VBA宏中并未实现这一功能。
PowerModul(程序)的开头部分
PowerModul(程序)的结尾部分
当访问命令与控制(C2)服务器时,PowerModul会在C2服务器的URL后面附加一个受感染系统的标识符字符串,该字符串由计算机名称、用户名和磁盘序列号组成,各部分之间用下划线分隔:
命令与控制(C2)服务器的回复采用的是XML格式,其中包含以Base64编码的脚本。
PowerModul中有一个此前未作描述的额外函数,名为 “OfflineWorker()”。该函数会对一个预定义字符串进行解码并执行其内容。在上述截图所示的示例中,待解码的字符串为空,因此没有任何内容被执行。不过,我们也观察到过该字符串包含内容的情况。以下展示了一个 “OfflineWorker()” 函数包含 “FlashFileGrabber” 数据窃取工具代码的示例:
PowerModul所使用的有效载荷包括PowerTaskel、FlashFileGrabber以及USB蠕虫工具。
FlashFileGrabber(闪存文件窃取器)
顾名思义,FlashFileGrabber旨在从诸如闪存盘之类的可移动存储介质中窃取文件。我们已经识别出了两个变种:FlashFileGrabber和FlashFileGrabberOffline(离线版闪存文件窃取器)。
FlashFileGrabberOffline 主程序
FlashFileGrabberOffline 会在可移动媒体中搜索具有特定扩展名的文件,一旦找到,就会将这些文件复制到本地磁盘。为了实现这一点,它会在 TEMP 文件夹中按照 “%TEMP%CacheStoreconnect<卷序列号>” 的模板创建一系列子目录。文件夹名称 “CacheStore” 和 “connect” 是在脚本中硬编码的。下面给出了一些这样的路径示例:
此外,会在上述模板指定的路径下创建一个名为“ftree.db”的文件,该文件存储已复制文件的元数据,包括原始文件的完整路径、文件大小以及最后访问和修改日期。此外,在“%AppData%”文件夹中会创建“internal_profiles.db”文件,用于存储上述元数据的MD5哈希值。这使得该恶意软件能够避免多次复制相同的文件:
感兴趣的文件扩展名列表如下:
FlashFileGrabber 在很大程度上复制了 FlashFileGrabberOffline 的功能,但有一个关键区别:它能够将文件发送到命令与控制(C2)服务器。
FlashFileGrabber 的例程
USB 蠕虫
USB 蠕虫能够将 PowerModul 的副本感染到可移动媒体上。为实现这一目的,该蠕虫会将可移动磁盘上的文件重命名为随机名称,同时保留其原始扩展名,并为这些文件设置“隐藏”文件属性。随后,包含 PowerModul 的 “UserCache.ini” 文件会被复制到原始文件所在的文件夹中。
USB 蠕虫主程序
此外,该蠕虫会创建隐藏的 VBS(Visual Basic 脚本)文件和批处理文件,用于启动 PowerModul 并打开一个诱饵文档。
CreateVBSFile () 和 CreateBatFile () 函数
恶意 VBS 脚本内容示例
恶意批处理文件的内容示例
同时还会使用诱饵文档的原始名称创建一个快捷方式,当该快捷方式被启动时,会执行对应的VBS文件。
CreateShortcutForFile () 函数
为了伪装快捷方式,该蠕虫会根据原始文件的扩展名,从 shell32.dll 库中选取一个图标赋予快捷方式。此蠕虫会将被快捷方式替换的文档数量限制为五个,它会依据文件的“最后访问时间”属性对文件进行排序,仅选择最近访问过的文件。
通过可移动媒体进行系统感染的方案
PowerTaskel
我们将自2023年初起通过基于邮件的感染链传播的非公开PowerShell Mythic代理程序命名为PowerTaskel。这种植入程序仅具备两项主要功能:以“签到”消息的形式将目标环境的信息发送到命令与控制(C2)服务器;响应植入程序发出的“获取任务”请求,将从C2服务器接收到的任意PowerShell脚本和命令作为“任务”来执行。请求负载是被序列化为XML的PowerShell对象,使用针对特定样本的单字节密钥进行异或(XOR)编码,然后转换为Base64格式。
根据配置参数的命名和排序,PowerTaskel很可能源自最初用Python编写的开源Medusa Mythic代理程序。
Medusa 和 PowerTaskel 配置代码对比
Medusa和PowerTaskel “签到”功能代码对比
PowerTaskel 是一款功能完备的代理程序,能够执行命令和 PowerShell 脚本,这使其功能扩展到了文件的下载与上传、进程的运行等方面。然而,由于 PowerShell 使用中的某些特定因素,它的功能往往存在不足,这促使相关组织转而使用自定义的二进制 Mythic 代理程序。为了实现这一点,PowerTaskel 会从命令与控制(C2)服务器加载 Mythic 代理程序,将其注入到自身的进程内存中,并在一个单独的线程中运行它。在这种情况下,Mythic 代理程序以一种自我配置的 x32/x64 外壳代码的形式存在。关于注入和加载 Mythic 代理程序外壳代码的方法,在“横向移动”部分有更详细的描述。
至少有一次,PowerTaskel 收到了一个包含“文件夹文件抓取器(FolderFileGrabber)”组件的脚本作为任务。FolderFileGrabber 在很大程度上复制了 FlashFileGrabber 的功能,但有一个关键区别:它可以使用 SMB 协议,通过硬编码的网络路径从远程系统抓取文件。PowerShell 命令“New-SmbMapping”被用于访问远程系统资源,从而能够成功获取所需的文件。
横向移动
在系统被感染后,如果用户账户权限允许,PowerTaskel 会执行多项任务,以将自身权限提升至系统级。为实现这一目的,PowerTaskel 会利用 Sysinternals 工具套件中的 PsExec 实用工具。该 PsExec 实用工具会被放置到 PowerTaskel 所在的当前目录,并用于以系统权限执行 `mshta.exe`,同时将一个 URL 作为参数传递给它。
下图展示了 PowerTaskel 与它的命令与控制(C2)服务器执行的两项任务。第一项任务会检查 `%ProgramData%` 目录中是否存在 “ntuser.exe” 文件,若未找到该文件,就会从 C2 服务器下载该文件。第二项任务会通过 “ntuser.exe”(实际上是重命名后的 PsExec 实用工具)来运行 `mshta.exe`。
获取 “ntuser.exe”
正在运行“mshta.exe”的“ntuser.exe”可执行文件
下一张图片展示了通过权限提升程序启动的各种脚本和命令的执行流程示例。可执行文件“1cv9.exe”是重命名后的 PsExec 实用工具,参数“-s”指定它所启动的进程应在系统账户下运行。所启动的程序“mshta.exe”接受一个 URL 作为参数,该 URL 指向一个包含经过恶意混淆处理的 JScript 的 HTA 文件。这个 HTA 文件会被缓存并保存到 Internet 缓存文件夹中。
这个 JScript 使用“echo”控制台命令(通过将输出重定向到文件的方式)在磁盘上创建两个文件,即“desktop.js”和“user.txt”,然后通过 cscript.exe 执行 desktop.js。而 desktop.js 文件反过来会在命令行中使用一个脚本启动解释器,该解释器会读取 user.txt 的内容并执行它。从传递给“echo”命令的内容可以明显看出,user.txt 是另一个 PowerShell 脚本,其任务是从一个硬编码地址提取有效载荷并执行它。在这种情况下,有效载荷就是 PowerTaskel,它现在以提升后的权限运行。
受感染系统上的执行流程示例
一旦启动,PowerTaskel 就会与它的命令与控制(C2)服务器进行交互,并执行标准命令以收集有关系统和环境的信息。值得注意的是,csc.exe(Visual C# 命令行编译器)的启动表明 PowerTaskel 已接收到加载外壳代码的任务,它会借助一个辅助动态链接库(DLL)来完成该任务。这个 DLL 的主要功能是将外壳代码复制到已分配的内存中。在我们所讨论的情况中,该外壳代码是二进制 Mythic 代理程序的自我配置代码。
执行流程的最后一行(“hxxp://192.168.1[.]2:5985/wsman”)显示,通过已加载的 Mythic 代理程序,对位于本地网络中远程主机上的 Windows 远程管理(WinRM,即 Microsoft Windows Remote Management)服务进行了调用。访问 WinRM 服务时使用了特定的用户代理(User-Agent)标头值“Ruby WinRM Client”。
WinRM 请求的 HTTP 标头
GOFFEE 积极利用 Windows 远程管理(WinRM)服务来实现网络传播的目的。通常情况下,这包括在远程主机上以一个 URL 作为参数来启动 mshta.exe 实用程序。以下示例展示了在远程主机上观察到的执行链条:
最近,我们观察到在横向移动过程中,GOFFEE 越来越多地放弃使用 PowerTaskel,转而采用二进制的 Mythic 代理程序。
Mythic代理程序的 HTML 应用程序(HTA)
仍然会使用 mshta.exe 实用程序来启动二进制的 Mythic 代理程序,并将一个 URL 作为参数传递。然而,所传递 URL 的有效载荷内容与传统的 HTML 应用程序(HTA)格式不同。它相对较大,大约 180 千字节,并且其特点是属于一种多态文件,即一种可以以多种格式有效解析的文件类型。包含 Mythic 代理程序的外壳代码位于文件的开头,大约占文件大小的 80%。在这之后是两个经过 Base64 编码的 PowerShell 脚本,脚本之间由常规的换行符分隔,最后则是 HTA 文件本身。
多态有效载荷
当 mshta.exe 实用程序下载上述有效载荷时,它会将其解释为一个 HTML 应用程序(HTA)文件,并将控制权转移到嵌入在这个多态文件的 HTA 部分中的经过混淆处理的 JScript 脚本上。该脚本首先会确定用于启动 mshta.exe 实用程序的参数,判断它是一个 URL 还是一个本地文件的路径。如果使用的参数是一个 URL,该脚本就会在 Internet 缓存(InetCache)文件夹中搜索原始的 HTA 文件,因为系统在下载过程中会将 HTA 文件缓存在这个文件夹里。为了实现这一点,该脚本会遍历缓存文件夹中的所有文件,并检查它们的内容是否存在特定的特征字符串。
从有效载荷的 HTA 部分反混淆得到的 JScript 脚本
如果在磁盘上找到了 HTA 文件,该脚本会使用 “echo” 命令创建两个文件,即 “settings.js” 和 “settings.ps1”,然后使用额外的命令行参数来运行 “settings.js”。接着,脚本会设置一个 10 秒的定时器,计时结束后,新创建的这些文件将被删除。
反混淆后的“settings.js”
正在运行的“settings.js”脚本接受三个命令行参数:powershell.exe 的路径、HTA 文件的路径以及字符串“Shell.Application”。这些接收到的参数被用于填充一个 PowerShell 脚本,然后该脚本的内容会被传递到 powershell.exe 的命令行中。
传递给 PowerShell 解释器的脚本声明了两个变量:“$INbqDKHp”,用于存储 HTA 文件的路径;“$KWfWXqek”,作为一个计数器。接着,该脚本会读取“settings.ps1”的内容,并将其执行三次,每次执行时都会将 HTA 文件的路径和计数器作为参数传入,同时每次都会将“$KWfWXqek”变量的值加 1。
反混淆后的“settings.ps1”
在每次执行过程中,“settings.ps1”脚本会读取 HTA 文件的内容,将其按行拆分,并识别出经过 Base64 编码的脚本。为了检测这些脚本,它首先会通过搜索子字符串“<hta:application”< span="">来定位包含 HTA 应用程序标签的行。在该标签前面的三行包含了经过 Base64 编码的脚本。根据“$KWfWXqek”计数器的值,该脚本会执行相应的 Base64 编码脚本。
前两个脚本用于声明辅助函数,其中包括编译一个辅助动态链接库(DLL),这对于执行外壳代码是必需的。第三个脚本负责分配内存,从 HTA 文件(其路径从之前定义的“$INbqDKHp”变量中获取)中加载外壳代码,并将控制权转移到已加载的外壳代码,而该外壳代码正是 Mythic 代理程序的自我配置代码。
受害者
根据我们的监测数据,本文所描述的恶意活动的已识别目标位于俄罗斯,所观察到的活动时间范围是从 2024 年 7 月到 2024 年 12 月。目标行业多种多样,包括大众媒体和电信行业的机构、建筑行业、政府部门以及能源公司。
归 因
在这次活动中,攻击者使用了 PowerTaskel,而此前该工具与 GOFFEE 组织有关联。此外,感染链中还使用了 HTA 文件和各种脚本。
鱼叉式网络钓鱼电子邮件所附带的恶意可执行文件是 explorer.exe 的补丁版本,这与我们在 2024 年初 GOFFEE 组织的攻击中所观察到的情况相似,并且其包含的外壳代码也与 GOFFEE 之前使用的非常相似。
考虑到受害者情况相同,我们可以高度确信地将这次活动归因于 GOFFEE 组织。
结 论
尽管GOFFEE组织在此次活动中使用了类似的工具和技术,但也引入了一些显著的变化。
他们首次使用带有恶意VBA脚本的Word文档进行初始感染。此外,GOFFEE还利用了一种新的PowerShell脚本下载器PowerModul来下载PowerTaskel、FlashFileGrabber和USB蠕虫。他们也开始使用二进制Mythic代理程序,并且很可能用PowerShell和C语言开发了自己的工具。
虽然GOFFEE在不断改进现有工具并引入新工具,但这些变化并不足以使其与其他组织相混淆。
原文始发于微信公众号(卡巴斯基威胁情报):GOFFEE 继续攻击俄罗斯的组织
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论