Jia Yu Chan

追逐漩涡:基于 Rust 的新型 InfoStealer 用于 CAPTCHA 活动

Elastic Security Labs 介绍了 EDDIESTEALER,这是一种用于新兴的基于 CAPTCHA 的活动的轻量级商品信息窃取程序。

阅读需45分钟恶意软件分析
追逐漩涡:基于 Rust 的新型 InfoStealer 用于 CAPTCHA 活动

前言

Elastic Security Labs 发现了一种通过伪造 CAPTCHA 活动分发的新型基于 Rust 的信息窃取程序。该恶意软件托管在多个对手控制的网络上。该活动利用欺骗性的 CAPTCHA 验证页面,诱骗用户执行恶意 PowerShell 脚本,最终部署信息窃取程序,收集凭据、浏览器信息和加密货币钱包详细信息等敏感数据。我们将此恶意软件称为 EDDIESTEALER。

恶意软件开发中采用 Rust 反映了威胁行为者日益增长的趋势,他们试图利用现代语言特性来增强隐蔽性、稳定性和针对传统分析工作流程和威胁检测引擎的弹性。与 C/C++ 版本相比,用 Rust 编写的看似简单的信息窃取程序通常需要更加专门的分析工作,这是由于零成本抽象、Rust 的类型系统、编译器优化以及分析内存安全二进制文件的固有困难等因素造成的。

关键要点

  • 伪造验证码活动加载 EDDIESTEALER
  • EDDIESTEALER 是一款新发现的 Rust 信息窃取程序,主要针对 Windows 主机
  • EDDIESTEALER 从 C2 服务器接收任务列表,其中列出了目标数据

初始访问

概述

伪造的 CAPTCHA 是恶意构造,它复制合法 CAPTCHA 系统的外观和功能,用于区分人类用户和自动机器人。与合法验证码不同,伪造的验证码充当了恶意软件的门户,利用社会工程学来欺骗用户。它们通常以“验证您是人类”或“我不是机器人”之类的提示形式出现,无缝融入受感染的网站或网络钓鱼活动中。我们还在 2024 年末遇到了类似的传播GHOSTPULSE 的活动。

根据我们在 EDDIESTEALER 交付之前的遥测分析,初始载体是一个受到感染的网站,该网站部署了一个基于 React 的混淆 JavaScript 有效负载,显示一个虚假的“我不是机器人”验证屏幕。

该恶意软件模仿 Google 的 reCAPTCHA 验证界面,使用document.execCommand("copy")方法将 PowerShell 命令复制到用户的剪贴板中,接下来,它指示用户按 Windows + R(打开 Windows 运行对话框),然后按 Ctrl + V 粘贴剪贴板内容,最后按 Enter 执行恶意 PowerShell 命令。

此命令会从攻击者控制的域hxxps://llll.fit/version/静默下载第二阶段有效负载( gverify.js ),并将其保存到用户的Downloads文件夹中。

最后,恶意软件在隐藏窗口中使用cscript执行gverify.js

gverify.js 是另一个经过混淆的 JavaScript 有效负载,可以使用开源工具进行反混淆。其功能相当简单:从hxxps://llll.fit/io获取可执行文件(EDDIESTEALER),并使用伪随机的 12 个字符的文件名将文件保存在用户的Downloads文件夹下。

埃迪斯蒂尔

概述

EDDIESTEALER 是一种基于 Rust 的新型商品信息窃取者。大多数泄露其恶意意图的字符串都是加密的。该恶意软件缺乏针对行为指纹的强大反沙盒/VM 保护。然而,较新的变体表明反沙盒/VM 检查可能发生在服务器端。它具有相对简单的功能,作为其配置的一部分,它从 C2 服务器接收任务列表以定位特定数据,并且如果指定的话,可以在执行后自行删除。

剥离符号

EDDIESTEALER 样本以剥离的函数符号为特色,可能使用了 Rust 的默认编译选项,需要在静态分析之前恢复符号。我们使用了rustbinsign ,它根据特定的 Rust/编译器/依赖项版本为 Rust 标准库和板条箱生成签名。虽然rustbinsign仅检测到hashbrownrustc-demangle ,表明使用了少量外部包,但它无法识别较新变体中的tinyjsontungstenite等包。这是由于缺乏清晰的字符串工件而发生的。仍然可以通过查找唯一字符串并在 GitHub 上搜索存储库来手动识别板条箱,然后使用download_sign模式下载、编译和构建它们的签名。如果我们不知道所用板条箱的确切版本,这会稍微麻烦一些。但是,恢复标准库和运行时符号足以推进静态分析过程。

