俄罗斯网络间谍组织 LitterDrifter USB 蠕虫分析
2023-11-20 16:25:0 Author: paper.seebug.org(查看原文) 阅读量:48 收藏

原文链接:MALWARE SPOTLIGHT – INTO THE TRASH: ANALYZING LITTERDRIFTER
译者:知道创宇404实验室翻译组

介绍

Gamaredon,又称为 Primitive Bear、ACTINIUM 和 Shuckworm,主要目标是乌克兰地区。一般情况下,研究人员很难发现俄罗斯间谍活动的证据,但近期的Gamaredon却明显可疑,其在以乌克兰地区为主要目标进行了大规模的攻击活动。乌克兰安全局 (SSU) 确认 Gamaredon的人员是俄罗斯联邦安全局(FSB)的官员。

Gamaredon组织从事大规模网络活动,主要行为是对特定目标进行情报收集工作,其选择很可能是出于间谍目的。其中一种工具是 USB 传播蠕虫,我们将其命名为 LitterDrifter

LitterDrifter 蠕虫病毒用 VBS 进行编写,其主要有两个功能:通过连接的USB驱动器自动传播恶意软件以及与威胁参与者的命令和控制(C&C)服务器进行通信。

本文中,我们将对 Gamaredon 的LitterDrifter恶意软件及其 C2 基础设施进行深入分析。

关键点

  • 尽管乌克兰是Gamaredon攻击的重点目标,但根据来自美国、越南、智利、波兰、德国和香港的VirusTotal提交的信息,还发现了乌克兰境外可能受到感染的迹象。所有这些可能表明,与其他 USB 蠕虫病毒一样 ,LitterDrifter 的传播范围已经超出了其预期目标。

图 1 :LitterDrifter 的病毒提交总量
  • 该组织最近开始部署 LitterDrifter,这是一种用 VBS 编写的蠕虫病毒,旨在通过可移动 USB 驱动器传播并保护 C2 通道。
  • Gamaredon 的基础设施极其灵活,与之前报道中描述的特征和模式相似。

LitterDrifter 概述

LitterDrifter 是一种自我传播的蠕虫,具有两个主要功能:在驱动器上传播以及建立通往 Gamaredon 广泛的命令和控制基础设施的 C2 通道。这两个功能驻留在以“trash.dll”形式保存到磁盘的编排组件中,该组件实际上是一个 VBS,尽管其文件扩展名为“trash.dll”。

图 2 - LitterDrifter 的高级执行方案。

图2: LitterDrifter 的高级执行方案

trash.dll作为初始编排组件,首先运行,其主要功能是解码和执行其他模块,并在受害者环境中维持初始持久性。

成功执行后,它将运行两个提取的模块:

  1. 传播器模块 : 在系统中分发恶意软件,并通过优先感染逻辑磁盘( mediatype=NULL通常与 USB 可移动介质相关),可能将其传播到其他环境。

  2. C2 模块 : 通过生成内置 C2 服务器的随机子域来检索命令和控制服务器 IP 地址,同时还维护从 Telegram 通道检索 C2 IP 地址的备份选项。其主要目的是与攻击者 C&C 服务器建立通信并执行传入的有效负载。

目标搜寻

DEOBFUSCODER 反混淆编码

编排组件(称为DEOBFUSCODER)被严重混淆,由一系列经过字符替换混淆的字符串构成。它包含7个函数和变量,带有名称混淆。在“Deobfucate”操作的整个运行过程中,LitterDrifter 会调用一个延迟执行的函数(具体时间因样本而异),以延迟后续操作。

  1. 主函数采用两个编码字符串(其他两个恶意组件)作为参数。然后,它在用户的“Favorites”目录下声明两个路径,设计用来存储来自 VBS 的其他 2 个编码组件的两个解码脚本。
  2. 为了确保其持久性,Deobfuscoder 将原始脚本复制到用户目录下名为“trash.dll”的隐藏文件中。
  3. 脚本解码提供的编码字符串,并将它们写入“收藏夹”目录,作为“jersey.webm”(负载组件)和“jaw.wm”(传播组件)。
  4. 创建这些文件后,恶意软件会设置每个组件的定时任务,确保它们定期执行。此外,它还在注册表运行键中向用户的启动项添加了一个条目,以确保它们在启动时运行。

  5. 这些任务和启动项都使用类似“RunFullMemoryDiagnostic”和“ProcessMemoryDiagnosticEvents”的技术名称伪装,使其看起来合法,避免引起怀疑。

