更新(11 月 12 日
th,2024 年):我们澄清了第四段中的信息,以更好地反映 RedLine 在下架前后的功能。
10月28日th,2024 年,荷兰国家警察与 FBI、Eurojust和其他几个执法组织一起,打击了臭名昭著的 RedLine Stealer 恶意软件即服务 (MaaS) 操作,及其名为 META Stealer 的克隆。这项名为 Operation Magnus 的全球努力导致荷兰的三台服务器被关闭,两个域被没收,两人在比利时被拘留,并揭开了对美国一名涉嫌肇事者的指控。
早在 2023 年 4 月,ESET 就参与了 RedLine 恶意软件的部分中断操作,其中包括删除几个用作恶意软件控制面板死点解析器的 GitHub 存储库。大约在那个时候,我们与 Flare 的研究人员合作调查了该恶意软件家族以前未记录的后端模块。这些模块不直接与恶意软件交互,而是处理身份验证并为控制面板提供功能。
由于 RedLine 现已被撤下,我们将公开披露 2023 年的调查结果,以及根据荷兰国家警察与我们共享的源代码和样本得出的一些最新发现。
请注意,大部分分析是在下架之前进行的。此外,还有一些恶意软件的旧的破解副本可能仍然有效。这就是为什么我们将 RedLine 操作描述为一项正在进行的活动。博文的要点:
- 2023 年,ESET 研究人员与执法部门合作,收集了多个模块,用于运行 RedLine Stealer 背后的基础设施。
- 我们分析了这些以前未记录的模块,以深入了解这个恶意软件即服务帝国的内部运作方式。
- 我们能够识别出 1,000 多个用于托管 RedLine 控制面板的唯一 IP 地址。
- 我们详细调查的 RedLine Stealer 的 2023 版本使用 Windows Communication Framework 进行组件之间的通信,而 2024 年的最新版本使用 REST API。
- 根据我们对源代码和后端样本的分析,我们确定 Redline Stealer 和 META Stealer 共享同一个创建者。
RedLine Stealer 是 Proofpoint 于 2020 年首次发现的信息窃取恶意软件。RedLine 不是集中运营的,而是以 MaaS 模式运行,任何人都可以从各种在线论坛和 Telegram 频道购买交钥匙信息窃取解决方案。客户(称为附属公司)可以选择按月订阅或终身许可证;为了换取他们的钱,他们得到了一个控制面板,该面板可以生成恶意软件样本并充当他们的 C&C 服务器。生成的样本可以收集各种各样的信息,包括本地加密货币钱包;来自浏览器的 Cookie、保存的凭据和保存的信用卡详细信息;以及来自 Steam、Discord、Telegram 和各种桌面 VPN 应用程序的保存数据。
使用现成的解决方案可以使附属公司更容易将 RedLine Stealer 集成到更大的活动中。一些值得注意的例子包括在 2023 年冒充免费下载 ChatGPT,以及在 2024 年上半年伪装成视频游戏作弊者。有关所用术语的说明 由于 RedLine 的 MaaS 模型,任何对 RedLine 的全面讨论都将涉及网络基础设施的多个不同组件和层。为了减少任何可能的混淆,我们将在整篇文章中一致使用以下术语:
- RedLine 恶意软件:RedLine Stealer 恶意软件或其样本。
- RedLine 面板:用于管理信息窃取活动的 GUI 控制面板。
- RedLine 后端:为 RedLine 面板提供身份验证和功能的模块集合。
- RedLine:整个恶意软件操作。这包括 RedLine 恶意软件、RedLine 面板和 RedLine 后端模块。
- 后端服务器:运行 RedLine 后端的服务器。
- 受害者:RedLine 恶意软件的目标实体。
- 操作员:开发 RedLine、销售许可证以及运营许可和相关后端基础设施的个人或团队。
- Affiliate:通过 RedLine 面板实例运行信息窃取活动的实体。他们通常从运营商那里购买了许可证,但也可能使用面板的破解版本。
概述
在这篇博文中,我们记录了在 RedLine 后端服务器上运行的模块,以更好地了解这个 MaaS 帝国的内部运作。我们还在 RedLine 面板上提供了一些信息。图 1 包含整个 RedLine 操作的简化概述。
通常,分发给附属公司的已知 RedLine 面板样本在应用第一层混淆后会被大量打包和虚拟化。但是,当我们通过遥测数据查找与 RedLine Stealer 及其面板相关的活动时,我们遇到了旧版本的 RedLine 面板,该面板仅使用 .NET Reactor 进行了混淆,使其更易于分析。
RedLine 的工具集
RedLine 的所有组件,从恶意软件本身到后端身份验证服务器,都是使用 .NET 框架用 C# 编写的。我们分析的版本使用 Windows Communication Foundation (WCF) 框架相互通信。该框架允许使用契约定义 API,契约是应用于类和接口的语句,用于指定对象和操作如何在它们在代码中的表示和网络通信之间进行转换。因此,使用此框架进行交互的程序必须共享这些数据结构或类的定义。事实证明,这些共享模型在我们对混淆组件的分析中很有用。
请注意,最新的 2024 RedLine 版本使用 REST API 而不是 WCF 与后端通信。
RedLine 面板
这个控制面板是附属公司可以在论坛和 Telegram 频道上购买的东西。许可证的售价为每月 150 美元或终身许可证 900 美元。作为这笔钱的交换,附属公司获得了一个 GUI,他们通过该 GUI 管理他们的活动,具有配置要收集的信息、创建恶意软件样本、查看和管理收集的信息以及与 Telegram 机器人集成以出售被盗信息的功能。
我们调查的面板的 2023 版本使用著名的 .NET 混淆器 DNGuard 和商用打包程序和虚拟化库 BoxedApp 进行了大量混淆处理。幸运的是,RedLine 使用了 WCF 框架,因此面板必须与其他组件共享一些类和接口。通过分析恶意软件和后端组件中的这些共享元素,尽管受到保护,我们还是能够了解面板的许多功能。
2023 年的所有 RedLine 面板均使用 Sectigo 颁发给 AMCERT,LLC 的证书进行签名,这些证书在我们报告后已被撤销。AMCERT,LLC 对应于一家在亚美尼亚注册的公司,该公司似乎没有在线业务——对于所谓的软件开发商来说,这是相当不寻常的。
认证
为了使用 RedLine 面板,附属公司必须首先进行身份验证。图 2 显示了登录提示。
我们分析的 RedLine 面板使用 GitHub 存储库(如图 3 中的存储库)作为其身份验证服务器的死点解析器。此存储库的地址在面板中是硬编码的,但对于面板的所有版本,它并不相同。与 GitHub 合作找到并删除了其中几个存储库,这使我们能够在 2023 年 4 月暂时中断 RedLine 的运营。虽然删除不会影响恶意软件的后端,但它迫使运营商分发新版本的面板。在中断后的短时间内,他们将死点解析器转移到了 Pastebin,然后在 2023 年 5 月选择使用自己的域,正如我们在 Sleuthcon 2023 上与 Flare 的联合谈话中所述。在最新版本的 RedLine 面板中,威胁行为者完全放弃了死点解析器,只使用了硬编码的 URL https://fivto[.]online/secure-api/ 中。有关 Dead-drop 解析程序的更多信息,请参阅 Network infrastructure 部分。
通过在虚拟网络中运行后端服务器组件,我们设法创建了附属帐户并使用我们自己的实例进行身份验证,而无需购买订阅。
如图 4 所示,登录时向联盟成员显示的第一个屏幕充满了广告。虽然我们不知道真实身份验证服务器提供的广告的确切性质,但我们能够在自己的后端服务器实例中创建一些广告以进行演示。后端服务器不托管这些广告中的实际图像,只托管其 URL。
“黑名单”选项卡允许联盟成员按国家/地区、IP 地址、内部版本 ID 或 HWID(根据受害者机器的域名、用户名和序列号计算出的唯一 ID)忽略传入数据。无论此处选择何种排除项,如果区域设置设置为以下国家/地区之一,RedLine Stealer 的示例都包含阻止执行的代码:亚美尼亚、阿塞拜疆、白俄罗斯、哈萨克斯坦、吉尔吉斯斯坦、摩尔多瓦、塔吉克斯坦、乌兹别克斯坦、乌克兰和俄罗斯。
如图 5 所示的 Telegram 选项卡允许附属公司配置 Telegram 机器人,将窃取的数据发布到特定的聊天或频道。联盟成员必须为机器人提供有效的 API 令牌,然后可以根据国家/地区、构建 ID、操作系统版本以及在 cookie 或保存的登录信息中找到的域来选择要共享的条目。还可以将机器人配置为共享 Message Format 字段中定义的完整日志或仅特定信息,并与选定的收件人共享统计信息(参见图 6)。
在前端创建恶意软件样本
如图 7 所示的 Builder 选项卡允许附属公司通过提供 RedLine 面板服务器地址、构建 ID、要显示的错误消息以及用作所创建示例的图标的图像来创建新的 RedLine Stealer 示例。最后两个是可选的,图像用作 RedLine 模拟的软件的图标,而错误消息可用于误导受害者为什么预期的应用程序没有启动。
内部版本 ID 用作活动标识符,由示例与被盗信息一起发送。虽然一些以前泄露的 RedLine 面板版本包括一个用于在本地创建构建的可执行文件,但在较新的版本中,这是由后端服务器执行的。此更改使任何泄漏或破裂的 RedLine 面板的用处大大降低,因为附属公司将无法创建样本以使用它。我们在 RedLine.Nodes.LoadBalancer 部分中介绍了构建过程。
RedLine 后端
我们在 2023 年分析的 RedLine 后端由两个模块组成。第一个名为 RedLine.Nodes.DbController 的 API 管理联盟和广告数据。尽管名称如此,但该模块并不使用传统数据库,而是将记录作为 Protobuf 编码的对象存储在单个文件中,每种类型的数据都有一个特定的子目录。第二个模块名为 RedLine.Nodes.LoadBalancer,它充当服务器,并提供 RedLine 面板使用的大部分功能。
我们还找到了一个名为 RedLine.MainServer 的模块,它可能是 RedLine.Nodes.DbController 和 RedLine.Nodes.LoadBalancer 的祖先。在后来的版本中,它被拆分为一个单独的模块,用于处理用户和广告数据。
在 2024 版本的后端中,DbController 和 LoadBalancer 已被一个名为 Nodes.Api 的模块所取代。
RedLine.Nodes.DbController
在 DbController 中,关联数据由名为 ClientData 的类表示,如表 1 中详细说明。
表 1.ClientData 属性的说明
属性 | 描述 |
身份证 | 唯一的数字 ID。 |
登录 | 用户名。 |
密码 | 密码。 |
注册日期 | 联属帐户创建的时间戳。 |
激活 | 联属商是否已购买许可证。 |
LastActive (上次活动) | 联属营销商上次活动的时间戳。 |
LastIP | 关联公司最后一次活动发生的 IP。与 LastActive 一起使用,以防止联盟的账户在过去 5 分钟内从另一个 IP 地址处于活动状态时进行身份验证。 我们认为这是为了防止帐户共享。 |
奖赏 | 在我们分析的模块中未使用。 |
激活直到 | 关联公司许可证的到期时间戳。 |
构建密钥 | 用于标识联属营销创建的样本的唯一字符串。 |
这大多很简单,但也有一些有趣的怪癖,主要是密码和终身许可证的处理方式。
查看用于验证联盟成员的代码(如图 8 所示)可以明显看出,密码是以明文形式存储的。提交的密码与存储的密码直接进行比较,而不涉及任何哈希函数。
图 9 显示,附属公司可以以 900 美元购买终身许可证,其表示是将给定许可证的到期日期设置为 2025 年之后的任何日期。这在代码中的其他位置也称为 Pro 许可证。
RedLine.Nodes.LoadBalancer
如图 10 所示,LoadBalancer 模块侦听端口 8778。此屏幕截图还显示了 MainPanelService WCF 协定中定义的处理程序。与关联和广告数据相关的处理程序(即 OnSignInInternal、OnConnect、OnCheckExpire 和 OnGetPartners)将请求委托给 DbController 的相应处理程序。Redline 面板使用 OnCheckConnect 处理程序来检查是否可以从外部访问其 C&C 服务器。其余处理程序都与恶意软件样本的创建有关。
在 Redline 后端创建示例
自 2020 年首次记录以来,RedLine Stealer 已被重写为使用 WCF 框架,后来又使用 REST API 进行网络通信。如图 11 所示,这些重写版本的内部名称似乎是 RedLine.Reburn。
为了创建 RedLine Stealer 恶意软件的示例,图 10 中所示的 OnCreateLastBuild 处理程序使用自定义 VSBuilder 类中的 CreateBuild 方法。收到 CreateBuild 请求时,联属会员账户的明文密码将记录到控制台中。这表明了对众所周知的安全实践的随意无视。
如果在请求中没有为 C&C 服务器指定端口,构建器默认为端口 6677。在构建示例时,图 12 中的代码用于从活动的 Build ID 和联盟帐户的 Build Key 派生令牌。我们认为这与 ns1 的值相对应。用于示例和面板之间通信的 Authorization 标头。面板似乎使用此标头来筛选出非当前帐户创建的样本中的连接。
VSBuilder.CreateBuild 方法使用本地 C# 解决方案创建示例。一些源文件被读入内存以替换特定值,然后再写回磁盘。虽然我们无法收集项目的文件,但此方法的反编译器输出以及 RedLine Stealer 示例的反编译器输出提供了足够的上下文来理解修改后的值是:
- C&C 地址(已加密),
- 内部版本 ID(加密)、
- 假错误消息(加密)、
- 解密密钥 /
- 标志来指示是分批发送被盗信息还是一次性发送全部被盗信息,
- authentication token 和
- 程序集名称。
替换这些值后,将调用 Visual Studio 来生成项目。
如果联盟成员选择了相应的选项,并且拥有终身许可证,则编译后的可执行文件将与市售的 Babel Obfuscator 进行混淆。在 2024 版本中,为所有用户实施混淆,而是通过 .NET Reactor 完成。
最后,使用图 13 中的代码生成一个自签名证书,并用于对可执行文件进行签名。其可分辨名称 (DN) 的字段填充了随机字典单词。以这种方式生成的证书使用硬编码的密码123321,有效期从生成前 7 天延长到生成后 10 年。
LoadBalancer 模块还提供了一个 OnCreateClipper 处理程序。顾名思义,这被用来生成剪贴板劫持恶意软件;在这种情况下,它被用来通过将剪贴板中的钱包地址替换为攻击者控制的钱包的地址来劫持加密货币交易。此功能已在最新版本的 Redline 后端中删除。
有趣的是,Builder 类还包含用于从存根可执行文件生成恶意软件样本的死代码。我们相信这是用于生成以前版本的 RedLine Stealer 的方法的遗留物。最新版本的 Redline 后端不再包含代码。
另一个名为 OnSignFile 的处理程序允许具有终身许可证的关联公司使用位于后端服务器上的证书对任意文件进行签名。我们无法收集此证书,但有理由相信它可能与用于签署 RedLine 面板的证书相同,因为它也被用于签署大量 RedLine Stealer 和其他恶意软件样本。另一个可能的候选者是颁发给 Hangil IT Co., Ltd. 的带有指纹 28F9A8E7601F5338BF6E194151A718608C0124A8 的证书。这个可能被盗的证书已被用于签署许多 RedLine Stealer 样本和其他恶意文件。它已被撤销。
RedLine.MainServer
RedLine.MainServer 模块将前两个模块的一些功能与一个 GUI 相结合,允许管理员轻松管理联盟帐户和广告数据。尽管有这些附加功能,但多个因素表明,此版本的 MainServer 可能是 LoadBalancer 和 DbController 的祖先,而不是后续版本:
- MainServer 示例是使用旧版本的 .NET Framework(4.6.2 与 4.8)编译的。
- 该集会的版权年份是 2020 年,而不是 2021 年。
- 某些 MainServer 示例不包含播发功能。
- 主 WCF 服务的协定 (MainPanelService) 不包括与 LoadBalancer 位于同一类中的 IsAlive 处理程序。我们分析过的所有最新 RedLine 面板都使用这个处理程序。
请注意,在更高版本的 RedLine 后端中,GUI 管理面板已拆分为自己的模块,该模块也名为 MainServer。
经过检查的 GUI 版本为我们提供了对 RedLine 管理的有趣见解。它提供了一个用于创建和编辑联盟账户数据的表单,如图 14 所示。这些字段对应于前面描述的 ClientData 类。
图 15 中有一个类似的表单来管理广告。
最后,图 16 中的基本仪表板为操作员提供了许可证销售的概览。
节点.Api
对荷兰执法部门共享样本的分析表明,在最新的 RedLine 版本中,LoadBalancer 和 DbController 模块的功能已合并为一个名为 Nodes.Api 的新模块。此后端模块打包为单文件 .NET 应用程序,并使用 ASP.NET 中的 WebApplication 类来提供面板使用的 REST API。如图 17 所示,该模块处理发送到 RedLine (fivto[.]online) 和 META (spasshik[.]xyz) 服务器,显示这两个信息窃取程序共享相同的运算符。
表 2 列出了 REST API 公开的端点以及以前版本中的相应 WCF 处理程序。
表 2.RedLine 端点
端点 | 相应的 WCF 处理程序 | 描述 |
/api/test 中 | 不适用 | 可能用于测试连接性。这将只返回值 OK。 |
/secure-api/sign-in 中 | OnSignInInternal | 处理来自面板的登录。 |
/secure-api/getBanners | OnGetPartners | 返回要在面板中显示的广告。 |
/secure-api/createFile 中 | OnCreateLastBuild | 创建窃取恶意软件的实例。 |
/secure-api/checkConnect 中 | OnCheckConnect | ping 指定的地址和端口,检查是否对外可达。 |
/secure-api/updateDb | 不适用 | 使后端重新加载 affiliate 数据。仅当请求来自 loopback 地址时,才会执行此操作。 |
/edk92hd/createRandom | 不适用 | 使用随机用户名和密码创建新的联盟条目。 |
/edk92hd/续订 | 不适用 | 延长指定关联公司的 License 有效期。 |
/Panel.zip | 不适用 | 从磁盘返回 Panel.zip 文件。此受密码保护的存档包含面板的最新版本。 |
与我们最初分析的后端 2023 版本不同,终身许可证不再出现在新模块的代码中。由于这种类型的许可证仍在销售,我们认为它们很可能是通过简单地将其到期日期设置为遥远的将来的日期来处理的。与代码签名相关的功能也已完全删除。
如果 Nodes.Api 模块创建的示例位于硬编码路径 C:\Program Files (x86)\Eziriz\.NET Reactor\dotNET_Reactor.exe 中,则使用 .NET Reactor 对其进行模糊处理。这对应于其默认安装路径。
除了上述更改之外,旧版本中存在的功能的行为与以前非常相似。但是,已经添加了一些有趣的功能。
联盟管理
公开了三个用于管理联属网络数据的终端节点。这些似乎仅供操作员使用,但这以两种截然不同的方式处理。/secure-api/updateDb 终端节点使服务器从磁盘重新加载用户数据。图 18 显示了每当创建或修改新条目时 MainServer 模块调用的 update 方法。如果请求来自 Loopback 地址,则仅由 Nodes.Api 模块执行该操作,这会阻止 Panel 用户使用它。
其他两个端点 /edk92hd/createRandom 和 /edk92hd/renewed 使用不同的方法来缓解未经授权的访问。如图 19 所示,只有当请求包含设置为看似随机的硬编码值的 sko3s 标头时,才能调用它们。
备份
另一个有趣的功能是能够备份联盟数据,这是旧版本代码中缺少的功能。由于此数据存储在磁盘上的一系列文件中,因此备份是包含这些文件的目录的 ZIP 存档。然后,使用图 20 所示的硬编码 Chat ID 通过 Telegram 发送此存档。
与 META Stealer 的链接
META Stealer 是另一个与 RedLine Stealer 一起被破坏的信息窃取程序。根据 Kela 的一篇文章,META Stealer 于 2022 年 3 月首次在网络犯罪论坛上宣布。作者声称它使用与 RedLine Stealer 相同的代码,并提供相同的功能和面板。META Stealer 没有像 RedLine Stealer 那样受到彻底的调查,但我们的研究表明,它最初提出的声明是准确的。根据源代码,这两个信息窃取程序很可能是由同一个人制作的。虽然存在一些差异,但大多数代码都是相同的,只是字符串 RedLine 的实例被 Meta 替换了。如图 21 所示,在 RedLine 中被注释掉为非活动状态的代码存在于 META 中。
正如我们已经提到的,另一个指向 RedLine 和 META 具有相同运算符的证据可以在 Nodes.Api 模块的代码中看到,该模块处理发送到 RedLine 和 META 服务器的请求,如图 17 所示。
我们还发现了两个 META 面板样本,该样本使用证书签名,该证书也用于对 RedLine 面板样本进行签名。该面板使用了相同的 dead-drop 解析器方案,甚至使用相同的 AES 和 RSA 密钥,只是使用不同的 GitHub 存储库。此外,如图 22 所示,对 META 和 RedLine 使用的面板进行比较,发现只有微小的外观差异。
META Stealer 使用相同的 DNGuard 和 BoxedApp 组合来保护其面板免受分析。但是,META 的身份验证过程在针对我们 2023 年的 RedLine 后端实例运行时无法完成,因此它似乎是从 RedLine 的身份验证过程修改而来的。
网络基础设施
通过解析我们在 11 月 30 日之间检测到的 RedLine 样本th、2022 和 3 月 23 日RD,2023 年,我们能够识别出 1,000 多个用于托管 RedLine 面板的唯一 IP 地址。图 23 显示了这些托管面板的地理分布。俄罗斯、德国和荷兰各占总数的 20% 左右,芬兰和美国各占 10% 左右。尽管这些数据仅来自针对我们客户的样本,但我们相信它描绘了恶意软件的整体分布情况相当准确。
我们还能够识别多个不同的后端服务器。死点解析器中可能还有更多我们无法解密的内容。根据它们的地理分布,如图 24 所示,服务器主要位于俄罗斯(约占三分之一),而英国、荷兰和捷克共和国各占我们确定的服务器的 15% 左右。
死点解析程序
正如我们已经提到的,RedLine 面板的 2023 版本使用 GitHub 存储库作为其身份验证服务器的死点解析器。这些存储库都包含一个文件,其中包含加密的服务器地址列表。该文件使用名为 RSA 的自定义模块进行加密。在该模块的一个版本中,如图 25 所示,该列表使用 AES-CBC 和硬编码密钥和 IV 进行加密,并保存到名为 nodesUpdate.config 的文件中。
更新的版本(至少在 2024 年年中之前一直在使用)改用 RSA 加密(参见图 26),并将输出写入名为 nodes.config 的文件中。在这种情况下,密钥是从文件中读取的,而不是在可执行文件中硬编码的。但是,用于执行 RSA 加密的类也存在于 LoadBalancer 模块中,具有公有密钥和私有密钥的硬编码默认值。请注意,再次使用 “nodes” 来指代后端服务器。
我们观察到 GitHub 存储库至少包含一个此类加密文件。除了上面显示的密钥外,我们还能够从面板的样本中提取 RSA 私钥。这使我们能够获得身份验证服务器列表,并与执法机构共享这些列表。
结论
在 Operation Magnus 之前,RedLine 是分布最广的信息窃取恶意软件之一,有大量附属公司使用其控制面板。然而,恶意软件即服务企业似乎只由少数人精心策划,其中一些人已被执法部门识别出来。
META Stealer 是 RedLine Stealer 的克隆,很可能是由相同的威胁行为者创建的,于 2022 年进入该领域。它似乎不是 RedLine 的继任者,因为两个家族的发展是平行进行的。它与 RedLine Stealer 一起被撤下。
我们对 RedLine 的幕后部分(控制面板和后端)的深入分析有望提供对这种威胁的更全面理解。