字符串混淆

EDDIESTEALER 通过简单的 XOR 密码加密大多数字符串。解密涉及两个阶段:首先,通过调用几个密钥派生函数之一来派生 XOR 密钥;然后,在使用字符串的函数内联执行解密。

以下示例说明了这一点,其中sub_140020fd0是密钥派生函数, data_14005ada8是加密 blob 的地址。

每个解密例程都利用其自己独特的密钥派生函数。这些函数始终接受两个参数:二进制文件中的地址和 4 字节常量值。然后对这些参数执行一些基本操作来计算 XOR 密钥所在的地址。

Binary Ninja 有一个方便的功能,称为User-Informed Data Flow (UIDF),我们可以使用它来将变量设置为已知值,以触发常数传播分析并简化表达式。否则,像Unicorn这样的 CPU 模拟器与可编写脚本的二进制分析工具配对也可以用于批量分析。

存在一种线程安全、延迟初始化共享资源的通用模式,例如模块名称、C2 域和端口、样本的唯一标识符的加密字符串 - 这些资源仅解密一次但在运行时被引用多次。每个特定的获取函数都会检查其资源的状态标志;如果未初始化,它会调用共享的低级同步函数。此同步例程使用原子操作和 OS 等待原语 ( WaitOnAddress / WakeByAddressAll ) 来确保只有一个线程执行实际的初始化逻辑,该逻辑通过dyn Trait对象的 vtable 中的函数指针间接调用。

API混淆

EDDIESTEALER 对大多数 API 调用采用自定义 WinAPI 查找机制。它首先解密目标模块和函数的名称。在尝试解析之前,它会检查本地维护的哈希表以查看函数名称和地址是否已被解析。如果未找到,它会使用自定义LoadLibrary包装器动态加载所需模块到进程的地址空间中,并调用GetProcAddress 的已知实现来检索导出函数的地址。然后将 API 名称和地址插入到哈希表中,以优化未来的查找。

互斥锁创建

EDDIESTEALER 首先创建一个互斥锁,以确保在任何给定时间只运行一个恶意软件实例。互斥锁名称是一个解密的 UUID 字符串431e2e0e-c87b-45ac-9fdb-26b7e24f0d39 (每个样本唯一),稍后在与 C2 服务器首次接触时会再次引用该字符串。

沙盒检测

EDDIESTEALER 执行快速检查以评估物理内存总量是否高于~4.0GB 作为一种弱沙盒检测机制。如果检查失败,它会从磁盘中删除自身。

自我删除

基于在 LATRODECTUS 中观察到的类似 自删除技术 ,EDDIESTEALER 能够通过 NTFS 备用数据流重命名来删除自身,以绕过文件锁。

该恶意软件使用GetModuleFileName获取其可执行文件的完整路径,并使用CreateFileW (包装在jy::ds::OpenHandle中)以适当的访问权限打开其可执行文件的句柄。然后,将具有新流名称的FILE_RENAME_INFO结构传递到SetFileInformationByHandle中,以将默认流$DATA重命名为:metadata 。文件句柄被关闭并重新打开,这次在句柄上使用SetFileInformationByHandle ,并将FILE_DISPOSITION_INFO.DeleteFile标志设置为TRUE ,以启用“关闭句柄时删除”标志。

附加配置请求

初始配置数据作为加密字符串存储在二进制文件中。解密后,该数据将用于构建遵循 URI 模式的请求: <C2_ip_or_domain>/<resource_path>/<UUID>resource_path指定为api/handler 。先前用于创建互斥锁的UUID被用作构建跟踪的唯一标识符。

然后,EDDIESTEALER 通过发送带有构造的 URI 的 HTTP GET 请求与其 C2 服务器进行通信,以检索包含恶意软件要执行的任务列表的第二阶段配置。

第二阶段配置数据采用AES CBC加密,Base64编码。Base64 编码的 IV 位于消息中的冒号 ( : ) 之前。

Base64(IV):Base64(AESEncrypt(data))

用于解密服务器到客户端消息的 AES 密钥以未加密的 UTF-8 编码形式存储在.rdata部分中。它是通过 getter 函数检索的。