图 3 - 编排器 DEOBFUSCODER 主要功能的反混淆片段。

图 3 :编排器 DEOBFUSCODER 主要功能的反混淆片段

整个流程被故意模糊的函数和变量名称以及内联脚本的使用所掩盖,这使得普通观察者很难辨别其意图和活动。

Spreader 模块分析

Spreader 模块的核心要义在于递归访问每个驱动器中的子文件夹并创建 LNK 诱饵快捷方式,以及“trash.dll”文件的隐藏副本。

图 4 -trash.dll 作为 USB 驱动器中的隐藏文件与诱饵 LNK 一起分发。

图 4:trash.dll 作为 USB 驱动器中的隐藏文件与诱饵 LNK 一起分发

在执行时,该模块使用Windows管理工具(WMI)查询计算机的逻辑驱动器,并搜索值MediaType值设置为null的逻辑磁盘,这是一种常用于识别可移动 USB 驱动器的方法。

图 5 - LitterDrifter 的吊具组件。

图 5:LitterDrifter 的传播组件

对于检测到的每个逻辑驱动器,扩展器都会调用该 createShortcutsInSubfolders 函数。在此函数中,它迭代所提供文件夹的子文件夹,深度可达 2。

对于每个子文件夹,它使用 CreateShortcut 函数作为“Create LNK操作的一部分,该操作负责生成具有特定属性的快捷方式。这些快捷方式是从代码中的一个数组中选择的随机命名的LNK文件。以下是我们调查的样本中数组中诱饵名称的示例:("Bank_accоunt", "постановa", "Bank_accоunt", "службовa", "cоmpromising_evidence")。LNK 文件使用 wscript.exe 来执行具有指定参数的“trash.dll” 和 trash.dll /webm //e:vbScript //b /wm /cal。除了生成快捷方式之外,该函数还在子文件夹中创建了“trash.dll”的隐藏副本。

图 6 - Spreader 组件中用于迭代子文件夹的函数。

图 6:Spreader 组件中用于迭代子文件夹的函数

C2模块分析

Gamaredon 的 C&C 处理方式非常独特,它利用域名作为实际用作 C2 服务器的循环 IP 地址的占位符。

在尝试联系 C2 服务器之前,该脚本会检查 %TEMP% 文件夹中是否存在一个在一个具有在恶意软件中硬编码的无意义名称的现有C2配置文件。此机制充当了恶意软件的自检功能,用于验证是否已感染了计算机。如果存在,当前执行可能只是由前面讨论的持久性机制触发的计划执行。如果不存在现有的配置文件,恶意软件会改变策略,使用WMI来查询ping Gamaredon的一个域名: select * from win32_pingstatus where address='Write<random_2_digit_number>.ozaharso.ru’。 恶意软件从查询响应中提取域的 IP 解析,并将其保存到新的配置文件中。

图 7 - LitterDrifter 使用 WMI 查询检索 C2 IP 地址。

图 7:LitterDrifter 使用 WMI 查询检索 C2 IP 地址

拿到IP地址后,LitterDrifter将其构建成一个URL。格式通常类似于 http://<cncIP>/jaw<random_2_digit_number>/index.html=?<random_2_digit_number>。通信使用自定义用户代理进行,其中包含有关计算机的一些信息。这些信息包括计算机名称和%systemdrive%的序列号的十六进制形式。

