MassLogger v3:具备高级混淆技术的 NET 偷窃工具

4

论坛广告

MassLogger 是一种信息窃取工具,首次在黑客论坛上出售是在 2020 年 4 月。恶意软件作者声称它是“最强大的记录器和恢复工具”,终身许可证售价为 99 美元的比特币。MassLogger 可高度配置,并为其恶意用户提供多种交付、反检测和反分析选项,以及关键记录和从各种浏览器与应用程序中窃取密码的功能。

Avast 研究人员发现,该恶意软件在土耳其、西班牙、乌克兰、智利、美国、巴西、英国、德国和波兰等国最为常见。Avast AV 将该恶意软件识别为“MSILMassLogger”。此外,MassLogger 最新版本在检测到系统中存在 Avast 或 AVG AV 时将不会运行。

地图显示了 MassLogger 从 2020 年 10 月到 2021 年 2 月的目标国家

广告功能

恶意软件作者在 Github 上有一个活跃的目录,他们出于教育目的共享多种恶意软件功能和打包工具的源代码。我们能够在该恶意软件和他们的 Github 项目之间发现许多相似之处。

在 2020 年 8 月,FireEye 撰写了一篇文章,解释如何绕过 MassLogger 13 版本的反分析技巧。近期,Talos 在文章中写道关于 MassLogger 3 版本。在他们的帖子中,他们专注于该恶意软件的攻击活动和交付方式。在这篇博客中,我们将提供最后缺失的一部分,即对最终有效载荷混淆的详细分析,包括操作码和解释器,以及间接调用未分配字段的功能。

分析

我们的分析以样本为例:

SHA256 2487B12F52B803F5D38B3BB9388B039BF4F58C4B5D192D50DA5FA047E9DB828B

在运行时填充字段

浏览反编译的代码,可以发现大部分函数调用都是间接进行的,它试图调用未初始化的字段值。因此,这个恶意软件的控制流程完全隐藏在静态分析中。

PE入口点

间接调用定义

Mo() 是一个包装函数,其目的是调用第四个参数,在这个案例中是 vZkj。有趣的是,vZkj 是字段类型而非方法类型,并且没有被赋值的痕迹。重新审视 vZ 的声明,我们发现它只是众多内部密封类之一,这些类的结构由未赋值的字段值、一个类似于 Mo() 的调用函数以及一个外部 “Invoke” 函数组成。此外,它们都会在模块初始化阶段调用一个标记为 0x060004D8 的函数。

0x060004D8 负责解密 2KB 嵌入资源以构建一个字典,映射字段标记与方法标记。上面提到的字段 vZkj 的标记为 0x040001E2,它映射到方法标记 0x060001E0。

字段方法字典

一旦字典构建完成,函数就会在模块中查找所有带有 Static、NonPublic 或 GetField 标志的字段,以找到相应的方法标记。如果标记属于静态方法,则会通过 fieldInfoSetValue() 直接将其赋值给字段。

如果指定的方法不是静态声明,则会为所需的方法构建一个包装器,然后将其赋值给字段。这个动态创建的方法有一个额外的 SystemDrawingImagingImageCodecInfo 类型参数。通过 OpCodesCallvirt 或 OpCodesCall 来调用所需函数,这取决于标记的第一个字节是否被修改。例如,如果字典中的标记是 0x46000361,它将被转换回标准标记 0x06000361,且会使用 OpCodesCallvirt 而非 OpCodesCall。

将动态方法分配给字段

这些动态包装方法在调试时可能造成额外的开销,因为在达到目标函数之前,会转移到 DynamicResolverGetCodeInfo() 方法。

字符串解密

恶意软件中使用的所有字符串都已加密,并存储在 23KB 的嵌入资源中。方法标记 0x060004DB 充当字符串提供者,首次运行时它会解密并存储字符串表。该方法接收所需字符串的偏移量,首先读取第一个DWORD以确定字符串的长度,然后返回对应的字符串。

MassLogger 解密字符串的示例

从资源中检索操作码

在字符串解密后,恶意软件引导我们进入函数 0x060001DF,在这里,恶意软件以操作码的形式揭示其秘密的流程控制。首先,从第三个 3KB 的嵌入资源反序列化一个对象数组。这些对象包含操作码和附加数据的列表,这些数据将被输入到一个解释器中执行诸如调用函数、创建新对象或修改列表等任务。

嵌入资源包含读取指令和操作码

为了让对象数组被反序列化,恶意软件首先初始化以下结构:

一个 255 字节的数组。资源中的第一个字节指示用于为此数组分配值的单词数量。每个单词的第一个字节,如 0x23 或 0x1B,代表索引;第二个字节,比如 0x1,代表要使用的读取操作:0x1 = 自定义二进制读取器0x2 = ReadInt640x3 = ReadSingle0x4 = ReadDouble0x5 = 读取数据数组。字符串列表。下一个字节,0x0,确定列表的大小。在这种情况下,不需要字符串。待反序列化的对象数组。下一个字节,0x9,指示数组的大小。数组中的每一项将初始化为 null,并在后续步骤中重构。偏移量数组。该数组的大小与对象数组相同,表示每个对象在资源中数据的位置。该数组的每个条目将使用自定义二进制读取器从 0x9 字节后的现有位置填充。

当上述结构准备好后,居于 0x060001DF 的冗长例程将开始逐一读取资源数据,从数组中重构指定对象。这个对象的主要目的是形成操作码列表和执行它们所需的参数。

MassLogger v3:具备高级混淆技术的 NET 偷窃工具

反序列化对象内部存储的操作码

第一部分是操作码,范围从 1 到 173,而第二部分则表示操作数。这些操作的解释器位于方法 0x06000499 中,包含 157 个独特的处理器。这种大规模的实现表明它是一种商业代码保护工具,但我们目前无法找到更多信息。

操作码解释器

上面示例中重要操作码的含义:

154 lt方法标记gt:在重构所需参数和返回值接收者之后调用指定的方法。127 lt构造方法标记gt:在重构构造函数所需参数后创建一个新对象,并将新对象分配给相应位置。21 lt字段标记gt:获取指定字段的值,通常加密的配置,它用于操作 “166 0x60001C3” 的解密。

配置解密

在解密的字符串表中间,可以找到一块 Base64 编码的字符串:

火烧云npv

解密的字符串表

这些是 MassLogger 的加密配置。首先,将每个加密的配置项分配给模块 0x02000044 中相应的字段。请注意,该模块的标记在我们查看的所有 MassLogger v3 样本中是一致的。

接下来,configKey 被 base64 解码并用作 PBKDF2 密码,以衍生出一个 32 字节的 key解密和一个 64 字节的 authKey加密。当恶意软件准备读取配置以供使用时,函数 0x060001C4 从模块 0x02000045 依照以下步骤解密每个配置字段:

Base64 解码前 32 字节为 SHA256 校验和,用于验证字符串的完整性。接下来的 16 字节作为 IV。使用前一阶段的 key 和 IV 通过 AES 解密该配置。

该样本的完整配置:https//githubcom/avast/ioc/blob/master/MassLogger/configtxt

功能

尽管每个版本的混淆技术各不相同,MassLogger 仍在其功能上变化不大。与 2020 年 6 月的分析相比,执行开始时增加了对 Avast 和 AVG AV查找 AvastGUI 和 AVGUI 进程的检查。此外,该恶意软件减少了留在系统上的指纹。日志数据不再写入磁盘,并且“MassLogger”关键字已被删除。

版本 13 与版本 30 的日志数据对比

结论

MassLogger 是一种功能强大的 NET 信息窃取工具,具有完整的功能列表。该恶意软件采用了严密的混淆技术,我们意在本文中对此进行描述。目前我们无法确认该恶意软件是否使用商业加密工具进行打包,但其复杂性可能表明是的。我们还展示了如何提取配置,这可以帮助识别特定样本的 IOCs。

关键安全指标

完整的 IoCs 列表可在以下链接找到:

https//githubcom/avast/ioc/tree/master/MassLogger

标签为 分析 恶意软件 混淆 PC 逆向工程 信息窃取器

分享:XFacebook

Torrenting 的含义及其在 2022 年的合法性作者:Michael Smolski,于 20220123 181404 发布于 指南您想了解 torrenting 的含义吗?毕竟,它常常让人感到恐惧,就像在《哈利波特》中提到“伏地魔”一样。 但事实上,一旦正确理解 torrenting 的含义,它并不是那么可怕。Torrenting 的含义传统的下载文件方法是什么呢?您会访问一个网站,并...

目录Surfshark vs CyberGhost vs PureVPN 速度Surfshark vs CyberGhost vs PureVPN 服务器位置Surfshark vs CyberGhost vs PureVPN 安全性Surfshark vs CyberGhost vs PureVPN 隐私Surfshark vs CyberGhost vs PureVPN 解锁能力Surfsha...