Malwarebytes(2021年4月),卡巴斯基(2021年6月)和韩国CERT(2021年9月)都先后报道了韩国遭受新型恶意软件攻击的新闻,该恶意软件以前从未出现过且使用了全新的技术。
Malwarebytes的初步报告将这个攻击归咎于Lazarus组织,而卡巴斯基将其归咎为Andariel APT,这是Lazarus的一个分支,根据韩国CERT (KrCERT)的报告,研究人员将此次攻击中的恶意软件工具称为TigerDownloader和TigerRAT。KrCERT报告对他们捕获的恶意软件样本与之前卡巴斯基和Malwarebytes分析的恶意软件样本之间的关系进行了全面、详细的对比分析。他们还使用了专们的归因技术来进一步关联攻击。
在本报告中,我们将重点关注以前报告的攻击中的恶意软件工具。我们提供了新的证据,将这些工具归为相同的下载程序和RAT家族。我们将这些家族分别称为TigerDownloader和TigerRAT。选择这些名字是为了纪念KrCERT的重要工作。
我们系统地研究了代码重用以及在先前报告的攻击的不同阶段(即打包程序、下载程序和 RAT 有效负载)中使用的所有样本之间的函数共性。我们还发现,虽然这些工具属于上述家族,但在报告的攻击中,已经部署了不同的工具变体。对于RAT有效载荷,我们发现了三个具有不同函数的版本。对于下载程序,我们找到了两个版本,一个有持久性函数,另一个没有持久性函数。
除了这些发现,我们还对现有的分析体系提出了新的推测。
2021年4月19日,Malwarebytes在报告中提到了一个恶意的Word文档,且发现了一个新的下载组件。
2021年6月15日,卡巴斯基发布了一篇关于相同攻击的文章,并将其归为Andariel APT组织,除了Malwarebyte的发现外,他们还发现了新的下载程序和RAT有效载荷。此外,他们还发现了 RAT部署的一种新型勒索软件。
2021年9月,KrCERT报告了一项他们称之为“ByteTiger”的攻击活动,这是一项针对韩国的攻击,他们将其归因于Andariel APT组织。他们将新的攻击与之前Malwarebytes和卡巴斯基使用一些专有工具披露的样本联系起来,对比了相似性/重用、rich header、section hash和C2基础设施。
上述三个报告案例中的攻击链在结构上都有一些相似之处,都观察到一个下载恶意软件。卡巴斯基和KrCERT还发现了第三阶段RAT组件。在访问方式上,Malwarebytes 和 Kaspersky 报告的案例中攻击者使用了恶意文件,而 KrCERT 案例中使用了受感染的网站。
Malwarebytes、Kaspersky和KrCERT报告的攻击链的异同
打包程序分析
在本节中,我们将首先确定打包程序的二进制文件共享源自解包算法的公共代码,然后我们展示了在我们可以使用的所有打包样本的基础上的一个通用的打包方案。因此,我们的发现提供了强有力的证据,表明二进制文件是由同一打包程序负责的。
打包示例中的共享代码
为了快速了解打包样本是否相关,我们在函数级别执行了自动代码重用分析。在下表中,“函数重用”列中的数字代表了一个函数发生的样本数量。例如,地址为0x140002b70(第一行)的函数出现在27个打包示例中。也就是说,这是一个出现在所有打包样本中的函数。
我们分析的 27 个打包二进制文件中的函数重用
还有其他几个函数(即 0x140001bf0、0x140002030、0x140002860)出现在 27 或 26 个样本中。从表中,我们可以确定打包的样品是明显相关的。它们都有两个共同的函数,并且具有大量代码重用的样本子集。
简而言之,自动化的函数重用分析让我们可以快速了解打包样本的关系。正如我们接下来将看到的,它还指导我们的手动分析工作。
根据分析,我们怀疑这些样本共享了一些有效解包的函数,而剩余的一些函数是为了避免被反病毒软件、Yara以及相关的基于模式的检测技术检测到。然后,我们进一步研究了这些稳定函数,可以确认它们确实包含打包函数。此分析的结果如下所示。
在最稳定的函数中找到的函数
我们还可以确认垃圾代码的存在,其作用是避免检测技术。下图显示了两个不同示例中的相同函数 Decrypt_payload()。我们可以看到像 GetFontUnicodeRanges()、GetSysColorBrush() 和 CreateBitMap() 这样的垃圾函数被调用,但它们的返回值没有被使用。在下图中,有效的解包代码(在本例中为 XOR 解密算法)包含在所示的绿色框中。
我们在所有打包代码和许多函数中都发现了这种垃圾代码策略。
打包程序代码中的垃圾代码,以躲避防病毒软件和 Yara 检测
综上所述,到目前为止,我们已经看到打包样本通过一个公共打包程序代码相关联。打包样本之间的代码差异主要是由于垃圾代码的存在。
常见的打包方案
打包程序是一个简单的加载程序,它解密并将有效载荷映射到内存中。解密方案是一个简单的XOR加密,使用16字节的密钥。此外,我们发现所有的打包程序变体都遵循相同的打包方案,而该方案的变体由两个参数决定。一个参数是打包的有效载荷是否采用Base64编码,另一个参数是在PE文件中存储打包的有效载荷的位置。
下图说明了有效载荷编码的过程。
PE文件中打包代码位置的变化,从左到右,PE 覆盖、PE 资源部分或在此示例中名为 OTC 的专用 PE 部分中的打包代码
对于使用专用部分的第三个变体,我们观察到以下部分名称:“KDATA,” “OTC,” “OTS,” “OTT,” 和 “data.”。我们目前还无法确定这些名字背后的意义。
下图显示了我们分析的所有打包下载程序和RAT变体的常见打包方案。
所有样品通用的打包方案
恶意软件家族和变体
在本节中,我们将通过代码重用分析确定所有解压缩的二进制文件都属于一个下载程序或RAT家族。我们称这些家族为TigerDownloader和TigerRAT恶意软件家族。KrCERT报告中介绍了这些名称,用来指代他们调查中的下载程序和RAT组件。
为了快速了解解压后的二进制文件,我们进行了组合集群和代码重用分析。这种分析使我们能够自动识别恶意软件家族和家族内的恶意软件变体。此分析的目标是快速了解二进制文件之间的关系,并将分析人员引导至相关样本进行进一步的手动分析,以最终了解攻击者的工具和能力。
集群和代码重用分析的结果如下图所示,该图确认解压后的二进制文件属于 TigerDownloader(蓝色)或 TigerRAT(橙色)家族。此外,我们看到每个家族都有三个变体(用大圆表示)。我们使用了97.5%的集群阈值,这意味着至少有97.5%相似的二进制文件属于同一个集群。图中的集群由所谓的“集群代表”(大圆)和直接连接到集群代表的样本(小圆)组成。其基本思想是,集群中的样本本质上是相同的,因此集群代表可以很好地代表。
使用缩略哈希表对未打包的样本进行聚类和代码重用分析
我们注意到聚类阈值的选择对变体有明显的影响:高阈值会显示次要和更多变体,而低阈值会显示较少和主要的变体。
从图中我们可以得出以下结论:
在TigerDownloader和TigerRAT家族之间没有代码重用。回顾打包程序分析,尽管这两个家族在代码方面是不同的,但它们使用了相同的打包方案进行打包。
下载程序有三种变体:一种x86和两种x64变体。这两个x64变体非常接近(即97%的代码重用),因此很可能是具有微小差异的变体。
在RAT家族中,我们遇到了三种类似的情况:一种x86和两种x64。然而,这两个x64变体只共享55%的代码,因此似乎是主要的RAT变体。
x64和x86二进制文件之间的关系较低,这是由于编译器和CPU架构的差异,但仍然可以找到相关的代码重用。
下图中的表显示了之前图表中集群的详细组成。我们还注意到,一些(哈希方式)独特的打包样本会导致(哈希方式)相同的未打包样本,从而降低了所考虑样本的有效多样性。
详细的集群信息
接着我们将更详细地分析下载程序和RAT变体,将分析限制在集群代表上。这种将分析减少为聚类代表的函数是定向和高效分析和跟踪恶意软件变体的关键。下面的分析中使用的集群代表及其名称的选择如下图所示。
后续分析中使用的集群代表
TigerDownloader变体
在本节中,我们将仔细研究两个下载程序变体:Downloader-Malwarebytes-x64 和 Downloader-Kaspersky-x64。从集群和代码重用分析,我们知道它们共享 97% 的代码,因此是 TigerDownloader 家族的非主要变体。
使用我们的分析工具链的二进制差异函数,如下所示,,样本主要由相同的函数组成,除了卡巴斯基 (Downloader-Kaspersky-x64) 中的一个独特函数(地址为 0x140001230 的函数)样本。
Downloader-Kaspersky-x64和Downloader-Malwarebytes-x64之间的函数级别差异
分析来自卡巴斯基的下载程序示例,我们看到未知函数(0x140001230)是由下载程序的主函数调用的。
左侧Downloader-Kaspersky-x64,右侧Downloader-Malwarebytes-x64
原来这个函数是用来实现持久性的,所使用的技术很简单,包括在当前用户启动文件夹中创建一个链接,以确保目标设备重新启动时启动下载程序。
为持久性创建快捷方式的函数
持久性可执行文件的快捷方式
最后,我们注意到在Downloader-Malwarebytes-x64示例中没有发现任何持久性技术。原因很可能是尽量减少留在受害设备上的痕迹。
与TigerDownloader的关系
不幸的是,KrCERT 报告中的下载程序样本 (f0ff67d4d34fe34d52a44b3515c44950) 未公开提供与TigerDownloader相关联的正怒,因此我们无法将其包含在我们的分析中。尽管如此,为了检查 KrCERT 与 Malwarebytes 和 Kaspersky 下载程序之间可能的关系,我们试图纯粹基于KrCERT公开报告的工件和行为将它们连接起来。
KrCERT报告了他们在下载程序中找到的两个C2命令,在可供我们使用的下载程序中找不到任何“Tiger10X”标识符,同时我们也无法找到任何其他可能是C2命令的标识符。
KrCERT报告的TigerDownloader C2命令
另一方面,我们发现KrCERT报告的各种功能也出现在其他下载程序中:
1.KrCERT报告中的打包符合我们在上面建立的打包方案;
2.KrCERT报告说,通信是使用Base64编码的,我们也在我们的样本中观察到了这一点;
3.由第二阶段(下载程序)下载的第三阶段(RAT)都属于同一个TigerRAT家族(我们将在下一节中建立)。
简而言之,上面的观察表明KrCERT下载程序可能与Malwarebytes和Kaspersky观察到的下载程序有关。然而,这只是推测,因为我们没有访问KrCERT样本,因此缺乏确凿的证据。
TigerRAT变体
回顾了代码重用和聚类分析,我们可以通过代码重用分析将所有RAT 连接到相同的TigerRAT家族。我们还看到,RAT变体比下载程序变体变化更大。例如,变体RAT-Kaspersky-x64和RAT-KrCERT-x64仅共享大约50%的代码。
接下来,我们将进一步研究RAT变体。我们在函数和设计层面上提出了强有力的新证据,进一步将RAT变体归为相同的TigerRAT恶意软件家族。经分析,变体的主要区别在于它们实现的C2命令。
对于这个分析,我们将重点关注我们在之前建立的RAT-Kaspersky-x64、RAT-KrCERT-x64和RAT-Kaspersky-x86的代表。
各变体命令和函数
让我们看看在不同变体中找到的C2命令,下图显示了我们在其中一个RAT变体中观察到的所有C2命令。由于缺少ids 0x08和0x09的命令,因此我们推测,在野外还有未知的样本包含这些命令。
在RAT三种变体中至少有一种可以使用的所有C2命令
接下来,我们将查看不同变体所支持的C2命令。
在不同RAT变体中发现的C2命令
我们看到,使用聚类分析自动识别的三个变量实际上是三个函数不同的变量。除了C2函数中的这些变化之外,这些变体的核心代码在很大程度上是相同的。因此,本质上是C2命令定义了这三种变体。我们还观察到“FileManager”、“ScreenCapture”、“SelfDelete”和“Shell”这四个命令对所有的变体来说都是通用的。
C2命令的通用接口
我们找到了三个变体通用的接口,如下所示:
该接口提供了一个由RAT中所有C2命令实现的抽象,这个通用接口在其核心C2函数的变体之间建立了一种强大的关系。
RAT-KrCERT-x64 中的新 C2 协议变体
C2 协议在所有变体中基本相同,不过我们还是在 RAT-KrCERT-x64 变体中发现的一个小的协议变化。这一变化涉及到恶意软件在C2上的注册,并包含一个位于TCP模块中的额外检查,该检查负责与C2的所有通信:
红色矩形包含添加到RAT-KrCERT-x64变体的新协议检查。
左图,其他变体;右边,RAT-KrCERT-x64 变体
新函数会向 C2 发送一个 17 字节长度的块,我们还没有分析发送了什么数据,但看起来它可能与木马标识符或类似的东西有关。发送数据后,它会检查 C2 是否返回字符串“n0gyPPx”。
“n0gyPPx”的 C2 协议检查
除了这个协议变化之外,我们还观察到RAT-KrCERT-x64变体在第一个请求的通信开始时发送的HTTP标头中的变化。
HTTP 标头的变化
基于此协议分析,我们认为RAT- krcert -x64是RAT的一个新版本。
本文翻译自:https://threatray.com/blog/establishing-the-tigerrat-and-tigerdownloader-malware-families/如若转载,请注明原文地址