最终结果是一个如下所示的用户代理: mozilla/5.0 (windows nt 6.1; wow64) applewebkit/537.36 (khtml, like gecko) chrome/88.0.4324.152 yabrowser/21.2.3.106 yowser/2.5 safari/537.36;;<computer_name>_<system_drive_serial>;;/.justly/

图 8 - LitterDrifter 准备 HTTP 请求,构建 URL 和用户代理。

图 8: LitterDrifter 准备 HTTP 请求,构建 URL 和用户代理

请求的 HTTP 标头也是经过精心定制。例如,在我们发现的一个样本中,该 Referer 字段悄悄地设置为https://www.crimea.kp.ru/daily/euromaidan/,这是对克里米亚新闻网站的致敬。它还在Accept-Language字段和Cookie字段中潜入了一些特定的内容,比如字符串"marketCookie"。

图 9 - HTTP 请求函数。

图 9:HTTP 请求函数

LitterDrifter 利用失败计数器来确定使用哪种 C2 方法。每当 C2 未能返回有效负载或 Telegram 备份通道时,失败计数器就会增加,LitterDrifter 会从中提取替代 C2。代码流程表明第一个返回的答案通常是Telegram的频道ID,该ID会被保存在一个备用文件中。

根据失败计数,LitterDrifter 选择连接哪个 C2:

  • 如果失败计数器当前设置为0,则对配置文件中保存的文件执行请求。
  • 如果失败计数器当前设置为 1,LitterDrifter 会尝试使用 WMI 查询解析其嵌入的 C2 域,如前所述。
  • 如果失败计数器设置为 2,LitterDrifter 会尝试使用不同的用户代理和另一个俄罗斯新闻网站的Referer 来连接到从 Telegram 备份通道中提取的 C2。https://www.interfax.ru/tags/从那里,它提取一个用作 C2 的 IP 地址。

图 10 - Gamaredon 的 Telegram 频道隐藏了 C&C IP 地址。

图 10:Gamaredon 的 Telegram 频道隐藏了 C&C IP 地址

如果在 C2 回复中发现有效负载,LitterDrifter 会尝试对其进行解码。它会解开任何 Base64 内容并尝试运行解码后的数据。根据我们的分析,有效负载并未下载到大多数目标。

图 11 - LitterDrifter 的失败计数选项和接收到的有效负载的执行(已反混淆)。

图 11:LitterDrifter 的失败计数选项和接收到的有效负载的执行(已反混淆)

基础设施

在的分析过程中,研究人员注意到 Gamaredon 在此行动中使用的基础设施存在明显的模式。这包括注册模式,因为Gamaredon的LitterDrifter使用的所有域名均由REGRU-RU.注册。这些发现 与 Gamaredon 基础设施 过去的其他 报告一致。

根据一些模式,研究者能够将特定域和子域与 LitterDriffter 的操作相关联,并将其他域与 Gamaredon 活动的其他集群相关联。

在 LitterDrifter 活动中,C2 模块通过 WMI 查询获取 Gamaredon 拥有的域的解析。它通过使用随机单词和数字生成硬编码域的随机子域来实现这一点,因此每个域都展现出各种相关的子域。有些域只有几个子域,而其他域则有数百个。下图显示了我们遇到的每个域的子域数量:

图 12 - 每个域的子域数量。

图 12:每个域的子域数量

正如我们之前所描述的,对 Gamaredon 域的 WMI 查询会返回一个 IP 地址,该地址用作该活动的操作C2。平均而言,IP 地址的可用时间约为 28 小时。然而,作为主动 C2 的 IP 地址通常每天会发生多次变化(所使用的所有 IP 地址可能都在同一子网内),如下所示:

图 13 - 过去 2 个月每天的 C&C IP 地址数量。

图 13:过去 2 个月每天的 C&C IP 地址数量

在本报告中,我们探讨了这种最近发现的蠕虫病毒的内部运作方式。LitterDrifter 由两个主要组件组成 :一个传播模块和一个 C2 模块 。显然 LitterDrifter 的设计目的是支持大规模数据收集操作。它利用简单而有效的技术来确保能够实现该地区最广泛的目标。

LitterDrifter 不依赖于突破性技术,可能看起来是一种相对简单的恶意软件。然而,这种简单性也符合其目标,反映了 Gamaredon 的整体方法。该组织在乌克兰的持续活动证明了这一方法相当有效。

LitterDrifter samples

  • cbeaedfa84b02a2bd41a70fa92a46c36

  • 6349dd85d9549f333117a84946972d06

  • 2239800bfc8fdfddf78229f2eb8a7b95

  • 42bc36d5debc21dff3559870ff300c4e

  • 4c2431e5f868228c1f286fca1033d221

  • 1536ec56d69cc7e9aebb8fbd0d3277c4

  • 49d1f9ce1d0f6dfa94ad9b0548384b3a

  • 83500309a878370722bc40c7b83e83e3

  • 8096dfaa954113242011e0d7aaaebffd

  • bbb464b327ad259ad5de7ce3e85a4081

  • cdae1c55ec154cd6cef4954519564c01

  • 2996a70d09fff69f209051ce75a9b4f8

  • 9d9851d672293dfd8354081fd0263c13

  • 96db6240acb1a3fca8add7c4f9472aa5

  • 1c49d04fc0eb8c9de9f2f6d661826d24

  • 88aba3f2d526b0ba3db9bc3dfee7db39

  • 86d28664fc7332eafb788a44ac82a5ed

  • 1da0bf901ae15a9a8aef89243516c818

  • 579f1883cdfd8534167e773341e27990

  • 495b118d11ceae029d186ffdbb157614

  • Infrastructure

  • ozaharso[.]ru

  • nubiumbi[.]ru

  • acaenaso[.]ru

  • atonpi[.]ru

  • suizibel[.]ru

  • dakareypa[.]ru

  • ahmozpi[.]ru

  • nebtoizi[.]ru

  • squeamish[.]ru

  • nahtizi[.]ru

  • crisiumbi[.]ru

  • arabianos[.]ru

  • gayado[.]ru

  • quyenzo[.]ru

  • credomched[.]ru

  • lestemps[.]ru

  • urdevont[.]ru

  • hoanzo[.]ru

  • absorbeni[.]ru

  • aethionemaso[.]ru

  • aychobanpo[.]ru

  • ayzakpo[.]ru

  • badrupi[.]ru

  • barakapi[.]ru

  • boskatrem[.]ru

  • brudimar[.]ru

  • decorous[.]ru

  • dumerilipi[.]ru

  • heartbreaking[.]ru

  • judicious[.]ru

  • karoanpa[.]ru

  • lamentable[.]ru

  • procellarumbi[.]ru

  • ragibpo[.]ru

  • raidla[.]ru

  • ramizla[.]ru

  • samiseto[.]ru

  • superficial[.]ru

  • talehgi[.]ru

  • undesirable[.]ru

  • valefgo[.]ru

  • vasifgo[.]ru

  • vilaverde[.]ru

  • vloperang[.]ru

  • zerodems[.]ru

  • geminiso[.]ru

  • vilaverde[.]ru

  • lamentable[.]ru

  • raidla[.]ru

  • boskatrem[.]ru

  • heartbreaking[.]ru

  • sabirpo[.]ru

  • valefgo[.]ru

  • vasifgo[.]ru

  • absorbeni[.]ru

  • vloperang[.]ru

  • decorous[.]ru

  • ramizla[.]ru

  • procellarumbi[.]ru

  • andamanos[.]ru

  • triticumos[.]ru


Paper 本文由 Seebug Paper 发布,如需转载请注明来源。本文地址:https://paper.seebug.org/3075/



文章来源: https://paper.seebug.org/3075/
如有侵权请联系:admin#unsafe.sh