该示例的解密配置包含以下内容(JSON格式):

  • 会话 ID
  • 任务列表(目标数据)
  • 用于客户端到服务器消息加密的 AES 密钥
  • 自删除标志
{
    "session": "<unique_session_id>",
    "tasks": [
        {
            "id": "<unique_task_id>",
            "prepare": [],
            "pattern": {
                "path": "<file_system_path>",
                "recursive": <true/false>,
                "filters": [
                    {
                        "path_filter": <null/string>,
                        "name": "<file_or_directory_name_pattern>",
                        "entry_type": "<FILE/DIR>"
                    },
                    ...
                ]
            },
            "additional": [
                {
                    "command": "<optional_command>",
                    "payload": {
                        "<command_specific_config>": <value>
                    }
                },
                ...
            ]
        },
        ...
    ],
    "network": {
        "encryption_key": "<AES_encryption_key>"
    },
    "self_delete": <true/false>
}

对于这个特定的样本,根据我们在分析期间从服务器收到的任务,以下是基于文件系统的渗透目标列表:

  • 加密钱包
  • 浏览器
  • 密码管理器
  • FTP 客户端
  • 消息传递应用程序
加密钱包目标路径过滤器
军械库%appdata%\\Armory\\*.wallet
比特币%appdata%\\Bitcoin\\wallets\\*
钱包芥末%appdata%\\WalletWasabi\\Client\\Wallets\\*
Daedalus 主网%appdata%\\Daedalus Mainnet\\wallets\\*
Coinomi%localappdata%\\Coinomi\\Coinomi\\wallets\\*
琥珀金%appdata%\\Electrum\\wallets\\*
Exodus%appdata%\\Exodus\\exodus.wallet\\*
DashCore%appdata%\\DashCore\\wallets\\*
电子现金%appdata%\\ElectronCash\\wallets\\*
Electrum-DASH%appdata%\\Electrum-DASH\\wallets\\*
Guarda%appdata%\\Guarda\\IndexedDB
原子%appdata%\\atomic\\Local Storage
浏览器目标路径过滤器
微软 Edge%localappdata%\\Microsoft\\Edge\\User Data\\
[Web Data,History,Bookmarks,Local Extension Settings\\...]
勇敢的%localappdata%\\BraveSoftware\\Brave-Browser\\User Data\\
[Web Data,History,Bookmarks,Local Extension Settings\\...]
谷歌浏览器%localappdata%\\Google\\Chrome\\User Data\\
[Web Data,History,Bookmarks,Local Extension Settings\\...]
火狐浏览器%appdata%\\Mozilla\\Firefox\\Profiles\\
[key4.db,places.sqlite,logins.json,cookies.sqlite,formhistory.sqlite,webappsstore.sqlite,*+++*]
密码管理器目标路径过滤器
比特沃登%appdata%\\Bitwarden\\data.json
1Password%localappdata%\\1Password\\
[1password.sqlite,1password_resources.sqlite]
KeePass%userprofile%\\Documents\\*.kdbx
FTP客户端目标路径过滤器
FileZilla%appdata%\\FileZilla\\recentservers.xml
FTP管理器精简版%localappdata%\\DeskShare Data\\FTP Manager Lite\\2.0\\FTPManagerLiteSettings.db
FTPbox%appdata%\\FTPbox\\profiles.conf
FTP指挥官豪华版%ProgramFiles(x86)%\\FTP Commander Deluxe\\FTPLIST.TXT
自动FTP管理器%localappdata%\\DeskShare Data\\Auto FTP Manager\\AutoFTPManagerSettings.db
3D-FTP%programdata%\\SiteDesigner\\3D-FTP\\sites.ini
FTPGetter%appdata%\\FTPGetter\\servers.xml
总指挥官%appdata%\\GHISLER\\wcx_ftp.ini
消息应用程序目标路径过滤器
Telegram 桌面版%appdata%\\Telegram Desktop\\tdata\\*

目标浏览器扩展的列表可在此处找到。

这些目标可能会发生变化,因为它们可由 C2 操作员配置。

然后,EDDIESTEALER 使用标准kernel32.dll函数(例如CreateFileWGetFileSizeExReadFileCloseHandle读取目标文件。

后续 C2 流量

成功检索任务后,EDDIESTEALER 执行系统分析以收集有关受感染系统的一些信息:

  • 可执行文件的位置 ( GetModuleFileNameW )
  • 区域设置 ID ( GetUserDefaultLangID )
  • 用户名 ( GetUserNameW )
  • 物理内存总量 ( GlobalMemoryStatusEx )
  • 操作系统版本 ( RtlGetVersion )

遵循客户端到服务器消息的相同数据格式 ( Base64(IV):Base64(AESEncrypt(data)) ),初始主机信息使用从附加配置中检索到的密钥进行 AES 加密,并通过 HTTP POST 请求发送到<C2_ip_or_domain>/<resource_path>/info/<session_id> 。随后,对于每个完成的任务,收集的数据也会在每个任务完成后立即加密并通过单独的 POST 请求传输到<C2_ip_or_domain>/<resource_path><session_id>/<task_id> 。该方法生成了一种独特的 C2 流量模式,其特点是多个特定于任务的 POST 请求。这种模式特别容易识别,因为该恶意软件家族主要依赖 HTTP 而不是 HTTPS 进行 C2 通信。

我们的分析发现了解密后为恐慌元数据字符串的加密字符串,从而公开了内部 Rust 源文件路径,例如:

  • apps\bin\src\services\chromium_hound.rs
  • apps\bin\src\services\system.rs
  • apps\bin\src\structs\search_pattern.rs
  • apps\bin\src\structs\search_entry.rs

我们发现发送到 C2 服务器的错误消息包含这些字符串,包括错误来源的确切源文件、行号和列号,从而允许恶意软件开发人员获得内置的调试反馈。

Chromium 特有的功能

自从引入应用程序绑定加密以来,恶意软件开发人员已经采用替代方法来绕过这种保护并获取未加密的敏感数据(例如 cookie)的访问权限。ChromeKatz是我们见过的恶意软件实现的更受欢迎的开源解决方案之一。EDDIESTEALER 也不例外——恶意软件开发人员用 Rust 重新实现了它。

下面是与 COOKIEKATZ 类似的浏览器版本检查逻辑片段,从%localappdata%\<browser_specific_path>\\User Data\\Last Version检索版本信息后。

用于检测 COOKIEMONSTER 实例的 COOKIEKATZ签名模式

用于检测 CookieMonster 实例的 CredentialKatz签名模式

下面是 COOKIEKATZ 的FindPattern的精确复制粘贴逻辑的示例,其中PatchBaseAddress是内联的。

开发人员引入了一项修改来处理目标 Chromium 浏览器未运行的情况。如果处于非活动状态,EDDIESTEALER 将使用命令行参数--window-position=-3000,-3000 https://google.com生成一个新的浏览器实例。这实际上将新窗口定位在远离屏幕的位置,使用户不可见。目的是确保恶意软件仍然可以读取必要子进程(由--utility-sub-type=network.mojom.NetworkService标志标识的网络服务进程)的内存( ReadProcessMemory )。有关此浏览器进程交互的更详细说明,请参阅我们之前对 MaaS 信息窃取程序的研究

与变体的区别

经过分析,我们发现最近的样本具有附加功能。

目前在受害机器上收集的信息包括:

  • Running processes
  • GPU 信息
  • CPU 核心数
  • CPU名称
  • CPU 供应商

C2 通信模式略有改变。现在,恶意软件会在请求解密配置之前先将主机系统信息发送到服务器。在少数情况下,受害机器能够连接到 C2 服务器,但收到的任务列表为空,这种调整表明了一种规避策略:开发人员可能引入了服务器端检查来分析客户端环境,并在检测到沙盒或分析系统时保留主要配置。

客户端到服务器通信的加密密钥不再从 C2 服务器动态接收;相反,它现在以二进制形式硬编码。客户端用于解密服务器到客户端消息的密钥也保持硬编码。

较新的编译样本展示了函数内联扩展的广泛使用,其中许多函数(用户定义的函数以及来自标准库和包的函数)被更频繁地直接内联到它们的调用者中,从而导致函数更大并且使得隔离用户代码变得困难。这种行为可能是使用 LLVM 内联器的结果。虽然有些函数仍然未内联,但广泛的内联使分析更加复杂。

为了获取 Chrome 密码管理器的所有条目,EDDIESTEALER 通过生成带有--remote-debugging-port=<port_num>标志的新 Chrome 进程来开始其凭据窃取例程,并通过本地 WebSocket 接口启用 Chrome 的 DevTools 协议。这使得恶意软件能够以无头方式与浏览器交互,而无需任何可见的用户交互。

启动 Chrome 后,恶意软件会查询http://localhost:<port>/json/version以检索webSocketDebuggerUrl ,该 提供了通过 WebSocket 与浏览器实例交互的端点。

使用此连接,它会发出带有参数chrome://password-manager/passwordsTarget.createTarget命令,指示 Chrome 在新标签页中打开其内部密码管理器。虽然这个内部页面不会直接向 DOM 或 DevTools 公开其内容,但打开它会导致 Chrome 解密并将存储的凭据加载到内存中。EDDIESTEALER 在后续步骤中通过 CredentialKatz 相似代码利用了此行为,它会扫描 Chrome 进程内存,以在浏览器加载纯文本凭据后提取这些凭据。

根据解密的字符串os_cryptencrypted_keyCryptUnprotectDatalocal_state_patternlogin_data_pattern ,EDDIESTEALER 变体似乎向后兼容,支持仍使用 DPAPI 加密的 Chrome 版本。

我们通过 VirusTotal 上的代码和基础设施相似性发现了 15 EDDIESTEALER 的另外样本。观察表将包括发现的样本、相关的 C2 IP 地址/域以及托管 EDDIESTEALER 的基础设施列表。

一些分析技巧

追踪

为了更好地理解控制流并精确定位大型代码块中间接跳转或调用的确切目的地,我们可以利用二进制跟踪技术。诸如TinyTracer之类的工具可以捕获 API 跟踪并生成.tag文件,该文件将任何选定的要记录的 API 调用映射到汇编中的执行行。Rust 的标准库函数在后台调用 WinAPI,这还会捕获直接调用WinAPI函数的任何代码,从而绕过标准库的抽象。然后可以将标记文件导入反编译工具,以使用IFL等插件自动标记代码块。

用于代码分段的恐慌元数据

恐慌元数据- 与恐慌位置相关的嵌入源文件路径(.rs 文件)、行号和列号 - 为分割和理解二进制文件的不同部分提供了有价值的线索。然而,只有当此类元数据尚未从二进制文件中剥离时,才会出现这种情况。诸如apps\bin\src\services\chromium.rsapps\bin\src\structs\additional_task.rs类的路径或任何看起来像自定义项目一部分的路径通常指向应用程序的独特逻辑。以library<core/alloc/std>\src\开头的路径表示来自 Rust 标准库的代码。包含包名称和版本(例如hashbrown-0.15.2\src\raw\mod.rs的路径指向外部库。

如果恶意软件项目具有某种组织良好的代码库,则恐慌字符串中的文件路径可以直接映射到逻辑模块。例如,解密的字符串apps\bin\src\utils\json.rs:48:39sub_140011b4c中被引用。

通过检查函数传入调用的调用树,发现许多调用都可以追溯到sub_14002699d 。在解密已知为 JSON 格式的其他配置数据之后,立即在已知的 C2 通信例程 ( jy::C2::RetrieveAndDecryptConfig ) 中调用此函数 ( sub_14002699d )。

根据json.rs路径及其调用上下文,可以推测sub_14002699d负责解析 JSON 数据。我们可以通过跨过函数调用来验证这一点。果然,通过检查作为函数调用的引用传递的堆栈结构,它现在指向一个填充了解析的配置字段的堆地址。

对于标准库和开源第三方板条箱,文件路径、行号和(如果可用)rustc 提交哈希或板条箱版本允许您在线查找准确的源代码。

堆栈槽重用

优化功能之一涉及重复使用没有重叠时间线的变量/堆栈结构的堆栈槽。不同时“活动”的变量可以共享相同的堆栈内存位置,从而减少整体堆栈帧的大小。本质上,变量从被赋值的那一刻起就处于活动状态,直到最后可以访问该值为止。这使得反编译的输出令人困惑,因为相同的内存偏移量可能在不同点保存不同的类型或值。

为了解决这个问题,我们可以定义包含函数内共享相同内存偏移量的所有可能类型的联合。

Rust 错误处理和枚举

Rust 枚举是标记联合,它定义具有多种变体的类型,每种变体都可以选择保存数据,非常适合对成功或失败等状态进行建模。变体通过判别式(标签)来识别。

错误处理代码在整个二进制文件中都可以看到,占反编译代码的很大一部分。Rust 的主要错误处理机制是Result<T, E>通用枚举。它有两种变体: Ok(T) ,表示成功并包含类型T的值,以及Err(E) ,表示失败并包含类型E的错误值。

在下面的示例代码片段中,判别值0x8000000000000000用于区分解析CreateFileW API 的结果。如果成功解析CreateFileW ,则reuse变量类型包含 API 函数指针,并且执行else分支。否则,执行if分支,并分配从reusearg1错误信息字符串。

有关其他常见 Rust 类型在内存中的样子的更多信息,请查看此备忘单和 Cindy Xiao 的精彩演讲

恶意软件和 MITRE ATT&CK

Elastic 使用MITRE ATT&CK框架来记录威胁针对企业网络使用的常见策略、技术和程序。

战术

技术

技术代表对手如何通过采取行动来实现战术目标。

检测

雅拉

Elastic Security 制定了与本研究相关的以下 YARA 规则:

行为预防规则

观察结果

本研究讨论了以下可观察的结果。

可观测类型名称参考
47409e09afa05fcc9c9eff2c08baca3084d923c8d82159005dbae2029e1959d0SHA-256MvUlUwagHeZd.exe埃迪斯蒂尔
162a8521f6156070b9a97b488ee902ac0c395714aba970a688d54305cb3e163fSHA-256:metadata (copy)埃迪斯蒂尔
f8b4e2ca107c4a91e180a17a845e1d7daac388bd1bb4708c222cda0eff793e7aSHA-256AegZs85U6COc.exe埃迪斯蒂尔
53f803179304e4fa957146507c9f936b38da21c2a3af4f9ea002a7f35f5bc23dSHA-256:metadata (copy)埃迪斯蒂尔
20eeae4222ff11e306fded294bebea7d3e5c5c2d8c5724792abf56997f30aaf9SHA-256PETt3Wz4DXEL.exe埃迪斯蒂尔
1bdc2455f32d740502e001fce51dbf2494c00f4dcadd772ea551ed231c35b9a2SHA-256Tk7n1al5m9Qc.exe埃迪斯蒂尔
d905ceb30816788de5ad6fa4fe108a202182dd579075c6c95b0fb26ed5520daaSHA-256YykbZ173Ysnd.exe埃迪斯蒂尔
b8b379ba5aff7e4ef2838517930bf20d83a1cfec5f7b284f9ee783518cb989a7SHA-2562025-04-03_20745dc4d048f67e0b62aca33be80283_akira_cobalt-strike_satacom埃迪斯蒂尔
f6536045ab63849c57859bbff9e6615180055c268b89c613dfed2db1f1a370f2SHA-2562025-03-23_6cc654225172ef70a189788746cbb445_akira_cobalt-strike埃迪斯蒂尔
d318a70d7f4158e3fe5f38f23a241787359c55d352cb4b26a4bd007fd44d5b80SHA-2562025-03-22_c8c3e658881593d798da07a1b80f250c_akira_cobalt-strike埃迪斯蒂尔
73b9259fecc2a4d0eeb0afef4f542642c26af46aa8f0ce2552241ee5507ec37fSHA-2562025-03-22_4776ff459c881a5b876da396f7324c64_akira_cobalt-strike埃迪斯蒂尔
2bef71355b37c4d9cd976e0c6450bfed5f62d8ab2cf096a4f3b77f6c0cb77a3bSHA-256TWO[1].file埃迪斯蒂尔
218ec38e8d749ae7a6d53e0d4d58e3acf459687c7a34f5697908aec6a2d7274dSHA-256埃迪斯蒂尔
5330cf6a8f4f297b9726f37f47cffac38070560cbac37a8e561e00c19e995f42SHA-256verifcheck.exe埃迪斯蒂尔
acae8a4d92d24b7e7cb20c0c13fd07c8ab6ed8c5f9969504a905287df1af179bSHA-2563zeG4jGjFkOy.exe埃迪斯蒂尔
0f5717b98e2b44964c4a5dfec4126fc35f5504f7f8dec386c0e0b0229e3482e7SHA-256verification.exe埃迪斯蒂尔
e8942805238f1ead8304cfdcf3d6076fa0cdf57533a5fae36380074a90d642e4SHA-256g_verify.jsEDDIESTEALER装载机
7930d6469461af84d3c47c8e40b3d6d33f169283df42d2f58206f43d42d4c9f4SHA-256verif.jsEDDIESTEALER装载机
45.144.53[.]145IPv4 地址EDDIESTEALE C2
84.200.154[.]47IPv4 地址EDDIESTEALE C2
shiglimugli[.]xyz域名EDDIESTEALE C2
xxxivi[.]com域名EDDIESTEALER C2 和中级基础设施
llll[.]fit域名EDDIESTEALER 中级基础设施
plasetplastik[.]com域名EDDIESTEALER 中级基础设施
militrex[.]wiki域名EDDIESTEALER 中级基础设施

参考资料

上述研究参考了以下内容: